


    /* EPC Imp to C Translation Release 4 Version Apr 95 */


#include "imptoc.h"

/**                                                                  p5defs7  */
/** 02Feb97  Corrected movb table entry to disallow 32 bit literal            **/
/** 28Nov96  Added Pentium PRO only opcodes to tables                         **/
/**                                                                  p5defs6 */
/** 15Nov96  used UPPER CASE for constintegers as for C                      */
/**                                                                  p5defs5 */
/** 21Oct96  Ame ended instrmnem for GCC assembler which is less tolerant    */
/**                                                                  p5defs4 */
/** 29Nov95  Corrected side effects table for INC &DEC which set the         */
/**          the flags register in a slightly nonstandard way(pds)           */
/** 23Nov95  Added movb & retn to help optimise bit operations(pds)          */
/**                                                                  p5defs3 */
/** 08Aug95  Added 80 bit load and store instructions(pds)                   */
/**                                                                  p5defs2 */
/** 01Jun95  Changes to make assembler acceptable to GNU as                  */
/**                                                                  p5defs1 */
/** 11Oct93  Initial version                                                 */
/***/
/**/
/* Copyright (c) 1991 Edinburgh Portable Compiler Ltd. All Rights Reserved   */
/**/
/**/
/*************************************************************************/
/**   Internal respresentation of P5 opcodes                            **/
/**                                                                     **/
/**  All opcodes are represented as Pseudo ops with a Form and Class    **/
/**                                                                     **/
/**  Form defines the format of the binary instruction                  **/
/**  Class defines the resources used for instruction scheduling        **/
/**                                                                     **/
/**                                                                     **/
/*************************************************************************/
 
 
/**/
/* Definition of forms                                                       */
/**/
#define NOFORM 0	/* No register fields                                       */
#define JFORM 1		/* Jump Relative Form                                        */
#define JRFORM 2	/* jump to dest in register                                 */
#define X2LFORM 3	/* register form with rd&literal                           */
#define X2FORM 4	/* Normal two operans form                                  */
#define X2IFORM 5	/* As above but one operand implied(eax or ecx)            */
#define X1FORM 6	/* One operand only                                         */
#define X1LFORM 7	/* Single literal operand                                  */
#define F1FORM 8	/* Floating op Stktos only                                  */
#define F2FORM 9	/* Floating op 2 Registers                                  */
#define FMFORM 10	/* Floating op mem & TOS                                   */
#define F2pFORM 11	/* Floating op 2 items tos pooped                         */
#define F2ppFORM 12	/* Floating op top 2 items both popped                   */
#define SLITFORM 13	/* Shift by literal instruction                          */
#define SHFORM 14	/* Shift by ECX                                            */
#define STKFORM 15	/* One operand is popped or pushed                        */
#define F2rFORM 16	/* Floating op 2 Registers( Result -> deepest not tos)    */
/***/
/**/
/* definition of instruction groups                                          */
/**/
/*************************************************************************/
/**                                                                     **/
/**  n  represents functional grouping as follows                       **/
/**                                                                     **/
/**  1  integer loads                                                   **/
/**  2  floating point loads                                            **/
/**  3  integer stores                                                  **/
/**  4  floating point stores                                           **/
/**  5  memory read/write (load multiple etc)                           **/
/**  6  integer arithmetic and logical ops                              **/
/**  7  integer op (Unfailing ie can be executed speculatively)         **/
/**  8  branch on condition                                             **/
/**  9  branch and link on condition                                    **/
/** 10  special register red/write                                      **/
/** 11  floating-point unary op (rs2 => rd)                             **/
/** 12  floating-point binary arithmetic (rs1 op rs2 => rd)             **/
/** 13  shifts                                                          **/
/** 14  floating-point comparison                                       **/
/**                                                                     **/
/** **********************************************************************/
/**/
#define SPECIAL 0
#define INTLOAD 1
#define FPLOAD 2
#define INTSTORE 3
#define FPSTORE 4
#define RWMEM 5
#define INTOPS 6
#define INTOPSu 7
#define BCC 8
#define JUMPLINK 9
#define SPECREGrw 10
#define FPOPS1 11
#define FPOPS2 12
#define SHIFTS 13
#define FPCOMPARE 14
#define FPLlit 15
#define STROP 16
#define HICODEFIX 17
#define MAXCODEGROUP HICODEFIX
/**/
/**/
/* prefix indices                                                            */
/**/
#define iprefix 0	/* instruction prefix comes first                          */
#define asprefix 1	/* address size prefix comes second                       */
#define osprefix 2	/* operand size prefix is third                           */
#define soprefix 3	/* segment override prefix is last                        */
/**/
/* values for iprefiz                                                        */
/**/
#define LOOPNZ 224	/*E0*/
#define LOOPNE 224	/*E0*/
#define LOOPZ 225	/*E1*/
#define LOOPE 225	/*E1*/
#define JCXZ 227	/*E3*/
 
