Browse Source

* moved to oldasm

peter 26 years ago
parent
commit
1fa9168d0f
1 changed files with 0 additions and 2254 deletions
  1. 0 2254
      compiler/i386.pas

+ 0 - 2254
compiler/i386.pas

@@ -1,2254 +0,0 @@
-{
-    $Id$
-    Copyright (c) 1995-98 by Florian Klaempfl
-
-    This unit implements an types and classes specific for the i386+
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ****************************************************************************
-}
-unit i386;
-
-  interface
-
-  { By default we want everything }
-  {$define ATTOP}
-  {$define INTELOP}
-  {$define ITTABLE}
-
-  { We Don't need the intel style opcodes if we don't have a intel
-    reader or generator (PFV) }
-  {$ifdef NORA386INT}
-    {$ifdef NOAG386NSM}
-      {$ifdef NOAG386INT}
-        {$undef INTELOP}
-      {$endif}
-    {$endif}
-  {$endif}
-
-  { We Don't need the AT&T style opcodes if we don't have a AT&T
-    reader or generator (PFV) }
-  {$ifdef NORA386ATT}
-    {$ifdef NOAG386ATT}
-      {$undef ATTOP}
-    {$endif}
-  {$endif}
-
-  { We Don't need the it table if no assembler parser is selected }
-  {$define ITTABLE}
-  {$ifdef NORA386INT}
-    {$ifdef NORA386ATT}
-      {.$undef ITTABLE}
-    {$endif}
-  {$endif}
-
-    uses
-      cobjects,aasm;
-
-    type
-       tcpuflags = (cf_registers64);
-
-    const
-      extended_size = 10;
-
-      ao_unknown = $0;
-      ao_none = $ff;
-
-      ao_reg8  = $1;  { 8 bit reg }
-      ao_reg16 = $2;  { 16 bit reg }
-      ao_reg32 = $4;  { 32 bit reg }
-      ao_reg     = (ao_reg8 or ao_reg16 or ao_reg32);
-      ao_wordreg = (ao_reg16 or ao_reg32);
-
-      ao_acc    = $8;  { Accumulat or  %al  or  %ax  or  %eax }
-      ao_sreg2  = $10; { 2 bit segment register }
-      ao_sreg3  = $20; { 3 bit segment register }
-      ao_mmxreg = $40; { mmx register }
-
-      ao_floatacc      = $80;  { Float stack top %st(0) }
-      ao_otherfloatreg = $100; { Float register different from st0 }
-      ao_floatreg = ao_otherfloatreg or ao_floatacc; { all float regs }
-
-      ao_imm8  = $200;       { 8 bit immediate }
-      ao_imm8S = $400;       { 8 bit immediate sign extended }
-      ao_imm16 = $800;       { 16 bit immediate }
-      ao_imm32 = $1000;      { 32 bit immediate }
-      ao_imm1  = $2000;      { 1 bit immediate }
-      ao_imm   = (ao_imm8 or ao_imm8S or ao_imm16 or ao_imm32);
-      ao_immunknown = ao_imm32; { for  unknown expressions }
-
-      ao_disp8   = $4000;     { 8 bit displacement (for  jumps) }
-      ao_disp16  = $8000;     { 16 bit displacement }
-      ao_disp32  = $10000;    { 32 bit displacement }
-      ao_disp    = (ao_disp8 or ao_disp16 or ao_disp32);
-      ao_dispunknown = ao_disp32;
-
-      ao_mem8      = $20000;
-      ao_mem16     = $40000;
-      ao_mem32     = $80000;
-      ao_baseindex = $100000;
-      ao_mem     = (ao_disp or ao_mem8 or ao_mem16 or ao_mem32 or ao_baseindex);
-      ao_wordmem = (ao_mem16 or ao_mem32 or ao_disp or ao_baseindex);
-      ao_bytemem = (ao_mem8 or ao_disp or ao_baseindex);
-
-      ao_inoutportreg = $200000; { register to hold in/out port addr = dx }
-      ao_shiftcount   = $400000; { register to hold shift cound = cl }
-      ao_control = $800000;  { Control register }
-      ao_debug   = $1000000; { Debug register }
-      ao_test    = $2000000; { Test register }
-
-      ao_abs32   = $4000000;
-      ao_jumpabsolute = $8000000;
-
-      ao_implicitregister = (ao_inoutportreg or ao_shiftcount or ao_acc or ao_floatacc);
-
-    type
-       tasmop = (
-         A_MOV,A_MOVZX,A_MOVSX,A_LABEL,A_ADD,
-         A_CALL,A_IDIV,A_IMUL,A_JMP,A_LEA,A_MUL,A_NEG,A_NOT,
-         A_POP,A_POPAD,A_PUSH,A_PUSHAD,A_RET,A_SUB,A_XCHG,A_XOR,
-         A_FILD,A_CMP,A_JZ,A_INC,A_DEC,A_SETE,A_SETNE,A_SETL,
-         A_SETG,A_SETLE,A_SETGE,A_JE,A_JNE,A_JL,A_JG,A_JLE,A_JGE,
-         A_OR,A_FLD,A_FADD,A_FMUL,A_FSUB,A_FDIV,A_FCHS,A_FLD1,
-         A_FIDIV,A_JNZ,A_FSTP,A_AND,A_JNO,A_NOTH,A_NONE,
-         A_ENTER,A_LEAVE,A_CLD,A_MOVS,A_REP,A_SHL,A_SHR,A_BOUND,
-         A_JNS,A_JS,A_JO,A_SAR,A_TEST,
-         A_FCOM,A_FCOMP,A_FCOMPP,A_FXCH,A_FADDP,A_FMULP,A_FSUBP,A_FDIVP,
-         A_FNSTS,A_SAHF,A_FDIVRP,A_FSUBRP,A_SETC,A_SETNC,A_JC,A_JNC,
-         A_JA,A_JAE,A_JB,A_JBE,A_SETA,A_SETAE,A_SETB,A_SETBE,
-         A_AAA,A_AAD,A_AAM,A_AAS,A_CBW,A_CDQ,A_CLC,A_CLI,
-         A_CLTS,A_CMC,A_CWD,A_CWDE,A_DAA,A_DAS,A_HLT,A_IRET,A_LAHF,
-         A_LODS,A_LOCK,A_NOP,A_PUSHA,A_PUSHF,A_PUSHFD,
-         A_STC,A_STD,A_STI,A_STOS,A_WAIT,A_XLAT,A_XLATB,A_MOVSB,
-         A_MOVSBL,A_MOVSBW,A_MOVSWL,A_MOVZB,A_MOVZWL,A_POPA,A_IN,
-         A_OUT,A_LDS,A_LCS,A_LES,A_LFS,A_LGS,A_LSS,A_POPF,A_SBB,A_ADC,
-         A_DIV,A_ROR,A_ROL,A_RCL,A_RCR,A_SAL,A_SHLD,A_SHRD,
-         A_LCALL,A_LJMP,A_LRET,A_JNAE,A_JNB,A_JNA,A_JNBE,A_JP,A_JNP,
-         A_JPE,A_JPO,A_JNGE,A_JNG,A_JNL,A_JNLE,A_JCXZ,A_JECXZ,
-         A_LOOP,A_CMPS,A_INS,A_OUTS,A_SCAS,A_BSF,A_BSR,A_BT,A_BTC,A_BTR,A_BTS,A_INT,
-         A_INT3,A_INTO,A_BOUNDL,A_BOUNDW,
-         A_LOOPZ,A_LOOPE,A_LOOPNZ,A_LOOPNE,A_SETO,A_SETNO,A_SETNAE,A_SETNB,
-         A_SETZ,A_SETNZ,A_SETNA,A_SETNBE,A_SETS,A_SETNS,A_SETP,A_SETPE,A_SETNP,
-         A_SETPO,A_SETNGE,A_SETNL,A_SETNG,A_SETNLE,A_ARPL,A_LAR,A_LGDT,A_LIDT,
-         A_LLDT,A_LMSW,A_LSL,A_LTR,A_SGDT,A_SIDT,A_SLDT,A_SMSW,A_STR,A_VERR,A_VERW,
-         A_FABS,A_FBLD,A_FBSTP,A_FCLEX,A_FNCLEX,
-         A_FCOS,A_FDECSTP,A_FDISI,A_FNDISI,
-         A_FDIVR,A_FENI,A_FNENI,A_FFREE,A_FIADD,A_FICOM,A_FICOMP,
-         A_FIDIVR,A_FIMUL,A_FINCSTP,A_FINIT,A_FNINIT,A_FIST,A_FISTP,A_FISUB,
-         A_FISUBR,A_FLDCW,A_FLDENV,A_FLDLG2,A_FLDLN2,A_FLDL2E,
-         A_FLDL2T,A_FLDPI,A_FLDS,A_FLDZ,A_FNOP,A_FPATAN,
-         A_FPREM,A_FPREM1,A_FPTAN,A_FRNDINT,A_FRSTOR,A_FSAVE,A_FNSAVE,
-         A_FSCALE,A_FSETPM,A_FSIN,A_FSINCOS,A_FSQRT,A_FST,A_FSTCW,A_FNSTCW,
-         A_FSTENV,A_FNSTENV,A_FSTSW,A_FNSTSW,A_FTST,A_FUCOM,A_FUCOMP,
-         A_FUCOMPP,A_FWAIT,A_FXAM,A_FXTRACT,A_FYL2X,A_FYL2XP1,A_F2XM1,
-         A_FILDQ,A_FILDS,A_FILDL,A_FLDL,A_FLDT,A_FISTQ,A_FISTS,A_FISTL,A_FSTL,A_FSTS,
-         A_FSTPS,A_FISTPL,A_FSTPL,A_FISTPS,A_FISTPQ,A_FSTPT,
-         A_FCOMPS,A_FICOMPL,A_FCOMPL,A_FICOMPS,
-         A_FCOMS,A_FICOML,A_FCOML,A_FICOMS,A_FIADDL,A_FADDL,A_FIADDS,
-         A_FISUBL,A_FSUBL,A_FISUBS,A_FSUBS,A_FSUBR,A_FSUBRS,A_FISUBRL,
-         A_FSUBRL,A_FISUBRS,A_FMULS,A_FIMULL,A_FMULL,A_FIMULS,A_FDIVS,A_FIDIVL,
-         A_FDIVL,A_FIDIVS,A_FDIVRS,A_FIDIVRL,A_FDIVRL,A_FIDIVRS,
-         A_REPE,A_REPNE,A_CPUID,A_FADDS,A_POPFD,
-         { MMX instructions: }
-         A_EMMS,A_MOVD,A_MOVQ,A_PACKSSDW,A_PACKSSWB,A_PACKUSWB,
-         A_PADDB,A_PADDD,A_PADDSB,A_PADDSW,A_PADDUSB,A_PADDUSW,
-         A_PADDW,A_PAND,A_PANDN,A_PCMPEQB,A_PCMPEQD,A_PCMPEQW,
-         A_PCMPGTB,A_PCMPGTD,A_PCMPGTW,A_PMADDWD,A_PMULHW,
-         A_PMULLW,A_POR,A_PSLLD,A_PSLLQ,A_PSLLW,A_PSRAD,A_PSRAW,
-         A_PSRLD,A_PSRLQ,A_PSRLW,A_PSUBB,A_PSUBD,A_PSUBSB,A_PSUBSW,
-         A_PSUBUSB,A_PSUBUSW,A_PSUBW,A_PUNPCKHBW,A_PUNPCKHDQ,
-         A_PUNPCKHWD,A_PUNPCKLBW,A_PUNPCKLDQ,A_PUNPCKLWD,A_PXOR,
-         { KNI instructions: (intel katmai) }
-         A_ADDPS,A_ADDSS,A_ANDNPS,A_ANDNSS,A_ANDPS,A_ANDSS,A_CMPEQPS,A_CMPEQSS,
-         A_CMPLEPS,A_CMPLESS,A_CMPLTPS,A_CMPLTSS,A_CMPNEQPS,A_CMPNEQSS,
-         A_CMPNLEPS,A_CMPNLESS,A_CMPNLTPS,A_CMPNLTSS,A_CMPORDPS,A_CMPORDSS,
-         A_CMPUNORDPS,A_CMPUNORDSS,A_COMISS,A_CVTPI2PS,A_CVTPS2PI,
-         A_CVTSI2SS,A_CVTTPS2PI,A_CVTTSS2SI,A_DIVPS,A_DIVSS,A_FXRSTOR,A_FXSAVE,
-         A_LDMXCSR,A_MASKMOVQ,A_MAXPS,A_MAXSS,A_MINPS,A_MINSS,A_MOVAPS,
-         A_MOVHPS,A_MOVLPS,A_MOVMSKPS,A_MOVNTPS,A_MOVNTQ,A_MOVSS,A_MOVUPS,
-         A_MULPS,A_MULSS,A_ORPS,A_PAVGB,A_PAVGW,A_PEXTRW,A_PINSRW,A_PMAXSW,
-         A_PMAXUB,A_PMINSW,A_PMINUB,A_PMOVMSKB,A_PMULHUW,A_PREFETCHNT,
-         A_PREFETCH0,A_PREFETCH1,A_PREFETCH2,A_PSADBW,A_PSHUFW,A_RCPPS,A_RCPSS,
-         A_RSQRTPS,A_RSQRTSS,A_SFENCE,A_SHUFPS,A_SQRTPS,A_SQRTSS,A_STMXCSR,
-         A_SUBPS,A_SUBSS,A_UCOMISS,A_UNPCKHPS,A_UNPCKLPS,A_XORPS,
-         { 3Dnow instructions: (amd k6-2) }
-         A_FEMMS,A_PAVGUSB,A_PF2ID,A_PFACC,A_PFADD,A_PFCMPEQ,A_PFCMPGE,
-         A_PFCMPGT,A_PFMAX,A_PFMIN,A_PFMUL,A_PFRCP,A_PFRCPIT1,A_PFRCPIT2,
-         A_PFRSQIT1,A_PFRSQRT,A_PFSUB,A_PFSUBR,A_PI2FD,A_PMULHRW,A_PREFETCH,
-         A_PREFETCHW
-         );
-    const
-      firstop = low(tasmop);
-      lastop  = high(tasmop);
-
-    type
-       { enumeration for registers, don't change the order }
-       { it's used by the register size conversions        }
-       tregister = (R_NO,
-         R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
-         R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
-         R_AL,R_CL,R_DL,R_BL,R_AH,R_CH,R_BH,R_DH,
-         { for an easier assembler generation }
-         R_DEFAULT_SEG,R_CS,R_DS,R_ES,R_FS,R_GS,R_SS,
-         R_ST,R_ST0,R_ST1,R_ST2,R_ST3,R_ST4,R_ST5,R_ST6,R_ST7,
-         R_MM0,R_MM1,R_MM2,R_MM3,R_MM4,R_MM5,R_MM6,R_MM7,
-         R_XMM0,R_XMM1,R_XMM2,R_XMM3,R_XMM4,R_XMM5,R_XMM6,R_XMM7);
-
-       tregisterset = set of tregister;
-
-    const
-       firstreg = low(tregister);
-       lastreg  = high(tregister);
-
-       regset8bit : tregisterset = [R_AL..R_DH];
-       regset16bit : tregisterset = [R_AX..R_DI,R_CS..R_SS];
-       regset32bit : tregisterset = [R_EAX..R_EDI];
-
-    type
-       { S_NO = No Size of operand }
-       { S_B  = Byte size operand  }
-       { S_W  = Word size operand  }
-       { S_L  = DWord size operand }
-       { USED FOR conversions in x86}
-       { S_BW = Byte to word       }
-       { S_BL = Byte to long       }
-       { S_WL = Word to long       }
-       { Floating point types      }
-       { S_FX  = Extended type      }
-       { S_FL  = double/64bit integer }
-       { S_FS  = single type (32 bit) }
-       { S_IQ  = integer on 64 bits   }
-       { S_IL  = integer on 32 bits   }
-       { S_IS  = integer on 16 bits   }
-       { S_D   = integer on ? bits for MMX }
-       { S_FV  = floating point vector 4*32 bit = 128 bit (for KNI) }
-       topsize = (S_NO,S_B,S_W,S_L,S_BW,S_BL,S_WL,
-                  S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D,S_Q,S_FV);
-    const
-       firstopsize = low(topsize);
-       lastopsize  = high(topsize);
-
-
-    type
-       { information about the location of an operand }
-       { LOC_FPUSTACK    FPU stack }
-       { LOC_REGISTER    in a processor register }
-       { LOC_MEM         in memory }
-       { LOC_REFERENCE   like LOC_MEM, but lvalue }
-       { LOC_JUMP        boolean results only, jump to false or true label }
-       { LOC_FLAGS       boolean results only, flags are set }
-       { LOC_CREGISTER   register which shouldn't be modified }
-       { LOC_INVALID     added for tracking problems}
-       tloc = (LOC_INVALID,LOC_FPU,LOC_REGISTER,LOC_MEM,LOC_REFERENCE,LOC_JUMP,
-               LOC_FLAGS,LOC_CREGISTER,LOC_MMXREGISTER,LOC_CMMXREGISTER);
-
-       tresflags = (F_E,F_NE,F_G,F_L,F_GE,F_LE,F_C,F_NC,
-                    F_A,F_AE,F_B,F_BE);
-
-       preference = ^treference;
-       treference = record
-          base,segment,index : tregister;
-          offset : longint;
-          symbol : pasmsymbol;
-          { a constant is also a treference, this makes the code generator }
-          { easier                                                         }
-          is_immediate : boolean;
-          scalefactor : byte;
-       end;
-
-       plocation = ^tlocation;
-       tlocation = record
-          case loc : tloc of
-             LOC_MEM,LOC_REFERENCE : (reference : treference);
-             LOC_FPU : ();
-             LOC_JUMP : ();
-             LOC_FLAGS : (resflags : tresflags);
-             LOC_INVALID : ();
-
-             { it's only for better handling }
-             LOC_MMXREGISTER : (mmxreg : tregister);
-             { segment in reference at the same place as in loc_register }
-             LOC_REGISTER,LOC_CREGISTER : (
-             case longint of
-               1 : (register,segment,registerhigh : tregister);
-               { overlay a registerlow }
-               2 : (registerlow : tregister);
-             );
-       end;
-
-    type
-       { Only here for easier adaption of the internal assembler }
-       TAsmCond=(C_None,
-         C_A,C_AE,C_B,C_BE,C_C,C_E,C_G,C_GE,C_L,C_LE,C_NA,C_NAE,
-         C_NB,C_NBE,C_NC,C_NE,C_NG,C_NGE,C_NL,C_NLE,C_NO,C_NP,
-         C_NS,C_NZ,C_O,C_P,C_PE,C_PO,C_S,C_Z
-       );
-    const
-       flag_2_cond : array[TResFlags] of TAsmCond =
-        (C_E,C_NE,C_G,C_L,C_GE,C_LE,C_C,C_NC,C_A,C_AE,C_B,C_BE);
-
-       { arrays for boolean location conversions }
-       {flag_2_jmp : array[F_E..F_BE] of tasmop =
-          (A_JE,A_JNE,A_JG,A_JL,A_JGE,A_JLE,A_JC,A_JNC,
-           A_JA,A_JAE,A_JB,A_JBE);}
-
-       flag_2_set : array[TResFlags] of tasmop =
-          (A_SETE,A_SETNE,A_SETG,A_SETL,A_SETGE,A_SETLE,A_SETB,A_SETAE,
-           A_SETA,A_SETAE,A_SETB,A_SETBE);
-
-    const
-       { arrays for size and type determination }
-       reg_2_size: array[firstreg..lastreg] of topsize = (
-         S_NO,S_L,S_L,S_L,S_L,S_L,S_L,S_L,S_L,
-         S_W,S_W,S_W,S_W,S_W,S_W,S_W,S_W,
-         S_B,S_B,S_B,S_B,S_B,S_B,S_B,S_B,
-         { segment register }
-         S_W,S_W,S_W,S_W,S_W,S_W,S_W,
-         { can also be S_S or S_T - must be checked at run-time }
-         S_FL,S_FL,S_FL,S_FL,S_FL,S_FL,S_FL,S_FL,S_FL,
-         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D,
-         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D
-       );
-
-       { register type definition table for easier searching }
-       reg_2_type:array[firstreg..lastreg] of longint = (
-         ao_none,ao_reg32,ao_reg32,ao_reg32,ao_reg32,ao_reg32,ao_reg32,ao_reg32,ao_reg32,
-         ao_reg16,ao_reg16,ao_reg16,ao_reg16,ao_reg16,ao_reg16,ao_reg16,ao_reg16,
-         ao_reg8,ao_reg8,ao_reg8,ao_reg8,ao_reg8,ao_reg8,ao_reg8,ao_reg8,
-         ao_none,ao_sreg2,ao_sreg2,ao_sreg2,ao_sreg3,ao_sreg3,ao_sreg2,
-         ao_floatacc,ao_floatacc,ao_floatreg,ao_floatreg,ao_floatreg,ao_floatreg,
-         ao_floatreg,ao_floatreg,ao_floatreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,
-         ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg,
-         ao_mmxreg,ao_mmxreg,ao_mmxreg,ao_mmxreg
-       );
-
-       const_2_type: array[S_NO..S_FS] of longint =
-       (0,ao_imm8,ao_imm16,ao_imm32,0,0,0,ao_imm16,ao_imm32,0,ao_imm32);
-
-
-    const
-       { operand types }
-       top_none   = 0;
-       top_reg    = 1;
-       top_ref    = 2;
-       top_const  = 3; { a constant can be also written as treference }
-       top_symbol = 4; { this is for calls }
-
-       stack_pointer = R_ESP;
-
-       frame_pointer = R_EBP;
-
-       self_pointer = R_ESI;
-
-       { This constant is an alias for the accumulator, as it's name may
-         differ from processor to processor. }
-       accumulator = R_EAX;
-
-       firstregister = R_EAX;
-       lastregister = R_MM7;
-
-       general_registers = [R_EAX,R_EBX,R_ECX,R_EDX];
-
-       registers_saved_on_cdecl = [R_ESI,R_EDI,R_EBX];
-
-       cpuflags : set of tcpuflags = [];
-
-       { size of pointers }
-       pointersize = 4;
-       sizepostfix_pointer = S_L;
-
-    type
-       pai386_labeled = ^tai386_labeled;
-
-       tai386_labeled = object(tai)
-          opcode : tasmop;
-          lab : plabel;
-          constructor op_lab(op : tasmop; l : plabel);
-          destructor done;virtual;
-       end;
-
-       pairegalloc = ^tairegalloc;
-       tairegalloc = object(tai)
-          allocation : boolean;
-          reg        : tregister;
-          constructor alloc(r : tregister);
-          constructor dealloc(r : tregister);
-       end;
-
-       paitempalloc = ^taitempalloc;
-       taitempalloc = object(tai)
-          allocation : boolean;
-          temppos,
-          tempsize   : longint;
-          constructor alloc(pos,size:longint);
-          constructor dealloc(pos,size:longint);
-       end;
-
-       pai386 = ^tai386;
-       tai386 = object(tai)
-          opcode : tasmop;
-          opsize:topsize;
-          opxt:word;
-          op1,op2 : pointer;
-          op1ofs : longint;
-{$ifndef NO_OP3}
-          op3 : pointer;
-{$endif NO_OP3}
-          constructor op_none(op : tasmop;_size : topsize);
-
-          constructor op_reg(op : tasmop;_size : topsize;_op1 : tregister);
-          constructor op_const(op : tasmop;_size : topsize;_op1 : longint);
-          constructor op_ref(op : tasmop;_size : topsize;_op1 : preference);
-          constructor op_loc(op : tasmop;_size : topsize;_op1 : tlocation);
-
-          constructor op_reg_reg(op : tasmop;_size : topsize;_op1,_op2 : tregister);
-          constructor op_reg_reg_reg(op : tasmop;_size : topsize;_op1,_op2,_op3 : tregister);
-          constructor op_reg_ref(op : tasmop;_size : topsize;_op1 : tregister;_op2 : preference);
-          constructor op_reg_loc(op : tasmop;_size : topsize;_op1 : tregister;_op2 : tlocation);
-          constructor op_loc_reg(op : tasmop;_size : topsize;_op1 : tlocation;_op2 : tregister);
-
-          constructor op_const_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister);
-          { this combination is needed by ENTER }
-          constructor op_const_const(op : tasmop;_size : topsize;_op1,_op2 : longint);
-          constructor op_const_ref(op : tasmop;_size : topsize;_op1 : longint;_op2 : preference);
-          constructor op_const_loc(op : tasmop;_size : topsize;_op1 : longint;_op2 : tlocation);
-
-          constructor op_ref_reg(op : tasmop;_size : topsize;_op1 : preference;_op2 : tregister);
-          { this is only allowed if _op1 is an int value (_op1^.is_immediate=true) }
-          constructor op_ref_ref(op : tasmop;_size : topsize;_op1,_op2 : preference);
-          {
-          constructor op_ref_loc(op : tasmop;_size : topsize;_op1 : preference;_op2 : tlcation);}
-
-          constructor op_const_reg_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister;_op3 : tregister);
-
-{$ifndef NO_OP3}
-          constructor op_const_reg_ref(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister;_op3 : preference);
-          constructor op_const_ref_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : preference;_op3 : tregister);
-          constructor op_reg_reg_ref(op : tasmop;_size : topsize;_op1 : tregister;_op2 : tregister;_op3 : preference);
-{$endif NO_OP3}
-
-          { this is for CALL etc.                            }
-          { symbol is replaced by the address of symbol      }
-          { so op_csymbol(A_PUSH,S_L,strnew('P')); generates }
-          { an instruction which pushes the address of P     }
-          { to the stack                                     }
-          constructor op_sym(op : tasmop;_size : topsize;_op1 : pasmsymbol);
-          constructor op_sym_ofs(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint);
-          constructor op_sym_ofs_reg(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : tregister);
-          constructor op_sym_ofs_ref(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : preference);
-          constructor op_sym_ofs_loc(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : tlocation);
-          { OUT immediate8  }
-          constructor op_reg_const(op:tasmop; _size: topsize; _op1: tregister; _op2: longint);
-          function op1t:byte;
-          function op2t:byte;
-          function op3t:byte;
-          destructor done;virtual;
-       end;
-
-
-
-    const
-       maxvarregs = 4;
-       varregs : array[1..maxvarregs] of tregister =
-         (R_EBX,R_EDX,R_ECX,R_EAX);
-
-    { the following functions allow to convert registers }
-    { for example reg8toreg32(R_AL) returns R_EAX        }
-    { for example reg16toreg32(R_AL) gives an undefined  }
-    { result                                             }
-    { these functions expects that the turn of           }
-    { tregister isn't changed                            }
-    function reg8toreg16(reg : tregister) : tregister;
-    function reg8toreg32(reg : tregister) : tregister;
-    function reg16toreg8(reg : tregister) : tregister;
-    function reg32toreg8(reg : tregister) : tregister;
-    function reg32toreg16(reg : tregister) : tregister;
-    function reg16toreg32(reg : tregister) : tregister;
-
-    { these procedures must be defined by all target cpus }
-    function regtoreg8(reg : tregister) : tregister;
-    function regtoreg16(reg : tregister) : tregister;
-    function regtoreg32(reg : tregister) : tregister;
-
-    { can be ignored on 32 bit systems }
-    function regtoreg64(reg : tregister) : tregister;
-
-    { returns the operand prefix for a given register }
-    function regsize(reg : tregister) : topsize;
-
-    { resets all values of ref to defaults }
-    procedure reset_reference(var ref : treference);
-    { set mostly used values of a new reference }
-    function new_reference(base : tregister;offset : longint) : preference;
-    { same as reset_reference, but symbol is disposed }
-    { use this only for already used references       }
-    procedure clear_reference(var ref : treference);
-
-    function newreference(const r : treference) : preference;
-    procedure disposereference(var r : preference);
-
-    function reg2str(r : tregister) : string;
-
-
-    const
-       { this is for the code generator }
-       { set if operands are words or dwords }
-       af_w       = $1;
-       { D = 0 if Reg --> Regmem; D = 1 if Regmem --> Reg }
-       af_d        = $2;
-       { direction flag for floating insns:  MUST BE = $400 }
-       af_floatd = $400;
-       { shorthand }
-       af_dw = (af_d or af_w);
-       { register is in low 3 bits of opcode }
-       shortform = $10;
-       { shortform and w-bit is=$8 }
-       Shortformw = $20;
-       seg2shortform = $40; { encoding of load segment reg instructions }
-       seg3shortform = $80; { fs/gs segment register instructions }
-       jump = $100;     { special case for jump instructions }
-       jumpintersegment = $200; { special case for intersegment leaps/calls }
-       dont_use = $400;
-       noModrm = $800;
-       modrm = $1000;
-       imulkludge = $2000;
-       Jumpbyte = $4000;
-       Jumpdword = $8000;
-       af_ReverseRegRegmem = $10000;
-
-    type
-       ttemplate = packed record
-          i : tasmop;
-          ops : byte;
-          oc : longint;
-          eb : byte;
-          m : longint;
-          o1,o2,o3 : longint;
-       end;
-
-{$ifdef ITTABLE}
-    type
-       titcache = array[firstop..lastop] of longint;
-       pitcache = ^titcache;
-    var
-       itcache : pitcache;
-
-    const
-       { only tokens up to and including lastop_ittable }
-       { are checked for validity, otherwise...         }
-       lastop_ittable = A_EMMS;
-
-       it : array[0..442] of ttemplate = (
-         (i : A_MOV;ops : 2;oc : $a0;eb : ao_none;m : af_dw or NoModrm;o1 : ao_disp32;o2 : ao_acc;o3 : 0 ),
-         (i : A_MOV;ops : 2;oc : $88;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0 ),
-         (i : A_MOV;ops : 2;oc : $b0;eb : ao_none;m : ShortFormW;o1 : ao_imm;o2 : ao_reg;o3 : 0 ),
-         (i : A_MOV;ops : 2;oc : $c6;eb : ao_none;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0 ),
-         (i : A_MOV;ops : 2;oc : $8c;eb : ao_none;m : af_d or Modrm;o1 : ao_sreg3 or ao_sreg2;o2 : ao_reg16 or
-           ao_mem16;o3 : 0 ),
-         (i : A_MOV;ops : 2;oc : $0f20;eb : ao_none;m : af_d or Modrm;o1 : ao_control;o2 : ao_reg32;o3 : 0),
-         (i : A_MOV;ops : 2;oc : $0f21;eb : ao_none;m : af_d or Modrm;o1 : ao_debug;o2 : ao_reg32;o3 : 0),
-         (i : A_MOV;ops : 2;oc : $0f24;eb : ao_none;m : af_d or Modrm;o1 : ao_test;o2 : ao_reg32;o3 : 0),
-         (i : A_MOVSB;ops : 2;oc : $0fbe;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg8 or ao_mem;o2 : ao_reg16
-           or ao_reg32;o3 : 0),
-         (i : A_MOVSBL;ops : 2;oc : $0fbe;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg8 or ao_mem;
-           o2 : ao_reg32;o3 : 0),
-         (i : A_MOVSBW;ops : 2;oc : $660fbe;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg8 or ao_mem;
-           o2 : ao_reg16;o3 : 0),
-         (i : A_MOVSWL;ops : 2;oc : $0fbf;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg16 or ao_mem;
-           o2 : ao_reg32;o3 : 0),
-         (i : A_MOVZB;ops : 2;oc : $0fb6;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg8 or ao_mem;
-           o2 : ao_reg16 or ao_reg32;o3 : 0),
-         (i : A_MOVZWL;ops : 2;oc : $0fb7;eb : ao_none;m : af_reverseregregmem or Modrm;o1 : ao_reg16 or ao_mem;
-           o2 : ao_reg32;o3 : 0),
-         (i : A_PUSH;ops : 1;oc : $50;eb : ao_none;m : ShortForm;o1 : ao_wordreg;o2 : 0;o3 : 0 ),
-         (i : A_PUSH;ops : 1;oc : $ff;eb : $6;m : Modrm;o1 : ao_wordreg or ao_wordMem;o2 : 0;o3 : 0 ),
-         (i : A_PUSH;ops : 1;oc : $6a;eb : ao_none;m : NoModrm;o1 : ao_imm8S;o2 : 0;o3 : 0),
-         (i : A_PUSH;ops : 1;oc : $68;eb : ao_none;m : NoModrm;o1 : ao_imm32 or ao_imm16;o2 : 0;o3 : 0),
-         (i : A_PUSH;ops : 1;oc : $06;eb : ao_none;m : Seg2ShortForm;o1 : ao_sreg2;o2 : 0;o3 : 0 ),
-         (i : A_PUSH;ops : 1;oc : $0fa0;eb : ao_none;m : Seg3ShortForm;o1 : ao_sreg3;o2 : 0;o3 : 0 ),
-         (i : A_PUSHA;ops : 0;oc : $60;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0 ),
-         (i : A_PUSHAD; ops: 0; oc: $6660;eb: ao_none;m: NoModRm;o1:   0;o2:  0;o3:  0 ),
-         (i : A_POP;ops : 1;oc : $58;eb : ao_none;m : ShortForm;o1 : ao_wordreg;o2 : 0;o3 : 0 ),
-         (i : A_POP;ops : 1;oc : $8f;eb : $0;m : Modrm;o1 : ao_wordreg or ao_wordmem;o2 : 0;o3 : 0 ),
-         (i : A_POP;ops : 1;oc : $07;eb : ao_none;m : Seg2ShortForm;o1 : ao_sreg2;o2 : 0;o3 : 0 ),
-         (i : A_POP;ops : 1;oc : $0fa1;eb : ao_none;m : Seg3ShortForm;o1 : ao_sreg3;o2 : 0;o3 : 0 ),
-         (i : A_POPA;ops : 0;oc : $61;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0 ),
-         (i : A_POPAD; ops: 0; oc: $6661;eb: ao_none;m : NoModRm;o1 : 0;o2 : 0;o3: 0),
-         (i : A_XCHG;ops : 2;oc : $90;eb : ao_none;m : ShortForm;o1 : ao_wordreg;o2 : ao_acc;o3 : 0 ),
-         (i : A_XCHG;ops : 2;oc : $90;eb : ao_none;m : ShortForm;o1 : ao_acc;o2 : ao_wordreg;o3 : 0 ),
-         (i : A_XCHG;ops : 2;oc : $86;eb : ao_none;m : af_w or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0 ),
-         (i : A_XCHG;ops : 2;oc : $86;eb : ao_none;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : ao_reg;o3 : 0 ),
-         (i : A_IN;ops : 2;oc : $e4;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm8;o2 : ao_acc;o3 : 0 ),
-         (i : A_IN;ops : 2;oc : $ec;eb : ao_none;m : af_w or NoModrm;o1 : ao_inoutportreg;o2 : ao_acc;o3 : 0 ),
-         (i : A_OUT;ops : 2;oc : $e6;eb : ao_none;m : af_w or NoModrm;o1 : ao_acc;o2 : ao_imm8;o3 : 0 ),
-         (i : A_OUT;ops : 2;oc : $ee;eb : ao_none;m : af_w or NoModrm;o1 : ao_acc;o2 : ao_inoutportreg;o3 : 0 ),
-         (i : A_LEA;ops : 2;oc : $8d;eb : ao_none;m : Modrm;o1 : ao_wordmem or ao_jumpabsolute;o2 : ao_wordreg;o3 : 0 ),
-         (i : A_LDS;ops : 2;oc : $c5;eb : ao_none;m : Modrm;o1 : ao_mem;o2 : ao_reg32;o3 : 0),
-         (i : A_LES;ops : 2;oc : $c4;eb : ao_none;m : Modrm;o1 : ao_mem;o2 : ao_reg32;o3 : 0),
-         (i : A_LFS;ops : 2;oc : $0fb4;eb : ao_none;m : Modrm;o1 : ao_mem;o2 : ao_reg32;o3 : 0),
-         (i : A_LGS;ops : 2;oc : $0fb5;eb : ao_none;m : Modrm;o1 : ao_mem;o2 : ao_reg32;o3 : 0),
-         (i : A_LSS;ops : 2;oc : $0fb2;eb : ao_none;m : Modrm;o1 : ao_mem;o2 : ao_reg32;o3 : 0),
-         (i : A_CLC;ops : 0;oc : $f8;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CLD;ops : 0;oc : $fc;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CLI;ops : 0;oc : $fa;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CLTS;ops : 0;oc : $0f06;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CMC;ops : 0;oc : $f5;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_LAHF;ops : 0;oc : $9f;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_SAHF;ops : 0;oc : $9e;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_PUSHF;ops : 0;oc : $9c;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_PUSHFD; ops: 0; oc: $669c; eb: ao_none; m: NoModRm; o1: 0;o2: 0;o3: 0),
-         (i : A_POPF;ops : 0;oc : $9d;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_POPFD;ops: 0;oc:  $669d;eb : ao_none;m : NoModRm;o1:  0;o2 : 0;o3 : 0),
-         (i : A_STC;ops : 0;oc : $f9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_STD;ops : 0;oc : $fd;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_STI;ops : 0;oc : $fb;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_ADD;ops : 2;oc : $0;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ADD;ops : 2;oc : $83;eb : 0;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_ADD;ops : 2;oc : $4;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_ADD;ops : 2;oc : $80;eb : 0;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_INC;ops : 1;oc : $40;eb : ao_none;m : ShortForm;o1 : ao_wordreg;o2 : 0;o3 : 0),
-         (i : A_INC;ops : 1;oc : $fe;eb : 0;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SUB;ops : 2;oc : $28;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SUB;ops : 2;oc : $83;eb : 5;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_SUB;ops : 2;oc : $2c;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_SUB;ops : 2;oc : $80;eb : 5;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_DEC;ops : 1;oc : $48;eb : ao_none;m : ShortForm;o1 : ao_wordreg;o2 : 0;o3 : 0),
-         (i : A_DEC;ops : 1;oc : $fe;eb : 1;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SBB;ops : 2;oc : $18;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SBB;ops : 2;oc : $83;eb : 3;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_SBB;ops : 2;oc : $1c;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_SBB;ops : 2;oc : $80;eb : 3;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_CMP;ops : 2;oc : $38;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_CMP;ops : 2;oc : $83;eb : 7;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_CMP;ops : 2;oc : $3c;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_CMP;ops : 2;oc : $80;eb : 7;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_TEST;ops : 2;oc : $84;eb : ao_none;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : ao_reg;o3 : 0),
-         (i : A_TEST;ops : 2;oc : $84;eb : ao_none;m : af_w or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_TEST;ops : 2;oc : $a8;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_TEST;ops : 2;oc : $f6;eb : 0;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_AND;ops : 2;oc : $20;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_AND;ops : 2;oc : $83;eb : 4;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_AND;ops : 2;oc : $24;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_AND;ops : 2;oc : $80;eb : 4;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_OR;ops : 2;oc : $08;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_OR;ops : 2;oc : $83;eb : 1;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_OR;ops : 2;oc : $0c;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_OR;ops : 2;oc : $80;eb : 1;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_XOR;ops : 2;oc : $30;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_XOR;ops : 2;oc : $83;eb : 6;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_XOR;ops : 2;oc : $34;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_XOR;ops : 2;oc : $80;eb : 6;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ADC;ops : 2;oc : $10;eb : ao_none;m : af_dw or Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ADC;ops : 2;oc : $83;eb : 2;m : Modrm;o1 : ao_imm8s;o2 : ao_wordreg or ao_wordmem;o3 : 0),
-         (i : A_ADC;ops : 2;oc : $14;eb : ao_none;m : af_w or NoModrm;o1 : ao_imm;o2 : ao_acc;o3 : 0),
-         (i : A_ADC;ops : 2;oc : $80;eb : 2;m : af_w or Modrm;o1 : ao_imm;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_NEG;ops : 1;oc : $f6;eb : 3;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_NOT;ops : 1;oc : $f6;eb : 2;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_AAA;ops : 0;oc : $37;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_AAS;ops : 0;oc : $3f;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_DAA;ops : 0;oc : $27;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_DAS;ops : 0;oc : $2f;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_AAD;ops : 0;oc : $d50a;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_AAM;ops : 0;oc : $d40a;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CBW;ops : 0;oc : $6698;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CWD;ops : 0;oc : $6699;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CWDE;ops : 0;oc : $98;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CDQ;ops : 0;oc : $99;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_MUL;ops : 1;oc : $f6;eb : 4;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_IMUL;ops : 1;oc : $f6;eb : 5;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_IMUL;ops : 2;oc : $0faf;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_wordreg or ao_mem;
-           o2 : ao_wordreg;o3 : 0),
-         (i : A_IMUL;ops : 3;oc : $6b;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_imm8s;
-           o2 : ao_wordreg or ao_mem;o3 : ao_wordreg),
-         (i : A_IMUL;ops : 3;oc : $69;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_imm16 or ao_imm32;
-           o2 : ao_wordreg or ao_mem;o3 : ao_wordreg),
-         (i : A_IMUL;ops : 2;oc : $6b;eb : ao_none;m : Modrm or imulKludge;o1 : ao_imm8s;o2 : ao_wordreg;o3 : 0),
-         (i : A_IMUL;ops : 2;oc : $69;eb : ao_none;m : Modrm or imulKludge;o1 : ao_imm8 or ao_imm16 or ao_imm32;
-           o2 : ao_wordreg;o3 : 0),
-         (i : A_DIV;ops : 1;oc : $f6;eb : 6;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_DIV;ops : 2;oc : $f6;eb : 6;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : ao_acc;o3 : 0),
-         (i : A_IDIV;ops : 1;oc : $f6;eb : 7;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_IDIV;ops : 2;oc : $f6;eb : 7;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : ao_acc;o3 : 0),
-         (i : A_ROL;ops : 2;oc : $d0;eb : 0;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROL;ops : 2;oc : $c0;eb : 0;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROL;ops : 2;oc : $d2;eb : 0;m : af_w or Modrm;o1 : ao_reg8 or ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROL;ops : 1;oc : $d0;eb : 0;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_ROR;ops : 2;oc : $d0;eb : 1;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROR;ops : 2;oc : $c0;eb : 1;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROR;ops : 2;oc : $d2;eb : 1;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_ROR;ops : 1;oc : $d0;eb : 1;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_RCL;ops : 2;oc : $d0;eb : 2;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCL;ops : 2;oc : $c0;eb : 2;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCL;ops : 2;oc : $d2;eb : 2;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCL;ops : 1;oc : $d0;eb : 2;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_RCR;ops : 2;oc : $d0;eb : 3;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCR;ops : 2;oc : $c0;eb : 3;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCR;ops : 2;oc : $d2;eb : 3;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_RCR;ops : 1;oc : $d0;eb : 3;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SAL;ops : 2;oc : $d0;eb : 4;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAL;ops : 2;oc : $c0;eb : 4;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAL;ops : 2;oc : $d2;eb : 4;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAL;ops : 1;oc : $d0;eb : 4;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SHL;ops : 2;oc : $d0;eb : 4;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHL;ops : 2;oc : $c0;eb : 4;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHL;ops : 2;oc : $d2;eb : 4;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHL;ops : 1;oc : $d0;eb : 4;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SHLD;ops : 3;oc : $0fa4;eb : ao_none;m : Modrm;o1 : ao_imm8;o2 : ao_wordreg;o3 : ao_wordreg or ao_mem),
-         (i : A_SHLD;ops : 3;oc : $0fa5;eb : ao_none;m : Modrm;o1 : {ao_reg8 or }ao_shiftcount;o2 : ao_wordreg;
-            o3 : ao_wordreg or ao_mem),
-         (i : A_SHR;ops : 2;oc : $d0;eb : 5;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHR;ops : 2;oc : $c0;eb : 5;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHR;ops : 2;oc : $d2;eb : 5;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SHR;ops : 1;oc : $d0;eb : 5;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SHRD;ops : 3;oc : $0fac;eb : ao_none;m : Modrm;o1 : ao_imm8;o2 : ao_wordreg;o3 : ao_wordreg or ao_mem),
-         (i : A_SHRD;ops : 3;oc : $0fad;eb : ao_none;m : Modrm;o1 : {ao_reg8 or }ao_shiftcount;o2 : ao_wordreg;
-            o3 : ao_wordreg or ao_mem),
-         (i : A_SAR;ops : 2;oc : $d0;eb : 7;m : af_w or Modrm;o1 : ao_imm1;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAR;ops : 2;oc : $c0;eb : 7;m : af_w or Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAR;ops : 2;oc : $d2;eb : 7;m : af_w or Modrm;o1 : ao_shiftcount;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_SAR;ops : 1;oc : $d0;eb : 7;m : af_w or Modrm;o1 : ao_reg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_CALL;ops : 1;oc : $e8;eb : ao_none;m : jumpdword;o1 : ao_disp32;o2 : 0;o3 : 0),
-         (i : A_CALL;ops : 1;oc : $ff;eb : 2;m : Modrm;o1 : ao_reg or ao_mem or ao_jumpabsolute;o2 : 0;o3 : 0),
-         (i : A_LCALL;ops : 2;oc : $9a;eb : ao_none;m : JumpInterSegment;o1 : ao_imm16;o2 : ao_abs32;o3 : 0),
-         (i : A_LCALL;ops : 1;oc : $ff;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_JMP;ops : 1;oc : $eb;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JMP;ops : 1;oc : $ff;eb : 4;m : Modrm;o1 : ao_reg32 or ao_mem or ao_jumpabsolute;o2 : 0;o3 : 0),
-         (i : A_LJMP;ops : 2;oc : $ea;eb : ao_none;m : JumpInterSegment;o1 : ao_imm16;o2 : ao_imm32;o3 : 0),
-         (i : A_LJMP;ops : 1;oc : $ff;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_RET;ops : 0;oc : $c3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_RET;ops : 1;oc : $c2;eb : ao_none;m : NoModrm;o1 : ao_imm16;o2 : 0;o3 : 0),
-         (i : A_LRET;ops : 0;oc : $cb;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_LRET;ops : 1;oc : $ca;eb : ao_none;m : NoModrm;o1 : ao_imm16;o2 : 0;o3 : 0),
-         (i : A_ENTER;ops : 2;oc : $c8;eb : ao_none;m : NoModrm;o1 : ao_imm16;o2 : ao_imm8;o3 : 0),
-         (i : A_LEAVE;ops : 0;oc : $c9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_JO;ops : 1;oc : $70;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNO;ops : 1;oc : $71;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JB;ops : 1;oc : $72;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JC;ops : 1;oc : $72;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNAE;ops : 1;oc : $72;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNB;ops : 1;oc : $73;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNC;ops : 1;oc : $73;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JAE;ops : 1;oc : $73;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JE;ops : 1;oc : $74;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JZ;ops : 1;oc : $74;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNE;ops : 1;oc : $75;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNZ;ops : 1;oc : $75;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JBE;ops : 1;oc : $76;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNA;ops : 1;oc : $76;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNBE;ops : 1;oc : $77;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JA;ops : 1;oc : $77;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JS;ops : 1;oc : $78;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNS;ops : 1;oc : $79;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JP;ops : 1;oc : $7a;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JPE;ops : 1;oc : $7a;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNP;ops : 1;oc : $7b;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JPO;ops : 1;oc : $7b;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JL;ops : 1;oc : $7c;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNGE;ops : 1;oc : $7c;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNL;ops : 1;oc : $7d;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JGE;ops : 1;oc : $7d;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JLE;ops : 1;oc : $7e;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNG;ops : 1;oc : $7e;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JNLE;ops : 1;oc : $7f;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JG;ops : 1;oc : $7f;eb : ao_none;m : Jump;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JCXZ;ops : 1;oc : $67e3;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_JECXZ;ops : 1;oc : $e3;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_LOOP;ops : 1;oc : $e2;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_LOOPZ;ops : 1;oc : $e1;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_LOOPE;ops : 1;oc : $e1;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_LOOPNZ;ops : 1;oc : $e0;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_LOOPNE;ops : 1;oc : $e0;eb : ao_none;m : JumpByte;o1 : ao_disp;o2 : 0;o3 : 0),
-         (i : A_SETO;ops : 1;oc : $0f90;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNO;ops : 1;oc : $0f91;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETB;ops : 1;oc : $0f92;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNAE;ops : 1;oc : $0f92;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNB;ops : 1;oc : $0f93;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETAE;ops : 1;oc : $0f93;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETE;ops : 1;oc : $0f94;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETZ;ops : 1;oc : $0f94;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNE;ops : 1;oc : $0f95;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNZ;ops : 1;oc : $0f95;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETBE;ops : 1;oc : $0f96;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNA;ops : 1;oc : $0f96;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNBE;ops : 1;oc : $0f97;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETA;ops : 1;oc : $0f97;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETS;ops : 1;oc : $0f98;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNS;ops : 1;oc : $0f99;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETP;ops : 1;oc : $0f9a;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETC;ops : 1; oc: $0f92;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNC;ops : 1;oc: $0f93;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETPE;ops : 1;oc : $0f9a;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNP;ops : 1;oc : $0f9b;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETPO;ops : 1;oc : $0f9b;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETL;ops : 1;oc : $0f9c;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNGE;ops : 1;oc : $0f9c;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNL;ops : 1;oc : $0f9d;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETGE;ops : 1;oc : $0f9d;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETLE;ops : 1;oc : $0f9e;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNG;ops : 1;oc : $0f9e;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETNLE;ops : 1;oc : $0f9f;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SETG;ops : 1;oc : $0f9f;eb : 0;m : Modrm;o1 : ao_reg8 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_CMPS;ops : 0;oc : $a6;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_INS;ops : 0;oc : $6c;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_OUTS;ops : 0;oc : $6e;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_LODS;ops : 0;oc : $ac;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_MOVS;ops : 0;oc : $a4;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_SCAS;ops : 0;oc : $ae;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_STOS;ops : 0;oc : $aa;eb : ao_none;m : af_w or NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_XLAT;ops : 0;oc : $d7;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_BSF;ops : 2;oc : $0fbc;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_reg or ao_mem;o2 : ao_reg;o3 : 0),
-         (i : A_BSR;ops : 2;oc : $0fbd;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_reg or ao_mem;o2 : ao_reg;o3 : 0),
-         (i : A_BT;ops : 2;oc : $0fa3;eb : ao_none;m : Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BT;ops : 2;oc : $0fba;eb : 4;m : Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTC;ops : 2;oc : $0fbb;eb : ao_none;m : Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTC;ops : 2;oc : $0fba;eb : 7;m : Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTR;ops : 2;oc : $0fb3;eb : ao_none;m : Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTR;ops : 2;oc : $0fba;eb : 6;m : Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTS;ops : 2;oc : $0fab;eb : ao_none;m : Modrm;o1 : ao_reg;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_BTS;ops : 2;oc : $0fba;eb : 5;m : Modrm;o1 : ao_imm8;o2 : ao_reg or ao_mem;o3 : 0),
-         (i : A_INT;ops : 1;oc : $cd;eb : ao_none;m : NoModrm;o1 : ao_imm8;o2 : 0;o3 : 0),
-         (i : A_INT3;ops : 0;oc : $cc;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_INTO;ops : 0;oc : $ce;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_IRET;ops : 0;oc : $cf;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_BOUNDL;ops : 2;oc : $62;eb : ao_none;m : Modrm;o1 : ao_reg32;o2 : ao_mem;o3 : 0),
-         (i : A_BOUNDW;ops : 2;oc : $6662;eb : ao_none;m : Modrm;o1 : ao_reg16;o2 : ao_mem;o3 : 0),
-         (i : A_HLT;ops : 0;oc : $f4;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_wAIT;ops : 0;oc : $9b;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_NOP;ops : 0;oc : $90;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_ARPL;ops : 2;oc : $63;eb : ao_none;m : Modrm;o1 : ao_reg16;o2 : ao_reg16 or ao_mem;o3 : 0),
-         (i : A_LAR;ops : 2;oc : $0f02;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_wordreg or ao_mem;
-           o2 : ao_wordreg;o3 : 0),
-         (i : A_LGDT;ops : 1;oc : $0f01;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_LIDT;ops : 1;oc : $0f01;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_LLDT;ops : 1;oc : $0f00;eb : 2;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_LMSW;ops : 1;oc : $0f01;eb : 6;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_LSL;ops : 2;oc : $0f03;eb : ao_none;m : Modrm or af_reverseregregmem;o1 : ao_wordreg or ao_mem;
-           o2 : ao_wordreg;o3 : 0),
-         (i : A_LTR;ops : 1;oc : $0f00;eb : 3;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SGDT;ops : 1;oc : $0f01;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_SIDT;ops : 1;oc : $0f01;eb : 1;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_SLDT;ops : 1;oc : $0f00;eb : 0;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_SMSW;ops : 1;oc : $0f01;eb : 4;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_STR;ops : 1;oc : $0f00;eb : 1;m : Modrm;o1 : ao_reg16 or ao_mem;o2 : 0;o3 : 0),
-         (i : A_VERR;ops : 1;oc : $0f00;eb : 4;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_VERW;ops : 1;oc : $0f00;eb : 5;m : Modrm;o1 : ao_wordreg or ao_mem;o2 : 0;o3 : 0),
-         (i : A_FLD;ops : 1;oc : $d9c0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FLDS;ops : 1;oc : $d9;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FILDL;ops : 1;oc : $db;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FLDL;ops : 1;oc : $dd;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FLDL;ops : 1;oc : $d9c0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FILDS;ops : 1;oc : $df;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FILDQ;ops : 1;oc : $df;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FLDT;ops : 1;oc : $db;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FBLD;ops : 1;oc : $df;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FST;ops : 1;oc : $ddd0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSTS;ops : 1;oc : $d9;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISTL;ops : 1;oc : $db;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTL;ops : 1;oc : $dd;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTL;ops : 1;oc : $ddd0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FISTS;ops : 1;oc : $df;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTP;ops : 1;oc : $ddd8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSTPS;ops : 1;oc : $d9;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISTPL;ops : 1;oc : $db;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTPL;ops : 1;oc : $dd;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTPL;ops : 1;oc : $ddd8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FISTPS;ops : 1;oc : $df;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISTPQ;ops : 1;oc : $df;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTPT;ops : 1;oc : $db;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FBSTP;ops : 1;oc : $df;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FXCH;ops : 1;oc : $d9c8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FCOM;ops : 1;oc : $d8d0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FCOMS;ops : 1;oc : $d8;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FICOML;ops : 1;oc : $da;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOML;ops : 1;oc : $dc;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOML;ops : 1;oc : $d8d0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FICOMS;ops : 1;oc : $de;eb : 2;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOMP;ops : 1;oc : $d8d8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FCOMPS;ops : 1;oc : $d8;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FICOMPL;ops : 1;oc : $da;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOMPL;ops : 1;oc : $dc;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOMPL;ops : 1;oc : $d8d8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FICOMPS;ops : 1;oc : $de;eb : 3;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FCOMPP;ops : 0;oc : $ded9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FUCOM;ops : 1;oc : $dde0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FUCOMP;ops : 1;oc : $dde8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FUCOMPP;ops : 0;oc : $dae9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FTST;ops : 0;oc : $d9e4;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FXAM;ops : 0;oc : $d9e5;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLD1;ops : 0;oc : $d9e8;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDL2T;ops : 0;oc : $d9e9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDL2E;ops : 0;oc : $d9ea;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDPI;ops : 0;oc : $d9eb;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDLG2;ops : 0;oc : $d9ec;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDLN2;ops : 0;oc : $d9ed;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDZ;ops : 0;oc : $d9ee;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FADD;ops : 1;oc : $d8c0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FADD;ops : 2;oc : $d8c0;eb : ao_none;m : ShortForm or af_floatd;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FADD;ops : 0;oc : $dcc1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FADDP;ops : 1;oc : $dac0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FADDP;ops : 2;oc : $dac0;eb : ao_none;m : ShortForm or af_floatd;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FADDP;ops : 0;oc : $dec1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FADDS;ops : 1;oc : $d8;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIADDL;ops : 1;oc : $da;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FADDL;ops : 1;oc : $dc;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIADDS;ops : 1;oc : $de;eb : 0;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSUB;ops : 1;oc : $d8e0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSUB;ops : 2;oc : $d8e0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FSUB;ops : 2;oc : $dce8;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FSUB;ops : 0;oc : $dce1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSUBP;ops : 1;oc : $dae0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSUBP;ops : 2;oc : $dae0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FSUBP;ops : 2;oc : $dee0;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FSUBP;ops : 0;oc : $dee1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSUBS;ops : 1;oc : $d8;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISUBL;ops : 1;oc : $da;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSUBL;ops : 1;oc : $dc;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISUBS;ops : 1;oc : $de;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSUBR;ops : 1;oc : $d8e8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSUBR;ops : 2;oc : $d8e8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FSUBR;ops : 2;oc : $dce8;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FSUBR;ops : 0;oc : $dce9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSUBRP;ops : 1;oc : $dae8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FSUBRP;ops : 2;oc : $dae8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FSUBRP;ops : 2;oc : $dee8;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FSUBRP;ops : 0;oc : $dee9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSUBRS;ops : 1;oc : $d8;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISUBRL;ops : 1;oc : $da;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSUBRL;ops : 1;oc : $dc;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FISUBRS;ops : 1;oc : $de;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FMUL;ops : 1;oc : $d8c8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FMUL;ops : 2;oc : $d8c8;eb : ao_none;m : ShortForm or af_floatd;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FMUL;ops : 0;oc : $dcc9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FMULP;ops : 1;oc : $dac8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FMULP;ops : 2;oc : $dac8;eb : ao_none;m : ShortForm or af_floatd;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FMULP;ops : 0;oc : $dec9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FMULS;ops : 1;oc : $d8;eb : 1;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIMULL;ops : 1;oc : $da;eb : 1;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FMULL;ops : 1;oc : $dc;eb : 1;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIMULS;ops : 1;oc : $de;eb : 1;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FDIV;ops : 1;oc : $d8f0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FDIV;ops : 2;oc : $d8f0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FDIV;ops : 2;oc : $dcf0;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FDIV;ops : 0;oc : $dcf1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FDIVP;ops : 1;oc : $daf0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FDIVP;ops : 2;oc : $daf0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FDIVP;ops : 2;oc : $def0;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FDIVP;ops : 0;oc : $def1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FDIVS;ops : 1;oc : $d8;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIDIVL;ops : 1;oc : $da;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FDIVL;ops : 1;oc : $dc;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIDIVS;ops : 1;oc : $de;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FDIVR;ops : 1;oc : $d8f8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FDIVR;ops : 2;oc : $d8f8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FDIVR;ops : 2;oc : $dcf8;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FDIVR;ops : 0;oc : $dcf9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FDIVRP;ops : 1;oc : $daf8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FDIVRP;ops : 2;oc : $daf8;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : ao_floatacc;o3 : 0),
-         (i : A_FDIVRP;ops : 2;oc : $def8;eb : ao_none;m : ShortForm;o1 : ao_floatacc;o2 : ao_floatreg;o3 : 0),
-         (i : A_FDIVRP;ops : 0;oc : $def9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FDIVRS;ops : 1;oc : $d8;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIDIVRL;ops : 1;oc : $da;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FDIVRL;ops : 1;oc : $dc;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FIDIVRS;ops : 1;oc : $de;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_F2XM1;ops : 0;oc : $d9f0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FYL2X;ops : 0;oc : $d9f1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FPTAN;ops : 0;oc : $d9f2;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FPATAN;ops : 0;oc : $d9f3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FXTRACT;ops : 0;oc : $d9f4;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FPREM1;ops : 0;oc : $d9f5;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FDECSTP;ops : 0;oc : $d9f6;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FINCSTP;ops : 0;oc : $d9f7;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FPREM;ops : 0;oc : $d9f8;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FYL2XP1;ops : 0;oc : $d9f9;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSQRT;ops : 0;oc : $d9fa;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSINCOS;ops : 0;oc : $d9fb;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FRNDINT;ops : 0;oc : $d9fc;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSCALE;ops : 0;oc : $d9fd;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSIN;ops : 0;oc : $d9fe;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FCOS;ops : 0;oc : $d9ff;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FCHS;ops : 0;oc : $d9e0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FABS;ops : 0;oc : $d9e1;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FNINIT;ops : 0;oc : $dbe3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FINIT;ops : 0;oc : $dbe3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FLDCW;ops : 1;oc : $d9;eb : 5;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FNSTCW;ops : 1;oc : $d9;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTCW;ops : 1;oc : $d9;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FNSTSW;ops : 1;oc : $dfe0;eb : ao_none;m : NoModrm;o1 : ao_acc;o2 : 0;o3 : 0),
-         (i : A_FNSTSW;ops : 1;oc : $dd;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FNSTSW;ops : 0;oc : $dfe0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FSTSW;ops : 1;oc : $dfe0;eb : ao_none;m : NoModrm;o1 : ao_acc;o2 : 0;o3 : 0),
-         (i : A_FSTSW;ops : 1;oc : $dd;eb : 7;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTSW;ops : 0;oc : $dfe0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FNCLEX;ops : 0;oc : $dbe2;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FCLEX;ops : 0;oc : $dbe2;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FNSTENV;ops : 1;oc : $d9;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSTENV;ops : 1;oc : $d9;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FLDENV;ops : 1;oc : $d9;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FNSAVE;ops : 1;oc : $dd;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FSAVE;ops : 1;oc : $dd;eb : 6;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FRSTOR;ops : 1;oc : $dd;eb : 4;m : Modrm;o1 : ao_mem;o2 : 0;o3 : 0),
-         (i : A_FFREE;ops : 1;oc : $ddc0;eb : ao_none;m : ShortForm;o1 : ao_floatreg;o2 : 0;o3 : 0),
-         (i : A_FNOP;ops : 0;oc : $d9d0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FWAIT;ops : 0;oc : $9b;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-{         (i : A_ADDRaf_wORD;ops : 0;oc : $67;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0), }
-{         (i : A_WORD;ops : 0;oc : $66;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0), }
-         (i : A_LOCK;ops : 0;oc : $f0;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-{         (i : A_CS;ops : 0;oc : $2e;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_DS;ops : 0;oc : $3e;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_ES;ops : 0;oc : $26;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_FS;ops : 0;oc : $64;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_GS;ops : 0;oc : $65;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_SS;ops : 0;oc : $36;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0), }
-         (i : A_REP;ops : 0;oc : $f3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_REPE;ops : 0;oc : $f3;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_REPNE;ops : 0;oc : $f2;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_CPUID;ops : 0;oc : $0fa2;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         (i : A_EMMS;ops : 0;oc : $0f77;eb : ao_none;m : NoModrm;o1 : 0;o2 : 0;o3 : 0),
-         { MMX instructions: }
-(* TODO
-         A_EMMS,A_MOVD,A_MOVQ,A_PACKSSDW,A_PACKSSWB,A_PACKUSWB,
-         A_PADDB,A_PADDD,A_PADDSB,A_PADDSW,A_PADDUSB,A_PADDUSW,
-         A_PADDW,A_PAND,A_PANDN,A_PCMPEQB,A_PCMPEQD,A_PCMPEQW,
-         A_PCMPGTB,A_PCMPGTD,A_PCMPGTW,A_PMADDWD,A_PMULHW,
-         A_PMULLW,A_POR,A_PSLLD,A_PSLLQ,A_PSLLW,A_PSRAD,A_PSRAW,
-         A_PSRLD,A_PSRLQ,A_PSRLW,A_PSUBB,A_PSUBD,A_PSUBSB,A_PSUBSW,
-         A_PSUBUSB,A_PSUBUSW,A_PSUBW,A_PUNPCKHBW,A_PUNPCKHDQ,
-         A_PUNPCKHWD,A_PUNPCKLBW,A_PUNPCKLDQ,A_PUNPCKLWD,A_PXOR,
-*)
-         { KNI instructions: (intel katmai) }
-(* TODO - add syntax description for these opcodes:
-   really required for the first turn??
-         A_ADDPS,A_ADDSS,A_ANDNPS,A_ANDNSS,A_ANDPS,A_ANDSS,A_CMPEQPS,A_CMPEQSS,
-         A_CMPLEPS,A_CMPLESS,A_CMPLTPS,A_CMPLTSS,A_CMPNEQPS,A_CMPNEQSS,
-         A_CMPNLEPS,A_CMPNLESS,A_CMPNLTPS,A_CMPNLTSS,A_CMPORDPS,A_CMPORDSS,
-         A_CMPUNORDPS,A_CMPUNORDSS,A_COMISS,A_CVTPI2PS,A_CVTPS2PI,
-         A_CVTSI2SS,A_CVTTPS2PI,A_CVTTSS2SI,A_DIVPS,A_DIVSS,A_FXRSTOR,A_FXSAVE,
-         A_LDMXCSR,A_MASKMOVQ,A_MAXPS,A_MAXSS,A_MINPS,A_MINSS,A_MOVAPS,
-         A_MOVHPS,A_MOVLPS,A_MOVMSKPS,A_MOVNTPS,A_MOVNTQ,A_MOVSS,A_MOVUPS,
-         A_MULPS,A_MULSS,A_ORPS,A_PAVGB,A_PAVGW,A_PEXTRW,A_PINSRW,A_PMAXSW,
-         A_PMAXUB,A_PMINSW,A_PMINUB,A_PMOVMSKB,A_PMULHUW,A_PREFETCHNT,
-         A_PREFETCH0,A_PREFETCH1,A_PREFETCH2,A_PSADBW,A_PSHUFW,A_RCPPS,A_RCPSS,
-         A_RSQRTPS,A_RSQRTSS,A_SFENCE,A_SHUFPS,A_SQRTPS,A_SQRTSS,A_STMXCSR,
-         A_SUBPS,A_SUBSS,A_UCOMISS,A_UNPCKHPS,A_UNPCKLPS,A_XORPS,
-*)
-         { 3Dnow instructions: (amd k6-2) }
-(* TODO
-         A_FEMMS,A_PAVGUSB,A_PF2ID,A_PFACC,A_PFADD,A_PFCMPEQ,A_PFCMPGE,
-         A_PFCMPGT,A_PFMAX,A_PFMIN,A_PFMUL,A_PFRCP,A_PFRCPIT1,A_PFRCPIT2,
-         A_PFRSQIT1,A_PFRSQRT,A_PFSUB,A_PFSUBR,A_PI2FD,A_PMULHRW,A_PREFETCH,
-         A_PREFETCHW,
-*)
-         (i : A_NONE));
-{$endif ITTABLE}
-
-{****************************************************************************
-                            Assembler Mnemoics
-****************************************************************************}
-
-{$ifdef ATTOP}
-    const
-      att_op2str : array[firstop..lastop] of string[7] =
-       ('mov','movz','movs','','add',
-        'call','idiv','imul','jmp','lea','mul','neg','not',
-        'pop','popal','push','pushal','ret','sub','xchg','xor',
-        'fild','cmp','jz','inc','dec','sete','setne','setl',
-        'setg','setle','setge','je','jne','jl','jg','jle','jge',
-        'or','fld','fadd','fmul','fsub','fdiv','fchs','fld1',
-        'fidiv','jnz','fstp','and','jno','','',
-        'enter','leave','cld','movs','rep','shl','shr','bound',
-        'jns','js','jo','sar','test',
-        'fcom','fcomp','fcompp','fxch','faddp','fmulp','fsubp','fdivp',
-        'fnsts','sahf','fdivrp','fsubrp','setc','setnc','jc','jnc',
-        'ja','jae','jb','jbe','seta','setae','setb','setbe',
-        'aaa','aad','aam','aas','cbtw','cltd','clc','cli',
-        'clts','cmc','cwtd','cwtl','daa','das','hlt','iret','lahf',
-        'lods','lock','nop','pusha','pushf','pushfl',
-        'stc','std','sti','stos','wait','xlat','xlatb','movsb',
-        'movsbl','movsbw','movswl','movsb','movzwl','popa','in',
-        'out','lds','lcs','les','lfs','lgs','lss','popf','sbb','adc',
-        'div','ror','rol','rcl','rcr','sal','shld','shrd',
-        'lcall','ljmp','lret','jnae','jnb','jna','jnbe','jb','jnp',
-        'jpe','jpo','jnge','jng','jnl','jnle','jcxz','jecxz',
-        'loop','cmps','ins','outs','scas','bsf','bsr','bt','btc',
-        'btr','bts','int','int3','into','boundl','boundw',
-        'loopz','loope','loopnz','loopne','seto','setno','setnae',
-        'setnb','setz','setnz','setna','setnbe','sets','setns','setp',
-        'setpe','setnp','setpo','setnge','setnl','setng','setnle',
-        'arpl','lar','lgdt','lidt','lldt','lmsw','lsl','ltr','sgdt',
-        'sidt','sldt','smsw','str','verr','verw','fabs','fbld','fbstp',
-        'fclex','fnclex','fcos','fdecstp','fdisi','fndisi','fdivr',
-        'feni','fneni','ffree','fiadd','ficom','ficomp','fidivr',
-        'fimul','fincstp','finit','fninit','fist','fistp','fisub',
-        'fisubr','fldcw','fldenv','fldlg2','fldln2','fldl2e','fldl2t',
-        'fldpi','flds','fldz','fnop','fpatan','fprem','fprem1','fptan',
-        'frndint','frstor','fsave','fnsave','fscale','fsetpm','fsin',
-        'fsincos','fsqrt','fst','fstcw','fnstcw','fstenv','fnstenv',
-        'fstsw','fnstsw','ftst','fucom','fucomp','fucompp','fwait',
-        'fxam','fxtract','fyl2x','fyl2xp1','f2xm1','fildq','filds',
-        'fildl','fldl','fldt','fistq','fists','fistl','fstl','fsts',
-        'fstps','fistpl','fstpl','fistps','fistpq','fstpt','fcomps',
-        'ficompl','fcompl','ficomps','fcoms','ficoml','fcoml','ficoms',
-        'fiaddl','faddl','fiadds','fisubl','fsubl','fisubs','fsubs',
-        'fsubr','fsubrs','fisubrl','fsubrl','fisubrs','fmuls','fimull',
-        'fmull','fimuls','fdivs','fidivl','fdivl','fidivs','fdivrs',
-        'fidivrl','fdivrl','fidivrs','repe','repne','cpuid','fadds','popfl',
-        { mmx instructions supported by GNU AS v281 }
-        'emms','movd','movq','packssdw','packsswb','packuswb',
-        'paddb','paddd','paddsb','paddsw','paddusb','paddusw',
-        'paddw','pand','pandn','pcmpeqb','pcmpeqd','pcmpeqw',
-        'pcmpgtb','pcmpgtd','pcmpgtw','pmaddwd','pmulhw',
-        'pmullw','por','pslld','psllq','psllw','psrad','psraw',
-        'psrld','psrlq','psrlw','psubb','psubd','psubsb','psubsw',
-        'psubusb','psubusw','psubw','punpckhbw','punpckhdq',
-        'punpckhwd','punpcklbw','punpckldq','punpcklwd','pxor',
-        { KNI instructions (intel katmai)
-          - sorry, dont know how ATT mnemonics will be called }
-        'addps','addss','andnps','andnss','andps','andss','cmpeqps','cmpeqps',
-        'cmpleps','cmpless','cmpltps','cmpltss','cmpneqps','cmpneqss',
-        'cmpnleps','cmpnless','cmpnltps','cmpnltss','cmpordps','cmpordss',
-        'cmpunordps','cmpunordss','comiss','cvtpi2ps','cvtps2pi','cvtsi2ss',
-        'cvttps2pi','cvttss2si','divps','divss','fxrstor','fxsave','ldmxcsr',
-        'maskmovq','maxps','maxss','minps','minss','movaps','movhps','movlps',
-        'movmskps','movntps','movntq','movss','movups','mulps','mulss','orps',
-        'pavgb','pavgw','pextrw','pinsrw','pmaxsw','pmaxub','pminsw','pminub',
-        'pmovmskb','pmulhuw','prefetchnt','prefetch0','prefetch1','prefetch2',
-        'psadbw','pshufw','rcpps','rcpss','rsqrtps','rsqrtss','sfence',
-        'shufps','sqrtps','sqrtss','stmxcsr','subps','subss','ucomiss',
-        'unpckhps','unpcklps','xorps',
-        { 3Dnow instructions (amd k6-2)
-          - sorry, dont know how ATT mnemonics are called }
-         'femms','pavgusb','pf2id','pfacc','pfadd','pfcmpeq','pfcmpge',
-         'pfcmpgt','pfmax','pfmin','pfmul','pfrcp','pfrcpit1','pfrcpit2',
-         'pfrsqit1','pfrsqrt','pfsub','pfsubr','pi2fd','pmulhrw','prefetch',
-         'prefetchw'
-        );
-
-     {  topsize = (S_NO,S_B,S_W,S_L,S_BW,S_BL,S_WL,
-                  S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D,S_FV); }
-     att_opsize2str : array[topsize] of string[2] =
-       ('','b','w','l','bw','bl','wl',
-        's','l','q','s','l','t','d','q','v');
-        { dont know how vector will be coded }
-
-     att_reg2str : array[tregister] of string[6] =
-       ('','%eax','%ecx','%edx','%ebx','%esp','%ebp','%esi','%edi',
-        '%ax','%cx','%dx','%bx','%sp','%bp','%si','%di',
-        '%al','%cl','%dl','%bl','%ah','%ch','%bh','%dh',
-        '','%cs','%ds','%es','%fs','%gs','%ss',
-        '%st','%st(0)','%st(1)','%st(2)','%st(3)','%st(4)',
-        '%st(5)','%st(6)','%st(7)',
-        '%mm0','%mm1','%mm2','%mm3',
-        '%mm4','%mm5','%mm6','%mm7',
-        '%xmm0','%xmm1','%xmm2','%xmm3',
-        '%xmm4','%xmm5','%xmm6','%xmm7');
-{$endif ATTOP}
-
-{$ifdef INTELOP}
-      int_op2str : array[firstop..lastop] of string[9] =
-       ('mov','movzx','movsx','','add',
-        'call','idiv','imul','jmp','lea','mul','neg','not',
-        'pop','popad','push','pushad','ret','sub','xchg','xor',
-        'fild','cmp','jz','inc','dec','sete','setne','setl',
-        'setg','setle','setge','je','jne','jl','jg','jle','jge',
-        'or','fld','fadd','fmul','fsub','fdiv','fchs','fld1',
-        'fidiv','jnz','fstp','and','jno','','',
-        'enter','leave','cld','movs','rep','shl','shr','bound',
-        'jns','js','jo','sar','test',
-        'fcom','fcomp','fcompp','fxch','faddp','fmulp','fsubrp','fdivp',
-        'fnsts','sahf','fdivp','fsubp','setc','setnc','jc','jnc',
-        'ja','jae','jb','jbe','seta','setae','setb','setbe',
-        'aaa','aad','aam','aas','cbw','cdq','clc','cli',
-        'clts','cmc','cwd','cwde','daa','das','hlt','iretd','lahf',
-        'lods','lock','nop','pusha','pushf','pushfd',
-        'stc','std','sti','stos','wait','xlat','xlatb','movsx',
-        'movsx','movsx','movsx','movsx','movzx','popa','in',
-        'out','lds','lcs','les','lfs','lgs','lss','popf','sbb','adc',
-        'div','ror','rol','rcl','rcr','sal','shld','shrd',
-        'call','jmp','ret','jnae','jnb','jna','jnbe','jb','jnp',
-        'jpe','jpo','jnge','jng','jnl','jnle','jcxz','jecxz',
-        'loop','cmps','ins','outs','scas','bsf','bsr','bt','btc',
-        'btr','bts','int','int3','into','bound','bound',
-        'loopz','loope','loopnz','loopne','seto','setno','setnae',
-        'setnb','setz','setnz','setna','setnbe','sets','setns','setp',
-        'setpe','setnp','setpo','setnge','setnl','setng','setnle',
-        'arpl','lar','lgdt','lidt','lldt','lmsw','lsl','ltr','sgdt',
-        'sidt','sldt','smsw','str','verr','verw','fabs','fbld','fbstp',
-        'fclex','fnclex','fcos','fdecstp','fdisi','fndisi','fdivr',
-        'feni','fneni','ffree','fiadd','ficom','ficomp','fidivr',
-        'fimul','fincstp','finit','fninit','fist','fistp','fisub',
-        'fisubr','fldcw','fldenv','fldlg2','fldln2','fldl2e','fldl2t',
-        'fldpi','flds','fldz','fnop','fpatan','fprem','fprem1','fptan',
-        'frndint','frstor','fsave','fnsave','fscale','fsetpm','fsin',
-        'fsincos','fsqrt','fst','fstcw','fnstcw','fstenv','fnstenv',
-        'fstsw','fnstsw','ftst','fucom','fucomp','fucompp','fwait',
-        'fxam','fxtract','fyl2x','fyl2xp1','f2xm1','fildq','filds',
-        'fildl','fldl','fldt','fistq','fists','fistl','fstl','fsts',
-        'fstps','fistpl','fstpl','fistps','fistpq','fstpt','fcomps',
-        'ficompl','fcompl','ficomps','fcoms','ficoml','fcoml','ficoms',
-        'fiadd','fadd','fiadd','fisub','fsub','fisub','fsub',
-        'fsubr','fsubr','fisubr','fsubr','fisubr','fmul','fimul',
-        'fmul','fimul','fdiv','fidiv','fdiv','fidiv','fdivr',
-        'fidivr','fdivr','fidivr','repe','repne','cpuid','fadd','popfd',
-        { mmx instructions }
-        'emms','movd','movq','packssdw','packsswb','packuswb',
-        'paddb','paddd','paddsb','paddsw','paddusb','paddusw',
-        'paddw','pand','pandn','pcmpeqb','pcmpeqd','pcmpeqw',
-        'pcmpgtb','pcmpgtd','pcmpgtw','pmaddwd','pmulhw',
-        'pmullw','por','pslld','psllq','psllw','psrad','psraw',
-        'psrld','psrlq','psrlw','psubb','psubd','psubsb','psubsw',
-        'psubusb','psubusw','psubw','punpckhbw','punpckhdq',
-        'punpckhwd','punpcklbw','punpckldq','punpcklwd','pxor',
-        { KNI instructions (intel katmai) }
-        'addps','addss','andnps','andnss','andps','andss','cmpeqps','cmpeqps',
-        'cmpleps','cmpless','cmpltps','cmpltss','cmpneqps','cmpneqss',
-        'cmpnleps','cmpnless','cmpnltps','cmpnltss','cmpordps','cmpordss',
-        'cmpunordps','cmpunordss','comiss','cvtpi2ps','cvtps2pi','cvtsi2ss',
-        'cvttps2pi','cvttss2si','divps','divss','fxrstor','fxsave','ldmxcsr',
-        'maskmovq','maxps','maxss','minps','minss','movaps','movhps','movlps',
-        'movmskps','movntps','movntq','movss','movups','mulps','mulss','orps',
-        'pavgb','pavgw','pextrw','pinsrw','pmaxsw','pmaxub','pminsw','pminub',
-        'pmovmskb','pmulhuw','prefetchnt','prefetch0','prefetch1','prefetch2',
-        'psadbw','pshufw','rcpps','rcpss','rsqrtps','rsqrtss','sfence',
-        'shufps','sqrtps','sqrtss','stmxcsr','subps','subss','ucomiss',
-        'unpckhps','unpcklps','xorps',
-        { 3Dnow instructions (amd k6-2) }
-         'femms','pavgusb','pf2id','pfacc','pfadd','pfcmpeq','pfcmpge',
-         'pfcmpgt','pfmax','pfmin','pfmul','pfrcp','pfrcpit1','pfrcpit2',
-         'pfrsqit1','pfrsqrt','pfsub','pfsubr','pi2fd','pmulhrw','prefetch',
-         'prefetchw'
-        );
-
-     int_reg2str : array[tregister] of string[5] =
-       ('','eax','ecx','edx','ebx','esp','ebp','esi','edi',
-        'ax','cx','dx','bx','sp','bp','si','di',
-        'al','cl','dl','bl','ah','ch','bh','dh',
-        '','cs','ds','es','fs','gs','ss',
-        'st','st(0)','st(1)','st(2)','st(3)','st(4)','st(5)','st(6)','st(7)',
-        'mm0','mm1','mm2','mm3','mm4','mm5','mm6','mm7',
-        'xmm0','xmm1','xmm2','xmm3','xmm4','xmm5','xmm6','xmm7'
-        );
-
-     int_nasmreg2str : array[tregister] of string[5] =
-       ('','eax','ecx','edx','ebx','esp','ebp','esi','edi',
-        'ax','cx','dx','bx','sp','bp','si','di',
-        'al','cl','dl','bl','ah','ch','bh','dh',
-        '','cs','ds','es','fs','gs','ss',
-        'st0','st0','st1','st2','st3','st4','st5','st6','st7',
-        'mm0','mm1','mm2','mm3','mm4','mm5','mm6','mm7',
-        'xmm0','xmm1','xmm2','xmm3','xmm4','xmm5','xmm6','xmm7'
-        );
-{$endif INTELOP}
-
-
-  implementation
-
-    uses
-{$ifdef heaptrc}
-      ppheap,
-{$endif heaptrc}
-      strings,globals,verbose;
-
-
-    function reg2str(r : tregister) : string;
-      const
-         a : array[R_NO..R_BL] of string[3] =
-          ('','EAX','ECX','EDX','EBX','ESP','EBP','ESI','EDI',
-           'AX','CX','DX','BX','SP','BP','SI','DI',
-           'AL','CL','DL','BL');
-      begin
-         reg2str:=a[r];
-      end;
-
-
-    procedure disposereference(var r : preference);
-      begin
-         dispose(r);
-         r:=nil;
-      end;
-
-
-    function newreference(const r : treference) : preference;
-      var
-         p : preference;
-      begin
-         new(p);
-         p^:=r;
-         newreference:=p;
-      end;
-
-
-    function reg8toreg16(reg : tregister) : tregister;
-
-      begin
-         reg8toreg16:=reg32toreg16(reg8toreg32(reg));
-      end;
-
-    function reg16toreg8(reg : tregister) : tregister;
-
-      begin
-         reg16toreg8:=reg32toreg8(reg16toreg32(reg));
-      end;
-
-    function reg16toreg32(reg : tregister) : tregister;
-
-      begin
-         reg16toreg32:=tregister(byte(reg)-byte(R_EDI));
-      end;
-
-    function reg32toreg16(reg : tregister) : tregister;
-
-      begin
-         reg32toreg16:=tregister(byte(reg)+byte(R_EDI));
-      end;
-
-    function reg32toreg8(reg : tregister) : tregister;
-
-      begin
-         reg32toreg8:=tregister(byte(reg)+byte(R_DI));
-      end;
-
-    function reg8toreg32(reg : tregister) : tregister;
-
-      begin
-         reg8toreg32:=tregister(byte(reg)-byte(R_DI));
-      end;
-
-    function regtoreg8(reg : tregister) : tregister;
-
-     begin
-        regtoreg8:=reg32toreg8(reg);
-     end;
-
-    function regtoreg16(reg : tregister) : tregister;
-
-     begin
-        regtoreg16:=reg32toreg16(reg);
-     end;
-
-    function regtoreg32(reg : tregister) : tregister;
-
-     begin
-        regtoreg32:=reg;
-     end;
-
-    function regtoreg64(reg : tregister) : tregister;
-
-     begin
-        { to avoid warning }
-        regtoreg64:=R_NO;
-        internalerror(6464);
-     end;
-
-    function regsize(reg : tregister) : topsize;
-
-      begin
-         if reg in regset8bit then
-           regsize:=S_B
-         else if reg in regset16bit then
-           regsize:=S_W
-         else if reg in regset32bit then
-           regsize:=S_L;
-      end;
-
-    procedure reset_reference(var ref : treference);
-
-      begin
-         with ref do
-           begin
-              index:=R_NO;
-              base:=R_NO;
-              segment:=R_DEFAULT_SEG;
-              offset:=0;
-              scalefactor:=1;
-              is_immediate:=false;
-              symbol:=nil;
-           end;
-      end;
-
-      function new_reference(base : tregister;offset : longint) : preference;
-
-        var
-           r : preference;
-        begin
-           new(r);
-           reset_reference(r^);
-           r^.base:=base;
-           r^.offset:=offset;
-           new_reference:=r;
-        end;
-
-      procedure clear_reference(var ref : treference);
-
-      begin
-         reset_reference(ref);
-      end;
-
-
-{****************************************************************************
-                       objects for register de/allocation
- ****************************************************************************}
-
-
-    constructor tairegalloc.alloc(r : tregister);
-      begin
-        inherited init;
-        typ:=ait_regalloc;
-        allocation:=true;
-        reg:=r;
-      end;
-
-
-    constructor tairegalloc.dealloc(r : tregister);
-      begin
-        inherited init;
-        typ:=ait_regalloc;
-        allocation:=false;
-        reg:=r;
-      end;
-
-
-    constructor taitempalloc.alloc(pos,size:longint);
-      begin
-        inherited init;
-        typ:=ait_tempalloc;
-        allocation:=true;
-        temppos:=pos;
-        tempsize:=size;
-      end;
-
-
-    constructor taitempalloc.dealloc(pos,size:longint);
-      begin
-        inherited init;
-        typ:=ait_tempalloc;
-        allocation:=false;
-        temppos:=pos;
-        tempsize:=size;
-      end;
-
-
-{****************************************************************************
-                             TAI386
- ****************************************************************************}
-
-    constructor tai386.op_none(op : tasmop;_size : topsize);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=0;
-         opsize:=_size;
-
-         { the following isn't required ! }
-         op1:=nil;
-         op2:=nil;
-      end;
-
-    constructor tai386.op_reg(op : tasmop;_size : topsize;_op1 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_reg;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         op2:=nil;
-      end;
-
-    constructor tai386.op_const(op : tasmop;_size : topsize;_op1 : longint);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_const;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         op2:=nil;
-      end;
-
-    constructor tai386.op_ref(op : tasmop;_size : topsize;_op1 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opsize:=_size;
-         if _op1^.is_immediate then
-           begin
-              opxt:=top_const;
-              op1:=pointer(_op1^.offset);
-              disposereference(_op1);
-           end
-         else
-           begin
-              opxt:=top_ref;
-              op1:=pointer(_op1);
-           end;
-
-         op2:=nil;
-      end;
-
-    constructor tai386.op_loc(op : tasmop;_size : topsize;_op1 : tlocation);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opsize:=_size;
-         if (_op1.loc=loc_register) or (_op1.loc=loc_cregister)  then
-           begin
-             opxt:=top_reg;
-             op1:=pointer(_op1.register);
-           end
-         else
-         if _op1.reference.is_immediate then
-           begin
-              opxt:=top_const;
-              op1:=pointer(_op1.reference.offset);
-           end
-         else
-           begin
-              opxt:=top_ref;
-              op1:=pointer(newreference(_op1.reference));
-           end;
-
-         op2:=nil;
-      end;
-
-    constructor tai386.op_reg_reg(op : tasmop;_size : topsize;_op1,_op2 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_reg shl 4+Top_reg;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-
-      end;
-
-{$ifdef NO_OP3}
-    type
-       twowords=record
-          word1,word2:word;
-       end;
-{$endif  NO_OP3}
-
-    constructor tai386.op_reg_reg_reg(op : tasmop;_size : topsize;_op1,_op2,_op3 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_reg shl 8+Top_reg shl 4+Top_reg;
-         opsize:=_size;
-         op1:=pointer(_op1);
-{$ifdef NO_OP3}
-         twowords(op2).word1:=word(_op2);
-         twowords(op2).word2:=word(_op3);
-{$else NO_OP3}
-         op2:=pointer(_op2);
-         op3:=pointer(_op3);
-{$endif NO_OP3}
-      end;
-
-    constructor tai386.op_reg_ref(op : tasmop;_size : topsize;_op1 : tregister;_op2 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_reg;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         if _op2^.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2^.offset);
-              disposereference(_op2);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(_op2);
-           end;
-
-      end;
-
-    constructor tai386.op_reg_loc(op : tasmop;_size : topsize;_op1 : tregister;_op2 : tlocation);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_reg;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         if (_op2.loc=loc_register) or (_op2.loc=loc_cregister)  then
-           begin
-             opxt:=opxt+top_reg shl 4;
-             op2:=pointer(_op2.register);
-           end
-         else
-         if _op2.reference.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2.reference.offset);
-           end
-         else
-           begin
-              opxt:=opxt+Top_ref shl 4;
-              op2:=pointer(newreference(_op2.reference));
-           end;
-
-      end;
-
-    constructor tai386.op_loc_reg(op : tasmop;_size : topsize;_op1 : tlocation;_op2 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_reg shl 4;
-         opsize:=_size;
-         op2:=pointer(_op2);
-
-         if (_op1.loc=loc_register) or (_op1.loc=loc_cregister)  then
-           begin
-             opxt:=opxt+top_reg;
-             op1:=pointer(_op1.register);
-           end
-         else
-         if _op1.reference.is_immediate then
-           begin
-              opxt:=opxt+top_const;
-              op1:=pointer(_op1.reference.offset);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref;
-              op1:=pointer(newreference(_op1.reference));
-           end;
-
-      end;
-
-    constructor tai386.op_const_reg_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister;_op3 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_const+Top_reg shl 4+Top_reg shl 8;
-         opsize:=_size;
-         op1:=pointer(_op1);
-{$ifdef NO_OP3}
-         twowords(op2).word1:=word(_op2);
-         twowords(op2).word2:=word(_op3);
-{$else NO_OP3}
-         op2:=pointer(_op2);
-         op3:=pointer(_op3);
-{$endif NO_OP3}
-      end;
-
-{$IfNDef NO_OP3}
-    constructor tai386.op_const_reg_ref(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister;_op3 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_const+Top_reg shl 4+Top_ref shl 8;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-         op3:=pointer(_op3);
-      end;
-
-    constructor tai386.op_const_ref_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : preference;_op3 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_const+Top_ref shl 4+Top_reg shl 8;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-         op3:=pointer(_op3);
-      end;
-
-    constructor tai386.op_reg_reg_ref(op : tasmop;_size : topsize;_op1 : tregister;_op2 : tregister;_op3 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_reg+Top_reg shl 4+Top_ref shl 8;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-         op3:=pointer(_op3);
-      end;
-{$endif NO_OP3}
-
-
-    constructor tai386.op_const_reg(op : tasmop;_size : topsize;_op1 : longint;_op2 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         if ((op=A_CMP) or (op=A_AND) or (op=A_ADD) or
-            (op=A_ADC) or (op=A_SUB) or (op=A_SBB)) and
-            ((_size=S_B) or (_size=S_BW) or (_size=S_BL)) and
-            ((_op2<R_AL) or (_op2>R_DH)) and
-            (_op1>127) then
-           begin
-{$ifdef extdebug}
-              comment(v_warning,'wrong size for instruction due to implicit size extension !!');
-{$endif extdebug}
-              if _size=S_BW then
-                _size:=S_W
-              else
-                _size:=S_L;
-           end;
-         opxt:=Top_const+Top_reg shl 4;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-
-      end;
-
-    constructor tai386.op_const_const(op : tasmop;_size : topsize;_op1,_op2 : longint);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_const+Top_const shl 4;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-
-      end;
-
-    constructor tai386.op_const_ref(op : tasmop;_size : topsize;_op1 : longint;_op2 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_const;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         if _op2^.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2^.offset);
-              disposereference(_op2);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(_op2);
-           end;
-
-      end;
-
-    constructor tai386.op_const_loc(op : tasmop;_size : topsize;_op1 : longint;_op2 : tlocation);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_const;
-         opsize:=_size;
-         op1:=pointer(_op1);
-
-         if (_op2.loc=loc_register) or (_op2.loc=loc_cregister)  then
-           begin
-             opxt:=opxt+Top_reg shl 4;
-             op2:=pointer(_op2.register);
-           end
-         else
-         if _op2.reference.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2.reference.offset);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(newreference(_op2.reference));
-           end;
-
-      end;
-
-    constructor tai386.op_ref_reg(op : tasmop;_size : topsize;_op1 : preference;_op2 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_reg shl 4;
-         opsize:=_size;
-         op2:=pointer(_op2);
-
-         if _op1^.is_immediate then
-           begin
-              opxt:=opxt+top_const;
-              op1:=pointer(_op1^.offset);
-              disposereference(_op1);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref;
-              op1:=pointer(_op1);
-           end;
-
-      end;
-
-    constructor tai386.op_ref_ref(op : tasmop;_size : topsize;_op1,_op2 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opsize:=_size;
-
-         if _op1^.is_immediate then
-           begin
-              opxt:=top_const;
-              op1:=pointer(_op1^.offset);
-              disposereference(_op1);
-           end
-         else
-           begin
-              opxt:=top_ref;
-              op1:=pointer(_op1);
-           end;
-
-         if _op2^.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2^.offset);
-              disposereference(_op2);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(_op2);
-           end;
-
-      end;
-
-    constructor tai386.op_sym(op : tasmop;_size : topsize;_op1 : pasmsymbol);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         if (op=A_CALL) and (use_esp_stackframe) then
-          Message(cg_e_stackframe_with_esp);
-         opxt:=top_symbol;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op1ofs:=0;
-         op2:=nil;
-      end;
-
-
-    constructor tai386.op_sym_ofs(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         if (op=A_CALL) and (use_esp_stackframe) then
-          Message(cg_e_stackframe_with_esp);
-         opxt:=top_symbol;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op1ofs:=_op1ofs;
-         op2:=nil;
-      end;
-
-    constructor tai386.op_sym_ofs_reg(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : tregister);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=Top_symbol+Top_reg shl 4;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op1ofs:=_op1ofs;
-         op2:=pointer(_op2);
-      end;
-
-    constructor tai386.op_sym_ofs_ref(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : preference);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_symbol;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op1ofs:=_op1ofs;
-
-         if _op2^.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2^.offset);
-              disposereference(_op2);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(_op2);
-           end;
-
-      end;
-
-    constructor tai386.op_sym_ofs_loc(op : tasmop;_size : topsize;_op1 : pasmsymbol;_op1ofs:longint;_op2 : tlocation);
-
-      begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_symbol;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op1ofs:=_op1ofs;
-         if (_op2.loc=loc_register) or (_op2.loc=loc_cregister)  then
-           begin
-             opxt:=top_reg shl 4;
-             op2:=pointer(_op2.register);
-           end
-         else
-         if _op2.reference.is_immediate then
-           begin
-              opxt:=opxt+top_const shl 4;
-              op2:=pointer(_op2.reference.offset);
-           end
-         else
-           begin
-              opxt:=opxt+top_ref shl 4;
-              op2:=pointer(newreference(_op2.reference));
-           end;
-
-      end;
-
-  constructor tai386.op_reg_const(op:tasmop; _size: topsize; _op1: tregister; _op2: longint);
-
-    begin
-         inherited init;
-         typ:=ait_instruction;
-         opcode:=op;
-         opxt:=top_reg+top_const shl 4;
-         opsize:=_size;
-         op1:=pointer(_op1);
-         op2:=pointer(_op2);
-    end;
-
-   function Tai386.op1t:byte;
-
-    begin
-        op1t:=opxt and 15;
-    end;
-
-   function Tai386.op2t:byte;
-
-    begin
-        op2t:=(opxt shr 4) and 15;
-    end;
-
-   function Tai386.op3t:byte;
-
-    begin
-        op3t:=(opxt shr 8) and 15;
-    end;
-
-   destructor tai386.done;
-
-     begin
-       if op1t=top_ref then
-          begin
-             clear_reference(preference(op1)^);
-             dispose(preference(op1));
-          end;
-       if op2t=top_ref then
-          begin
-             clear_reference(preference(op2)^);
-             dispose(preference(op2));
-          end;
-        inherited done;
-     end;
-
-{****************************************************************************
-                             TAI_LABELED
- ****************************************************************************}
-
-    constructor tai386_labeled.op_lab(op : tasmop; l : plabel);
-
-      begin
-         inherited init;
-         typ:=ait_labeled_instruction;
-         opcode:=op;
-         lab:=l;
-         lab^.is_used:=true;
-         inc(lab^.refcount);
-      end;
-
-    destructor tai386_labeled.done;
-
-      begin
-         dec(lab^.refcount);
-         if lab^.refcount=0 then
-           Begin
-             lab^.is_used := False;
-             If Not(lab^.is_set) Then
-               Dispose(lab);
-           End;
-        inherited done;
-      end;
-
-
-{****************************************************************************
-                              Initialize
-****************************************************************************}
-
-var
-  old_exit: pointer;
-procedure i386_exit;{$ifndef FPC}far;{$endif}
-begin
-{$ifdef ITTABLE}
-  dispose(itcache);
-{$endif}
-  exitproc:=old_exit;
-end;
-
-
-Begin
-{$ifdef ITTABLE}
-  { create the itcache and reset to -1 }
-{$ifdef heaptrc}
-  pp_heap_init;
-{$endif heaptrc}
-  new(itcache);
-  FillChar(ItCache^,sizeof(titcache),$ff);
-{$endif}
-  old_exit := exitproc;
-  exitproc := @i386_exit;
-end.
-{
-  $Log$
-  Revision 1.42  1999-04-17 22:17:02  pierre
-    * ifdef USE_OP3 released (changed into ifndef NO_OP3)
-    * SHRD and SHLD first operand (ATT syntax) can only be CL reg or immediate const
-
-  Revision 1.41  1999/04/16 11:49:43  peter
-    + tempalloc
-    + -at to show temp alloc info in .s file
-
-  Revision 1.40  1999/04/16 10:00:57  pierre
-    + ifdef USE_OP3 code :
-      added all missing op_... constructors for tai386 needed
-      for SHRD,SHLD and IMUL code in assembler readers
-      (check in tests/tbs0123.pp)
-
-  Revision 1.39  1999/04/12 19:20:45  florian
-    * iret is in intel mode now written as iretd
-
-  Revision 1.38  1999/03/26 00:05:31  peter
-    * released valintern
-    + deffile is now removed when compiling is finished
-    * ^( compiles now correct
-    + static directive
-    * shrd fixed
-
-  Revision 1.37  1999/02/26 00:48:20  peter
-    * assembler writers fixed for ag386bin
-
-  Revision 1.36  1999/02/25 21:02:38  peter
-    * ag386bin updates
-    + coff writer
-
-  Revision 1.35  1999/02/22 02:15:23  peter
-    * updates for ag386bin
-
-  Revision 1.34  1999/01/26 11:32:14  pierre
-   * ppheap init code can be called before any getmem
-
-  Revision 1.33  1999/01/25 09:29:38  florian
-    * very rare problem with in-operator fixed, mainly it was a problem of
-      emit_to_reg32 (typo in case ranges)
-
-  Revision 1.32  1999/01/24 22:32:33  florian
-    * well, more changes, especially parts of secondload ported
-
-  Revision 1.31  1999/01/23 23:29:31  florian
-    * first running version of the new code generator
-    * when compiling exceptions under Linux fixed
-
-  Revision 1.30  1999/01/19 10:50:01  pierre
-   * avoid result no set warning in regtoreg64
-
-  Revision 1.29  1999/01/19 10:19:02  florian
-    * bug with mul. of dwords fixed, reported by Alexander Stohr
-    * some changes to compile with TP
-    + small enhancements for the new code generator
-
-  Revision 1.28  1999/01/13 11:34:06  florian
-    * unified i386.pas for the old and new code generator
-
-  Revision 1.27  1999/01/10 15:37:53  peter
-    * moved some tables from ra386*.pas -> i386.pas
-    + start of coff writer
-    * renamed asmutils unit to rautils
-
-  Revision 1.26  1999/01/08 12:39:24  florian
-    Changes of Alexander Stohr integrated:
-      + added KNI opcodes
-      + added KNI registers
-      + added 3DNow! opcodes
-      + added 64 bit and 128 bit register flags
-      * translated a few comments into english
-
-  Revision 1.25  1998/12/28 15:49:03  peter
-    * no it table necessary if no asm parser is used
-
-  Revision 1.24  1998/12/20 16:21:24  peter
-    * smartlinking doesn't crash anymore
-
-  Revision 1.23  1998/12/19 00:23:49  florian
-    * ansistring memory leaks fixed
-
-  Revision 1.22  1998/12/18 17:24:51  peter
-    * don't include intel list if not necessary
-
-  Revision 1.20  1998/12/11 16:10:09  florian
-    + shifting for 64 bit ints added
-    * bug in getexplicitregister32 fixed: usableregs wasn't decremented !!
-
-  Revision 1.19  1998/12/10 09:47:22  florian
-    + basic operations with int64/qord (compiler with -dint64)
-    + rtti of enumerations extended: names are now written
-
-  Revision 1.18  1998/11/26 21:45:30  jonas
-    - removed A_CLTD opcode (use A_CDQ instead)
-    * changed cbw, cwde and cwd to cbtw, cwtl and cwtd in att_op2str array
-    * in daopt386: adapted AsmInstr array to reflect changes + fixed line too long
-
-  Revision 1.17  1998/11/13 15:40:19  pierre
-    + added -Se in Makefile cvstest target
-    + lexlevel cleanup
-      normal_function_level main_program_level and unit_init_level defined
-    * tins_cache grown to A_EMMS (gave range check error in asm readers)
-      (test added in code !)
-    * -Un option was wrong
-    * _FAIL and _SELF only keyword inside
-      constructors and methods respectively
-
-  Revision 1.16  1998/11/13 10:13:46  peter
-    + cpuid,emms support for asm readers
-
-  Revision 1.15  1998/11/05 23:48:20  peter
-    * recordtype.field support in constant expressions
-    * fixed imul for oa_imm8 which was not allowed
-    * fixed reading of local typed constants
-    * fixed comment reading which is not any longer a separator
-
-  Revision 1.14  1998/10/28 00:08:47  peter
-    + leal procsym,eax is now allowed
-    + constants are now handled also when starting an expression
-    + call *pointer is now allowed
-
-  Revision 1.13  1998/10/14 08:47:17  pierre
-    * bugs in secondfuncret for result in subprocedures removed
-
-  Revision 1.12  1998/10/08 17:17:20  pierre
-    * current_module old scanner tagged as invalid if unit is recompiled
-    + added ppheap for better info on tracegetmem of heaptrc
-      (adds line column and file index)
-    * several memory leaks removed ith help of heaptrc !!
-
-  Revision 1.11  1998/09/20 17:11:23  jonas
-    * released REGALLOC
-
-  Revision 1.10  1998/09/14 21:30:45  peter
-    * added inherited done
-
-  Revision 1.9  1998/06/04 23:51:41  peter
-    * m68k compiles
-    + .def file creation moved to gendef.pas so it could also be used
-      for win32
-
-  Revision 1.8  1998/05/23 01:21:09  peter
-    + aktasmmode, aktoptprocessor, aktoutputformat
-    + smartlink per module $SMARTLINK-/+ (like MMX) and moved to aktswitches
-    + $LIBNAME to set the library name where the unit will be put in
-    * splitted cgi386 a bit (codeseg to large for bp7)
-    * nasm, tasm works again. nasm moved to ag386nsm.pas
-
-  Revision 1.7  1998/05/20 09:42:34  pierre
-    + UseTokenInfo now default
-    * unit in interface uses and implementation uses gives error now
-    * only one error for unknown symbol (uses lastsymknown boolean)
-      the problem came from the label code !
-    + first inlined procedures and function work
-      (warning there might be allowed cases were the result is still wrong !!)
-    * UseBrower updated gives a global list of all position of all used symbols
-      with switch -gb
-
-  Revision 1.6  1998/05/04 17:54:25  peter
-    + smartlinking works (only case jumptable left todo)
-    * redesign of systems.pas to support assemblers and linkers
-    + Unitname is now also in the PPU-file, increased version to 14
-
-  Revision 1.5  1998/04/29 10:33:53  pierre
-    + added some code for ansistring (not complete nor working yet)
-    * corrected operator overloading
-    * corrected nasm output
-    + started inline procedures
-    + added starstarn : use ** for exponentiation (^ gave problems)
-    + started UseTokenInfo cond to get accurate positions
-
-  Revision 1.4  1998/04/09 15:46:38  florian
-    + register allocation tracing stuff added
-
-  Revision 1.3  1998/04/08 16:58:02  pierre
-    * several bugfixes
-      ADD ADC and AND are also sign extended
-      nasm output OK (program still crashes at end
-      and creates wrong assembler files !!)
-      procsym types sym in tdef removed !!
-
-  Revision 1.2  1998/04/04 05:29:57  carl
-    * bugfix of crash with ins_cache and popfd
-    * bugfix of pushfd typo mistake in att output
-    + added setc, and setnc
-}