test_cases:
  -
    input:
      bytes: [0x8d, 0x4c, 0x32, 0x08, 0x01, 0xd8, 0x81, 0xc6, 0x34, 0x12, 0x00, 0x00, 0x05, 0x23, 0x01, 0x00, 0x00, 0x36, 0x8b, 0x84, 0x91, 0x23, 0x01, 0x00, 0x00, 0x41, 0x8d, 0x84, 0x39, 0x89, 0x67, 0x00, 0x00, 0x8d, 0x87, 0x89, 0x67, 0x00, 0x00, 0xb4, 0xc6, 0x66, 0xe9, 0xb8, 0x00, 0x00, 0x00, 0x67, 0xff, 0xa0, 0x23, 0x01, 0x00, 0x00, 0x66, 0xe8, 0xcb, 0x00, 0x00, 0x00, 0x74, 0xfc, ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x1000
    expected:
      insns:
      -
        asm_text: "lea cx, [si + 0x32]"
        size: 3
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x4c
            enc_modrm_offset: 0x1
            disp: 0x32
            enc_disp_offset: 0x2
            enc_disp_size: 0x1
            operands:
              -
                type: X86_OP_REG
                reg: cx
                size: 2
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_base: si
                mem_disp: 0x32
                size: 2
                access: CS_AC_READ
          regs_read: [ si ]
          regs_write: [ cx ]
      -
        asm_text: "or byte ptr [bx + di], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x08, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x1
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: di
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_RESET_OF, X86_EFLAGS_RESET_CF, X86_EFLAGS_UNDEFINED_AF ]
          regs_read: [ bx, di, al ]
          regs_write: [ flags ]
      -
        asm_text: "fadd dword ptr [bx + di + 0x34c6]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x81
            enc_modrm_offset: 0x1
            disp: 0x34c6
            enc_disp_offset: 0x2
            enc_disp_size: 0x2
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: di
                mem_disp: 0x34c6
                size: 4
                access: CS_AC_READ
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1, X86_FPU_FLAGS_UNDEFINED_C0, X86_FPU_FLAGS_UNDEFINED_C2, X86_FPU_FLAGS_UNDEFINED_C3]
          regs_read: [ bx, di ]
          regs_write: [ fpsw ]
      -
        asm_text: "adc al, byte ptr [bx + si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x12, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_TEST_CF ]
          regs_read: [ flags, al, bx, si ]
          regs_write: [ flags, al ]
      -
        asm_text: "add byte ptr [di], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x00, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x5
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: di
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ di, al ]
          regs_write: [ flags ]
      -
        asm_text: "and ax, word ptr [bx + di]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x23, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x1
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: di
                size: 2
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_RESET_OF, X86_EFLAGS_RESET_CF, X86_EFLAGS_UNDEFINED_AF ]
          regs_read: [ ax, bx, di ]
          regs_write: [ flags, ax ]
      -
        asm_text: "add byte ptr [bx + si], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x00, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ bx, si, al ]
          regs_write: [ flags ]
      -
        asm_text: "mov ax, word ptr ss:[si + 0x2391]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_SS, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8b, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x84
            enc_modrm_offset: 0x2
            disp: 0x2391
            enc_disp_offset: 0x3
            enc_disp_size: 0x2
            operands:
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_segment: ss
                mem_base: si
                mem_disp: 0x2391
                size: 2
                access: CS_AC_READ
          regs_read: [ ss, si ]
          regs_write: [ ax ]
      -
        asm_text: "add word ptr [bx + si], ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x01, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                size: 2
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ bx, si, ax ]
          regs_write: [ flags ]
      -
        asm_text: "add byte ptr [bx + di - 0x73], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x00, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x41
            enc_modrm_offset: 0x1
            disp: -0x73
            enc_disp_offset: 0x2
            enc_disp_size: 0x1
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: di
                mem_disp: -0x73
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ bx, di, al ]
          regs_write: [ flags ]
      -
        asm_text: "test byte ptr [bx + di], bh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x84, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x39
            enc_modrm_offset: 0x1
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: di
                size: 1
              -
                type: X86_OP_REG
                reg: bh
                size: 1
          regs_read: [ bx, di ]
      -
        asm_text: "mov word ptr [bx], sp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x89, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x67
            enc_modrm_offset: 0x1
            disp: 0x0
            enc_disp_offset: 0x2
            enc_disp_size: 0x1
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                size: 2
                access: CS_AC_WRITE
              -
                type: X86_OP_REG
                reg: sp
                size: 2
                access: CS_AC_READ
          regs_read: [ bx, sp ]
      -
        asm_text: "add byte ptr [di - 0x7679], cl"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x00, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x8d
            enc_modrm_offset: 0x1
            disp: -0x7679
            enc_disp_offset: 0x2
            enc_disp_size: 0x2
            operands:
              -
                type: X86_OP_MEM
                mem_base: di
                mem_disp: -0x7679
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: cl
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ di, cl ]
          regs_write: [ flags ]
      -
        asm_text: "add byte ptr [eax], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_ADDRSIZE ]
            opcode: [ 0x00, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            enc_modrm_offset: 0x2
            disp: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                size: 1
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: al
                size: 1
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ eax, al ]
          regs_write: [ flags ]
      -
        asm_text: "mov ah, 0xc6"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xb4, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ah
                size: 1
                access: CS_AC_WRITE
              -
                type: X86_OP_IMM
                imm: 0xc6
                size: 1
          regs_write: [ ah ]
      -
        asm_text: "jmp 0x10e7"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x10e7
                size: 4
      -
        asm_text: "jmp word ptr [eax + 0x123]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_ADDRSIZE ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xa0
            enc_modrm_offset: 0x2
            disp: 0x123
            enc_disp_offset: 0x3
            enc_disp_size: 0x4
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x123
                size: 2
                access: CS_AC_READ
          regs_read: [ eax ]
      -
        asm_text: "call 0x1107"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1107
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "je 0x103a"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x103a
                size: 2
            eflags: [  X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
  -
    input:
      bytes: [0x8d, 0x4c, 0x32, 0x08, 0x01, 0xd8, 0x81, 0xc6, 0x34, 0x12, 0x00, 0x00, 0x05, 0x23, 0x01, 0x00, 0x00, 0x36, 0x8b, 0x84, 0x91, 0x23, 0x01, 0x00, 0x00, 0x41, 0x8d, 0x84, 0x39, 0x89, 0x67, 0x00, 0x00, 0x8d, 0x87, 0x89, 0x67, 0x00, 0x00, 0xb4, 0xc6, 0xe9, 0xea, 0xbe, 0xad, 0xde, 0xff, 0xa0, 0x23, 0x01, 0x00, 0x00, 0xe8, 0xdf, 0xbe, 0xad, 0xde, 0x74, 0xff, ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32, CS_OPT_SYNTAX_ATT ]
      address: 0x1000
    expected:
      insns:
      -
        asm_text: "leal 8(%edx, %esi), %ecx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x4c
            enc_modrm_offset: 0x1
            disp: 0x8
            enc_disp_offset: 0x3
            enc_disp_size: 0x1
            sib: 0x32
            sib_base: edx
            sib_index: esi
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_base: edx
                mem_index: esi
                mem_disp: 0x8
                size: 4
                access: CS_AC_READ
              -
                type: X86_OP_REG
                reg: ecx
                size: 4
                access: CS_AC_WRITE
          regs_read: [ edx, esi ]
          regs_write: [ ecx ]
      -
        asm_text: "addl %ebx, %eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x01, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xd8
            enc_modrm_offset: 0x1
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ebx
                size: 4
                access: CS_AC_READ
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_READ_WRITE
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ ebx, eax ]
          regs_write: [ eflags, eax ]
      -
        asm_text: "addl $0x1234, %esi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x81, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xc6
            enc_modrm_offset: 0x1
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 4
              -
                type: X86_OP_REG
                reg: esi
                size: 4
                access: CS_AC_READ_WRITE
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ esi ]
          regs_write: [ eflags, esi ]
      -
        asm_text: "addl $0x123, %eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x05, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x123
                size: 4
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_READ_WRITE
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ eax ]
          regs_write: [ eflags, eax ]
      -
        asm_text: "movl %ss:0x123(%ecx, %edx, 4), %eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_SS, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8b, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x84
            enc_modrm_offset: 0x2
            disp: 0x123
            enc_disp_offset: 0x4
            enc_disp_size: 0x4
            sib: 0x91
            sib_base: ecx
            sib_index: edx
            sib_scale: 4
            operands:
              -
                type: X86_OP_MEM
                mem_segment: ss
                mem_base: ecx
                mem_index: edx
                mem_scale: 4
                mem_disp: 0x123
                size: 4
                access: CS_AC_READ
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
          regs_read: [ ss, ecx, edx ]
          regs_write: [ eax ]
      -
        asm_text: "incl %ecx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x41, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ecx
                size: 4
                access: CS_AC_READ_WRITE
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ ecx ]
          regs_write: [ eflags, ecx ]
      -
        asm_text: "leal 0x6789(%ecx, %edi), %eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x84
            enc_modrm_offset: 0x1
            disp: 0x6789
            enc_disp_offset: 0x3
            enc_disp_size: 0x4
            sib: 0x39
            sib_base: ecx
            sib_index: edi
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_base: ecx
                mem_index: edi
                mem_disp: 0x6789
                size: 4
                access: CS_AC_READ
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
          regs_read: [ ecx, edi ]
          regs_write: [ eax ]
      -
        asm_text: "leal 0x6789(%edi), %eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x87
            enc_modrm_offset: 0x1
            disp: 0x6789
            enc_disp_offset: 0x2
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: edi
                mem_disp: 0x6789
                size: 4
                access: CS_AC_READ
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
          regs_read: [ edi ]
          regs_write: [ eax ]
      -
        asm_text: "movb $0xc6, %ah"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xb4, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0xc6
                size: 1
              -
                type: X86_OP_REG
                reg: ah
                size: 1
                access: CS_AC_WRITE
          regs_write: [ ah ]
      -
        asm_text: "jmp 0xdeadcf18"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0xdeadcf18
                size: 4
      -
        asm_text: "jmpl *0x123(%eax)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xa0
            enc_modrm_offset: 0x1
            disp: 0x123
            enc_disp_offset: 0x2
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x123
                size: 4
                access: CS_AC_READ
          regs_read: [ eax ]
      -
        asm_text: "calll 0xdeadcf18"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0xdeadcf18
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "je 0x103a"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x103a
                size: 4
            eflags: [  X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
  -
    input:
      bytes: [0x8d, 0x4c, 0x32, 0x08, 0x01, 0xd8, 0x81, 0xc6, 0x34, 0x12, 0x00, 0x00, 0x05, 0x23, 0x01, 0x00, 0x00, 0x36, 0x8b, 0x84, 0x91, 0x23, 0x01, 0x00, 0x00, 0x41, 0x8d, 0x84, 0x39, 0x89, 0x67, 0x00, 0x00, 0x8d, 0x87, 0x89, 0x67, 0x00, 0x00, 0xb4, 0xc6, 0xe9, 0xea, 0xbe, 0xad, 0xde, 0xff, 0xa0, 0x23, 0x01, 0x00, 0x00, 0xe8, 0xdf, 0xbe, 0xad, 0xde, 0x74, 0xff, ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x1000
    expected:
      insns:
      -
        asm_text: "lea ecx, [edx + esi + 8]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x4c
            enc_modrm_offset: 0x1
            disp: 0x8
            enc_disp_offset: 0x3
            enc_disp_size: 0x1
            sib: 0x32
            sib_base: edx
            sib_index: esi
            sib_scale: 1
            operands:
              -
                type: X86_OP_REG
                reg: ecx
                size: 4
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_base: edx
                mem_index: esi
                mem_disp: 0x8
                size: 4
                access: CS_AC_READ
          regs_read: [ edx, esi ]
          regs_write: [ ecx ]
      -
        asm_text: "add eax, ebx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x01, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xd8
            enc_modrm_offset: 0x1
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_REG
                reg: ebx
                size: 4
                access: CS_AC_READ
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ eax, ebx ]
          regs_write: [ eflags, eax ]
      -
        asm_text: "add esi, 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x81, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xc6
            enc_modrm_offset: 0x1
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: esi
                size: 4
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 4
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ esi ]
          regs_write: [ eflags, esi ]
      -
        asm_text: "add eax, 0x123"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x05, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_READ_WRITE
              -
                type: X86_OP_IMM
                imm: 0x123
                size: 4
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ eax ]
          regs_write: [ eflags, eax ]
      -
        asm_text: "mov eax, dword ptr ss:[ecx + edx*4 + 0x123]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_SS, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8b, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x84
            enc_modrm_offset: 0x2
            disp: 0x123
            enc_disp_offset: 0x4
            enc_disp_size: 0x4
            sib: 0x91
            sib_base: ecx
            sib_index: edx
            sib_scale: 4
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_segment: ss
                mem_base: ecx
                mem_index: edx
                mem_scale: 4
                mem_disp: 0x123
                size: 4
                access: CS_AC_READ
          regs_read: [ ss, ecx, edx ]
          regs_write: [ eax ]
      -
        asm_text: "inc ecx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x41, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ecx
                size: 4
                access: CS_AC_READ_WRITE
            eflags: [  X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF ]
          regs_read: [ ecx ]
          regs_write: [ eflags, ecx ]
      -
        asm_text: "lea eax, [ecx + edi + 0x6789]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x84
            enc_modrm_offset: 0x1
            disp: 0x6789
            enc_disp_offset: 0x3
            enc_disp_size: 0x4
            sib: 0x39
            sib_base: ecx
            sib_index: edi
            sib_scale: 1
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_base: ecx
                mem_index: edi
                mem_disp: 0x6789
                size: 4
                access: CS_AC_READ
          regs_read: [ ecx, edi ]
          regs_write: [ eax ]
      -
        asm_text: "lea eax, [edi + 0x6789]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8d, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x87
            enc_modrm_offset: 0x1
            disp: 0x6789
            enc_disp_offset: 0x2
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_base: edi
                mem_disp: 0x6789
                size: 4
                access: CS_AC_READ
          regs_read: [ edi ]
          regs_write: [ eax ]
      -
        asm_text: "mov ah, 0xc6"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xb4, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: ah
                size: 1
                access: CS_AC_WRITE
              -
                type: X86_OP_IMM
                imm: 0xc6
                size: 1
          regs_write: [ ah ]
      -
        asm_text: "jmp 0xdeadcf18"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0xdeadcf18
                size: 4
      -
        asm_text: "jmp dword ptr [eax + 0x123]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0xa0
            enc_modrm_offset: 0x1
            disp: 0x123
            enc_disp_offset: 0x2
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x123
                size: 4
                access: CS_AC_READ
          regs_read: [ eax ]
      -
        asm_text: "call 0xdeadcf18"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0xdeadcf18
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "je 0x103a"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x103a
                size: 4
            eflags: [  X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
  -
    input:
      bytes: [0x55, 0x48, 0x8b, 0x05, 0xb8, 0x13, 0x00, 0x00, 0xe9, 0xea, 0xbe, 0xad, 0xde, 0xff, 0x25, 0x23, 0x01, 0x00, 0x00, 0xe8, 0xdf, 0xbe, 0xad, 0xde, 0x74, 0xff, ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x1000
    expected:
      insns:
      -
        asm_text: "push rbp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x55, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: rbp
                size: 8
                access: CS_AC_READ
          regs_read: [ rsp, rbp ]
          regs_write: [ rsp ]
      -
        asm_text: "mov rax, qword ptr [rip + 0x13b8]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x8b, 0x00, 0x00, 0x00 ]
            rex: 0x48
            addr_size: 8
            modrm: 0x5
            enc_modrm_offset: 0x2
            disp: 0x13b8
            enc_disp_offset: 0x3
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_REG
                reg: rax
                size: 8
                access: CS_AC_WRITE
              -
                type: X86_OP_MEM
                mem_base: rip
                mem_disp: 0x13b8
                size: 8
                access: CS_AC_READ
          regs_read: [ rip ]
          regs_write: [ rax ]
      -
        asm_text: "jmp 0xffffffffdeadcef7"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: -0x21523109
                size: 8
      -
        asm_text: "jmp qword ptr [rip + 0x123]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x25
            enc_modrm_offset: 0x1
            disp: 0x123
            enc_disp_offset: 0x2
            enc_disp_size: 0x4
            sib: 0x0
            operands:
              -
                type: X86_OP_MEM
                mem_base: rip
                mem_disp: 0x123
                size: 8
                access: CS_AC_READ
          regs_read: [ rip ]
      -
        asm_text: "call 0xffffffffdeadcef7"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: -0x21523109
                size: 8
          regs_read: [ rsp, rip ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "je 0x1019"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1019
                size: 8
            eflags: [  X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
  -
    input:
      bytes: [ 0x66, 0x45, 0x0f, 0x2f, 0x38 ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "comisd   xmm15, qword ptr [r8]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x2f, 0x00, 0x00 ]
            rex: 0x45
            addr_size: 8
            modrm: 0x38
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: xmm15
                size: 16
                access: CS_AC_READ
              -
                type: X86_OP_MEM
                mem_base: r8
                size: 8
                access: CS_AC_READ
          regs_read: [ xmm15, r8 ]
          regs_write: [ rflags ]
  -
    input:
      bytes: [0x58, 0x1f, 0x07, 0x0f, 0xa1, 0x0f, 0xa9, 0x17]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "pop ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x58, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, ax ]
      -
        asm_text: "pop ds"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x1f, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ds
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, ds ]
      -
        asm_text: "pop es"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x07, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: es
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, es ]
      -
        asm_text: "pop fs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa1, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: fs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, fs ]
      -
        asm_text: "pop gs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa9, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: gs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, gs ]
      -
        asm_text: "pop ss"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x17, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 2
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ss
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, ss ]
  -
    input:
      bytes: [0x66, 0x58, 0x58, 0x1f, 0x07, 0x0f, 0xa1, 0x0f, 0xa9, 0x17]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "pop ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0x58, 0x00, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_WRITE
          regs_read: [ sp ]
          regs_write: [ sp, ax ]
      -
        asm_text: "pop eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x58, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, eax ]
      -
        asm_text: "pop ds"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x1f, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ds
                size: 2
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, ds ]
      -
        asm_text: "pop es"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x07, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: es
                size: 2
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, es ]
      -
        asm_text: "pop fs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa1, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: fs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, fs ]
      -
        asm_text: "pop gs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa9, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: gs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, gs ]
      -
        asm_text: "pop ss"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x17, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 4
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: ss
                size: 2
                access: CS_AC_WRITE
          regs_read: [ esp ]
          regs_write: [ esp, ss ]
  -
    input:
      bytes: [0x58, 0x0f, 0xa1, 0x0f, 0xa9]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "pop rax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x58, 0x0, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: rax
                size: 8
                access: CS_AC_WRITE
          regs_read: [ rsp ]
          regs_write: [ rsp, rax ]
      -
        asm_text: "pop fs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa1, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: fs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ rsp ]
          regs_write: [ rsp, fs ]
      -
        asm_text: "pop gs"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xa9, 0x00, 0x00 ]
            rex: 0x0
            addr_size: 8
            modrm: 0x0
            disp: 0x0
            sib: 0x0
            sib_scale: 0
            operands:
              -
                type: X86_OP_REG
                reg: gs
                size: 2
                access: CS_AC_WRITE
          regs_read: [ rsp ]
          regs_write: [ rsp, gs ]
  -
    input:
      bytes: [ 
         0xe8, 0x31, 0x12,                     # call 0x1234
         0x66, 0xe8, 0x2b, 0x12, 0x00, 0x00,   # call 0x1234 w/ size override
         0xff, 0xd0,                           # call ax
         0xff, 0x10,                           # call word ptr [bx + si]
         0xff, 0x50, 0x12,                     # call word ptr [bx + si + 0x12]
         0xff, 0x90, 0x34, 0x12,               # call word ptr [bx + si + 0x1234]
         0x9a, 0x34, 0x12, 0x78, 0x56,         # lcall 0x5678, 0x1234
         0xff, 0x18,                           # lcall [bx+si]
         0xff, 0x58, 0x12,                     # lcall [bx+si + 0x12]
         0xff, 0x98, 0x34, 0x12,               # lcall [bx+si + 0x1234]
         0x65, 0x66, 0xff, 0x1e, 0x10, 0x00    # call ptr gs:[0x10]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "call 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 2
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0xd0
            operands:
              -
                type: X86_OP_REG
                reg: ax
                size: 2
                access: CS_AC_READ
          regs_read: [ esp, eip, ax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call word ptr [bx + si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x10
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_disp: 0x0
                size: 2
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call word ptr [bx + si + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x50
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_disp: 0x12
                size: 2
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call word ptr [bx + si + 0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x90
            disp: 0x1234
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall 0x5678, 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x9a, 0x00, 0x00, 0x00 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x5678
                size: 2
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall [bx + si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x18
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_scale: 0x1
                mem_disp: 0x0
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall [bx + si + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x58
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_scale: 0x1
                mem_disp: 0x12
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall [bx + si + 0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x98
            disp: 0x1234
            operands:
              -
                type: X86_OP_MEM
                mem_base: bx
                mem_index: si
                mem_scale: 0x1
                mem_disp: 0x1234
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, bx, si ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr gs:[0x10]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_GS, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 2
            modrm: 0x1e
            disp: 0x10
            operands:
              -
                type: X86_OP_MEM
                mem_segment: gs
                mem_disp: 0x10
                size: 2
                access: CS_AC_READ
          regs_read: [ esp, eip, gs ]
          regs_write: [ esp, eip ]
  -
    input:
      bytes: [
         0xe8, 0x73, 0x56, 0x34, 0x12,             # call 0x12345678
         0x66, 0xe8, 0x2b, 0x12,                   # call 0x1234 w/ size override
         0xff, 0xd0,                               # call eax
         0xff, 0x10,                               # call dword ptr [eax]
         0xff, 0x50, 0x12,                         # call dword ptr [eax + 0x12]
         0xff, 0x90, 0x78, 0x56, 0x34, 0x12,       # call dword ptr [eax + 0x12345678]
         0x9a, 0x78, 0x56, 0x34, 0x12, 0xbc, 0x9a, # lcall 0x9abc, 0x12345678
         0xff, 0x18,                               # call ptr [eax]
         0xff, 0x58, 0x12,                         # call ptr [eax + 0x12]
         0xff, 0x98, 0x78, 0x56, 0x34, 0x12,       # call ptr [eax + 0x12345678]
         0x65, 0x66, 0xff, 0x1d, 0x10, 0x00, 0x00, 0x00, 0x00    # lcall gs:[0x10]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "call 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
                size: 2
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0xd0
            operands:
              -
                type: X86_OP_REG
                reg: eax
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call dword ptr [eax]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x10
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call dword ptr [eax + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x50
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x12
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call dword ptr [eax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x90
            disp: 0x12345678
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x12345678
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall 0x9abc, 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x9a, 0x00, 0x00, 0x00 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x9abc
                size: 2
              -
                type: X86_OP_IMM
                imm: 0x12345678
                size: 4
          regs_read: [ esp, eip ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [eax]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x18
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [eax + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x58
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x12
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [eax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x98
            disp: 0x12345678
            operands:
              -
                type: X86_OP_MEM
                mem_base: eax
                mem_disp: 0x12345678
                size: 4
                access: CS_AC_READ
          regs_read: [ esp, eip, eax ]
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall gs:[0x10]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_GS, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x1d
            operands:
              -
                type: X86_OP_MEM
                mem_segment: gs
                mem_disp: 0x10
                size: 6
                access: CS_AC_READ
          regs_read: [ esp, eip, gs ]
          regs_write: [ esp, eip ]
  -
    input:
      bytes: [
         0xe8, 0x73, 0x56, 0x34, 0x12,             # call 0x12345678
         0x66, 0xe8, 0x6d, 0x56, 0x34, 0x12,       # call 0x1234 w/ size override
         0xe8, 0xe7, 0xce, 0xad, 0xde,             # call 0xffffffffdeadcef7
         0xff, 0xd0,                               # call rax
         0xff, 0x10,                               # call qword ptr [rax]
         0xff, 0x50, 0x12,                         # call qword ptr [rax + 0x12]
         0xff, 0x90, 0x78, 0x56, 0x34, 0x12,       # call qword ptr [rax + 0x12345678]
         0xff, 0x18,                               # call ptr [rax]
         0xff, 0x58, 0x12,                         # call ptr [rax + 0x12]
         0xff, 0x98, 0x78, 0x56, 0x34, 0x12,       # call ptr [rax + 0x12345678]
         0x40, 0xff, 0x98, 0x78, 0x56, 0x34, 0xf2, # rex call ptr [rax - 0xdcba988]
         0x65, 0x66, 0xff, 0x1d, 0x10, 0x00, 0x00, 0x00, 0x00    # lcall gs:[rip + 0x10]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "call 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
                size: 8
          regs_read: [ rsp, rip ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
                size: 4
          regs_read: [ rsp, rip ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call 0xffffffffdeadcef7"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe8, 0x00, 0x00, 0x00 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: -0x21523109
                size: 8
          regs_read: [ rsp, rip ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call rax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0xd0
            operands:
              -
                type: X86_OP_REG
                reg: rax
                size: 8
                access: CS_AC_READ
          regs_read: [ rsp, rip, rax ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call qword ptr [rax]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x10
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                size: 8
                access: CS_AC_READ
          regs_read: [ rsp, rip, rax ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call qword ptr [rax + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x50
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                mem_disp: 0x12
                size: 8
                access: CS_AC_READ
          regs_read: [ rsp, rip, rax ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call qword ptr [rax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x90
            disp: 0x12345678
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                mem_disp: 0x12345678
                size: 8
                access: CS_AC_READ
          regs_read: [ rsp, rip, rax ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "call ptr [rax]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x18
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                size: 8
                access: CS_AC_READ
          regs_read: [ esp, eip, rax ]      # These should be rsp and rip (https://github.com/capstone-engine/capstone/issues/2691)
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [rax + 0x12]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x58
            disp: 0x12
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                mem_disp: 0x12
                size: 8
                access: CS_AC_READ
          regs_read: [ esp, eip, rax ]      # These should be rsp and rip (https://github.com/capstone-engine/capstone/issues/2691)
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [rax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x98
            disp: 0x12345678
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                mem_disp: 0x12345678
                size: 8
                access: CS_AC_READ
          regs_read: [ esp, eip, rax ]      # These should be rsp and rip (https://github.com/capstone-engine/capstone/issues/2691)
          regs_write: [ esp, eip ]
      -
        asm_text: "call ptr [rax - 0xdcba988]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            rex: 0x40
            addr_size: 8
            modrm: 0x98
            disp: -0xdcba988
            operands:
              -
                type: X86_OP_MEM
                mem_base: rax
                mem_disp: -0xdcba988
                size: 8
                access: CS_AC_READ
          regs_read: [ esp, eip, rax ]      # These should be rsp and rip (https://github.com/capstone-engine/capstone/issues/2691)
          regs_write: [ esp, eip ]
      -
        asm_text: "lcall gs:[rip + 0x10]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_GS, X86_PREFIX_OPSIZE, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x1d
            disp: 0x10
            operands:
              -
                type: X86_OP_MEM
                mem_segment: gs
                mem_disp: 0x10
                size: 10
                access: CS_AC_READ
          regs_read: [ esp, eip, gs, rip]
          regs_write: [ esp, eip ]

  -
    input:
      name: "Interrupt instructions, 16-bit decode mode"
      bytes: [
         0xcc,        # int3
         0xcd, 0x80,  # int 0x80
         0xce,        # into
         0xf1,        # int1
         0xcf         # iret
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "int3"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcc, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
          regs_read: [ flags, esp ]
          regs_write: [ flags, eip, esp ]
      -
        asm_text: "int 0x80"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcd, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
            operands:
              -
                type: X86_OP_IMM
                imm: 0x80
                size: 1
          regs_read: [ flags, esp ]
          regs_write: [ flags, eip, esp ]
      -
        asm_text: "into"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xce, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF, X86_EFLAGS_TEST_OF ]
          regs_read: [ flags, esp ]
          regs_write: [ flags, eip, esp ]
      -
        asm_text: "int1"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xf1, 0x00, 0x00, 0x00 ]
          regs_read: [ esp ]
          regs_write: [ eip, esp ]
      -
        asm_text: "iret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_RF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_ZF ]
          regs_read: [ sp, ss, flags ]
          regs_write: [ ip, sp, flags ]

  -
    input:
      name: "Interrupt instructions, 32-bit decode mode"
      bytes: [
         0xcc,        # int3
         0xcd, 0x80,  # int 0x80
         0xce,        # into
         0xf1,        # int1
         0xcf         # iret
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "int3"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcc, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
          regs_read: [ eflags, esp ]
          regs_write: [ eflags, eip, esp ]
      -
        asm_text: "int 0x80"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcd, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
            operands:
              -
                type: X86_OP_IMM
                imm: 0x80
                size: 1
          regs_read: [ eflags, esp ]
          regs_write: [ eflags, eip, esp ]
      -
        asm_text: "into"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xce, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF, X86_EFLAGS_TEST_OF ]
          regs_read: [ eflags, esp ]
          regs_write: [ eflags, eip, esp ]
      -
        asm_text: "int1"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xf1, 0x00, 0x00, 0x00 ]
          regs_read: [ esp ]
          regs_write: [ eip, esp ]
      -
        asm_text: "iretd"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_RF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_ZF ]
          regs_read: [ esp, ss, eflags ]
          regs_write: [ eip, esp, eflags ]

  -
    input:
      name: "Interrupt instructions, 64-bit decode mode"
      bytes: [
         0xcc,        # int3
         0xcd, 0x80,  # int 0x80
         0xf1,        # int1
         0xcf,        # iret
         0x48, 0xcf,  # REX.W iretq
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "int3"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcc, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
          regs_read: [ rflags, esp ]
          regs_write: [ rflags, eip, esp ]
      -
        asm_text: "int 0x80"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcd, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_RESET_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_RESET_RF ]
            operands:
              -
                type: X86_OP_IMM
                imm: 0x80
                size: 1
          regs_read: [ rflags, esp ]
          regs_write: [ rflags, eip, esp ]
      -
        asm_text: "int1"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xf1, 0x00, 0x00, 0x00 ]
          regs_read: [ esp ]
          regs_write: [ eip, esp ]
      -
        asm_text: "iretd"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_RF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_ZF ]
          regs_read: [ esp, ss, rflags ]
          regs_write: [ eip, esp, rflags ]
      -
        asm_text: "iretq"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_RF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_ZF ]
          regs_read: [ rsp, ss, rflags ]
          regs_write: [ rip, rsp, rflags ]

  -
    input:
      name: "x87 comparison instructions, 32-bit decode mode"
      bytes: [
        0xd8, 0x13,                               # fcom dword ptr [ebx]
        0xdc, 0x13,                               # fcom qword ptr [ebx]
        0xd8, 0xd1,                               # fcom st(1)
        0xd8, 0x5d, 0x00,                         # fcomp dword ptr [ebp]
        0xdc, 0x5d, 0x00,                         # fcomp qword ptr [ebp]
        0xd8, 0xd9,                               # fcomp st(1)
        0xde, 0xd9,                               # fcompp
        0xdb, 0xf0,                               # fcomi st(0)
        0xdf, 0xf1,                               # fcompi st(1)
        0xdb, 0xe9,                               # fucomi st(1)
        0xdf, 0xe9,                               # fucompi st(1)
        0xdd, 0xe1,                               # fucom st(1)
        0xdd, 0xe9,                               # fucomp st(1)
        0xda, 0xe9,                               # fucompp
        0xde, 0x14, 0x25, 0x34, 0x12, 0x00, 0x00, # ficom word ptr [0x1234]
        0xda, 0x13,                               # ficom dword ptr [ebx]
        0xde, 0x1c, 0x25, 0x34, 0x12, 0x00, 0x00, # ficomp word ptr [0x1234]
        0xda, 0x1b,                               # ficomp dword ptr [ebx]
        0xd9, 0xe4,                               # ftest
        0xd9, 0xe5                                # fxam
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "fcom dword ptr [ebx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, ebx ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcom qword ptr [ebx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdc, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebx
                size: 8
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, ebx ]
          regs_write: [ fpsw ]          
      -
        asm_text: "fcom st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp dword ptr [ebp]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x5d
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebp
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, ebp ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp qword ptr [ebp]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdc, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x5d
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebp
                size: 8
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, ebp ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcompp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomi st(0)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdb, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0) ]
          regs_write: [ fpsw, eflags ]
      -
        asm_text: "fcompi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdf, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1)]
          regs_write: [ fpsw, eflags ]
      -
        asm_text: "fucomi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdb, 0x00, 0x00, 0x00 ]
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw, eflags]
      -
        asm_text: "fucompi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdf, 0x00, 0x00, 0x00 ]
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw, eflags ]
      -
        asm_text: "fucom st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdd, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fucomp st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdd, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fucompp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficom word ptr [0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x14
            disp: 0x1234
            sib: 0x25
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficom dword ptr [ebx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds, ebx ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficomp word ptr [0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x1c
            disp: 0x1234
            sib: 0x25
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficomp dword ptr [ebx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            addr_size: 4
            modrm: 0x1b
            operands:
              -
                type: X86_OP_MEM
                mem_base: ebx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds, ebx ]
          regs_write: [ fpsw ]
      -
        asm_text: "ftst"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd9, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fxam"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd9, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C1, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0) ]
          regs_write: [ st(0), fpsw ]
  -
    input:
      name: "x87 comparison instructions, 64-bit decode mode"
      bytes: [
        0xd8, 0x13,                               # fcom dword ptr [rbx]
        0xdc, 0x13,                               # fcom qword ptr [rbx]
        0xd8, 0xd1,                               # fcom st(1)
        0xd8, 0x5d, 0x00,                         # fcomp dword ptr [ebp]
        0xdc, 0x5d, 0x00,                         # fcomp qword ptr [ebp]
        0xd8, 0xd9,                               # fcomp st(1)
        0xde, 0xd9,                               # fcompp
        0xdb, 0xf0,                               # fcomi st(0)
        0xdf, 0xf1,                               # fcompi st(1)
        0xdb, 0xe9,                               # fucomi st(1)
        0xdf, 0xe9,                               # fucompi st(1)
        0xdd, 0xe1,                               # fucom st(1)
        0xdd, 0xe9,                               # fucomp st(1)
        0xda, 0xe9,                               # fucom
        0xde, 0x14, 0x25, 0x34, 0x12, 0x00, 0x00, # ficom word ptr [0x1234]
        0xda, 0x13,                               # ficom dword ptr [rbx]
        0xde, 0x1c, 0x25, 0x34, 0x12, 0x00, 0x00, # ficomp word ptr [0x1234]
        0xda, 0x1b,                               # ficomp dword ptr [rbx]
        0xd9, 0xe4,                               # ftest
        0xd9, 0xe5                                # fxam
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "fcom dword ptr [rbx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, rbx ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcom qword ptr [rbx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdc, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbx
                size: 8
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, rbx ]
          regs_write: [ fpsw ]          
      -
        asm_text: "fcom st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp dword ptr [rbp]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x5d
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbp
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, rbp ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp qword ptr [rbp]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdc, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x5d
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbp
                size: 8
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ss, rbp ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomp st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd8, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcompp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fcomi st(0)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdb, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0) ]
          regs_write: [ fpsw, rflags ]
      -
        asm_text: "fcompi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdf, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1)]
          regs_write: [ fpsw, rflags ]
      -
        asm_text: "fucomi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdb, 0x00, 0x00, 0x00 ]
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw, rflags]
      -
        asm_text: "fucompi st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdf, 0x00, 0x00, 0x00 ]
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
#             eflags: [ X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]  see https://github.com/capstone-engine/capstone/pull/2680
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw, rflags ]
      -
        asm_text: "fucom st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdd, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fucomp st(1)"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xdd, 0x00, 0x00, 0x00 ]
            operands:
              -
                type: X86_OP_REG
                reg: st(1)
                size: 10
                access: CS_AC_READ
            fpu_flags: [ X86_FPU_FLAGS_MODIFY_C1 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fucompp"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), st(1) ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficom word ptr [0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x14
            disp: 0x1234
            sib: 0x25
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficom dword ptr [rbx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x13
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds, rbx ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficomp word ptr [0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xde, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x1c
            disp: 0x1234
            sib: 0x25
            sib_scale: 1
            operands:
              -
                type: X86_OP_MEM
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds ]
          regs_write: [ fpsw ]
      -
        asm_text: "ficomp dword ptr [rbx]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xda, 0x00, 0x00, 0x00 ]
            addr_size: 8
            modrm: 0x1b
            operands:
              -
                type: X86_OP_MEM
                mem_base: rbx
                size: 4
                access: CS_AC_READ
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0), ds, rbx ]
          regs_write: [ fpsw ]
      -
        asm_text: "ftst"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd9, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_RESET_C1, X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0) ]
          regs_write: [ fpsw ]
      -
        asm_text: "fxam"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xd9, 0x00, 0x00, 0x00 ]
            fpu_flags: [X86_FPU_FLAGS_MODIFY_C0, X86_FPU_FLAGS_MODIFY_C1, X86_FPU_FLAGS_MODIFY_C2, X86_FPU_FLAGS_MODIFY_C3 ]
          regs_read: [ st(0) ]
          regs_write: [ st(0), fpsw ]

  -
    input:
      name: "Enter/leave instructions, 16-bit decode mode"
      bytes: [
         0xc8, 0x34, 0x12, 0x05,      # enter 0x1234, 0x5 (Create a stack frame of size 0x1234 with a nesting level of 0x5)
         0xc9                         # leave
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "enter 0x1234, 0x5"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc8, 0x00, 0x00, 0x00 ]
          regs_read: [ bp, sp ]
          regs_write: [ bp, sp ]
      -
        asm_text: "leave"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc9, 0x00, 0x00, 0x00 ]
          regs_read: [ bp, sp ]
          regs_write: [ bp, sp ]

  -
    input:
      name: "Enter/leave instructions, 32-bit decode mode"
      bytes: [
         0xc8, 0x34, 0x12, 0x05,      # enter 0x1234, 0x5 (Create a stack frame of size 0x1234 with a nesting level of 0x5)
         0xc9                         # leave
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "enter 0x1234, 0x5"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc8, 0x00, 0x00, 0x00 ]
          regs_read: [ ebp, esp ]
          regs_write: [ ebp, esp ]
      -
        asm_text: "leave"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc9, 0x00, 0x00, 0x00 ]
          regs_read: [ ebp, esp ]
          regs_write: [ ebp, esp ]

  -
    input:
      name: "Enter/leave instructions, 64-bit decode mode"
      bytes: [
         0xc8, 0x34, 0x12, 0x05,      # enter 0x1234, 0x5 (Create a stack frame of size 0x1234 with a nesting level of 0x5)
         0xc9                         # leave
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "enter 0x1234, 0x5"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc8, 0x00, 0x00, 0x00 ]
          regs_read: [ rbp, rsp ]
          regs_write: [ rbp, rsp ]
      -
        asm_text: "leave"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc9, 0x00, 0x00, 0x00 ]
          regs_read: [ rbp, rsp ]
          regs_write: [ rbp, rsp ]

  -
    input:
      name: "Return from procedure, 16-bit decode mode"
      bytes: [
       0xc3,               # ret (near)
       0xcb,               # retf (far)
       0xc2, 0x34, 0x12,   # ret 0x1234 (near)
       0xca, 0x34, 0x12,   # retf 0x1234 (far)
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "ret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc3, 0x00, 0x00, 0x00 ]
          regs_read: [ sp, ss ]
          regs_write: [ sp, ip ]
      -
        asm_text: "retf"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcb, 0x00, 0x00, 0x00 ]
          regs_read: [ sp, ss ]
          regs_write: [ sp, ip, cs ]
      -
        asm_text: "ret 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc2, 0x00, 0x00, 0x00 ]
          regs_read: [ sp, ss ]
          regs_write: [ sp, ip ]
      -
        asm_text: "retf 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xca, 0x00, 0x00, 0x00 ]
          regs_read: [ sp, ss ]
          regs_write: [ sp, ip, cs ]
  -
    input:
      name: "Return from procedure, 32-bit decode mode"
      bytes: [
       0xc3,               # ret (near)
       0xcb,               # retf (far)
       0xc2, 0x34, 0x12,   # ret 0x1234 (near)
       0xca, 0x34, 0x12,   # retf 0x1234 (far)
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "ret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc3, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip ]
      -
        asm_text: "retf"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcb, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip, cs ]
      -
        asm_text: "ret 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc2, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip ]
      -
        asm_text: "retf 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xca, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip, cs ]
  -
    input:
      name: "Return from procedure, 64-bit decode mode"
      bytes: [
       0xc3,               # ret (near)
       0xcb,               # retf (far)
       0xc2, 0x34, 0x12,   # ret 0x1234 (near)
       0xca, 0x34, 0x12,   # retf 0x1234 (far)
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "ret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc3, 0x00, 0x00, 0x00 ]
          regs_read: [ rsp, ss ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "retf"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xcb, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip, cs ]      # BUG: decoded as X86_LRETL instead of X86_LRETQ
      -
        asm_text: "ret 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xc2, 0x00, 0x00, 0x00 ]
          regs_read: [ rsp, ss ]
          regs_write: [ rsp, rip ]
      -
        asm_text: "retf 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xca, 0x00, 0x00, 0x00 ]
          regs_read: [ esp, ss ]
          regs_write: [ esp, eip, cs ]      # BUG: decoded as X86_LRETIL instead of X86_LRETIQ

  -
    input:
      name: "String instructions, 16-bit decode mode"
      bytes: [
        0xaa,        # stosb byte ptr es:[di], al
        0xf3,0xaa,   # rep stosb byte ptr es:[di], al
        0xab,        # stosw word ptr es:[di], ax
        0xf3,0xab,   # rep stosw word ptr es:[di], ax
        0xac,        # lodsb al, byte ptr ds:[si]
        0xf3,0xac,   # rep lodsb al, byte ptr ds:[si]
        0xad,        # lodsw ax, word ptr ds:[si]
        0xf3,0xad,   # rep lodsw ax, word ptr ds:[si]
        0xae,        # scasb al, byte ptr es:[di]
        0xf3, 0xae,  # repe scasb al, byte ptr es:[di]
        0xf2, 0xae,  # repne scasb al, byte ptr es:[di]
        0xaf,        # scasd ax, word ptr es:[edi]
        0xf3, 0xaf,  # repe scasd ax, word ptr es:[edi]
        0xf2, 0xaf,  # repne scasd ax, word ptr es:[edi]
        0xa6,        # cmpsb byte ptr ds:[si], byte ptr ds:[di]
        0xf3, 0xa6,  # repe cmpsb byte ptr ds:[si], byte ptr ds:[di]
        0xf2, 0xa6,  # repne cmpsb byte ptr ds:[si], byte ptr ds:[di]
        0xa7,        # cmpsw word ptr ds:[si], word ptr ds:[di]
        0xf3, 0xa7,  # repe cmpsw word ptr ds:[si], word ptr ds:[di]
        0xf2, 0xa7,  # repne cmpsw word ptr ds:[si], word ptr ds:[di]
        0xa4,        # movsb byte ptr es:[di], byte ptr [si]
        0xf3,0xa4,   # rep movsb byte ptr es:[di], byte ptr [si]
        0xa5,        # movsw word ptr es:[di], word ptr [si{}}
        0xf3,0xa5,   # rep movsw word ptr es:[di], word ptr [si]
        0x6c,        # insb byte ptr es:[di], dx
        0xf3, 0x6c,  # rep insb byte ptr es:[di], dx
        0x6d,        # insw word ptr es:[di], dx
        0xf3, 0x6d,  # rep insw word ptr es:[di], dx
        0x6e,        # outsb dx, byte ptr [si]
        0xf3, 0x6e,  # rep outsb dx, byte ptr [si]
        0x6f,        # outsw dx, word ptr [si]
        0xf3, 0x6f,  # rep outsb dx, word ptr [si]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "stosb byte ptr es:[di], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, di, flags, es ]
          regs_write: [ di ]
      -
        asm_text: "rep stosb byte ptr es:[di], al"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, di, flags, cx, es ]
          regs_write: [ di, cx ]
      -
        asm_text: "stosw word ptr es:[di], ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ ax, di, flags, es ]
          regs_write: [ di ]
      -
        asm_text: "rep stosw word ptr es:[di], ax"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ ax, di, flags, cx, es ]
          regs_write: [ di, cx ]
      -
        asm_text: "lodsb al, byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ si, flags, ds ]
          regs_write: [ al, si ]
      -
        asm_text: "rep lodsb al, byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ si, flags, ds, cx ]
          regs_write: [ al, si, cx ]
      -
        asm_text: "lodsw ax, word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ si, flags, ds ]
          regs_write: [ ax, si ]
      -
        asm_text: "rep lodsw ax, word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ si, flags, ds, cx ]
          regs_write: [ ax, si, cx ]
      -
        asm_text: "scasb al, byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, di, flags, es ]
          regs_write: [ di, flags ]
      -
        asm_text: "repe scasb al, byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, di, flags, cx, es ]
          regs_write: [ di, flags, cx ]
      -
        asm_text: "repne scasb al, byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, di, flags, cx, es ]
          regs_write: [ di, flags, cx ]
      -
        asm_text: "scasw ax, word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ ax, di, flags, es ]
          regs_write: [ di, flags ]
      -
        asm_text: "repe scasw ax, word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ ax, di, flags, cx, es ]
          regs_write: [ di, flags, cx ]
      -
        asm_text: "repne scasw ax, word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ ax, di, flags, cx, es ]
          regs_write: [ di, flags, cx ]
      -
        asm_text: "cmpsb byte ptr [si], byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, es ]
          regs_write: [ di, si, flags ]
      -
        asm_text: "repe cmpsb byte ptr [si], byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, flags, cx ]
      -
        asm_text: "repne cmpsb byte ptr [si], byte ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, flags, cx ]
      -
        asm_text: "cmpsw word ptr [si], word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, es ]
          regs_write: [ di, si, flags ]
      -
        asm_text: "repe cmpsw word ptr [si], word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, flags, cx ]
      -
        asm_text: "repne cmpsw word ptr [si], word ptr es:[di]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, flags, cx ]
      -
        asm_text: "movsb byte ptr es:[di], byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ di, si, flags, ds, es ]
          regs_write: [ di, si ]
      -
        asm_text: "rep movsb byte ptr es:[di], byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, cx ]
      -
        asm_text: "movsw word ptr es:[di], word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ di, si, flags, ds, es ]
          regs_write: [ di, si ]
      -
        asm_text: "rep movsw word ptr es:[di], word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ di, si, flags, ds, cx, es ]
          regs_write: [ di, si, cx ]
      -
        asm_text: "insb byte ptr es:[di], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, flags, es, di ]
          regs_write: [ di ]
      -
        asm_text: "rep insb byte ptr es:[di], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, flags, cx, es, di ]
          regs_write: [ di, cx ]
      -
        asm_text: "insw word ptr es:[di], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, flags, es, di ]
          regs_write: [ di ]
      -
        asm_text: "rep insw word ptr es:[di], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, flags, cx, es, di]
          regs_write: [ di, cx ]
      -
        asm_text: "outsb dx, byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, si, flags, ds ]
          regs_write: [ si ]
      -
        asm_text: "rep outsb dx, byte ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, si, flags, ds, cx]
          regs_write: [ si, cx ]
      -
        asm_text: "outsw dx, word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, si, flags, ds ]
          regs_write: [ si ]
      -
        asm_text: "rep outsw dx, word ptr [si]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, si, flags, ds, cx]
          regs_write: [ si, cx ]

  -
    input:
      name: "String instructions, 32-bit decode mode"
      bytes: [
        0xaa,        # stosb byte ptr es:[edi], al
        0xf3, 0xaa,  # rep stosb byte ptr es:[edi], al
        0xab,        # stosd dword ptr es:[edi], eax
        0xf3, 0xab,  # rep stosd dword ptr es:[edi], eax
        0xac,        # lodsb al, byte ptr ds:[esi]
        0xf3, 0xac,  # rep lodsb al, byte ptr ds:[esi]
        0xad,        # lodsb eax, dword ptr ds:[esi]
        0xf3, 0xad,  # rep lodsb eax, dword ptr ds:[esi]
        0xae,        # scasb al, word ptr es:[edi]
        0xf3, 0xae,  # repe scasb al, word ptr es:[edi]
        0xf2, 0xae,  # repne scasb al, word ptr es:[edi]
        0xaf,        # scasd eax, dword ptr es:[edi]
        0xf3, 0xaf,  # repe scasd eax, dword ptr es:[edi]
        0xf2, 0xaf,  # repne scasd eax, dword ptr es:[edi]
        0xa6,        # cmpsb byte ptr [esi], byte ptr es:[edi]
        0xf3, 0xa6,  # repe cmpsb byte ptr [esi], byte ptr es:[edi]
        0xf2, 0xa6,  # repne cmpsb byte ptr [esi], byte ptr es:[edi]
        0xa7,        # cmpsd dword ptr [esi], dword ptr es:[edi]
        0xf3, 0xa7,  # repe cmpsd dword ptr [esi], dword ptr es:[edi]
        0xf2, 0xa7,  # repne cmpsd dword ptr [esi], dword ptr es:[edi]
        0xa4,        # movsb byte ptr es:[edi], byte ptr [esi]
        0xf3, 0xa4,  # rep movsb byte ptr es:[edi], byte ptr [esi]
        0xa5,        # movsw dword ptr es:[edi], dword ptr [esi]
        0xf3, 0xa5,  # rep movsw dword ptr es:[edi], dword ptr [esi]
        0x6c,        # insb byte ptr es:[edi], dx
        0xf3, 0x6c,  # rep insb byte ptr es:[edi], dx
        0x6d,        # insd dword ptr es:[edi], dx
        0xf3, 0x6d,  # rep insd dword ptr es:[edi], dx
        0x6e,        # outsb dx, byte ptr [esi]
        0xf3, 0x6e,  # rep outsb dx, byte ptr [esi]
        0x6f,        # outsd dx, dword ptr [esi]
        0xf3, 0x6f,  # rep outsd dx, dword ptr [esi]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "stosb byte ptr es:[edi], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, edi, eflags, es ]
          regs_write: [ edi ]
      -
        asm_text: "rep stosb byte ptr es:[edi], al"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, edi, eflags, ecx, es ]
          regs_write: [ edi, ecx ]
      -
        asm_text: "stosd dword ptr es:[edi], eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ eax, edi, eflags, es ]
          regs_write: [ edi ]
      -
        asm_text: "rep stosd dword ptr es:[edi], eax"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ eax, edi, eflags, ecx, es ]
          regs_write: [ edi, ecx ]
      -
        asm_text: "lodsb al, byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ esi, eflags, ds ]
          regs_write: [ al, esi ]
      -
        asm_text: "rep lodsb al, byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ esi, eflags, ds, ecx ]
          regs_write: [ al, esi, ecx ]
      -
        asm_text: "lodsd eax, dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ esi, eflags, ds ]
          regs_write: [ eax, esi ]
      -
        asm_text: "rep lodsd eax, dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ esi, eflags, ds, ecx ]
          regs_write: [ eax, esi, ecx ]
      -
        asm_text: "scasb al, byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, edi, eflags, es ]
          regs_write: [ edi, eflags ]
      -
        asm_text: "repe scasb al, byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, edi, eflags, ecx, es ]
          regs_write: [ edi, eflags, ecx ]
      -
        asm_text: "repne scasb al, byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, edi, eflags, ecx, es ]
          regs_write: [ edi, eflags, ecx ]
      -
        asm_text: "scasd eax, dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, edi, eflags, es ]
          regs_write: [ edi, eflags ]
      -
        asm_text: "repe scasd eax, dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, edi, eflags, ecx, es ]
          regs_write: [ edi, eflags, ecx ]
      -
        asm_text: "repne scasd eax, dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, edi, eflags, ecx, es ]
          regs_write: [ edi, eflags, ecx ]
      -
        asm_text: "cmpsb byte ptr [esi], byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, es ]
          regs_write: [ edi, esi, eflags ]
      -
        asm_text: "repe cmpsb byte ptr [esi], byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, eflags, ecx ]
      -
        asm_text: "repne cmpsb byte ptr [esi], byte ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, eflags, ecx ]
      -
        asm_text: "cmpsd dword ptr [esi], dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, es ]
          regs_write: [ edi, esi, eflags ]
      -
        asm_text: "repe cmpsd dword ptr [esi], dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, eflags, ecx ]
      -
        asm_text: "repne cmpsd dword ptr [esi], dword ptr es:[edi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, eflags, ecx ]
      -
        asm_text: "movsb byte ptr es:[edi], byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ edi, esi, eflags, ds, es ]
          regs_write: [ edi, esi ]
      -
        asm_text: "rep movsb byte ptr es:[edi], byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, ecx ]
      -
        asm_text: "movsd dword ptr es:[edi], dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ edi, esi, eflags, ds, es ]
          regs_write: [ edi, esi ]
      -
        asm_text: "rep movsd dword ptr es:[edi], dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ edi, esi, eflags, ds, ecx, es ]
          regs_write: [ edi, esi, ecx ]
      -
        asm_text: "insb byte ptr es:[edi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, eflags, es, edi ]
          regs_write: [ edi ]
      -
        asm_text: "rep insb byte ptr es:[edi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, eflags, ecx, es, edi ]
          regs_write: [ edi, ecx ]
      -
        asm_text: "insd dword ptr es:[edi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, edi, eflags, es ]
          regs_write: [ edi ]
      -
        asm_text: "rep insd dword ptr es:[edi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, edi, eflags, ecx, es ]
          regs_write: [ edi, ecx ]
      -
        asm_text: "outsb dx, byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, esi, eflags, ds ]
          regs_write: [ esi ]
      -
        asm_text: "rep outsb dx, byte ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, esi, eflags, ds, ecx ]
          regs_write: [ esi, ecx ]
      -
        asm_text: "outsd dx, dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, esi, eflags, ds ]
          regs_write: [ esi ]
      -
        asm_text: "rep outsd dx, dword ptr [esi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, esi, eflags, ds, ecx ]
          regs_write: [ esi, ecx ]

  -
    input:
      name: "String instructions, 64-bit decode mode"
      bytes: [
        0xaa,                # stosb byte ptr [rdi], al
        0xf3, 0xaa,          # rep stosb byte ptr [rdi], al
        0xab,                # stosd dword ptr [rdi], eax
        0xf3, 0xab,          # rep stosd dword ptr [rdi], eax
        0x48, 0xab,          # REX.W stosq qword ptr [rdi], rax
        0xf3, 0x48, 0xab,    # rep REX.W stosq qword ptr [rdi], rax
        0xac,                # lodsb al, byte ptr ds:[rsi]
        0xf3, 0xac,          # rep lodsb al, byte ptr ds:[rsi]
        0xad,                # lodsd eax, dword ptr [rsi]
        0xf3, 0xad,          # rep lodsd eax, dword ptr [rsi]
        0x48, 0xad,          # REX.W lodsq rax, qword ptr [rsi]
        0xf3, 0x48, 0xad,    # rep REX.W lodsq rax, qword ptr [rsi]
        0xae,                # scasb al, word ptr es:[rdi]
        0xf3, 0xae,          # repe scasb al, word ptr es:[rdi]
        0xf2, 0xae,          # repne scasb al, word ptr es:[rdi]
        0xaf,                # scasd eax, dword ptr [rdi]
        0xf3, 0xaf,          # repe scasd eax, dword ptr [rdi]
        0xf2, 0xaf,          # repne scasd eax, dword ptr [rdi]
        0x48, 0xaf,          # REX.W scasq rax, qword ptr [rdi]
        0xf3, 0x48, 0xaf,    # repe REX.W scasq rax, qword ptr [rdi]
        0xf2, 0x48, 0xaf,    # repne REX.W scasq rax, qword ptr [rdi]
        0xa6,                # cmpsb byte ptr [rsi], byte ptr [rdi]
        0xf3, 0xa6,          # repe cmpsb byte ptr [rsi], byte ptr [rdi]
        0xf2, 0xa6,          # repne cmpsb byte ptr [rsi], byte ptr [rdi]
        0xa7,                # cmpsd dword ptr [rsi], dword ptr [rdi]
        0xf3, 0xa7,          # repe cmpsd dword ptr [rsi], dword ptr [rdi]
        0xf2, 0xa7,          # repne cmpsd dword ptr [rsi], dword ptr [rdi]
        0x48, 0xa7,          # REX.W cmpsq qword ptr [rsi], qword ptr [rdi]
        0xf3, 0x48, 0xa7,    # repe REX.W cmpsq qword ptr [rsi], qword ptr [rdi]
        0xf2, 0x48, 0xa7,    # repne REX.W cmpsq qword ptr [rsi], qword ptr [rdi]
        0xa4,                # movsb byte ptr [rdi], byte ptr [rsi]
        0xf3, 0xa4,          # rep movsb byte ptr [rdi], byte ptr [rsi]
        0xa5,                # movsd dword ptr [rdi], dword ptr [rsi]
        0xf3, 0xa5,          # rep movsd dword ptr [rdi], dword ptr [rsi]
        0x48, 0xa5,          # REX.W movsq qword ptr [rdi], qword ptr [rsi]
        0xf3, 0x48, 0xa5,    # rep REX.W movsq qword ptr [rdi], qword ptr [rsi]
        0x6c,                # insb byte ptr [rdi], dx
        0xf3, 0x6c,          # rep insb byte ptr [rdi], dx
        0x6d,                # insd dword ptr [rdi], dx
        0xf3, 0x6d,          # rep insd dword ptr [rdi], dx
        0x6e,                # outsb dx, byte ptr [rsi]
        0xf3, 0x6e,          # rep outsb dx, byte ptr [rsi]
        0x6f,                # outsd dx, dword ptr [rsi]
        0xf3, 0x6f,          # rep outsd dx, dword ptr [rsi]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
      address: 0x0
    expected:
      insns:
      -
        asm_text: "stosb byte ptr [rdi], al"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, rdi, rflags ]
          regs_write: [ rdi ]
      -
        asm_text: "rep stosb byte ptr [rdi], al"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaa, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ al, rdi, rflags, rcx ]
          regs_write: [ rdi, rcx ]
      -
        asm_text: "stosd dword ptr [rdi], eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ eax, rdi, rflags ]
          regs_write: [ rdi ]
      -
        asm_text: "rep stosd dword ptr [rdi], eax"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ eax, rdi, rflags, rcx ]
          regs_write: [ rdi, rcx ]
      -
        asm_text: "stosq qword ptr [rdi], rax"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rax, rdi, rflags, ]
          regs_write: [ rdi ]
      -
        asm_text: "rep stosq qword ptr [rdi], rax"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xab, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rax, rdi, rflags, rcx ]
          regs_write: [ rdi, rcx ]
      -
        asm_text: "lodsb al, byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags ]
          regs_write: [ al, rsi ]
      -
        asm_text: "rep lodsb al, byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xac, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags, rcx ]
          regs_write: [ al, rsi, rcx ]
      -
        asm_text: "lodsd eax, dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags ]
          regs_write: [ eax, rsi ]
      -
        asm_text: "rep lodsd eax, dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags, rcx ]
          regs_write: [ eax, rsi, rcx ]
      -
        asm_text: "lodsq rax, qword ptr [rsi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags ]
          regs_write: [ rax, rsi ]
      -
        asm_text: "rep lodsq rax, qword ptr [rsi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xad, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rsi, rflags, rcx ]
          regs_write: [ rax, rsi, rcx ]
      -
        asm_text: "scasb al, byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, rdi, rflags ]
          regs_write: [ rdi, rflags ]
      -
        asm_text: "repe scasb al, byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "repne scasb al, byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xae, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ al, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "scasd eax, dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, rdi, rflags ]
          regs_write: [ rdi, rflags ]
      -
        asm_text: "repe scasd eax, dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "repne scasd eax, dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ eax, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "scasq rax, qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rax, rdi, rflags ]
          regs_write: [ rdi, rflags ]
      -
        asm_text: "repe scasq rax, qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rax, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "repne scasq rax, qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xaf, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rax, rdi, rflags, rcx ]
          regs_write: [ rdi, rflags, rcx ]
      -
        asm_text: "cmpsb byte ptr [rsi], byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi, rflags ]
      -
        asm_text: "repe cmpsb byte ptr [rsi], byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "repne cmpsb byte ptr [rsi], byte ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa6, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "cmpsd dword ptr [rsi], dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi, rflags ]
      -
        asm_text: "repe cmpsd dword ptr [rsi], dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "repne cmpsd dword ptr [rsi], dword ptr [rdi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "cmpsq qword ptr [rsi], qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi, rflags ]
      -
        asm_text: "repe cmpsq qword ptr [rsi], qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REPE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "repne cmpsq qword ptr [rsi], qword ptr [rdi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REPNE, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa7, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_CF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rflags, rcx ]
      -
        asm_text: "movsb byte ptr [rdi], byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi ]
      -
        asm_text: "rep movsb byte ptr [rdi], byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa4, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rcx ]
      -
        asm_text: "movsd dword ptr [rdi], dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi ]
      -
        asm_text: "rep movsd dword ptr [rdi], dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rcx ]
      -
        asm_text: "movsq qword ptr [rdi], qword ptr [rsi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags ]
          regs_write: [ rdi, rsi ]
      -
        asm_text: "rep movsq qword ptr [rdi], qword ptr [rsi]"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xa5, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ rdi, rsi, rflags, rcx ]
          regs_write: [ rdi, rsi, rcx ]
      -
        asm_text: "insb byte ptr [rdi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rflags, rdi ]
          regs_write: [ rdi ]
      -
        asm_text: "rep insb byte ptr [rdi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6c, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rflags, rcx, rdi ]
          regs_write: [ rdi, rcx ]
      -
        asm_text: "insd dword ptr [rdi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rdi, rflags ]
          regs_write: [ rdi ]
      -
        asm_text: "rep insd dword ptr [rdi], dx"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6d, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rdi, rflags, rcx ]
          regs_write: [ rdi, rcx ]
      -
        asm_text: "outsb dx, byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rsi, rflags ]
          regs_write: [ rsi ]
      -
        asm_text: "rep outsb dx, byte ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6e, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rsi, rflags, rcx ]
          regs_write: [ rsi, rcx ]
      -
        asm_text: "outsd dx, dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rsi, rflags ]
          regs_write: [ rsi ]
      -
        asm_text: "rep outsd dx, dword ptr [rsi]"
        details:
          x86:
            prefix: [ X86_PREFIX_REP, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x6f, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_DF ]
          regs_read: [ dx, rsi, rflags, rcx ]
          regs_write: [ rsi, rcx ]

  -
    input:
      name: "Conditional jump, 16-bit decode mode"
      bytes: [
         0x70, 0x7d,                          # jo    0x7f
         0x71, 0x7b,                          # jno   0x7f
         0x72, 0x79,                          # jb    0x7f       (aka jc/jnae)
         0x73, 0x77,                          # jae   0x7f       (aka jnb/jnc)
         0x74, 0x75,                          # je    0x7f       (aka jz)
         0x75, 0x73,                          # jne   0x7f       (aka jnz)
         0x76, 0x71,                          # jbe   0x7f       (aka jna)
         0x77, 0x6f,                          # ja    0x7f       (aka jnbe)
         0x78, 0x6d,                          # js    0x7f
         0x79, 0x6b,                          # jns   0x7f
         0x7a, 0x69,                          # jp    0x7f       (aka jpe)
         0x7b, 0x67,                          # jnp   0x7f       (aka jpo)
         0x7c, 0x65,                          # jl    0x7f       (aka jnge)
         0x7d, 0x63,                          # jge   0x7f       (aka jnl)
         0x7e, 0x61,                          # jle   0x7f       (aka jng)
         0x7f, 0x5f,                          # jg    0x7f       (aka jnle)
         0xe3, 0x5d,                          # jcxz  0x7f       (aka jecxz/jrcxz)
         0x0f, 0x80, 0x0e, 0x12,              # jo    0x1234
         0x0f, 0x81, 0x0a, 0x12,              # jno   0x1234
         0x0f, 0x82, 0x06, 0x12,              # jb    0x1234     (aka jc/jnae)
         0x0f, 0x83, 0x02, 0x12,              # jae   0x1234     (aka jnb/jnc)
         0x0f, 0x84, 0xfe, 0x11,              # je    0x1234     (aka jz)
         0x0f, 0x85, 0xfa, 0x11,              # jne   0x1234     (aka jnz)
         0x0f, 0x86, 0xf6, 0x11,              # jbe   0x1234     (aka jna)
         0x0f, 0x87, 0xf2, 0x11,              # ja    0x1234     (aka jnbe)
         0x0f, 0x88, 0xee, 0x11,              # js    0x1234
         0x0f, 0x89, 0xea, 0x11,              # jns   0x1234
         0x0f, 0x8A, 0xe6, 0x11,              # jp    0x1234     (aka jpe)
         0x0f, 0x8B, 0xe2, 0x11,              # jnp   0x1234     (aka jpo)
         0x0f, 0x8C, 0xde, 0x11,              # jl    0x1234     (aka jnge)
         0x0f, 0x8D, 0xda, 0x11,              # jge   0x1234     (aka jnl)
         0x0f, 0x8E, 0xd6, 0x11,              # jle   0x1234     (aka jng)
         0x0f, 0x8F, 0xd2, 0x11,              # jg    0x1234     (aka jnle)

      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "jo 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x70, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jno 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x71, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jb 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x72, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jae 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x73, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "je 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jne 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x75, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jbe 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x76, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "ja 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x77, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "js 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x78, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jns 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x79, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7a, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jnp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7b, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jl 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7c, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jge 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7d, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jle 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7e, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jg 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7f, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jcxz 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe3, 0x0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
          regs_read: [ ip, cx ]
          regs_write: [ ip ]
      -
        asm_text: "jo 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x80, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jno 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x81, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jb 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x82, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jae 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x83, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "je 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x84, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jne 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x85, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jbe 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x86, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "ja 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x87, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "js 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x88, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jns 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x89, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jp 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8A, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jnp 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8B, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jl 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8C, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jge 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8D, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jle 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8E, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]
      -
        asm_text: "jg 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8F, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_IMM
                imm: 0x1234
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ flags, ip ]
          regs_write: [ ip ]

  -
    input:
      name: "Conditional jump, 32-bit decode mode"
      bytes: [
         0x70, 0x7d,                          # jo    0x7f
         0x71, 0x7b,                          # jno   0x7f
         0x72, 0x79,                          # jb    0x7f       (aka jc/jnae)
         0x73, 0x77,                          # jae   0x7f       (aka jnb/jnc)
         0x74, 0x75,                          # je    0x7f       (aka jz)
         0x75, 0x73,                          # jne   0x7f       (aka jnz)
         0x76, 0x71,                          # jbe   0x7f       (aka jna)
         0x77, 0x6f,                          # ja    0x7f       (aka jnbe)
         0x78, 0x6d,                          # js    0x7f
         0x79, 0x6b,                          # jns   0x7f
         0x7a, 0x69,                          # jp    0x7f       (aka jpe)
         0x7b, 0x67,                          # jnp   0x7f       (aka jpo)
         0x7c, 0x65,                          # jl    0x7f       (aka jnge)
         0x7d, 0x63,                          # jge   0x7f       (aka jnl)
         0x7e, 0x61,                          # jle   0x7f       (aka jng)
         0x7f, 0x5f,                          # jg    0x7f       (aka jnle)
         0xe3, 0x5d,                          # jecxz 0x7f       (aka jcxz/jrcxz)
         0x0f, 0x80, 0x50, 0x56, 0x34, 0x12,  # jo    0x12345678
         0x0f, 0x81, 0x4a, 0x56, 0x34, 0x12,  # jno   0x12345678
         0x0f, 0x82, 0x44, 0x56, 0x34, 0x12,  # jb    0x12345678 (aka jc/jnae)
         0x0f, 0x83, 0x3e, 0x56, 0x34, 0x12,  # jae   0x12345678 (aka jnb/jnc)
         0x0f, 0x84, 0x38, 0x56, 0x34, 0x12,  # je    0x12345678 (aka jz)
         0x0f, 0x85, 0x32, 0x56, 0x34, 0x12,  # jne   0x12345678 (aka jnz)
         0x0f, 0x86, 0x2c, 0x56, 0x34, 0x12,  # jbe   0x12345678 (aka jna)
         0x0f, 0x87, 0x26, 0x56, 0x34, 0x12,  # ja    0x12345678 (aka jnbe)
         0x0f, 0x88, 0x20, 0x56, 0x34, 0x12,  # js    0x12345678
         0x0f, 0x89, 0x1a, 0x56, 0x34, 0x12,  # jns   0x12345678
         0x0f, 0x8A, 0x14, 0x56, 0x34, 0x12,  # jp    0x12345678 (aka jpe)
         0x0f, 0x8B, 0x0e, 0x56, 0x34, 0x12,  # jnp   0x12345678 (aka jpo)
         0x0f, 0x8C, 0x08, 0x56, 0x34, 0x12,  # jl    0x12345678 (aka jnge)
         0x0f, 0x8D, 0x02, 0x56, 0x34, 0x12,  # jge   0x12345678 (aka jnl)
         0x0f, 0x8E, 0xfc, 0x55, 0x34, 0x12,  # jle   0x12345678 (aka jng)
         0x0f, 0x8F, 0xf6, 0x55, 0x34, 0x12,  # jg    0x12345678 (aka jnle)

      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "jo 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x70, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jno 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x71, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jb 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x72, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jae 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x73, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "je 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jne 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x75, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jbe 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x76, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "ja 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x77, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "js 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x78, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jns 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x79, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7a, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jnp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7b, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jl 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7c, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jge 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7d, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jle 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7e, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jg 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7f, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jecxz 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe3, 0x0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
          regs_read: [ eip, ecx ]
          regs_write: [ eip ]
      -
        asm_text: "jo 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x80, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jno 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x81, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jb 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x82, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jae 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x83, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "je 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x84, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jne 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x85, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jbe 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x86, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "ja 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x87, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "js 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x88, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jns 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x89, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8A, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jnp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8B, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jl 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8C, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jge 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8D, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jle 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8E, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]
      -
        asm_text: "jg 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8F, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ eflags, eip ]
          regs_write: [ eip ]

  -
    input:
      name: "Conditional jump, 64-bit decode mode"
      bytes: [
         0x70, 0x7d,                          # jo    0x7f
         0x71, 0x7b,                          # jno   0x7f
         0x72, 0x79,                          # jb    0x7f       (aka jc/jnae)
         0x73, 0x77,                          # jae   0x7f       (aka jnb/jnc)
         0x74, 0x75,                          # je    0x7f       (aka jz)
         0x75, 0x73,                          # jne   0x7f       (aka jnz)
         0x76, 0x71,                          # jbe   0x7f       (aka jna)
         0x77, 0x6f,                          # ja    0x7f       (aka jnbe)
         0x78, 0x6d,                          # js    0x7f
         0x79, 0x6b,                          # jns   0x7f
         0x7a, 0x69,                          # jp    0x7f       (aka jpe)
         0x7b, 0x67,                          # jnp   0x7f       (aka jpo)
         0x7c, 0x65,                          # jl    0x7f       (aka jnge)
         0x7d, 0x63,                          # jge   0x7f       (aka jnl)
         0x7e, 0x61,                          # jle   0x7f       (aka jng)
         0x7f, 0x5f,                          # jg    0x7f       (aka jnle)
         0xe3, 0x5d,                          # jrcxz 0x7f       (aka jcxz/jecxz)
         0x0f, 0x80, 0x50, 0x56, 0x34, 0x12,  # jo    0x12345678
         0x0f, 0x81, 0x4a, 0x56, 0x34, 0x12,  # jno   0x12345678
         0x0f, 0x82, 0x44, 0x56, 0x34, 0x12,  # jb    0x12345678 (aka jc/jnae)
         0x0f, 0x83, 0x3e, 0x56, 0x34, 0x12,  # jae   0x12345678 (aka jnb/jnc)
         0x0f, 0x84, 0x38, 0x56, 0x34, 0x12,  # je    0x12345678 (aka jz)
         0x0f, 0x85, 0x32, 0x56, 0x34, 0x12,  # jne   0x12345678 (aka jnz)
         0x0f, 0x86, 0x2c, 0x56, 0x34, 0x12,  # jbe   0x12345678 (aka jna)
         0x0f, 0x87, 0x26, 0x56, 0x34, 0x12,  # ja    0x12345678 (aka jnbe)
         0x0f, 0x88, 0x20, 0x56, 0x34, 0x12,  # js    0x12345678
         0x0f, 0x89, 0x1a, 0x56, 0x34, 0x12,  # jns   0x12345678
         0x0f, 0x8A, 0x14, 0x56, 0x34, 0x12,  # jp    0x12345678 (aka jpe)
         0x0f, 0x8B, 0x0e, 0x56, 0x34, 0x12,  # jnp   0x12345678 (aka jpo)
         0x0f, 0x8C, 0x08, 0x56, 0x34, 0x12,  # jl    0x12345678 (aka jnge)
         0x0f, 0x8D, 0x02, 0x56, 0x34, 0x12,  # jge   0x12345678 (aka jnl)
         0x0f, 0x8E, 0xfc, 0x55, 0x34, 0x12,  # jle   0x12345678 (aka jng)
         0x0f, 0x8F, 0xf6, 0x55, 0x34, 0x12,  # jg    0x12345678 (aka jnle)

      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "jo 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x70, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jno 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x71, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jb 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x72, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jae 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x73, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "je 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x74, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jne 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x75, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jbe 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x76, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "ja 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x77, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "js 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x78, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jns 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x79, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7a, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jnp 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7b, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jl 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7c, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jge 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7d, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jle 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7e, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jg 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x7f, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jrcxz 0x7f"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe3, 0x0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x7f
          regs_read: [ rip, rcx ]
          regs_write: [ rip ]
      -
        asm_text: "jo 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x80, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jno 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x81, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jb 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x82, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jae 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x83, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "je 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x84, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jne 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x85, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jbe 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x86, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "ja 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x87, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_CF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "js 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x88, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jns 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x89, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8A, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jnp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8B, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_PF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jl 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8C, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jge 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8D, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jle 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8E, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]
      -
        asm_text: "jg 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x8F, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_IMM
                imm: 0x12345678
            eflags: [ X86_EFLAGS_TEST_OF, X86_EFLAGS_TEST_SF, X86_EFLAGS_TEST_ZF ]
          regs_read: [ rflags, rip ]
          regs_write: [ rip ]

  -
    input:
      name: "Loop according to ECX count, 16-bit decode mode"
      bytes: [
       0xe2, 0x32,   # loop 0x34
       0xe1, 0x30,   # loope 0x34
       0xe0, 0x2e,   # loopne 0x34
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "loop 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe2, 0x00, 0x00, 0x00 ]
          regs_read: [ ip, cx ]
          regs_write: [ ip, cx ]
      -
        asm_text: "loope 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe1, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ ip, cx, flags ]
          regs_write: [ ip, cx ]
      -
        asm_text: "loopne 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe0, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ ip, cx, flags ]
          regs_write: [ ip, cx ]

  -
    input:
      name: "Loop according to ECX count, 32-bit decode mode"
      bytes: [
       0xe2, 0x32,   # loop 0x34
       0xe1, 0x30,   # loope 0x34
       0xe0, 0x2e,   # loopne 0x34
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "loop 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe2, 0x00, 0x00, 0x00 ]
          regs_read: [ eip, ecx ]
          regs_write: [ eip, ecx ]
      -
        asm_text: "loope 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe1, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eip, ecx, eflags ]
          regs_write: [ eip, ecx ]
      -
        asm_text: "loopne 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe0, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ eip, ecx, eflags ]
          regs_write: [ eip, ecx ]

  -
    input:
      name: "Loop according to ECX count, 64-bit decode mode"
      bytes: [
       0xe2, 0x32,         # loop 0x34
       0x48, 0xe2, 0x2f,   # REX.W loop 0x34 (should ignore REX)
       0x67, 0xe2, 0x2c,   # loop 0x34 (with size override)
       0xe1, 0x2a,         # loope 0x34
       0x48, 0xe1, 0x27,   # REX.W loop 0x34 (should ignore REX)
       0x67, 0xe1, 0x24,   # loop 0x34 (with size override)
       0xe0, 0x22,         # loope 0x34
       0x48, 0xe0, 0x1f,   # REX.W loop 0x34 (should ignore REX)
       0x67, 0xe0, 0x1c,   # loop 0x34 (with size override)
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "loop 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe2, 0x00, 0x00, 0x00 ]
          regs_read: [ rip, rcx ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loop 0x34"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe2, 0x00, 0x00, 0x00 ]
          regs_read: [ rip, rcx ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loop 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_ADDRSIZE ]
            opcode: [ 0xe2, 0x00, 0x00, 0x00 ]
          regs_read: [ rip, rcx ]
          regs_write: [ rip, rcx ]      # BUG: should be ecx
      -
        asm_text: "loope 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe1, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loope 0x34"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe1, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loope 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_ADDRSIZE ]
            opcode: [ 0xe1, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]      # BUG: should be ecx
      -
        asm_text: "loopne 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe0, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loopne 0x34"
        details:
          x86:
            rex: 0x48
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe0, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]
      -
        asm_text: "loopne 0x34"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_ADDRSIZE ]
            opcode: [ 0xe0, 0x00, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_TEST_ZF ]
          regs_read: [ rip, rcx, rflags ]
          regs_write: [ rip, rcx ]      # BUG: should be ecx

  -
    input:
      name: "Unconditional jump, 16-bit decode mode"
      bytes: [
         0xeb, 0x10,                     # jmp 0x12
         0xe9, 0x2f, 0x12,               # jmp 0x1234
         0xff, 0xa0, 0x34, 0x12,         # jmp word ptr [bx+si+0x1234]
         0xff, 0xe0,                     # jmp ax
         0xea, 0x34, 0x12, 0x78, 0x56,   # ljmp 0x5678:0x1234
         0xff, 0xa8, 0x34, 0x12,         # jmp far [bx + si + 0x1234]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "jmp 0x12"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xeb, 0x00, 0x00, 0x00 ]
          regs_read: [ ip ]
          regs_write: [ ip ]
      -
        asm_text: "jmp 0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
          regs_read: [ ip ]
          regs_write: [ ip ]
      -
        asm_text: "jmp word ptr [bx + si + 0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ bx, si ]
          regs_write: [ ip ]
      -
        asm_text: "jmp ax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ ax ]
          regs_write: [ ip ]
      -
        asm_text: "ljmp 0x5678:0x1234"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xea, 0x00, 0x00, 0x00 ]
          regs_read: [ ]
          regs_write: [ ip ]
      -
        asm_text: "ljmp [bx + si + 0x1234]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ ]
          regs_write: [ ip ]

  -
    input:
      name: "Unconditional jump, 32-bit decode mode"
      bytes: [
         0xeb, 0x10,                                 # jmp 0x12
         0xe9, 0x71, 0x56, 0x34, 0x12,               # jmp 0x1234
         0xff, 0xa0, 0x78, 0x56, 0x34, 0x12,         # jmp dword ptr [eax+0x12345678]
         0xff, 0xe0,                                 # jmp eax
         0xea, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56,   # ljmp 0x5678:0x12345678
         0xff, 0xa8, 0x78, 0x56, 0x34, 0x12,         # jmp far [eax + 0x1234]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "jmp 0x12"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xeb, 0x00, 0x00, 0x00 ]
          regs_read: [ eip ]
          regs_write: [ eip ]
      -
        asm_text: "jmp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
          regs_read: [ eip ]
          regs_write: [ eip ]
      -
        asm_text: "jmp dword ptr [eax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ eax ]
          regs_write: [ eip ]
      -
        asm_text: "jmp eax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ eax ]
          regs_write: [ eip ]
      -
        asm_text: "ljmp 0x5678:0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xea, 0x00, 0x00, 0x00 ]
          regs_read: [ ]
          regs_write: [ eip ]
      -
        asm_text: "jmp ptr [eax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ eax ]
          regs_write: [ eip ]

  -
    input:
      name: "Unconditional jump, 64-bit decode mode"
      bytes: [
         0xeb, 0x10,                                 # jmp 0x12
         0xe9, 0x71, 0x56, 0x34, 0x12,               # jmp 0x12345678
         0xff, 0xa0, 0x78, 0x56, 0x34, 0x12,         # jmp qword ptr [rax+0x12345678]
         0xff, 0xe0,                                 # jmp rax
         0xff, 0xa8, 0x78, 0x56, 0x34, 0x12,         # jmp ptr far [rax + 0x12345678]
         0x48, 0xff, 0xa8, 0x78, 0x56, 0x34, 0x12,   # REX.W jmp ptr far [rax + 0x12345678]
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "jmp 0x12"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xeb, 0x00, 0x00, 0x00 ]
          regs_read: [ rip ]
          regs_write: [ rip ]
      -
        asm_text: "jmp 0x12345678"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xe9, 0x00, 0x00, 0x00 ]
          regs_read: [ rip ]
          regs_write: [ rip ]
      -
        asm_text: "jmp qword ptr [rax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ rax ]
          regs_write: [ rip ]
      -
        asm_text: "jmp rax"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ rax ]
          regs_write: [ rip ]
      -
        asm_text: "jmp ptr [rax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ rax ]
          regs_write: [ rip ]
      -
        asm_text: "ljmp [rax + 0x12345678]"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0xff, 0x00, 0x00, 0x00 ]
          regs_read: [ rax ]
          regs_write: [ rip ]

  -
    input:
      name: "System call instructions, 16-bit decode"
      bytes: [
         0x0f, 0x34,            # sysenter
         0x0f, 0x35,            # sysexit
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "sysenter"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x34, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_IF ]
          regs_read: [ ]
          regs_write: [ ip, sp, flags ]
      -
        asm_text: "sysexit"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x35, 0x00, 0x00 ]
            eflags: [ ]
          regs_read: [ cx, dx ]
          regs_write: [ ip, sp ]

  -
    input:
      name: "System call instructions, 32-bit decode"
      bytes: [
         0x0f, 0x34,            # sysenter
         0x0f, 0x35,            # sysexit
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "sysenter"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x34, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_IF ]
          regs_read: [ ]
          regs_write: [ eip, esp, eflags ]
      -
        asm_text: "sysexit"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x35, 0x00, 0x00 ]
            eflags: [ ]
          regs_read: [ ecx, edx ]
          regs_write: [ eip, esp ]

  -
    input:
      name: "System call instructions, 64-bit decode"
      bytes: [
         0x0f, 0x05,            # syscall
         0x0f, 0x34,            # sysenter
         0x0f, 0x35,            # sysexit
         0x40, 0x0f, 0x35,      # REX.W sysexit
         0x0f, 0x07,            # sysret
         0x40, 0x0f, 0x07,      # REX.W sysret
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "syscall"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x05, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_RF ] # should write all flags
          regs_read: [ ]
          regs_write: [ rip, rcx, r11, rflags ]
      -
        asm_text: "sysenter"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x34, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_IF ]
          regs_read: [ ]
          regs_write: [ rip, rsp, rflags ]
      -
        asm_text: "sysexit"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x35, 0x00, 0x00 ]
            eflags: [ ]
          regs_read: [ rcx, rdx ]
          regs_write: [ rip, rsp ]
      -
        asm_text: "sysexit"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x35, 0x00, 0x00 ]
            eflags: [ ]
          regs_read: [ rcx, rdx ]
          regs_write: [ rip, rsp ]
      -
        asm_text: "sysret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x07, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_RF ]
          regs_read: [ rcx, r11 ]
          regs_write: [ rip, rflags ]
      -
        asm_text: "sysret"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0x07, 0x00, 0x00 ]
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_TF, X86_EFLAGS_MODIFY_IF, X86_EFLAGS_MODIFY_DF, X86_EFLAGS_MODIFY_NT, X86_EFLAGS_MODIFY_RF ]
          regs_read: [ rcx, r11 ]
          regs_write: [ rip, rflags ]

  -
    input:
      name: "Compare and exchange, 16-bit decode mode"
      bytes: [
         0x0f, 0xb0, 0xfe,                  # cmpxchg dh, bh
         0x0f, 0xb0, 0xb6, 0x34, 0x12,      # cmpxchg byte ptr [bp + 0x1234], dh
         0x0f, 0xb1, 0xfe,                  # cmpxchg si, di
         0x0f, 0xb1, 0xb6, 0x34, 0x12,      # cmpxchg byte ptr [bp + 0x1234], si
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_16 ]
    expected:
      insns:
      -
        asm_text: "cmpxchg dh, bh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_WRITE      # BUG: dh is also read
              -
                type: X86_OP_REG
                reg: bh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, bh ]      # BUG: dh is also read
          regs_write: [ al, flags, dh ]
      -
        asm_text: "cmpxchg byte ptr [bp + 0x1234], dh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_MEM
                mem_base: bp
                mem_disp: 0x1234
                size: 1
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, bp, dh ]
          regs_write: [ al, flags ]
      -
        asm_text: "cmpxchg si, di"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_REG
                reg: si
                access: CS_AC_WRITE      # BUG: si is also read
              -
                type: X86_OP_REG
                reg: di
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ ax, di ]
          regs_write: [ ax, flags, si ]
      -
        asm_text: "cmpxchg word ptr [bp + 0x1234], si"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            addr_size: 2
            operands:
              -
                type: X86_OP_MEM
                mem_base: bp
                mem_disp: 0x1234
                size: 2
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: si
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF,  ]
          regs_read: [ ax, bp, si ]
          regs_write: [ ax, flags ]

  -
    input:
      name: "Compare and exchange, 32-bit decode mode"
      bytes: [
         0x0f, 0xb0, 0xfe,                          # cmpxchg dh, bh
         0x0f, 0xb0, 0xb6, 0x34, 0x12, 0x0, 0x0,    # cmpxchg byte ptr [esi + 0x1234], dh
         0x0f, 0xb1, 0xfe,                          # cmpxchg esi, edi
         0x0f, 0xb1, 0xb6, 0x34, 0x12, 0x0, 0x0     # cmpxchg byte ptr [esi + 0x1234], esi
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_32 ]
    expected:
      insns:
      -
        asm_text: "cmpxchg dh, bh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            operands:
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_WRITE      # BUG: dh is also read
              -
                type: X86_OP_REG
                reg: bh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, bh ]      # BUG: dh is also read
          regs_write: [ al, eflags, dh ]
      -
        asm_text: "cmpxchg byte ptr [esi + 0x1234], dh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_MEM
                mem_base: esi
                mem_disp: 0x1234
                size: 1
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, esi, dh ]
          regs_write: [ al, eflags ]
      -
        asm_text: "cmpxchg esi, edi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            operands:
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_WRITE      # BUG: esi is also read
              -
                type: X86_OP_REG
                reg: edi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ eax, edi ]
          regs_write: [ eax, eflags, esi ]
      -
        asm_text: "cmpxchg dword ptr [esi + 0x1234], esi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            addr_size: 4
            operands:
              -
                type: X86_OP_MEM
                mem_base: esi
                mem_disp: 0x1234
                size: 4
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF,  ]
          regs_read: [ eax, esi ]
          regs_write: [ eax, eflags ]

  -
    input:
      name: "Compare and exchange, 64-bit decode mode"
      bytes: [
         0x0f, 0xb0, 0xfe,                                # cmpxchg dh, bh
         0x0f, 0xb0, 0xb6, 0x34, 0x12, 0x0, 0x0,          # cmpxchg byte ptr [rsi + 0x1234], dh
         0x0f, 0xb1, 0xfe,                                # cmpxchg esi, edi
         0x0f, 0xb1, 0xb6, 0x34, 0x12, 0x0, 0x0,          # cmpxchg byte ptr [rsi + 0x1234], esi
         0x40, 0x0f, 0xb1, 0xfe,                          # REX.W cmpxchg rsi, rdi
         0x40, 0x0f, 0xb1, 0xb6, 0x34, 0x12, 0x0, 0x0     # REX.W cmpxchg qword ptr [rsi + 0x1234], rsi
      ]
      arch: "x86"
      options: [ CS_OPT_DETAIL, CS_MODE_64 ]
    expected:
      insns:
      -
        asm_text: "cmpxchg dh, bh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            operands:
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_WRITE      # BUG: dh is also read
              -
                type: X86_OP_REG
                reg: bh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, bh ]      # BUG: dh is also read
          regs_write: [ al, rflags, dh ]
      -
        asm_text: "cmpxchg byte ptr [rsi + 0x1234], dh"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb0, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_MEM
                mem_base: rsi
                mem_disp: 0x1234
                size: 1
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: dh
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ al, rsi, dh ]
          regs_write: [ al, rflags ]
      -
        asm_text: "cmpxchg esi, edi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            operands:
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_WRITE      # BUG: esi is also read
              -
                type: X86_OP_REG
                reg: edi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ eax, edi ]
          regs_write: [ eax, rflags, esi ]
      -
        asm_text: "cmpxchg dword ptr [rsi + 0x1234], esi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_MEM
                mem_base: rsi
                mem_disp: 0x1234
                size: 4
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF,  ]
          regs_read: [ eax, rsi, esi ]
          regs_write: [ eax, rflags ]
      -
        asm_text: "cmpxchg esi, edi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            operands:
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_WRITE      # BUG: esi is also read
              -
                type: X86_OP_REG
                reg: edi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF  ]
          regs_read: [ eax, edi ]
          regs_write: [ eax, rflags, esi ]
      -
        asm_text: "cmpxchg dword ptr [rsi + 0x1234], esi"
        details:
          x86:
            prefix: [ X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0, X86_PREFIX_0 ]
            opcode: [ 0x0f, 0xb1, 0x0, 0x0 ]
            addr_size: 8
            operands:
              -
                type: X86_OP_MEM
                mem_base: rsi
                mem_disp: 0x1234
                size: 4
                access: CS_AC_READ  # BUG: memory operand is also written
              -
                type: X86_OP_REG
                reg: esi
                access: CS_AC_READ
            eflags: [ X86_EFLAGS_MODIFY_AF, X86_EFLAGS_MODIFY_CF, X86_EFLAGS_MODIFY_OF, X86_EFLAGS_MODIFY_PF, X86_EFLAGS_MODIFY_SF, X86_EFLAGS_MODIFY_ZF,  ]
          regs_read: [ eax, rsi, esi ]
          regs_write: [ eax, rflags ]