#define REPNZ 242	/*F2*/
#define REP 243		/*F3*/
#define REPE 243	/*F3*/
/**/
/* value for as&osprefix                                                     */
/**/
#define SHORTADDR 103	/*67*/
#define SHORTOPND 102	/*66*/
/**/
/* value fos segment override                                                */
/**/
/**/
/*        pseudoop         group             Form          explanation              */
#define Unimp 0		/*NOFORM*/	/*  SPECIAL        Unimplemnted                   */
#define ADC 1		/*X2FORM*/	/*  INTOPS         Add with carry                   */
#define ADD 2		/*X2FORM*/	/*  INTOPS         Add integers                     */
#define AND 3		/*X2FORM*/	/*  INTOPSu        Logically and integers           */
#define bound 4		/*X2FORM*/	/*  INTOPSu        Interrupt on bound check       */
#define bt 5		/*X2FORM*/	/*  INTOPSu        Copy bit(1st Opnd) of (2nd opnd) to carry flag*/
#define CALL 6		/*JFORM*/	/*  JUMPLINK       Call relative                   */
#define CALLPTR 7	/*JRFORM*/	/*  JUMPLINK       Call via ptr                */
#define cwde 8		/*NOFORM*/	/* INTOPS          Convert 16 to 32 bits in acc    */
#define clc 9		/*NOFORM*/	/* SPECREGrw       Clear carry                      */
#define CLD 10		/*NOFORM*/	/* SPECREGrw       Clear direction flag            */
#define cmc 11		/*NOFORM*/	/* SPECREGrw       Complement carry flag           */
#define CMP 12		/*X2FORM*/	/* INTOPS          Compare Two integers            */
#define CMPSB 13	/*NOFORM*/	/* STROP           Compare signed bytes          */
#define CMPSD 14	/*NOFORM*/	/* STROP           Compare signed words          */
#define CMPB 15		/*X2FORM*/	/* INTOPS          Compare Two bytes              */
#define CDQ 16		/*NOFORM*/	/* INTOPS          Convert double to Quad          */
#define DEC 17		/*X1FORM*/	/* INTOPS          Decrement register or store word*/
#define DIV 18		/*X2IFORM*/	/*  INTOPSu        Divide integerin EDX:EAX by operand*/
#define ENTER 19	/*STKFORM*/	/* SPECIAL         Enter procedure               */
#define IDIVIDE 20	/*X2IFORM*/	/* INTOPS          Signed version of div       */
#define IMUL 21		/*X2IFORM*/	/*  INTOPS         Signed multiply of EAX         */
#define IMULD 22	/*X2IFORM*/	/* INTOPS          Multiply Eax by operand => edx:eax*/
#define INC 23		/*X1FORM*/	/* INTOPS          Increment reg or store by one   */
#define JO 24		/*JFORM*/	/*  BCC            Jump relative if overflow        */
#define JNO 25		/*JFORM*/	/*  BCC            Jump relative if not overflow   */
#define JB 26		/*JFORM*/	/*  BCC            Jump relative if below ie unsigned <*/
#define JNB 27		/*JFORM*/	/*  BCC            Jump relative if not below ie u>=*/
#define JE 28		/*JFORM*/	/*  BCC            Jump relative if equal           */
#define JNE 29		/*JFORM*/	/*  BCC            Jump relative if not equal      */
#define JBE 30		/*JFORM*/	/*  BCC            Jump relative if below or equal */
#define JA 32		/*JFORM*/	/*  BCC            Jump relative if above           */
#define JS 33		/*JFORM*/	/*  BCC            Jump relative if sigend          */
#define JNS 34		/*JFORM*/	/*  BCC            Jump relative if not signed     */
#define JP 35		/*JFORM*/	/*  BCC            Jump relative if parity even     */
#define JNP 36		/*JFORM*/	/*  BCC            Jump relative if parity odd     */
#define JL 37		/*JFORM*/	/*  BCC            Jump relative if low ie <        */
#define JGE 38		/*JFORM*/	/*  BCC            Jump relative if greter or equal*/
#define JLE 39		/*JFORM*/	/*  BCC            Jump relative if less than or equall*/
#define JG 40		/*JFORM*/	/*  BCC            Jump relative if greater         */
#define JMP 41		/*JFORM*/	/*  BCC            Unconditional PC relative jump  */
#define JMPPTR 42	/*JRFORM*/	/*  BCC            Unconditional jump via a ptr */
#define LAHF 43		/*NOFORM*/	/* SPECREGrw       Load AH with flags             */
#define les 44		/*X2FORM*/	/*  INTLOAD        Load ES & register with long pointer*/
#define lds 45		/*X2FORM*/	/*  INTLOAD        Load DS & register with long pointer*/
#define LEA 46		/*X2FORM*/	/*  INTOPS          Load effective address to register*/
#define LBNOX 47        /*X2FORM*/      /*  INTLOAD        Load byte with no sign extension    */
#define LB 48		/*X2FORM*/	/*  INTLOAD        Load byte                        */
#define LBU 49		/*X2FORM*/	/*  INTLOAD        Load byte unsigned              */
#define LH 50		/*X2FORM*/	/*  INTLOAD        Load halfword                    */
#define LHU 51		/*X2FORM*/	/*  INTLOAD        Load halfword unsigned          */
#define LW 52		/*X2FORM*/	/*  INTLOAD        Load word                        */
#define LEAVE 53	/*STKFORM*/	/*  SPECIAL        Leave procedure               */
#define LODSB 54	/*NOFORM*/	/*  STROP          Move byte to eax from [SI]    */
#define LODSD 55	/*NOFORM*/	/*  STROP          Move word from [SI] to EAX reg*/
#define MOV 56		/*X2FORM*/	/*  INTOPSu        Move reg or literal to reg(not loads)*/
#define movsr 57	/*X1FORM*/	/* SPECREGrw       MOve to(from) Segment REgs    */
#define MOVSB 58	/*NOFORM*/	/*  STROP          Move signed byte from [si] to [di]*/
#define MOVSD 59	/*NOFORM*/	/*  STROP          Move signed word from [si] to [di]*/
#define MOVSX 60	/*X2FORM*/	/*  STROP          Move with sign extension      */
#define MOVZX 61	/*X2FORM*/	/*  STROP          Move with zero extension      */
#define MOVB 62		/*X2FORM*/	/*  INTOPSu        Move bytereg or literal to bytereg*/
#define MUL 63		/*X2IFORM*/	/*  INTOPSu        Multiply EAX by integer         */
#define NEG 64		/*X1FORM*/	/*  INTOPS         Negate signed integer           */
#define NOP 65		/*NOFORM*/	/* SPECIAL         No operation                    */
#define NOT 66		/*X1FORM*/	/*  INTOPSu        Not integer                     */
#define OR 67		/*X2FORM*/	/*  INTOPSu        Or integers                      */
#define POP 68		/*STKFORM*/	/*  SPECIAL        POP operand from stack          */
#define PUSH 69		/*STKFORM*/	/*  SPECIAL        Push operand onto stack        */
#define ROL 70		/*SLITFORM*/	/* SHIFTS          Rotate left by lit              */
#define ROLV 71		/*X2IFORM*/	/* SHIFTS          Rotate left ECX times          */
#define ROR 72		/*SLITFORM*/	/* SHIFTS          Rotate right by lit             */
#define RORV 73		/*X2IFORM*/	/* SHIFTS          Rotate right ECX times         */
#define SAHF 74		/*NOFORM*/	/* SPECREGrw       Store AH into flags            */
#define SB 75		/*X2FORM*/	/* INTSTORE        Store byte                       */
#define ST 76		/*X2FORM*/	/* INTSTORE        Store word                       */
#define SH 77		/*X2FORM*/	/* INTSTORE        Store halfword                   */
#define SETO 78		/*X1FORM*/	/*  INTOPSu        Set Byte if overflow           */
#define SETNO 80	/*X1FORM*/	/*  INTOPSu        Set Byte if not overflow      */
#define SETB 81		/*X1FORM*/	/*  INTOPSu        Set Byte if below ie unsigned <*/
#define SETNB 82	/*X1FORM*/	/*  INTOPSu        Set Byte if not below ie u>=  */
#define SETE 83		/*X1FORM*/	/*  INTOPSu        Set Byte if equal              */
#define SETNEQ 84	/*X1FORM*/	/*  INTOPSu        Set Byte if not equal        */
#define SETBE 85	/*X1FORM*/	/*  INTOPSu        Set Byte if below or equal    */
#define SETA 86		/*X1FORM*/	/*  INTOPSu        Set Byte if above              */
#define SETS 87		/*X1FORM*/	/*  INTOPSu        Set Byte if sigend             */
#define SETNS 88	/*X1FORM*/	/*  INTOPSu        Set Byte if not signed        */
#define SETP 89		/*X1FORM*/	/*  INTOPSu        Set Byte if parity even        */
#define SETNP 90	/*X1FORM*/	/*  INTOPSu        Set Byte if parity odd        */
#define SETL 91		/*X1FORM*/	/*  INTOPSu        Set Byte if low ie <           */
#define SETGE 92	/*X1FORM*/	/*  INTOPSu        Set Byte if greter or equal   */
#define SETLEQ 93	/*X1FORM*/	/*  INTOPSu        Set Byte if less than or equall*/
#define SETG 94		/*X1FORM*/	/*  INTOPSu        Set Byte if greater            */
#define salunused 96	/*SLITFORM*/	/*  SHIFTS         shift left arithmetic by constant*/
#define salvunused 97	/*X2IFORM*/	/*  SHIFTS         shift left arithmetic by ECX*/
#define SHL 98		/*SLITFORM*/	/*  SHIFTS         shift left logical by constant  */
#define SHLV 99		/*X2IFORM*/	/*  SHIFTS         shift left logical by ECX      */
#define SAR 100		/*SLITFORM*/	/*  SHIFTS         shift right arithmetic by constant*/
#define SARV 101	/*X2IFORM*/	/*  SHIFTS         shift right arithmetic by ECX */
#define SHR 102		/*SLITFORM*/	/*  SHIFTS         shift right logical by constant*/
#define SHRV 103	/*X2IFORM*/	/*  SHIFTS         shift right logical by ECX    */
#define SHLD 104	/*SLITFORM*/	/*  SHIFTS         Shift left double (unusual)   */
#define SHLDV 105	/*SHFORM*/	/*  SHIFTS         Shift left double (unusual)  */
#define SHRD 106	/*SLITFORM*/	/*  SHIFTS         Shift right double (unusual)  */
#define SHRDV 107	/*SHFORM*/	/*  SHIFTS         Shift right double (unusual) */
#define SBB 108		/*X2FORM*/	/*  INTOPS         Subtract integers with borrow  */
#define SUB 109		/*X2FORM*/	/*  INTOPS         Subtract integers              */
#define stc 110		/*NOFORM*/	/* SPECREGrw       Set carry flag                 */
#define STD 112		/*NOFORM*/	/* SPECREGrw       Set direction flag             */
#define STOSB 113	/*NOFORM*/	/*  STROP          Store string byte            */
#define STOSW 114	/*NOFORM*/	/*  STROP          Store string word            */
#define TESTI 115	/*X1LFORM*/	/*  INTOPSu        test against immediate opnd  */
#define TEST 116	/*X2FORM*/	/*  INTOPSu        Test 2 operands               */
#define wait 117	/*NOFORM*/	/* SPECIAL         wait (for ints pending )      */
#define XCHG 118	/*X2FORM*/	/* INTSTORE        Exchange register with data   */
#define XOR 119		/*X2FORM*/	/*  INTOPSu        Exclusive or integers          */
#define XORI 120	/*X2FORM*/	/*  INTOPSu        Exclusive or integer with immediate value*/
#define RET 121		/*NOFORM*/	/* SPECIAL         Return form procedure          */
#define POPFD 122	/*NOFORM*/	/* SPECREGrw       Pop the condition flags      */
#define PUSHFD 123	/*NOFORM*/	/* SPECREGrw       Push the condition flags    */
#define BSWAP 124	/*X1FORM*/	/*  INTOPSu        Swap the nominated reg       */
#define RETN 125	/*NOFORM*/	/* SPECIAL         Return  from procedure & pop params*/
/** the next 16 opcodes only work on Pentium PRO chips                       */
#define CMOVO 126	/*X2FORM*/	/*  INTOPSu        Conditional Move if overflow */
#define CMOVNO 127	/*X2FORM*/	/*  INTOPSu        Conditional Move if not overflow*/
#define CMOVB 128	/*X2FORM*/	/*  INTOPSu        Conditional Move if below ie unsigned <*/
#define CMOVNB 129	/*X2FORM*/	/*  INTOPSu        Conditional Move if not below ie u>=*/
#define CMOVE 130	/*X2FORM*/	/*  INTOPSu        Conditional Move if equal    */
#define CMOVNEQ 131	/*X2FORM*/	/*  INTOPSu        Conditional Move if not equal*/
#define CMOVBE 132	/*X2FORM*/	/*  INTOPSu        Conditional Move if below or equal*/
#define CMOVA 133	/*X2FORM*/	/*  INTOPSu        Conditional Move if above    */
#define CMOVS 134	/*X2FORM*/	/*  INTOPSu        Conditional Move if sigend   */
#define CMOVNS 135	/*X2FORM*/	/*  INTOPSu        Conditional Move if not signed*/
#define CMOVP 136	/*X2FORM*/	/*  INTOPSu        Conditional Move if parity even*/
#define CMOVNP 137	/*X2FORM*/	/*  INTOPSu        Conditional Move if parity odd*/
#define CMOVL 138	/*X2FORM*/	/*  INTOPSu        Conditional Move if low ie < */
#define CMOVGE 139	/*X2FORM*/	/*  INTOPSu        Conditional Move if greter or equal*/
#define CMOVLEQ 140	/*X2FORM*/	/*  INTOPSu        Conditional Move if less than or equall*/
#define CMOVG 141	/*X2FORM*/	/*  INTOPSu        Conditional Move if greater  */
/***/
/**/
/* Now the floating ops                                                      */
/**/
#define FILD (16+128)	/*F1FORM*/	/*  FPLOAD         Load integer as float to TOS*/
#define FLDd (16+129)	/*F1FORM*/	/*  FPLOAD         Load Double to TOS       */
#define FLDm (16+130)	/*F1FORM*/	/*  FPLOAD         Load REal to TOS         */
#define FISTP (16+131)	/*F2pFORM*/	/*  FPSTORE        Store TOS as integer and POP*/
#define FSTPd (16+132)	/*F2pFORM*/	/*  FPSTORE        Store tos as double and POP*/
#define FSTPm (16+133)	/*F2pFORM*/	/*  FPSTORE        Store tos as real and POP*/
#define FIST (16+134)	/*F2FORM*/	/*  FPSTORE        Store tos as integer     */
#define FSTd (16+135)	/*F2FORM*/	/*  FPSTORE        Store tos as double      */
#define FSTm (16+136)	/*F2FORM*/	/*  FPSTORE        Store tos as real        */
#define FIADDm (16+137)	/*FMFORM*/	/*  FPOPS2         Add memory integer to Tos*/
#define FADDd (16+138)	/*FMFORM*/	/*  FPOPS2         Add memory double to TOS*/
#define FADDm (16+139)	/*FMFORM*/	/*  FPOPS2         Add memory real to TOS  */
#define FADDP (16+140)	/*F2FORM*/	/*  FPOPS2         Add to stack items and pop Tos*/
#define FADD (16+141)	/*F2FORM*/	/*  FPOPS2         Add two stack items      */
#define FIMULm (16+142)	/*FMFORM*/	/*  FPOPS2         Multiply memory integer to Tos*/
#define FMULd (16+144)	/*FMFORM*/	/*  FPOPS2         Multiply memory double to Tos*/
#define FMULm (16+145)	/*FMFORM*/	/*  FPOPS2         Multiply memory real to TOS*/
#define FMULP (16+146)	/*F2FORM*/	/*  FPOPS2         Multiply two stack items and pop tos*/
#define FMUL (16+147)	/*F2FORM*/	/*  FPOPS2         Multiply two stack items */
#define FISUBm (16+148)	/*FMFORM*/	/*  FPOPS2         Subtract memory integer from tos*/
#define FSUBd (16+149)	/*FMFORM*/	/*  FPOPS2         Subtract memory double from tos*/
#define FSUBm (16+150)	/*FMFORM*/	/*  FPOPS2         Subtract memory real from tos*/
#define FSUBP (16+151)	/*F2FORM*/	/*  FPOPS2         Subtract two stack items and pop tos*/
#define FSUB (16+152)	/*F2FORM*/	/*  FPOPS2         Subtract two stack items */
#define FISUBRm (169)	/*FMFORM*/	/*  FPOPS2         Reversesub memory integer from tos*/
#define FSUBRd (16+154)	/*FMFORM*/	/*  FPOPS2         Reversesub memory double from tos*/
#define FSUBRm (16+155)	/*FMFORM*/	/*  FPOPS2         Reversesub memory real from tos*/
#define FSUBRP (172)	/*F2pFORM*/	/*  FPOPS2         Reversesub two stack items and pop*/
#define FSUBR (16+157)	/*F2FORM*/	/*  FPOPS2         Reversesub two stack items*/
#define FIDIVm (16+158)	/*FMFORM*/	/*  FPOPS2         Divide memory integer into tos*/
#define FDIVd (16+160)	/*FMFORM*/	/*  FPOPS2         Divide memory double into tos*/
#define FDIVm (16+161)	/*FMFORM*/	/*  FPOPS2         Divide memory real into tos*/
#define FDIVP (16+162)	/*F2FORM*/	/*  FPOPS2         Divide two stack items and pop*/
#define FDIV (16+163)	/*F2FORM*/	/*  FPOPS2         Divide two stack items   */
#define FIDIVRm (180)	/*FMFORM*/	/*  FPOPS2         Reverse Divide memory integer into tos*/
#define FDIVRd (16+165)	/*FMFORM*/	/*  FPOPS2         Reverse Divide memory double into tos*/
#define FDIVRm (16+166)	/*FMFORM*/	/*  FPOPS2         Reverse Divide memory real into tos*/
#define FDIVRP (16+167)	/*F2FORM*/	/*  FPOPS2         Reverse Divide two stack items and pop*/
#define FDIVR (16+168)	/*F2FORM*/	/*  FPOPS2         Reverse Divide two stack items*/
#define FICOMm (16+169)	/*FMFORM*/	/*  FPCOMPARE      Compare integer with TOS*/
#define FICOMPm (186)	/*FMFORM*/	/*  FPCOMPARE      Compare integer with TOS and POP*/
#define FCOMd (16+171)	/*FMFORM*/	/*  FPCOMPARE      Compare memory double with TOS*/
#define FCOMm (16+172)	/*FMFORM*/	/*  FPCOMPARE      Compare memory real with TOS*/
#define FCOM (16+173)	/*F2FORM*/	/*  FPCOMPARE      Compare two stack items  */
#define FCOMPd (16+174)	/*FMFORM*/	/*  FPCOMPARE      Compare memory double with TOS*/
#define FCOMPm (16+176)	/*FMFORM*/	/*  FPCOMPARE      Compare memory real with TOS*/
#define FCOMP (16+177)	/*F2pFORM*/	/*  FPCOMPARE      Compare two stack items %AND pop tos*/
#define FCOMPP (16+178)	/*F2ppFORM*/	/*  FPCOMPARE      Compare tos and tos-1 %AND pop both*/
#define FLDCW (16+179)	/*X2IFORM*/	/*  SPECREGrw      Load F control word from Memory*/
#define FSTCW (16+180)	/*X2IFORM*/	/*  SPECREGrw      Store F control word from Memory*/
#define FSTSW (16+181)	/*X2IFORM*/	/*  SPECREGrw      Store F status word to memory or AX*/
#define FTST (16+182)	/*F1FORM*/	/*  FPCOMPARE      Compare TOS with zero    */
#define FCHS (16+183)	/*F1FORM*/	/*  FPOPS1         Change sign of TOS       */
#define FLDZ (16+184)	/*F1FORM*/	/*  FPOPS1         Push zero onto stack     */
#define FLD1 (16+185)	/*F1FORM*/	/*  FPOPS1         Push 1.0 onto stack      */
#define FLDL2E (16+186)	/*F1FORM*/	/*  FPOPS1         Push log(2)e onto stack*/
#define FLDLN2 (16+187)	/*F1FORM*/	/*  FPOPS1         Push log(e)2 onto stack*/
#define FLDLG2 (16+188)	/*F1FORM*/	/*  FPOPS1         Push log(10)2 onto stack*/
#define FLDPI (16+189)	/*F1FORM*/	/*  FPOPS1         Push PI onto stack      */
#define FABS (16+190)	/*F1FORM*/	/*  FPOPS1         Take ABS of TOS          */
#define FDECSTP (208)	/*NOFORM*/	/*  SPECREGrw      Decrement stack pointer*/
#define FRNDINT (209)	/*F1FORM*/	/*  FPOPS1         Round TOS to integer per FCW*/
#define FXCH (16+194)	/*F1FORM*/	/*  FPOPS1         Permute stack            */
#define FSQRT (16+195)	/*F1FORM*/	/*  FPOPS1         Replace Tos by sqrt(tos)*/
#define FSIN (16+196)	/*F1FORM*/	/*  FPOPS1         Replace Tos by sin(tos)  */
#define FCOS (16+197)	/*F1FORM*/	/*  FPOPS1         Replace Tos by cos(tos)  */
#define FPTAN (16+198)	/*F2FORM*/	/*  FPOPS1         Remove TOS push tan(tos) and1.0*/
#define FPATAN (16+199)	/*F2pFORM*/	/*  FPOPS2         push atan(tos/(tos-1)) */
#define F2XM1 (16+200)	/*F1FORM*/	/*  FPOPS1         Computes (288tos-1)     */
#define FYL2X (16+201)	/*F2pFORM*/	/*  FPOPS2         computes (tos-1)*log(2)tos and pops*/
#define FPREM (16+202)	/*F2FORM*/	/*  FPOPS2         Computes 287 partialy remainder*/
#define FPREM1 (16+203)	/*F2FORM*/	/*  FPOPS2         Computes IEEE partialy remainder*/
#define FILDd (16+204)	/*F1FORM*/	/*  FPLOAD         Load 64 bit integer as float*/
#define FINIT (16+205)	/*NOFORM*/	/*  SPECREGrw      Initialise stack pointer*/
#define FINCSTP (222)	/*NOFORM*/	/*  SPECREGrw      Increment stack pointer*/
#define rFADD (16+208)	/*F2rFORM*/	/*  FPOPS2         Add two stack items (Result->deepest)*/
#define rFSUB (16+209)	/*F2rFORM*/	/*  FPOPS2         Subtract two stack items (Result->deepest)*/
#define rFSUBR (16+210)	/*F2rFORM*/	/*  FPOPS2         Reverse SUB two stack items (Result->deepest)*/
#define rFMUL (16+211)	/*F2rFORM*/	/*  FPOPS2         Multiply two stack items (Result->deepest)*/
#define rFDIV (16+212)	/*F2rFORM*/	/*  FPOPS2         Divide two stack items (Result->deepest)*/
#define rFDIVR (16+213)	/*F2rFORM*/	/*  FPOPS2         Reverse DIV two stack items (Result->deepest)*/
#define rFADDP (16+214)	/*F2rFORM*/	/*  FPOPS2         Add two stack items &pop(Result->deepest)*/
#define rFSUBP (16+215)	/*F2rFORM*/	/*  FPOPS2         Subtract two stack items&pop(Result->deepest)*/
#define rFSUBRP (232)	/*F2rFORM*/	/*  FPOPS2         Reverse SUB two stack items&pop(Result->deepest)*/
#define rFMULP (16+217)	/*F2rFORM*/	/*  FPOPS2         Multiply two stack items&pop(Result->deepest)*/
#define rFDIVP (16+218)	/*F2rFORM*/	/*  FPOPS2         Divide two stack items&pop(Result->deepest)*/
#define rFDIVRP (235)	/*F2rFORM*/	/*  FPOPS2         Reverse DIV two stack items&pop(Result->deepest)*/
#define FISTPd (16+220)	/*F2pFORM*/	/*  FPSTORE        Store tos as 64 bit integer}*/
#define FLDq (16+221)	/*F1FORM*/	/*  FPLOAD         Load Quad to TOS         */
#define FSTPq (16+222)	/*F2pFORM*/	/*  FPSTORE        Store tos as quad and POP*/
#define FCMOVB 239	/*F2FORM*/	/*  FPOPS2         Set Byte if below ie unsigned <*/
#define FCMOVE 240	/*F2FORM*/	/*  FPOPS2         Set Byte if equal           */
#define FCMOVBE 241	/*F2FORM*/	/*  FPOPS2         Set Byte if below or equal */
#define FCMOVU 242	/*F2FORM*/	/*  FPOPS2         Set Byte if above           */
#define FCMOVGE 243	/*F2FORM*/	/*  FPOPS2         Set Byte if not below ie u>=*/
#define FCMOVNE 244	/*F2FORM*/	/*  FPOPS2         Set Byte if not equal      */
#define FCMOVG 245	/*F2FORM*/	/*  FPOPS2         Set Byte if greater         */
#define FCMOVNU 246	/*F2FORM*/	/*  FPOPS2         Set Byte if not signed     */
#define FCOMI 247	/*F2FORM*/	/*  FPOPS2         Compare 2 items => integer CC*/
#define FUCOMI 248	/*F2FORM*/	/*  FPOPS2         Compare 2 (unordered) => integer CC*/
#define FCOMIP 249	/*F2pFORM*/	/*  FPOPS2         Compare 2 items => integer CC and pop once*/
#define FUCOMIP 250	/*F2PFORM*/	/*  FPOPS2         Compare 2 (unordered?) => integer CC and pop once*/
#define mMAXMNEM 250
/**/
/* More familiar or duplicate forms of some instructions                     */
/**/
#define JNAE JB
#define JAE JNB
#define JZ JE
#define JNZ JNE
#define JNA JBE
#define JNBE JA
#define JPE JP
#define JNGE JL
#define JNL JGE
#define JNG JLE
#define JNLE JG
#define JPO JNP
#define SETNAE SETB
#define SETAE SETNB
#define SETZ SETE
#define SETNZ SETNEQ
#define SETNA SETBE
#define SETNBE SETA
#define SETPE SETP
#define SETPO SETNP
#define SETNGE SETL
#define SETNL SETGE
#define SETNG SETLEQ
#define SETNLE SETG
#define ld LW
#define lhz LHU
#define lbz LBU
#define sth SH
#define stb SB
/***/
/*%IF modulename="code" %OR modulename="targetprocs"  %OR modulename="bprocs"%START*/
static const unsigned char instrgroup [mMAXMNEM+1] = {
/*0*/  SPECIAL,INTOPS,INTOPS,INTOPSu,            INTOPSu,INTOPSu,JUMPLINK,JUMPLINK,
       INTOPS,SPECREGrw,SPECREGrw,SPECREGrw,     INTOPS,STROP,STROP,INTOPS,
/*16*/ INTOPS,INTOPS,INTOPSu,SPECIAL,            INTOPS,INTOPS,INTOPS,INTOPS,
       BCC,BCC,BCC,BCC,                          BCC,BCC,BCC,0,
/*32*/ BCC,BCC,BCC,BCC,                          BCC,BCC,BCC,BCC,
       BCC,BCC,BCC,SPECREGrw,                    INTLOAD,INTLOAD,INTOPS,INTLOAD,
/*48*/ INTLOAD,INTLOAD,INTLOAD,INTLOAD,          INTLOAD,SPECIAL,STROP,STROP,
       INTOPSu,SPECREGrw,STROP,STROP,            STROP,STROP,INTOPSu,INTOPSu,
/*64*/ INTOPS,SPECIAL,INTOPSu,INTOPSu,           SPECIAL,SPECIAL,SHIFTS,SHIFTS,
       SHIFTS,SHIFTS,SPECREGrw,INTSTORE,         INTSTORE,INTSTORE,INTOPSu,0,
/*80*/ INTOPSu,INTOPSu,INTOPSu,INTOPSu,          INTOPSu,INTOPSu,INTOPSu,INTOPSu,
       INTOPSu,INTOPSu,INTOPSu,INTOPSu,          INTOPSu,INTOPSu,INTOPSu,0,
/*96*/ SHIFTS,SHIFTS,SHIFTS,SHIFTS,              SHIFTS,SHIFTS,SHIFTS,SHIFTS,
       SHIFTS ,SHIFTS ,SHIFTS ,SHIFTS ,          INTOPS,INTOPS,SPECREGrw,0,
/*112*/SPECREGrw,STROP,STROP,INTOPSu,            INTOPSu,SPECIAL,INTSTORE,INTOPSu,
       INTOPSu,SPECIAL,SPECREGrw,SPECREGrw,      INTOPSu,SPECIAL,INTOPSu,INTOPSu,
/*128*/INTOPSu, INTOPSu, INTOPSu, INTOPSu,       INTOPSu, INTOPSu, INTOPSu, INTOPSu,
       INTOPSu, INTOPSu, INTOPSu, INTOPSu,       INTOPSu, INTOPSu, 0,         0,

/*144*/ FPLOAD   ,FPLOAD   ,FPLOAD   ,FPSTORE  , FPSTORE  ,FPSTORE  ,FPSTORE  ,FPSTORE  ,
        FPSTORE  ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,0,
/*160*/ FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   ,
        FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,0,
/*176*/ FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   ,
        FPOPS2   ,FPCOMPARE,FPCOMPARE,FPCOMPARE, FPCOMPARE,FPCOMPARE,FPCOMPARE,0,
/*192*/ FPCOMPARE,FPCOMPARE,FPCOMPARE,SPECREGrw, SPECREGrw,SPECREGrw,FPCOMPARE,FPOPS1   ,
        FPOPS1   ,FPOPS1   ,FPOPS1   ,FPOPS1   , FPOPS1   ,FPOPS1   ,FPOPS1   ,0,
/*208*/ SPECREGrw,FPOPS1   ,FPOPS1   ,FPOPS1   , FPOPS1   ,FPOPS1   ,FPOPS1   ,FPOPS2   ,
        FPOPS1   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPLOAD   ,SPECREGrw,SPECREGrw,0,
/*224*/ FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   ,
        FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   ,FPSTORE   ,FPLOAD   ,FPSTORE  ,FPOPS2   ,
/*240*/ FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   , FPOPS2   ,FPOPS2   ,FPOPS2   ,FPOPS2   ,
        FPOPS2   ,FPOPS2   ,FPOPS2};	
 
