Files
OSACA/osaca/data/isa/x86.yml

4430 lines
105 KiB
YAML

osaca_version: 0.3.4
isa: "x86"
# Contains all operand-irregular instruction forms OSACA supports for x86.
# Operand-regular for a x86 AT&T instruction form with N operands in the shape of
# mnemonic op1 ... opN
# means that opN is the only destination operand and op1 to op(N-1) are source operands.
instruction_forms:
- name: adc
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: adc
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: add
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
operation: "op2['value'] += op1['value']"
- name: add
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: add
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: add
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: divsd
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: addsd
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [addss, addps, addpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [addsubps, addsubpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [aesdec, aesdeclast, aesenc, aesenclast]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: not
operands:
- class: "register"
name: "gpr"
source: true
destination: true
- name: not
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: or
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: or
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: or
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: or
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: and
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: and
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: and
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: and
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: andn
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
- name: [blendvps, blendvpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
hidden_operands:
- class: "register"
name: "xmm0"
source: true
destination: false
- name: blsr
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
- name: bsf
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
- name: bsr
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
- name: bts
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: bts
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: bts
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: bts
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: cld
operands: []
hidden_operands:
- class: "flag"
name: "DF"
source: false
destination: true
- name: cbtw
operands: []
hidden_operands:
- class: "register"
name: "al"
source: true
destination: false
- class: "register"
name: "ax"
source: false
destination: true
- name: [cwtl, cwde]
operands: []
hidden_operands:
- class: "register"
name: "ax"
source: true
destination: false
- class: "register"
name: "eax"
source: false
destination: true
- name: cwtd
operands: []
hidden_operands:
- class: "register"
name: "ax"
source: true
destination: false
- class: "register"
name: "dx"
source: false
destination: true
- class: "register"
name: "ax"
source: false
destination: true
- name: cltd
operands: []
hidden_operands:
- class: "register"
name: "eax"
source: true
destination: false
- class: "register"
name: "edx"
source: false
destination: true
- class: "register"
name: "eax"
source: false
destination: true
- name: [cqo, cqto]
operands: []
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: false
- class: "register"
name: "rdx"
source: false
destination: true
- name: [cltq, cdqe]
operands: []
hidden_operands:
- class: "register"
name: "eax"
source: true
destination: false
- class: "register"
name: "rax"
source: false
destination: true
- name: cqtq
operands: []
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: false
- class: "register"
name: "rdx"
source: false
destination: true
- class: "register"
name: "rax"
source: false
destination: true
- name: [ja, jbe, jna, jnbe]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: [jae, jb, jc, jnae, jnb, jnc]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: [je, jne, jnz, jz]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: [jg, jle, jng, jnle]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: [jge, jl, jnge, jnl]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: [jno, jo]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: [jnp, jp, jpe, jpo]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: [jns, js]
operands:
- class: identifier
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: [seta, setbe, setna, setnbe]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: [setae, setb, setc, setnae, setnb, setnc]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: [sete, setne, setnz, setz]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: [setg, setle, setng, setnle]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: [setge, setl, setnge, setnl]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: [setno, seto]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: [setnp, setp, setpe, setpo]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: [setns, sets]
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmova
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmova
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmova
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovae
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovae
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovae
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovb
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovbe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovbe
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovbe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovc
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovc
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovc
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmove
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmove
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmove
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovg
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovge
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovge
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovge
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovl
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovl
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovl
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovle
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovle
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovle
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovna
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovna
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovna
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnae
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnae
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnae
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnb
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnbe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnbe
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnbe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnc
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnc
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovnc
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: true
destination: false
- name: cmovne
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovne
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovne
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovng
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovng
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovng
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnge
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnge
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnge
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnl
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnl
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnl
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnle
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnle
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnle
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovno
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovno
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovno
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovnp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovnp
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovnp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovns
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovns
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovns
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovnz
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnz
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovnz
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovo
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovo
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovo
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: true
destination: false
- name: cmovp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovp
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpe
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpe
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpo
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpo
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovpo
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "PF"
source: true
destination: false
- name: cmovs
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovs
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovs
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "SF"
source: true
destination: false
- name: cmovz
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovz
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmovz
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: false
destination: true
hidden_operands:
- class: "flag"
name: "ZF"
source: true
destination: false
- name: cmp
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: cmp
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: cmp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: cmp
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: cmpxchg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: cmpxchg
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: cmpxchg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: dec
operands:
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
operation: "op1['value'] -= 1"
- name: dec
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: imul
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- name: imul
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "CF"
source: false
destination: true
- class: "flag"
name: "OF"
source: false
destination: true
- name: inc
operands:
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
operation: "op1['value'] += 1"
- name: inc
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: lea
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: register
name: "gpr"
source: false
destination: true
# TODO
#operation: "op2['value'] = None if None in [op1['offset'], op1['base']] else op1['offset'] + op1['base'] + op1['index'] * op1['scale']"
- name: ldmxcsr
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
# TODO sets MXCSR
- name: mov
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: false
destination: true
operation: "op2['name'] = op1['name']; op2['value'] = op1['value']"
- name: [maxpd, maxps, maxsd, maxss, minpd, minps, minsd, minss]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: mulsd
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: mulss
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [mulpd, mulps]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [packssdw, packsswb, packusdw, packuswb]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [packssdw, packsswb, packusdw, packuswb]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [paddb, paddw, paddd, paddq, paddsb, paddsw, paddusb, paddusw]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [paddb, paddw, paddd, paddq, paddsb, paddsw, paddusb, paddusw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pand, por, pandn]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pxor]
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pand, por, pandn]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pxor]
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pavgb, pavgw]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pavgb, pavgw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pcmpeqb, pcmpeqw, pcmpeqd, pcmpeqq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pcmpeqb, pcmpeqw, pcmpeqd, pcmpeqq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pcmpgtb, pcmpgtw, pcmpgtd, pcmpgtq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pcmpgtb, pcmpgtw, pcmpgtd, pcmpgtq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pmaddubsw
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: pmaddubsw
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pmaddwd
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: pmaddwd
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pmaxsb, pmaxsw, pmaxsd, pmaxsq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pmaxsb, pmaxsw, pmaxsd, pmaxsq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pmaxub, pmaxuw, pmaxud, pmaxuq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pmaxub, pmaxuw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pminsb, pminsw, pminsd, pminsq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pminsb, pminsw, pminsd, pminsq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [pminub, pminuw, pminud, pminuq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pminub, pminuw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pmuldq
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pmulhrsw, pmulhuw, pmulhw, pmullw]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [pmulhrsw, pmulhuw, pmulhw, pmullw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pmuludq
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: pmuludq
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: psadbw
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: psadbw
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pshufb
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: pshufb
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psignb, psignw, psignd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psignb, psignw, psignd]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psllw, pslld, psllq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psllw, pslld, psllq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psllw, pslld, psllq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psllw, pslld, psllq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: pslldq
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psraw, psrad, psraq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psraw, psrad, psraq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psraw, psrad, psraq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psraw, psrad, psraq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psrlw, psrld, psrlq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psrlw, psrld, psrlq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psrlw, psrld, psrlq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psrlw, psrld, psrlq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: psrldq
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psubb, psubw, psubd, psubq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psubb, psubw, psubd, psubq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psubsb, psubsw]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psubsb, psubsw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [psubusb, psubusw]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [psubusb, psubusw]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [punpckhbw, punpckhwd, punpckhdq, punpckhqdq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [punpckhbw, punpckhwd, punpckhdq, punpckhqdq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [punpcklbw, punpcklwd, punpckldq, punpcklqdq]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [punpcklbw, punpcklwd, punpckldq, punpcklqdq]
operands:
- class: "register"
name: "mm"
source: true
destination: false
- class: "register"
name: "mm"
source: true
destination: true
- name: [sha1msg2, sha1nexte]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: push
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
hidden_operands:
- class: "memory"
base: {name: 'rsp'}
offset: ~
index: ~
scale: 1
source: false
destination: true
- class: "register"
name: "rsp"
source: true
destination: true
- name: push
operands:
- class: "register"
name: "gpr"
source: true
destination: false
hidden_operands:
- class: "memory"
base: {name: 'rsp'}
offset: ~
index: ~
scale: 1
source: false
destination: true
- class: "register"
name: "rsp"
source: true
destination: true
- name: pop
operands:
- class: "register"
name: "gpr"
source: false
destination: true
hidden_operands:
- class: "memory"
base: {name: 'rsp'}
offset: ~
index: ~
scale: 1
source: true
destination: false
- class: "register"
name: "rsp"
source: true
destination: true
- name: pushfq
operands: []
hidden_operands:
- class: "memory"
base: {name: 'rsp'}
offset: ~
index: ~
scale: 1
source: false
destination: true
- class: "register"
name: "rsp"
source: true
destination: true
# All of EFLAGS and RFLAGS, without VM and RF
- class: "flag"
name: "CF"
source: true
destination: false
- class: "flag"
name: "PF"
source: true
destination: false
- class: "flag"
name: "AF"
source: true
destination: false
- class: "flag"
name: "ZF"
source: true
destination: false
- class: "flag"
name: "SF"
source: true
destination: false
- class: "flag"
name: "TF"
source: true
destination: false
- class: "flag"
name: "IF"
source: true
destination: false
- class: "flag"
name: "DF"
source: true
destination: false
- class: "flag"
name: "OF"
source: true
destination: false
- class: "flag"
name: "IOPL"
source: true
destination: false
- class: "flag"
name: "NT"
source: true
destination: false
- class: "flag"
name: "AC"
source: true
destination: false
- class: "flag"
name: "VIF"
source: true
destination: false
- class: "flag"
name: "VIP"
source: true
destination: false
- class: "flag"
name: "ID"
source: true
destination: false
- name: [sar, sal, shl, shr]
operands:
- class: "register"
name: "gpr"
source: true
destination: true
- name: sbb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: true
destination: true
operation: "op2['value'] -= (op1['value'])" # + CF['value'])" TODO
- name: sub
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
operation: "op2['value'] -= op1['value']"
- name: sub
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: sub
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: sub
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: false
destination: true
- name: [subsd, subpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [subss, subps]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: test
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: test
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: test
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: test
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: [unpcklps, unpcklpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: vldmxcsr
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
# TODO sets MXCSR
- name: [vfmadd132pd, vfmadd213pd, vfmadd231pd]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmadd132ps, vfmadd213ps, vfmadd231ps]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmadd132sd, vfmadd213sd, vfmadd231sd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [vfmadd132ss, vfmadd213ss, vfmadd231ss]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [vfmaddsub132pd, vfmaddsub213pd, vfmaddsub231pd]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmaddsub132ps, vfmaddsub213ps, vfmaddsub231ps]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmsub132pd, vfmsub213pd, vfmsub231pd]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmsub132ps, vfmsub213ps, vfmsub231ps]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmsub132sd, vfmsub213sd, vfmsub231sd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [vfmsub132ss, vfmsub213ss, vfmsub231ss]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [vfmsubadd132pd, vfmsubadd213pd, vfmsubadd231pd]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vfmsubadd132ps, vfmsubadd213ps, vfmsubadd231ps]
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: true
- name: [vptest, ptest]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: vptest
operands:
- class: "register"
name: "ymm"
source: true
destination: false
- class: "register"
name: "ymm"
source: true
destination: false
hidden_operands:
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- name: vzeroall
breaks_dependency_on_equal_operands: true
operands: []
hidden_operands:
- class: "register"
name: "ymm0"
source: false
destination: true
- class: "register"
name: "ymm1"
source: false
destination: true
- class: "register"
name: "ymm2"
source: false
destination: true
- class: "register"
name: "ymm3"
source: false
destination: true
- class: "register"
name: "ymm4"
source: false
destination: true
- class: "register"
name: "ymm5"
source: false
destination: true
- class: "register"
name: "ymm6"
source: false
destination: true
- class: "register"
name: "ymm7"
source: false
destination: true
- class: "register"
name: "ymm8"
source: false
destination: true
- class: "register"
name: "ymm9"
source: false
destination: true
- class: "register"
name: "ymm10"
source: false
destination: true
- class: "register"
name: "ymm11"
source: false
destination: true
- class: "register"
name: "ymm12"
source: false
destination: true
- class: "register"
name: "ymm13"
source: false
destination: true
- class: "register"
name: "ymm14"
source: false
destination: true
- class: "register"
name: "ymm15"
source: false
destination: true
- name: vzeroupper
operands: []
# TODO not quite correct:
# only upper half is zeroed, not the xmm part
hidden_operands:
- class: "register"
name: "ymm0"
source: false
destination: true
- class: "register"
name: "ymm1"
source: false
destination: true
- class: "register"
name: "ymm2"
source: false
destination: true
- class: "register"
name: "ymm3"
source: false
destination: true
- class: "register"
name: "ymm4"
source: false
destination: true
- class: "register"
name: "ymm5"
source: false
destination: true
- class: "register"
name: "ymm6"
source: false
destination: true
- class: "register"
name: "ymm7"
source: false
destination: true
- class: "register"
name: "ymm8"
source: false
destination: true
- class: "register"
name: "ymm9"
source: false
destination: true
- class: "register"
name: "ymm10"
source: false
destination: true
- class: "register"
name: "ymm11"
source: false
destination: true
- class: "register"
name: "ymm12"
source: false
destination: true
- class: "register"
name: "ymm13"
source: false
destination: true
- class: "register"
name: "ymm14"
source: false
destination: true
- class: "register"
name: "ymm15"
source: false
destination: true
- name: [unpckhps, unpckhpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [andps, andpd, andnps, andnpd, orps, orpd]
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [xorps, xorpd]
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "xmm"
source: true
destination: false
- class: "register"
name: "xmm"
source: true
destination: true
- name: [shl, shr, shlq, shrq]
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
- name: [vxorpd, vxorps]
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: true
destination: false
- class: "register"
name: "*"
source: false
destination: true
- name: xor
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
- name: xor
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: xor
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
- name: xor
operands:
- class: "immediate"
imd: "int"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: false
- name: xor
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true