NAME=a8
FILE=-
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
a8 c745f400000000~type
EOF
EXPECT=<<EOF
type: mov
EOF
RUN

NAME=anal.mask
FILE=-
ARGS=-a arm -b 64
CMDS=<<EOF
wx 7f2303d5
e anal.mask=false
ao~mask
e anal.mask=true
ao~mask
?e --
wx fc6fbaa9
e anal.mask=false
ao~mask
e anal.mask=true
ao~mask
?e --
wx fd430191
e anal.mask=false
ao~mask
e anal.mask=true
ao~mask
EOF
EXPECT=<<EOF
mask: ffffffff
mask: ff0ffc2a
--
mask: ffffffff
mask: 00000208
--
mask: ffffffff
mask: 000001b6
EOF
RUN

NAME=aob
FILE=-
CMDS=<<EOF
-a arm
-b 64
wx fc6fbaa9
aob
aob fd430191
EOF
EXPECT=<<EOF
x3311111 42222233 40444444 1xx0x1x3  : stp x28, x27, [sp, -0x60]!
22211111 33333322 03333333 100x00x0  : add x29, sp, 0x50
EOF
RUN

NAME=aob json
FILE=-
CMDS=<<EOF
-a arm
-b 64
wx fc6fbaa9
aobj
aobj fd430191
EOF
EXPECT=<<EOF
{"opstr":"stp x28, x27, [sp, -0x60]!","size":4,"bytes":[[18446744073709551615,3,3,1,1,1,1,1],[4,2,2,2,2,2,3,3],[4,0,4,4,4,4,4,4],[1,18446744073709551615,18446744073709551615,0,18446744073709551615,1,18446744073709551615,3]],"flipstr":"x3311111 42222233 40444444 1xx0x1x3 ","args":[[22,28],[1,2,3,4,0,31,26],[10,11,12,13,14],[5,6,8,9,24],[15,16,17,18,19,20,21,23]]}
{"opstr":"add x29, sp, 0x50","size":4,"bytes":[[2,2,2,1,1,1,1,1],[3,3,3,3,3,3,2,2],[0,3,3,3,3,3,3,3],[1,0,0,18446744073709551615,0,0,18446744073709551615,0]],"flipstr":"22211111 33333322 03333333 100x00x0 ","args":[[23,24,26,27,29,30],[1,2,3,4,0,31],[5,6,7,8,9],[10,11,12,13,14,15,16,17,18,19,20,21,22]]}
EOF
RUN

NAME=aom-6502.cs
FILE=-
CMDS=<<EOF
e asm.arch=6502.cs
e asm.bits=8
aom
aoml~?
EOF
EXPECT=<<EOF
brk
96
EOF
RUN

NAME=aom-arm
FILE=-
CMDS=<<EOF
e asm.arch=arm
e asm.bits=64
aom
aoml~?
e asm.bits=32
aoml~?
e asm.bits=16
aoml~?
EOF
EXPECT=<<EOF
invalid
1288
471
471
EOF
RUN

NAME=aom-evm for capstone
FILE=-
CMDS=<<EOF
e asm.arch=evm
e asm.bits=32
aom
aoml~?
EOF
EXPECT=<<EOF
stop
134
EOF
RUN

NAME=aom-m680x
FILE=-
CMDS=<<EOF
e asm.arch=m680x
aom
aoml~?
EOF
EXPECT=<<EOF
fcb
356
EOF
RUN

NAME=aom-m68k
FILE=-
CMDS=<<EOF
e asm.arch=m68k
aom
aoml~?
EOF
EXPECT=<<EOF
ori.b
374
EOF
RUN

NAME=aom-mips
FILE=-
CMDS=<<EOF
e asm.arch=mips
e asm.bits=64
aom
aoml~?
e asm.bits=32
aoml~?
e asm.bits=16
aoml~?
EOF
EXPECT=<<EOF
nop
625
625
625
EOF
RUN