/*%FINISH                                                                    */
/*%IF modulename="code" %OR modulename="targetprocs" %START                  */

#if(TargetABI==LynxOS) 
static char * instrmnem [mMAXMNEM+1] = {
/*0*/	"unimp  ","adcl   ","addl   ","andl   ",
	"bound  ","bt     ","call   ","call   ",
	"cwde   ","clc    ","cld    ","cmc    ",
	"cmpl   ","cmpsb  ","cmpsd  ","cmpb   ",
/*16*/	"cltd   ","dec    ","divl   ","enter  ",
	"idivl  ","imull  ","unusd  ","inc    ",
	"jo     ","jno    ","jb     ","jnb    ",
	"je     ","jne    ","jbe    ","",
/*32*/	"ja     ","js     ","jns    ","jp     ",
	"jnp    ","jl     ","jge    ","jle    ",
	"jg     ","jmp    ","jmp    ","lahf   ",
	"les    ","lds    ","lea    ","movb   ",
/*48*/	"movsbl ","movzbl ","movswl ","movzwl ",
	"movl   ","leave  ","lodsb  ","lodsd  ",
	"movl   ","movsr  ","movsb  ","movsl  ",
	"movswl ","movzx  ","movb   ","mull   ",
/*64*/	"negl   ","nop    ","notl   ","orl    ",
	"popl   ","pushl  ","roll   ","roll   ",
	"rorl   ","rorl   ","sahf   ","movb   ",
	"movl   ","movw   ","seto   ","",
/*80*/	"setno  ","setb   ","setnb  ","sete   ",
	"setne  ","setbe  ","seta   ","sets   ",
	"setns  ","setp   ","setnp  ","setl   ",
	"setge  ","setle  ","setg   ","",
/*96*/	"sall   ","sall   ","shll   ","shll   ",
	"sarl   ","sarl   ","shrl   ","shrl   ",
	"shld   ","shldv  ","shrd   ","shrdv  ",
	"sbbl   ","subl   ","stc    ","",
/*112*/ "std    ","stosb  ","stosw  ","testi  ",
	"testl  ","wait   ","xchgl  ","xorl   ",
	"xori   ","ret    ","popfl  ","pushfl ",
	"bswap  ","ret    ","cmovo  ","cmovno ",
/*128*/ "cmovb  ","cmovnb ","cmove  ","cmovne ",
	"cmovbe ","cmova  ","cmovs  ","cmovns ",
	"cmovp  ","cmovnp ","cmovl  ","cmovge ",
	"cmovle ","cmovg  ","","",

/*144*/ "fildl  ","fldl   ","flds   ","fistpl ",
	"fstpl  ","fstps  ","fistl  ","fstl   ",
	"fsts   ","fiaddl ","faddl  ","fadds  ",
	"faddp  ","fadd   ","fimull ","",
/*160*/ "fmull  ","fmuls  ","fmulp  ","fmul   ",
	"fisubl ","fsubl  ","fsubs  ","fsubrp ",
	"fsub   ","fisubrl","fsubrl ","fsubrs ",
	"fsubp  ","fsubr  ","fidivl ","",
/*176*/ "fdivl  ","fdivs  ","fdivrp ","fdiv   ",
	"fidivrl","fdivrl ","fdivrs ","fdivp  ",
	"fdivr  ","ficoml ","ficompl","fcoml  ",
	"fcoms  ","fcom   ","fcompl ","",
/*192*/ "fcomps ","fcomp  ","fcompp ","fldcw  ",
	"fstcw  ","fnstsw ","ftst   ","fchs   ",
	"fldz   ","fld1   ","fldl2e ","fldln2 ",
	"fldlg2 ","fldpi  ","fabs   ","",
/*208*/ "fdecstp","frndint","fxch   ","fsqrt  ",
	"fsin   ","fcos   ","fptan  ","fpatan ",
	"f2xm1  ","fyl2x  ","fprem  ","fprem1 ",
	"fildq  ","finit  ","fincstp","",
/*224*/ "rfadd  ","rfsub  ","rfsubr ","rfmul  ",
	"rfdiv  ","rfdivr ","rfaddp ","rfsubp ",
	"rfsubrp","rfmulp ","rfdivp ","rfdivrp",
	"fistpq ","fldt   ","fstpt  ","fcmovb ",
/*240*/ "fcmove ","fcmovbe","fcmovu ","fcmovnb",
	"fcmovne","fcmovnbe","fcmovnu","fcomi  ",
	"fucomi ","fcomip ","fucomip"};	

