(* Prefixed with 'A' *)
type addressing_mode =
| AA (* Direct address, no ModRM. *)
| AB (* VEX.vvvv selects a general register. *)
| AC (* ModRM.reg selects a control register. *)
| AD (* ModRM.reg selects a debug register. *)
| AE (* ModRM is either a general register or a memory location. *)
| AF (* EFLAGS/RFLAGS register. *)
| AG (* ModRM.reg is a general register. *)
| AH (* VEX.vvvv selects an XMM or YMM register based upon operand type. *)
| AI (* Immediate. *)
| AJ (* Relative jump offset. *)
| AL (* Upper 4 bits of 8-bit immediate selects an XMM or YMM register. *)
| AM (* ModRM must refer to memory. *)
| AN (* ModRM must refer to an MMX register, not memory. *)
| AO (* An offset, no ModRM.  Depends upon operand size. *)
| AP (* ModRM must refer to an MMX register, not memory. *)
| AQ (* ModRM is either an MMX register or a memory address. *)
| AR (* ModRM must refer to a general register, not memory. *)
| AS (* ModRM.reg refers to a segment register. *)
| AU (* ModRM must refer to an XMM register, not memory. *)
| AV (* ModRM.reg refers to an XMM register. *)
| AW (* ModRM refers to an XMM or YMM register, or memory. *)
| AX (* Implicit memory reference to DS:rSI. *)
| AY (* Implicit memory reference to ES:rDI. *)

type operand_type =
| Oa  (* FarTarget immediate: two words or dwords, depending upon OPSIZE *)
| Ob  (* Byte. *)
| Oc  (* Byte or word. Specified by OPSIZE. ??? *)
| Od  (* Dword. *)
| Odq (* Double qword. *)
| Op  (* 32/48/80-bit pointer. Specified by OPSIZE. ??? *)
| Opd (* XMM/YMM register, double precision. *)
| Opi (* MMX register. *)
| Ops (* XMM/YMM register, single precision. *)
| Oq  (* Qword. *)
| Oqq (* Quadruple qword. *)
| Os  (* 48/80-bit pseudo descriptor. Specified by OPSIZE??? *)
| Osd (* Scalar element of XMM double-precision. *)
| Oss (* Scalar element of XMM single-precision. *)
| Osi (* 32-bit integer register. *)
| Ov  (* Word/dword/qword (in 64-bit mode).  Specified by OPSIZE. *)
| Ow  (* Word. *)
| Ox  (* Double or quadruple qword. Specified by OPSIZE. *)
| Oy  (* Dword/qword (in 64-bit mode).  Specified by OPSIZE. *)
| Oz  (* Word/dword. Also a dword in 64-bit mode.  Specified by OPSIZE. *)

