ARM - Updated ARM identifiers and API changes. - Fixed shift amounts to be always decimal. - Fixed incorrect usages of memory disponents. - Fixed restoring of condition codes. - Updated IDs for new ones. - Fixed 8-byte stores. - Added flag checking for MOV with shifts. Capstone Integration - Removed capstone-auto-sync subproject and replaced with next. - Checked for NEON features. - Used https://github.com/capstone-engine/capstone/pull/2122 for better system operand support. - Distinguished between 32 and 64-bit cc checks. - Checked for CS API version >5. - Checked for CS_NEXT_VERSION instead of CS_API_MAJOR. - Fixed VSTn and VLDn instructions to use corrected memory operands. - Excluded multiple instruction aliases that are no longer valid IDs. - Used CS_NEXT_VERSION as include guard. - Added CS v6 include guards. - Added CS v6 support to branch conditions for Rzil. - Added more CSv6 guards. PPC - Fixed: Compare instructions do not use the branch predicate. - Fixed conditional and CTR checks. - Fixed MTSPR and MFSPR instructions. - Excluded more branch aliases no longer present in v6 from switch cases. - Fixed incorrectly assigned variables. - Fixed condition checks for branches. - Used ITE for condition checks, to prevent unnecessary reads of CTR or CR. - Fixed rzil tests with new semantics using register 0. - Updated include guards for Capstone versions to use CS_NEXT_VERSION. - Initialized spr_name to prevent uninitialized use. - Used mem.offset register for CSv6. - Always used real operand details. - Used mem operand for DCBZ. - Fixed tests that are semantically identical. - Handled LI LIS alias. - Fixed rzil tests (with simplified semantics). - Fixed branch alias with new cond test method. - Handled clrl. alias. - Handled SL/SR alias. - Fixed conditional branches in ESIL. - Fixed possible multiplication result overflow. - Added RZ_NONNULL. - Added 0 register. - Handled LIS alias. - Fixed: Print crX reg name in CS v6. - Handled all general branch instructions into a single case statement. - Fixed no semantic issues in tests. - Added newly discovered calls. - Moved direction check to inline function. - Added link of root cause for broken test. - Added QPX support. - Set Capstone next branch to latest commit. - Fixed uninitialized warning. - Set CS next branch to newest commit.
144 lines
2.8 KiB
Text
144 lines
2.8 KiB
Text
NAME=ao_aoj
|
|
FILE==
|
|
CMDS=<<EOF
|
|
e asm.arch=x86
|
|
e asm.bits=64
|
|
wx c745f400000000
|
|
ao
|
|
aoj~{}
|
|
EOF
|
|
EXPECT=<<EOF
|
|
address: 0x0
|
|
opcode: mov dword [rbp - 0xc], 0
|
|
esilcost: 12
|
|
disasm: mov dword [rbp - 0xc], 0
|
|
pseudo: dword [rbp - 0xc] = 0
|
|
mnemonic: mov
|
|
description: moves data from src to dst
|
|
mask: ffffffffffffff
|
|
prefix: 0
|
|
id: 460
|
|
bytes: c745f400000000
|
|
val: 0x00000000
|
|
disp: 0xfffffffffffffff4
|
|
refptr: 4
|
|
size: 7
|
|
sign: false
|
|
type: mov
|
|
cycles: 1
|
|
esil: 0,0xc,rbp,-,=[4]
|
|
rzil: (storew 0 (+ (var rbp) (bv 64 0xfffffffffffffff4)) (bv 32 0x0))
|
|
direction: write
|
|
family: cpu
|
|
stackop: set
|
|
stackptr: 8
|
|
[
|
|
{
|
|
"opcode": "mov dword [rbp - 0xc], 0",
|
|
"disasm": "mov dword [rbp - 0xc], 0",
|
|
"pseudo": "dword [rbp - 0xc] = 0",
|
|
"description": "moves data from src to dst",
|
|
"mnemonic": "mov",
|
|
"mask": "ffffffffffffff",
|
|
"esil": "0,0xc,rbp,-,=[4]",
|
|
"rzil": {
|
|
"opcode": "storew",
|
|
"mem": 0,
|
|
"key": {
|
|
"opcode": "+",
|
|
"x": {
|
|
"opcode": "var",
|
|
"value": "rbp"
|
|
},
|
|
"y": {
|
|
"opcode": "bitv",
|
|
"bits": "0xfffffffffffffff4",
|
|
"len": 64
|
|
}
|
|
},
|
|
"value": {
|
|
"opcode": "bitv",
|
|
"bits": "0x0",
|
|
"len": 32
|
|
}
|
|
},
|
|
"sign": false,
|
|
"prefix": 0,
|
|
"id": 460,
|
|
"opex": {
|
|
"operands": [
|
|
{
|
|
"size": 4,
|
|
"rw": 2,
|
|
"type": "mem",
|
|
"base": "rbp",
|
|
"scale": 1,
|
|
"disp": -12
|
|
},
|
|
{
|
|
"size": 4,
|
|
"rw": 0,
|
|
"type": "imm",
|
|
"value": 0
|
|
}
|
|
],
|
|
"modrm": true,
|
|
"disp": -12
|
|
},
|
|
"addr": 0,
|
|
"bytes": "c745f400000000",
|
|
"val": 0,
|
|
"disp": 18446744073709551604,
|
|
"size": 7,
|
|
"type": "mov",
|
|
"esilcost": 12,
|
|
"scale": 0,
|
|
"refptr": 4,
|
|
"cycles": 1,
|
|
"failcycles": 0,
|
|
"delay": 0,
|
|
"stack": "set",
|
|
"stackptr": 8,
|
|
"family": "cpu"
|
|
}
|
|
]
|
|
EOF
|
|
RUN
|
|
|
|
NAME=pimm/cimm
|
|
FILE==
|
|
CMDS=<<EOF
|
|
e asm.arch=arm
|
|
e asm.bits=32
|
|
e asm.cpu=cortexA8
|
|
wx 2f6c642d
|
|
aoj~{[0].disasm}
|
|
aoj~{[0].opex}
|
|
EOF
|
|
EXPECT=<<EOF
|
|
stclhs p12, c6, [r4, -0xbc]!
|
|
{"operands":[{"type":"pimm","value":12},{"type":"cimm","value":6},{"type":"mem","base":"r4","scale":1,"disp":188,"subtracted":true}],"writeback":true,"cc":"hs"}
|
|
EOF
|
|
RUN
|
|
|
|
NAME=aom
|
|
FILE==
|
|
CMDS=<<EOF
|
|
e asm.arch=x86
|
|
e asm.bits=64
|
|
aom 3
|
|
aom aam
|
|
aoma~mova
|
|
EOF
|
|
EXPECT=<<EOF
|
|
aam
|
|
3
|
|
cmova conditional move - above/not below nor equal (cf=0 and zf=0)
|
|
cmovae conditional move - above or equal/not below/not carry (cf=0)
|
|
movabs absolute data moves
|
|
movapd move aligned packed double-fp values
|
|
movaps move aligned packed single-fp values
|
|
vmovapd move aligned packed double-precision floating-point values
|
|
vmovaps move aligned packed single-precision floating-point values
|
|
EOF
|
|
RUN
|