#else
static char * instrmnem [mMAXMNEM+1] = {
/*0*/	"unimp  ",	"adcl   ","addl   ","andl   ",
	"bound  ","bt     ","call   ","call   ",
	"cwde   ","clc    ","cld    ","cmc    ",
	"cmpl   ","cmpsb  ","cmpsd  ","cmpb   ",
/*16*/	"cltd   ","dec    ","divl   ","enter  ",
	"idiv   ","imull  ","unusd  ","inc    ",
	"jo     ","jno    ","jb     ","jnb    ",
	"je     ","jne    ","jbe    ","",
/*32*/	"ja     ","js     ","jns    ","jp     ",
	"jnp    ","jl     ","jge    ","jle    ",
	"jg     ","jmp    ","jmp    ","lahf   ",
	"les    ","lds    ","lea    ","movb   ",
/*48*/	"movsbl ","movzbl ","movswl ","movzwl ",
	"movl   ","leave  ","lodsb  ","lodsd  ",
	"movl   ","movsr  ","movsb  ","movsl  ",
	"movswl ","movzx  ","movb   ","mull   ",
/*64*/	"negl   ","nop    ","notl   ","orl    ",
	"popl   ","pushl  ","roll   ","roll   ",
	"rorl   ","rorl   ","sahf   ","movb   ",
	"movl   ","movw   ","seto   ","",
/*80*/	"setno  ","setb   ","setnb  ","sete   ",
	"setne  ","setbe  ","seta   ","sets   ",
	"setns  ","setp   ","setnp  ","setl   ",
	"setge  ","setle  ","setg   ","",
/*96*/	"sall   ","sall   ","shll   ","shll   ",
	"sarl   ","sarl   ","shrl   ","shrl   ",
	"shld   ","shldv  ","shrd   ","shrdv  ",
	"sbbl   ","subl   ","stc    ","",
/*112*/ "std    ","stosb  ","stosw  ","testi  ",
	"testl  ","wait   ","xchgl  ","xorl   ",
	"xori   ","ret    ","popfl  ","pushfl ",
	"bswap  ","ret    ","cmovo  ","cmovno ",
/*128*/ "cmovb  ","cmovnb ","cmove  ","cmovne ",
	"cmovbe ","cmova  ","cmovs  ","cmovns ",
	"cmovp  ","cmovnp ","cmovl  ","cmovge ",
	"cmovle ","cmovg  ","","",

/*144*/ "fildl  ","fldl   ","flds   ","fistpl ",
	"fstpl  ","fstps  ","fistl  ","fstl   ",
	"fsts   ","fiaddl ","faddl  ","fadds  ",
	"faddp  ","fadd   ","fimull ","",
/*160*/ "fmull  ","fmuls  ","fmulp  ","fmul   ",
	"fisubl ","fsubl  ","fsubs  ","fsubrp ",
	"fsub   ","fisubrl","fsubrl ","fsubrs ",
	"fsubp  ","fsubr  ","fidivl ","",
/*176*/ "fdivl  ","fdivs  ","fdivrp ","fdiv   ",
	"fidivrl","fdivrl ","fdivrs ","fdivp  ",
	"fdivr  ","ficoml ","ficompl","fcoml  ",
	"fcoms  ","fcom   ","fcompl ","",
/*192*/ "fcomps ","fcomp  ","fcompp ","fldcw  ",
	"fstcw  ","fnstsw ","ftst   ","fchs   ",
	"fldz   ","fld1   ","fldl2e ","fldln2 ",
	"fldlg2 ","fldpi  ","fabs   ","",
/*208*/ "fdecstp","frndint","fxch   ","fsqrt  ",
	"fsin   ","fcos   ","fptan  ","fpatan ",
	"f2xm1  ","fyl2x  ","fprem  ","fprem1 ",
	"fildll ","finit  ","fincstp","",
/*224*/ "rfadd  ","rfsub  ","rfsubr ","rfmul  ",
	"rfdiv  ","rfdivr ","rfaddp ","rfsubp ",
	"rfsubrp","rfmulp ","rfdivp ","rfdivrp",
	"fistpq ","fldt   ","fstpt  ","fcmovb ",
/*240*/ "fcmove ","fcmovbe","fcmovu ","fcmovnb",
	"fcmovne","fcmovnbe","fcmovnu","fcomi  ",
	"fucomi ","fcomip ","fucomip"};	

