Module X86_ast
Structured representation of Intel assembly language (32 and 64 bit).
type condition
=
|
L
|
GE
|
LE
|
G
|
B
|
AE
|
BE
|
A
|
E
|
NE
|
O
|
NO
|
S
|
NS
|
P
|
NP
type rounding
=
|
RoundUp
|
RoundDown
|
RoundNearest
|
RoundTruncate
type constant
=
|
Const of int64
|
ConstThis
|
ConstLabel of string
|
ConstAdd of constant * constant
|
ConstSub of constant * constant
type data_type
=
|
NONE
|
REAL4
|
REAL8
|
BYTE
|
WORD
|
DWORD
|
QWORD
|
OWORD
|
NEAR
|
PROC
type reg64
=
|
RAX
|
RBX
|
RCX
|
RDX
|
RSP
|
RBP
|
RSI
|
RDI
|
R8
|
R9
|
R10
|
R11
|
R12
|
R13
|
R14
|
R15
type reg8h
=
|
AH
|
BH
|
CH
|
DH
type registerf
=
|
XMM of int
|
TOS
|
ST of int
type arch
=
|
X64
|
X86
type addr
=
{
arch : arch;
typ : data_type;
idx : reg64;
scale : int;
base : reg64 option;
sym : string option;
displ : int;
}
Addressing modes: displ + sym + base + idx * scale (if scale = 0, idx is ignored and base must be None)
type arg
=
|
Imm of int64
Operand is an immediate constant integer
|
Sym of string
Address of a symbol (absolute address except for call/jmp target where it is interpreted as a relative displacement
|
Reg8L of reg64
|
Reg8H of reg8h
|
Reg16 of reg64
|
Reg32 of reg64
|
Reg64 of reg64
|
Regf of registerf
|
Mem of addr
|
Mem64_RIP of data_type * string * int
type instruction
=
|
ADD of arg * arg
|
ADDSD of arg * arg
|
AND of arg * arg
|
ANDPD of arg * arg
|
BSWAP of arg
|
CALL of arg
|
CDQ
|
CMOV of condition * arg * arg
|
CMP of arg * arg
|
COMISD of arg * arg
|
CQO
|
CVTSD2SI of arg * arg
|
CVTSD2SS of arg * arg
|
CVTSI2SD of arg * arg
|
CVTSS2SD of arg * arg
|
CVTTSD2SI of arg * arg
|
DEC of arg
|
DIVSD of arg * arg
|
FABS
|
FADD of arg
|
FADDP of arg * arg
|
FCHS
|
FCOMP of arg
|
FCOMPP
|
FCOS
|
FDIV of arg
|
FDIVP of arg * arg
|
FDIVR of arg
|
FDIVRP of arg * arg
|
FILD of arg
|
FISTP of arg
|
FLD of arg
|
FLD1
|
FLDCW of arg
|
FLDLG2
|
FLDLN2
|
FLDZ
|
FMUL of arg
|
FMULP of arg * arg
|
FNSTCW of arg
|
FNSTSW of arg
|
FPATAN
|
FPTAN
|
FSIN
|
FSQRT
|
FSTP of arg
|
FSUB of arg
|
FSUBP of arg * arg
|
FSUBR of arg
|
FSUBRP of arg * arg
|
FXCH of arg
|
FYL2X
|
HLT
|
IDIV of arg
|
IMUL of arg * arg option
|
INC of arg
|
J of condition * arg
|
JMP of arg
|
LEA of arg * arg
|
LEAVE
|
MOV of arg * arg
|
MOVAPD of arg * arg
|
MOVLPD of arg * arg
|
MOVSD of arg * arg
|
MOVSS of arg * arg
|
MOVSX of arg * arg
|
MOVSXD of arg * arg
|
MOVZX of arg * arg
|
MULSD of arg * arg
|
NEG of arg
|
NOP
|
OR of arg * arg
|
POP of arg
|
PUSH of arg
|
RET
|
ROUNDSD of rounding * arg * arg
|
SAL of arg * arg
|
SAR of arg * arg
|
SET of condition * arg
|
SHR of arg * arg
|
SQRTSD of arg * arg
|
SUB of arg * arg
|
SUBSD of arg * arg
|
TEST of arg * arg
|
UCOMISD of arg * arg
|
XCHG of arg * arg
|
XOR of arg * arg
|
XORPD of arg * arg
type asm_line
=
|
Ins of instruction
|
Align of bool * int
|
Byte of constant
|
Bytes of string
|
Comment of string
|
Global of string
|
Long of constant
|
NewLabel of string * data_type
|
Quad of constant
|
Section of string list * string option * string list
|
Space of int
|
Word of constant
|
External of string * data_type
|
Mode386
|
Model of string
|
Cfi_adjust_cfa_offset of int
|
Cfi_endproc
|
Cfi_startproc
|
File of int * string
|
Indirect_symbol of string
|
Loc of int * int * int
|
Private_extern of string
|
Set of string * constant
|
Size of string * constant
|
Type of string * string
type asm_program
= asm_line list