NAME=aom-ppc
FILE=-
CMDS=<<EOF
e asm.arch=ppc
aom
aoml~?
EOF
EXPECT=<<EOF
invalid
1726
EOF
RUN

NAME=aom-riscv
FILE=-
CMDS=<<EOF
e asm.arch=riscv.cs
e asm.bits=64
wx 13 # wa nop
aom
aoml~?
e asm.bits=32
aoml~?
e asm.bits=16
aoml~?
EOF
EXPECT=<<EOF
nop
272
272
272
EOF
RUN

NAME=aom-sparc
FILE=-
CMDS=<<EOF
e asm.arch=sparc
e cfg.bigendian=true
aom
aoml~?
EOF
EXPECT=<<EOF
unimp
278
EOF
RUN

NAME=aom-s390
FILE=-
CMDS=<<EOF
e asm.arch=s390
e cfg.bigendian=true
wx 051e
aom
aoml~?
EOF
EXPECT=<<EOF
balr
2345
EOF
RUN

NAME=aom-x86
FILE=-
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
aom
aoml~?
e asm.bits=32
aoml~?
e asm.bits=16
aoml~?
EOF
EXPECT=<<EOF
add
1523
1523
1523
EOF
RUN

NAME=aom-xcore
FILE=-
CMDS=<<EOF
e asm.arch=xcore
aom
aoml~?
EOF
EXPECT=<<EOF
stw
120
EOF
RUN

NAME=aof
FILE=-
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 55
aof rsp
aof rbp
EOF
EXPECT=<<EOF
8,rsp,-=

EOF
RUN

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
id: 460
bytes: c745f400000000
val: 0x00000000
disp: -12
refptr: 4
size: 7
sign: false
type: mov
cycles: 1
esil: 0,0xc,rbp,-,=[4]
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]",
    "sign": false,
    "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,
    "refptr": 4,
    "cycles": 1,
    "failcycles": 0,
    "delay": 0,
    "stack": "set",
    "stackptr": 8,
    "direction": "write",
    "family": "cpu"
  }
]
EOF
RUN

NAME=aojvals-z80
FILE=-
ARGS=-a z80 -b 8
CMDS=<<EOF
wx ceed
aoj~{}
EOF
EXPECT=<<EOF
[
  {
    "opcode": "adc a, 0xed",
    "disasm": "adc a, 0xed",
    "pseudo": "a = a + 0xed",
    "description": "add with carry register pair",
    "mnemonic": "adc",
    "mask": "ffff",
    "sign": false,
    "id": 0,
    "addr": 0,
    "bytes": "ceed",
    "size": 2,
    "type": "unk",
    "esilcost": 0,
    "cycles": 0,
    "failcycles": 0,
    "delay": 0,
    "stackptr": 0,
    "family": "cpu"
  }
]
EOF
RUN

NAME=aojvals-gb
FILE=-
ARGS=-a x86 -b 8
CMDS=<<EOF
# hack because there's no parse plugin for gb
-a gb
wx ceed
aoj~{}
EOF
EXPECT=<<EOF
[
  {
    "opcode": "adc 0xed",
    "disasm": "adc 0xed",
    "description": "add with carry register pair",
    "srcs": [
      {
        "name": "0xed",
        "type": "imm",
        "absolute": 1,
        "imm": 237
      },
      {
        "name": "C",
        "type": "reg"
      }
    ],
    "dsts": [
      {
        "name": "a",
        "type": "reg"
      }
    ],
    "mnemonic": "adc",
    "mask": "ffff",
    "esil": "0xed,a,+=,C,NUM,7,$c,C,:=,3,$c,H,:=,a,+=,7,$c,C,|,C,:=,3,$c,H,|=,a,a,=,$z,Z,:=,0,N,:=",
    "sign": false,
    "id": 0,
    "addr": 0,
    "bytes": "ceed",
    "size": 2,
    "type": "add",
    "esilcost": 0,
    "cycles": 8,
    "failcycles": 0,
    "delay": 0,
    "stackptr": 0,
    "family": "cpu"
  }
]
EOF
RUN