#endif;
 
/***/
static const unsigned char instrform [mMAXMNEM+1] = {
/*0*/  NOFORM,X2FORM,X2FORM,X2FORM,        X2FORM,X2FORM,JFORM,JRFORM,
       NOFORM,NOFORM,NOFORM,NOFORM,        X2FORM,NOFORM,NOFORM,X2FORM,
       NOFORM,X1FORM,X2IFORM,STKFORM,      X2IFORM,X2IFORM,X2IFORM,X1FORM,
       JFORM,JFORM,JFORM,JFORM,            JFORM,JFORM,JFORM,0,
/*32*/ JFORM,JFORM,JFORM,JFORM,            JFORM,JFORM,JFORM,JFORM,
       JFORM,JFORM,JRFORM,NOFORM,          X2FORM,X2FORM,X2FORM,X2FORM,
       X2FORM,X2FORM,X2FORM,X2FORM,        X2FORM,STKFORM,NOFORM,NOFORM,
       X2FORM,X1FORM,NOFORM,NOFORM,        X2FORM,X2FORM,X2FORM,X2IFORM,
/*64*/ X1FORM,NOFORM,X1FORM,X2FORM,        STKFORM,STKFORM,SLITFORM,X2IFORM,
       SLITFORM,X2IFORM,NOFORM,X2FORM,     X2FORM,X2FORM,X1FORM,0,
       X1FORM,X1FORM,X1FORM,X1FORM,        X1FORM,X1FORM,X1FORM,X1FORM,
       X1FORM,X1FORM,X1FORM,X1FORM,        X1FORM,X1FORM,X1FORM,0,
/*96*/ SLITFORM,X2IFORM,SLITFORM,X2IFORM,  SLITFORM,X2IFORM,SLITFORM,X2IFORM,
       SLITFORM,SHFORM,SLITFORM,SHFORM,    X2FORM,X2FORM,NOFORM,0,
       NOFORM,NOFORM,NOFORM,X1LFORM,       X2FORM,NOFORM,X2FORM,X2FORM,
       X2FORM,NOFORM,NOFORM,NOFORM,        X1FORM,NOFORM,X2FORM,X2FORM,
       X2FORM,X2FORM,X2FORM,X2FORM,        X2FORM,X2FORM,X2FORM,X2FORM,
       X2FORM,X2FORM,X2FORM,X2FORM,        X2FORM,X2FORM,0,0,

/*144*/F1FORM,F1FORM,F1FORM,F2pFORM,       F2pFORM,F2pFORM,F2FORM,F2FORM,
       F2FORM,FMFORM,FMFORM,FMFORM,        F2FORM,F2FORM,FMFORM,0,
/*160*/FMFORM,FMFORM,F2FORM,F2FORM,        FMFORM,FMFORM,FMFORM,F2FORM,
       F2FORM,FMFORM,FMFORM,FMFORM,        F2pFORM,F2FORM,FMFORM,0,
/*176*/FMFORM,FMFORM,F2FORM,F2FORM,        FMFORM,FMFORM,FMFORM,F2FORM,
       F2FORM,FMFORM,FMFORM,FMFORM,        FMFORM,F2FORM,FMFORM,0,
/*192*/FMFORM,F2pFORM,F2ppFORM,X2IFORM,    X2IFORM,X2IFORM,F1FORM,F1FORM,
       F1FORM,F1FORM,F1FORM,F1FORM,        F1FORM,F1FORM,F1FORM,0,
/*208*/NOFORM,F1FORM,F1FORM,F1FORM,        F1FORM,F1FORM,F2FORM,F2pFORM,
       F1FORM,F2pFORM,F2FORM,F2FORM,       F1FORM,NOFORM,NOFORM,0,
/*224*/F2rFORM,F2rFORM,F2rFORM,F2rFORM,    F2rFORM,F2rFORM,F2rFORM,F2rFORM,
       F2rFORM,F2rFORM,F2rFORM,F2rFORM,    F2pFORM,F1FORM,F2pFORM,F2FORM,
/*240*/F2FORM,F2FORM,F2FORM,F2FORM,        F2FORM,F2FORM,F2FORM,F2FORM,
       F2FORM,F2pFORM,F2pFORM};	
 
 
