capstone icon indicating copy to clipboard operation
capstone copied to clipboard

AArch64: splice instructions do not disassemble correctly

Open adamjseitz opened this issue 4 years ago • 0 comments

The following aarch64 SVE2 splice instructions do not assemble correctly. I assembled these instructions using -march=armv8-a+sve2 with aarch64-linux-gnu-gcc.

I tried disassembling these with cstool built from the commit on the next branch (f36795e36a227a686e634680d5ebc0730a319a2f).


A constructive splice does not disassemble at all.

splice  z29.b, p7, { z30.b, z31.b }
cstool -d arm64 'dd 9f 2d 05'
ERROR: invalid assembly code

A destructive splice is missing op.vas specifiers on all of the vector register operands.

splice  z29.b, p7, z29.b, z31.b
cstool -d arm64 'fd 9f 2c 05'
 0  fd 9f 2c 05  splice z29.b, p7, z29.b, z31.b
        ID: 651 (splice)
        op_count: 4
                operands[0].type: REG = z29
                operands[1].type: REG = p7
                operands[2].type: REG = z29
                operands[3].type: REG = z31

Compare to the dup instruction, which has op.vas set:

cstool -d arm64 'e8 0e 04 0e'
 0  e8 0e 04 0e  dup    v8.2s, w23
        ID: 157 (dup)
        op_count: 2
                operands[0].type: REG = v8
                operands[0].access: WRITE
                        Vector Arrangement Specifier: 0xa
                operands[1].type: REG = w23
                operands[1].access: READ
        Registers read: w23
        Registers modified: v8
        Groups: neon 

adamjseitz avatar Feb 25 '22 22:02 adamjseitz