/***/
/*%FINISH                                                                    */
/***/
/*%IF modulename="targetprocs" %OR modulename="code" %START                  */
struct instrvariants{
short int valid;
union {
short int onlyop;
short int oprrm;
} u0;
short int oprmr;
short int oprmlit;
short int oprmslit;
short int oprm;
short int opplusreg;
short int other;
short int oppcrel;
unsigned char eaxlit;
unsigned char subop;
unsigned char allit;
unsigned char opbrmlit;
};

#define instrvarels 11	/* the no of elements per instr                       */
/**/
/* valid bits for variants                                                   */
/* at code generation time the variant is checked against these              */
/* valid bits and the relevant opcode extracted. If the valid                */
/* bit is zero then abort unless an escape code is set somewhere             */
/**/
/**/
#define oponlyval (0x8000)	/* This is only opcode*/
#define oprrmval (0x4000)	/* r,r/m form is available*/
#define oprmrval (0x2000)	/* r/m,r dest=store form available*/
#define oprmlitval (0x1000)	/* r/m,imm32 form available */
#define oprmslitval (0x800)	/* r/m,signed imm8 form available */
#define oprmval (0x400)		/* Memmory form available eg inc*/
#define opplusregval (0x200)	/* Only reg added to opcode */
#define otherval (0x100)	/* Stll further form available eg shortreljump*/
#define oppcrelval (0x80)	/* Pc relative form available(4byte)*/
#define subopval (0x40)		/* Subopcode for r-m byte available*/
#define opeaxlitval (0x20)	/* Specail for for op on eax with lit */
#define opallitval (0x10)	/* Op on btm byte of eax with lit */
#define opbrlitval (0x8)	/* Op on byte with literal        */
#define opbrmlitval (0x4)	/* byte r/m,imm8 form available  */
 
/**/
/* the last 2 camn occur on almost every op from 80086 days but              */
/* are only used when useful in 32 bit form ie on OR,XOR and TEST            */
/**/
 
static const unsigned short int instrops [((instrvarels*mMAXMNEM)+instrvarels)-1+1] = {
/*Unimp  */    0,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*adc    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval,
        0x0013,0x0011,0x0081,0x0083,0x0000,0x0000,
        0x0000,0x0000,0x0215,0x0000,
/*add    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval,
        0x0003,0x0001,0x0081,0x0083,0x0000,0x0000,
        0x0000,0x0000,0x0005,0x0000,
/*and    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval|opbrmlitval,
        0x0023,0x0021,0x0081,0x0083,0x0000,0x0000,
        0x0080,0x0000,0x0425,0x0000,
/*bound  */    oprrmval,
        0x0062,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*bt     */    oprrmval|subopval,
        0x0fa3,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*call   */    oppcrelval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x00e8,0x0000,0x0000,
/*callptr*/    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00ff,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*cwde   */    oponlyval,
        0x0098,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*clc    */    oponlyval,
        0x00f8,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cld    */    oponlyval,
        0x00fc,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmc    */    oponlyval,
        0x00f5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmp    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval|opbrlitval|opallitval| opbrmlitval,
        0x003b,0x0039,0x0081,0x0083,0x0000,0x0000,
        0x0080,0x0000,0x073d,0x803c,
/*cmpsb  */    oponlyval,
        0x00a6,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmpsd  */    oponlyval,
        0x00a7,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmpb   */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opbrlitval|opallitval| opbrmlitval,
        0x003a,0x0038,0x0080,0x0000,0x0000,0x0000,
        0x0080,0x0000,0x073c,0x803c,
/*cdq    */    oponlyval,
        0x0099,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*dec    */    oprrmval|subopval|opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x00ff,0x0048,
        0x0000,0x0000,0x0000,0x0000,
/*div    */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00f7,0x0000,
        0x0000,0x0000,0x0600,0x0000,
/*enter  */    oponlyval,
        0x00c8,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*idivide*/    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00f7,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*imul   */    oprrmval|oprmlitval|oprmslitval,
        0x0faf,0x0000,0x0069,0x006b,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*imuld  */    oponlyval,
        0x00f5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*inc    */    oprrmval|subopval|opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x00fe,0x0040,
        0x0000,0x0000,0x0000,0x0000,
/*JO     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0070,0x0f80,0x0000,0x0000,
/*JNO    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0071,0x0f81,0x0000,0x0000,
/*JB     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0072,0x0f82,0x0000,0x0000,
/*JNB    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0073,0x0f83,0x0000,0x0000,
/*JE     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0074,0x0f84,0x0000,0x0000,
/*JNE    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0075,0x0f85,0x0000,0x0000,
/*JBE    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
            0x0076,0x0f86,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*JA     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0077,0x0f87,0x0000,0x0000,
/*JS     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0078,0x0f88,0x0000,0x0000,
/*JNS    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0079,0x0f89,0x0000,0x0000,
/*JP     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007a,0x0f8a,0x0000,0x0000,
/*JNP    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007b,0x0f8b,0x0000,0x0000,
/*JL     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007c,0x0f8c,0x0000,0x0000,
/*JGE    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007d,0x0f8d,0x0000,0x0000,
/*JLE    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007e,0x0f8e,0x0000,0x0000,
/*JG     */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x007f,0x0f8f,0x0000,0x0000,
/*jmp    */    oppcrelval|otherval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x00eb,0x00e9,0x0000,0x0000,
/*jmpptr */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00ff,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*LAHF   */    oponlyval,
        0x009f,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*les    */    oprrmval,
        0x00c4,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lds    */    oprrmval,
        0x00c5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lea    */    oprrmval,
        0x008d,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lbnox  */     oprrmval|otherval,
	0x008a,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00a0,0x0000,0x0000,0x0000,
/*lb     */    oprrmval,
        0x0fbe,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lbu    */    oprrmval,
        0x0fb6,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lh     */    oprrmval,
        0x0fbf,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lhu    */    oprrmval,
        0x0fb7,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lw     */    oprrmval|otherval,
        0x008b,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x00a1,0x0000,0x0000,0x0000,
/*leave  */    oponlyval,
        0x00c9,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lodsb  */    oponlyval,
        0x00ac,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*lodsd  */    oponlyval,
        0x00ad,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*mov    */    oprrmval|oprmrval|oprmlitval|opbrmlitval|opplusregval|otherval,
        0x008b,0x0089,0x00c7,0x00c6,0x0000,0x00b8,
        0x00c6,0x0000,0x0000,0xc600,
/*movsr  */    oprrmval,
        0x008e,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*movsb  */    oponlyval,
        0x00a4,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*movsd  */    oponlyval,
        0x00a5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*movsx  */    oprrmval,
        0x0fbf,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*movzx  */    oprrmval,
        0x0fb7,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*movb   */    oprrmval|oprmrval|oprmslitval|opbrmlitval|opplusregval|otherval,
        0x008a,0x0088,0x00c6,0x00c6,0x0000,0x00b0,
        0x00c6,0x0000,0x0000,0xc600,
/*mul    */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00f7,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*neg    */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00f7,0x0000,
        0x0000,0x0000,0x0300,0x0000,
/*nop    */    oponlyval,
        0x0090,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*not    */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00f7,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*or     */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval|opbrlitval|opallitval|opbrmlitval,
        0x000b,0x0009,0x0081,0x0083,0x0000,0x0000,
        0x0080,0x0000,0x010d,0x800c,
/*pop    */    oprmval|opplusregval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x008f,0x0058,
        0x0000,0x0000,0x0000,0x0000,
/*push   */    oprmval|oprmlitval|oprmslitval|opplusregval|subopval,
        0x0000,0x0000,0x0068,0x006a,0x00ff,0x0050,
        0x0000,0x0000,0x0600,0x0000,
/*rol    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*rolv   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x000,0x00d3,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*ror    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0100,0x0000,
/*v   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d3,0x0000,
        0x0000,0x0000,0x0100,0x0000,
/*SAHF   */    oponlyval,
        0x009e,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*sb     */    oprmrval|oprmslitval|otherval|opbrmlitval,
        0x0000,0x0088,0x0000,0x00c6,0x0000,0x0000,
        0x00a2,0x0000,0x0000,0xc600,
/*st     */    oprmrval|oprmlitval|otherval,
        0x0000,0x0089,0x00c7,0x0000,0x0000,0x0000,
        0x00a3,0x0000,0x0000,0x0000,
/*sh     */    oprmrval|oprmlitval,
        0x0000,0x0089,0x00c7,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETO   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f90,0x0000,
        0x0000,0x0000,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*SETNO  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f91,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETB   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f92,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETNB  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f93,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETE   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f94,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETNEQ */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f95,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETBE  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f96,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETA   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f97,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETS   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f98,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETNS  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f99,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETP   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9a,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETNP  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9b,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETL   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9c,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETGE  */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9d,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETLEQ */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9e,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*SETG   */    oprmval,
        0x0000,0x0000,0x0000,0x0000,0x0f9f,0x0000,
        0x0000,0x0000,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*sal    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*salv   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d3,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*shl    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*shlv   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d3,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*sar    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*sarv   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d3,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*shr    */    oprmslitval|subopval,
        0x0000,0x0000,0x0000,0x00c1,0x0000,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*shrv   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d3,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*shld   */    oponlyval,
        0x0fa4,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*shldv  */    oponlyval,
        0x0fa5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*shrd   */    oponlyval,
        0x0fac,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*shrdv  */    oponlyval,
        0x0fad,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*sbb    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval,
        0x001b,0x0019,0x0081,0x0083,0x0000,0x0000,
        0x0000,0x0000,0x031d,0x0000,
/*sub    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval,
        0x002b,0x0029,0x0081,0x0083,0x0000,0x0000,
        0x0000,0x0000,0x052d,0x0000,
/*stc    */    oponlyval,
        0x00f9,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*std    */    oponlyval,
        0x00fd,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*stosb  */    oponlyval,
        0x00aa,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*stosw  */    oponlyval,
        0x00ab,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*testi  */    0,                 /*unused*/
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*test   */    oprrmval|oprmlitval|opeaxlitval|subopval|opbrlitval|opallitval|opbrmlitval,
        0x0085,0x0000,0x00f7,0x0000,0x0000,0x0000,
        0x00f6,0x0000,0x00a9,0xf6a8,
/*wait   */    oponlyval,
        0x009b,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*xchg   */    oprrmval,
        0x0087,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*xor    */    oprrmval|oprmrval|oprmlitval|oprmslitval|subopval|opeaxlitval|opbrlitval|opallitval|opbrmlitval,
        0x0033,0x0031,0x0081,0x0083,0x0000,0x0000,
        0x0080,0x0000,0x0635,0x8034,
/*xori   */    0,        /* probably redundant */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*ret    */    oponlyval,
        0x00c3,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*PUSHFD */    oponlyval,
        0x009c,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*POPFD  */    oponlyval,
        0x009d,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*bswap  */   opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0fc8,
        0x0000,0x0000,0x0000,0x0000,
/*retn   */    oponlyval,
        0x00c2,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovO  */    oprrmval,
        0x0f40,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovNO */    oprrmval,
        0x0f41,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovB  */    oprrmval,
        0x0f42,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovNB */    oprrmval,
        0x0f43,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovE  */    oprrmval,
        0x0f44,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovNEQ*/    oprrmval,
        0x0f45,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovBE */    oprrmval,
        0x0f46,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovA  */    oprrmval,
        0x0f47,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovS  */    oprrmval,
        0x0f48,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovNS */    oprrmval,
        0x0f49,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovP  */    oprrmval,
        0x0f4a,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovNP */    oprrmval,
        0x0f4b,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovL  */    oprrmval,
        0x0f4c,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovGE */    oprrmval,
        0x0f4d,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovLEQ*/    oprrmval,
        0x0f4e,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*cmovG  */    oprrmval,
        0x0f4f,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
        0,
       0,0,0,0,0,
       0,0,0,0,0,
       0,
       0,0,0,0,0,
       0,0,0,0,0,
/*FILD   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00db,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDd   */    oprmval|subopval|opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x00dd,0xd9c0,
        0x0000,0x0000,0x0000,0x0000,
/*FLDm   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d9,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FISTP  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00db,0x0000,
        0x0000,0x0000,0x0300,0x0000,
/*FSTPd  */    oprmval|opplusregval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dd,0xddd8,
        0x0000,0x0000,0x0300,0x0000,
/*FSTPm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d9,0x0000,
        0x0000,0x0000,0x0300,0x0000,
/*FIST   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dd,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FSTd   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dd,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FSTm   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d9,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FIADDm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FADDd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FADDm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FADDP  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdec0,
        0x0000,0x0000,0x0000,0x0000,
/*FADD   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8c0,
        0x0000,0x0000,0x0000,0x0000,
/*FIMULm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0100,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*FMULd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0100,0x0000,
/*FMULm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0100,0x0000,
/*FMULP  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdec8,
        0x0000,0x0000,0x0000,0x0000,
/*FMUL   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8c8,
        0x0000,0x0000,0x0000,0x0000,
/*FISUBm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*FSUBd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*FSUBm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0400,0x0000,
/*FSUBP  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdee8,
        0x0000,0x0000,0x0000,0x0000,
/*FSUB   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8e0,
        0x0000,0x0000,0x0000,0x0000,
/*FISUBRm*/    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FSUBRd */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FSUBRm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FSUBRP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdee0,
        0x0000,0x0000,0x0000,0x0000,
/*FSUBR  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8e8,
        0x0000,0x0000,0x0000,0x0000,
/*FIDIVm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0600,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*FDIVd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0600,0x0000,
/*FDIVm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0600,0x0000,
/*FDIVP  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdef8,
        0x0000,0x0000,0x0000,0x0000,
/*FDIV   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8f0,
        0x0000,0x0000,0x0000,0x0000,
/*FIDIVRm*/    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FDIVRd */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FDIVRm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FDIVRP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdef0,
        0x0000,0x0000,0x0000,0x0000,
/*FDIVR  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8f8,
        0x0000,0x0000,0x0000,0x0000,
/*FICOMm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FICOMPm*/    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00da,0x0000,
        0x0000,0x0000,0x0300,0x0000,
/*FCOMd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FCOMm  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FCOM   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8d0,
        0x0000,0x0000,0x0000,0x0000,
/*FCOMPd */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dc,0x0000,
        0x0000,0x0000,0x0300,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*FCOMPm */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d8,0x0000,
        0x0000,0x0000,0x0300,0x0000,
/*FCOMP  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd8d8,
        0x0000,0x0000,0x0000,0x0000,
/*FCOMPP */    oponlyval|opplusregval,
        0xded9,0x0000,0x0000,0x0000,0x0000,0xded8,
        0x0000,0x0000,0x0000,0x0000,
/*FLDCW  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d9,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FSTCW  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00d9,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FSTSW  */    oponlyval|oprmval|subopval,
        0xdfe0,0x0000,0x0000,0x0000,0x00dd,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FTST   */    oponlyval,
        0xd9e4,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FCHS   */    oponlyval,
        0xd9e0,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDZ   */    oponlyval,
        0xd9ee,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLD1   */    oponlyval,
        0xd9e8,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDL2E */    oponlyval,
        0xd9ea,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDLN2 */    oponlyval,
        0xd9ed,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDLG2 */    oponlyval,
        0xd9ec,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FLDPI  */    oponlyval,
        0xd9eb,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FABS   */    oponlyval,
        0xd9e1,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*FDECSTP*/    oponlyval,
        0xd9f6,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FRNDINT*/    oponlyval,
        0xd9fc,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FXCH   */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xd9c8,
        0x0000,0x0000,0x0000,0x0000,
/*FSQRT  */    oponlyval,
        0xd9fa,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FSIN   */    oponlyval,
        0xd9fe,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FCOS   */    oponlyval,
        0xd9ff,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FPTAN  */    oponlyval,
        0xd9f2,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FPATAN */    oponlyval,
        0xd9f3,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*F2XM1  */    oponlyval,
        0xd9f0,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FYL2X  */    oponlyval,
        0xd9f1,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FPREM  */    oponlyval,
        0xd9f8,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FPREM1 */    oponlyval,
        0xd9f5,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FILDd  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00df,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FINIT  */    oponlyval,
        0xdbe3,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
/*FINCSTP*/    oponlyval,
        0xd9f7,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,
    0,
       0,0,0,0,0,
       0,0,0,0,0,
/*rFADD  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdcc0,
        0x0000,0x0000,0x0000,0x0000,
/*rFSUB  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdce8,
        0x0000,0x0000,0x0000,0x0000,
/*rFSUBR */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdce0,
        0x0000,0x0000,0x0000,0x0000,
/*rFMUL  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdcc8,
        0x0000,0x0000,0x0000,0x0000,
/*rFDIV  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdcf8,
        0x0000,0x0000,0x0000,0x0000,
/*rFDIVR */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdcf0,
        0x0000,0x0000,0x0000,0x0000,
/*rFADDP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdec0,
        0x0000,0x0000,0x0000,0x0000,
/*rFSUBP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdee8,
        0x0000,0x0000,0x0000,0x0000,
/*rFSUBRP*/    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdee0,
        0x0000,0x0000,0x0000,0x0000,
/*rFMULP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdec8,
        0x0000,0x0000,0x0000,0x0000,
/*rFDIVP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdef8,
        0x0000,0x0000,0x0000,0x0000,
/*rFDIVRP*/    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdef0,
        0x0000,0x0000,0x0000,0x0000,
/*FISTPd */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00df,0x0000,
        0x0000,0x0000,0x0700,0x0000,
/*FLDq   */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00dd,0x0000,
        0x0000,0x0000,0x0500,0x0000,
/*FSTPq  */    oprmval|subopval,
        0x0000,0x0000,0x0000,0x0000,0x00db,0x0000,
        0x0000,0x0000,0x0200,0x0000,
/*FCMOVB  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdac0,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVE  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdac8,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVBE */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdad0,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVU  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdad8,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVGE */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbc0,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVGE */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbc8,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVG  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbd0,
        0x0000,0x0000,0x0000,0x0000,
/*FCMOVNU */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbd8,
        0x0000,0x0000,0x0000,0x0000,
/*FCOMI  */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf0,
        0x0000,0x0000,0x0000,0x0000,
/*FUCOMI */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdbe8,
        0x0000,0x0000,0x0000,0x0000,
/*FCOMIP */    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdff0,
        0x0000,0x0000,0x0000,0x0000,
/*FUCOMIP*/    opplusregval,
        0x0000,0x0000,0x0000,0x0000,0x0000,0xdfe8,
        0x0000,0x0000,0x0000,0x0000}
;	
 
 
/***/
/**/
/* side effects are defined as follows                                       */
/* x'01' reads the flags register                                            */
/* x'02' write the flag register in standard way                             */
/* x'04' erase the flags register (various non standard writes)              */
/* x'10' reads the Floating stack pointer register                           */
/* x'20' updates the Floating stack pointer register                         */
/* x'40' read the Floating condition fields                                  */
/* x'80' set the Floating condition fields                                   */
static const unsigned char instrsideeffects [mMAXMNEM+1] = {
/*0*/	0x0,0x2,0x2,0x2,0x0,0x2,0x0,0x0,
	0x0,0x4,0x4,0x4,0x2,0x3,0x3,0x2,
/*16*/	0x0,0x4,0x2,0x0,0x4,0x4,0x4,0x4,
	0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xFF,
/*32*/	0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
	0x1,0x0,0x0,0x1,0x0,0x0,0x0,0xFF,
/*48*/	0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
	0x0,0x0,0x1,0x1,0x0,0x0,0x4,0x0,
/*64*/	0x2,0x0,0x0,0x2,0x0,0x0,0x1,0x1,
	0x4,0x4,0x4,0x0,0x0,0x0,0x1,0xFF,
/*80*/	0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
	0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xFF,
/*96*/	0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,
	0x4,0x4,0x4,0x4,0x2,0x2,0x4,0xFF,
/*112*/	0x4,0x1,0x1,0x2,0x2,0x0,0x0,0x2,
	0x0,0x0,0x4,0x1,0x0,0x0,0x1,0x1,
/*128*/	0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
	0x1,0x1,0x1,0x1,0x1,0x1,0xFF,0xFF,
/*144*/	0x30,0x30,0x30,0x30,0x30,0x30,0x10,0x10,
	0x10,0x10,0x10,0x10,0x30,0x10,0x10,0xFF,
/*160*/	0x10,0x10,0x30,0x10,0x10,0x10,0x10,0x30,
	0x10,0x10,0x10,0x10,0x30,0x10,0x10,0xFF,
/*176*/	0x10,0x10,0x30,0x10,0x10,0x10,0x10,0x30,
	0x10,0x90,0xB0,0x90,0x90,0x90,0xB0,0xFF,
/*192*/	0xB0,0xB0,0xB0,0x10,0x0,0x40,0x90,0x10,
	0x30,0x30,0x30,0x30,0x30,0x30,0x10,0xFF,
/*208*/	0x30,0x10,0x10,0x10,0x10,0x10,0x30,0x30,
	0x10,0x30,0x10,0x10,0x30,0x20,0x30,0xFF,
/*224*/	0x10,0x10,0x10,0x10,0x10,0x10,0x30,0x30,
	0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x11,
/*240*/	0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,
	0x12,0x32,0x32};
/*%FINISH                                                                    */
/***/
#define EAX 0
#define ECX 1
#define EDX 2
#define EBX 3
#define ESP 4
#define EBP 5
#define ESI 6
#define EDI 7
#define STACKPOINTER ESP	/*%sp = $esp*/
#define RETURNREG EAX		/* Here reside integer fn results */
#define RESULTREG EAX		/* alias for above */
#define FRETURNREG 8		/*$f0*/	/* Here reside FP fn results */
#define FRESULTREG 8		/*$f0*/	/* alias for above */
#define FRAMEPOINTER EBP
#define f0REG 8			/*$f0*/
#define GOTREG EBX		/*$gp = $EBX*/
/***/
/** SPECIAL registers on Pentium                                             */
/***/
#define FLAGREG 0		/* Quotient register or multiply lower 32 bits             */
#define FSTP 1			/* The floating stackt pointer                                */
#define FPSCR 2			/* Floating Status and control reg                           */
#define FCCBIT 3		/* FP true false(is in fpscr but lower latency              */
				/* when set by compare than set by MTC)                                      */
#define FOPR 4			/* Fixup order psuedo register - used to                      */
				/* force ordering of Hi16 and Low16 fixups                                   */
#define Maxcreg 4		/* Highest currently used                                  */
/***/
#define REGCEILING 15		/* highest numbered register      */

static char * regtext [REGCEILING+1] = {
	"%eax","%ecx","%edx","%ebx","%esp","%ebp","%esi","%edi",

	"FR8","FR9","FRA","FRB","FRC","FRD","FRE","FRF"};	

static char * wregtext [REGCEILING+1] = {
	"%ax","%cx","%dx","%bx","%sp","%bp","%si","%di",

	"FR8","FR9","FRA","FRB","FRC","FRD","FRE","FRF"};	
 
static char * bregtext [7+1] = {
	"%al","%cl","%dl","%bl","%ah","%ch","%dh","%bh"};	
/***/
static char * Qregtext [Maxcreg+1] = {"FLGS","FSTP",
"FSCR","FPCC",
"FOPR"};
/***/
#define HASWINDOWREGS 0	/*MIPS doesn't have a windowed register scheme*/
/***/
#define AreaBaseOffset 0
/***/
/***/
#define REGPARAMNUM 0	/* No params in registers*/
#define Regparamsize 4	/* Avoid an arrayinsideout */
#define PARAMBASE 8	/* Params start at EBP+8 */
/***/
#define FRBASE 8	/* base of floating registers     */
#define FRSTEP 1	/* step when allocatind fregs   */
#define FDRSTEP 2	/* step for when allocating pairs */
/***/
/**/
/* Tregs gives the registers available to the code generator as temporary    */
/* registers in the absence of any register variables. Register variables are*/
/* claimed by th Front End via a mask. This is more flexible than assuming an*/
/* order eg when one varaible is used in two successive loops                */
/**/
/**/
static const unsigned char Tregs [5+1] = {
	EAX,ECX,EDX,EBX,ESI,EDI};	
/***/
#define LOWVOLREG 0	/* The lowest actual volatile register */
#define HIGHVOLREG 2	/* The highest actual volatile register */
/***/
#define LOWTREG 0
#define HIGHVOLTREG 2	/* highest volatile reg as Treg Index*/
#define HIGHTREG 5
/***/
#define FIRSTFREG 8	/*%f0 */	/* Lowest actual freg */
#define LASTFREG 15	/*%f15*/	/* Highest actual freg */
/***/
#define FIRSTTFREG 0	/* First usable freg as index into Tfregs */
#define LASTTFREG 0	/* Last usable freg as index into Tfregs */
/***/
#define LOWVOLFREG 8	/*%f0 */
#define HIGHVOLFREG 15	/*%f7*/
#define CALLEESAVEDREGS (0xC8)
#define CALLEESAVEDFREGS 0
/***/
/**/
/* constants describinf manipulations of the Floating register stack         */
/**/
#define NEWPOSN 1	/* Reg is repositioned by EXCH*/
#define INTERCH 2	/* Two reg record to be swopped*/
#define FASTTOTOP 3	/* Nominated reg direct to top */
#define BUBBLETOTOP 4	/* Nominated reg to top without*/
		 	/* disturbing the order of others*/
#define FDISCARD 5	/* Get rid of register & unlock */
/***/
/***/
/***/
/************************** end of mipsdefs.inc ***********************************/
 

/* end of automatic translation */

