Browse Source

+ KNI instructions

peter 26 years ago
parent
commit
bfe185d206
6 changed files with 939 additions and 366 deletions
  1. 11 4
      compiler/cpuasm.pas
  2. 211 151
      compiler/cpubase.pas
  3. 105 2
      compiler/daopt386.pas
  4. 273 98
      compiler/i386tab.inc
  5. 308 108
      compiler/insns.dat
  6. 31 3
      compiler/utils/nasmconv.pp

+ 11 - 4
compiler/cpuasm.pas

@@ -1,6 +1,6 @@
 {
 {
     $Id$
     $Id$
-    Copyright (c) 1999 by Florian Klaempfl
+    Copyright (c) 1999 by Florian Klaempfl and Peter Vreman
 
 
     Contains the assembler object for the i386
     Contains the assembler object for the i386
 
 
@@ -1116,7 +1116,8 @@ begin
       201,
       201,
       202,
       202,
       209,
       209,
-      210 : ;
+      210,
+      217,218,219 : ;
       216 :
       216 :
         begin
         begin
           inc(codes);
           inc(codes);
@@ -1422,8 +1423,11 @@ begin
       201,
       201,
       202,
       202,
       209,
       209,
-      210 :
+      210,
+      217,218,219 :
         begin
         begin
+          { these are dissambler hints or 32 bit prefixes which
+            are not needed }
         end;
         end;
       31,
       31,
       48,49,50,
       48,49,50,
@@ -1492,7 +1496,10 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.1  1999-08-04 00:22:57  florian
+  Revision 1.2  1999-08-12 14:36:01  peter
+    + KNI instructions
+
+  Revision 1.1  1999/08/04 00:22:57  florian
     * renamed i386asm and i386base to cpuasm and cpubase
     * renamed i386asm and i386base to cpuasm and cpubase
 
 
   Revision 1.17  1999/08/01 23:55:53  michael
   Revision 1.17  1999/08/01 23:55:53  michael

+ 211 - 151
compiler/cpubase.pas

@@ -1,6 +1,6 @@
 {
 {
     $Id$
     $Id$
-    Copyright (c) 1999 by Florian Klaempfl
+    Copyright (c) 1999 by Florian Klaempfl and Peter Vreman
 
 
     Contains the base types for the i386
     Contains the base types for the i386
 
 
@@ -35,8 +35,8 @@ uses
 
 
 const
 const
 { Size of the instruction table converted by nasmconv.pas }
 { Size of the instruction table converted by nasmconv.pas }
-  instabentries = 1103;
-  maxinfolen    = 7;
+  instabentries = 1292;
+  maxinfolen    = 8;
 
 
 { By default we want everything }
 { By default we want everything }
 {$define ATTOP}
 {$define ATTOP}
@@ -107,6 +107,7 @@ const
   OT_REG16     = $00201002;
   OT_REG16     = $00201002;
   OT_REG32     = $00201004;
   OT_REG32     = $00201004;
   OT_MMXREG    = $00201008;  { MMX registers  }
   OT_MMXREG    = $00201008;  { MMX registers  }
+  OT_XMMREG    = $00201010;  { Katmai registers  }
   OT_MEMORY    = $00204000;  { register number in 'basereg'  }
   OT_MEMORY    = $00204000;  { register number in 'basereg'  }
   OT_MEM8      = $00204001;
   OT_MEM8      = $00204001;
   OT_MEM16     = $00204002;
   OT_MEM16     = $00204002;
@@ -144,28 +145,39 @@ const
                              { so UNITY == IMMEDIATE | ONENESS  }
                              { so UNITY == IMMEDIATE | ONENESS  }
   OT_UNITY     = $00802000;  { for shift/rotate instructions  }
   OT_UNITY     = $00802000;  { for shift/rotate instructions  }
 
 
-{ Instruction flags }
-  IF_SM    = $0001;  { size match first operand  }
-  IF_SM2   = $0002;  { size match first two operands  }
-  IF_SB    = $0004;  { unsized operands can't be non-byte  }
-  IF_SW    = $0008;  { unsized operands can't be non-word  }
-  IF_SD    = $0010;  { unsized operands can't be nondword  }
-  IF_8086  = $0000;  { 8086 instruction  }
-  IF_186   = $0100;  { 186+ instruction  }
-  IF_286   = $0200;  { 286+ instruction  }
-  IF_386   = $0300;  { 386+ instruction  }
-  IF_486   = $0400;  { 486+ instruction  }
-  IF_PENT  = $0500;  { Pentium instruction  }
-  IF_P6    = $0600;  { P6 instruction  }
-  IF_CYRIX = $0800;  { Cyrix-specific instruction  }
-  IF_PMASK = $0F00;  { the mask for processor types  }
-  IF_PRIV  = $1000;  { it's a privileged instruction  }
-  IF_UNDOC = $2000;  { it's an undocumented instruction  }
-  IF_FPU   = $4000;  { it's an FPU instruction  }
-  IF_MMX   = $8000;  { it's an MMX instruction  }
+{Instruction flags }
+  IF_SM     = $00000001;        { size match first two operands  }
+  IF_SM2    = $00000002;
+  IF_SB     = $00000004;  { unsized operands can't be non-byte  }
+  IF_SW     = $00000008;  { unsized operands can't be non-word  }
+  IF_SD     = $00000010;  { unsized operands can't be nondword  }
+  IF_AR0    = $00000020;  { SB, SW, SD applies to argument 0  }
+  IF_AR1    = $00000040;  { SB, SW, SD applies to argument 1  }
+  IF_AR2    = $00000060;  { SB, SW, SD applies to argument 2  }
+  IF_ARMASK = $00000060;  { mask for unsized argument spec  }
+  IF_PRIV   = $00000100;  { it's a privileged instruction  }
+  IF_SMM    = $00000200;  { it's only valid in SMM  }
+  IF_PROT   = $00000400;  { it's protected mode only  }
+  IF_UNDOC  = $00001000;  { it's an undocumented instruction  }
+  IF_FPU    = $00002000;  { it's an FPU instruction  }
+  IF_MMX    = $00004000;  { it's an MMX instruction  }
+  IF_3DNOW  = $00008000;  { it's a 3DNow! instruction  }
+  IF_SSE    = $00010000;  { it's a SSE (KNI, MMX2) instruction  }
+  IF_PMASK  = $FF000000;  { the mask for processor types  }
+  IF_PFMASK = $F001FF00;  { the mask for disassembly "prefer"  }
+  IF_8086   = $00000000;  { 8086 instruction  }
+  IF_186    = $01000000;  { 186+ instruction  }
+  IF_286    = $02000000;  { 286+ instruction  }
+  IF_386    = $03000000;  { 386+ instruction  }
+  IF_486    = $04000000;  { 486+ instruction  }
+  IF_PENT   = $05000000;  { Pentium instruction  }
+  IF_P6     = $06000000;  { P6 instruction  }
+  IF_KATMAI = $07000000;  { Katmai instructions  }
+  IF_CYRIX  = $10000000;  { Cyrix-specific instruction  }
+  IF_AMD    = $20000000;  { AMD-specific instruction  }
   { added flags }
   { added flags }
-  IF_PRE   = $10000; { it's a prefix instruction }
-  IF_PASS2 = $20000; { if the instruction can change in a second pass }
+  IF_PRE    = $40000000;  { it's a prefix instruction }
+  IF_PASS2  = $80000000;  { if the instruction can change in a second pass }
 
 
 type
 type
   TAsmOp=(A_None,
   TAsmOp=(A_None,
@@ -196,7 +208,7 @@ type
     A_FUCOMI, A_FUCOMIP, A_FUCOMP, A_FUCOMPP, A_FWAIT,A_FXAM, A_FXCH,
     A_FUCOMI, A_FUCOMIP, A_FUCOMP, A_FUCOMPP, A_FWAIT,A_FXAM, A_FXCH,
     A_FXTRACT, A_FYL2X, A_FYL2XP1, A_HLT, A_IBTS, A_ICEBP, A_IDIV,
     A_FXTRACT, A_FYL2X, A_FYL2XP1, A_HLT, A_IBTS, A_ICEBP, A_IDIV,
     A_IMUL, A_IN, A_INC, A_INSB, A_INSD, A_INSW, A_INT,
     A_IMUL, A_IN, A_INC, A_INSB, A_INSD, A_INSW, A_INT,
-    A_INT01, A_INT1, A_INT3, A_INTO, A_INVD, A_INVLPG, A_IRET,
+    A_INT01, A_INT1, A_INT03, A_INT3, A_INTO, A_INVD, A_INVLPG, A_IRET,
     A_IRETD, A_IRETW, A_JCXZ, A_JECXZ, A_JMP, A_LAHF, A_LAR, A_LDS,
     A_IRETD, A_IRETW, A_JCXZ, A_JECXZ, A_JMP, A_LAHF, A_LAR, A_LDS,
     A_LEA, A_LEAVE, A_LES, A_LFS, A_LGDT, A_LGS, A_LIDT, A_LLDT,
     A_LEA, A_LEAVE, A_LES, A_LFS, A_LGDT, A_LGS, A_LIDT, A_LLDT,
     A_LMSW, A_LOADALL, A_LOADALL286, A_LODSB, A_LODSD, A_LODSW,
     A_LMSW, A_LOADALL, A_LOADALL286, A_LODSB, A_LODSD, A_LODSW,
@@ -220,14 +232,27 @@ type
     A_PSUBSIW, A_PSUBSW, A_PSUBUSB, A_PSUBUSW, A_PSUBW, A_PUNPCKHBW,
     A_PSUBSIW, A_PSUBSW, A_PSUBUSB, A_PSUBUSW, A_PSUBW, A_PUNPCKHBW,
     A_PUNPCKHDQ, A_PUNPCKHWD, A_PUNPCKLBW, A_PUNPCKLDQ, A_PUNPCKLWD,
     A_PUNPCKHDQ, A_PUNPCKHWD, A_PUNPCKLBW, A_PUNPCKLDQ, A_PUNPCKLWD,
     A_PUSH, A_PUSHA, A_PUSHAD, A_PUSHAW, A_PUSHF, A_PUSHFD,
     A_PUSH, A_PUSHA, A_PUSHAD, A_PUSHAW, A_PUSHF, A_PUSHFD,
-    A_PUSHFW, A_PXOR, A_RCL, A_RCR, A_RDMSR, A_RDPMC, A_RDTSC,
+    A_PUSHFW, A_PXOR, A_RCL, A_RCR, A_RDSHR, A_RDMSR, A_RDPMC, A_RDTSC,
     A_RESB, A_RET, A_RETF, A_RETN,
     A_RESB, A_RET, A_RETF, A_RETN,
-    A_ROL, A_ROR, A_RSM, A_SAHF, A_SAL, A_SALC, A_SAR, A_SBB,
+    A_ROL, A_ROR, A_RSDC, A_RSLDT, A_RSM, A_SAHF, A_SAL, A_SALC, A_SAR, A_SBB,
     A_SCASB, A_SCASD, A_SCASW, A_SGDT, A_SHL, A_SHLD, A_SHR, A_SHRD,
     A_SCASB, A_SCASD, A_SCASW, A_SGDT, A_SHL, A_SHLD, A_SHR, A_SHRD,
-    A_SIDT, A_SLDT, A_SMI, A_SMSW, A_STC, A_STD, A_STI, A_STOSB,
-    A_STOSD, A_STOSW, A_STR, A_SUB, A_TEST, A_UMOV, A_VERR, A_VERW,
-    A_WAIT, A_WBINVD, A_WRMSR, A_XADD, A_XBTS, A_XCHG, A_XLAT, A_XLATB,
-    A_XOR, A_CMOVcc, A_Jcc, A_SETcc
+    A_SIDT, A_SLDT, A_SMI, A_SMINT, A_SMINTOLD, A_SMSW, A_STC, A_STD, A_STI, A_STOSB,
+    A_STOSD, A_STOSW, A_STR, A_SUB, A_SVDC, A_SVLDT, A_SVTS, A_SYSCALL, A_SYSENTER,
+    A_SYSEXIT, A_SYSRET, A_TEST, A_UD1, A_UD2, A_UMOV, A_VERR, A_VERW,
+    A_WAIT, A_WBINVD, A_WRSHR, A_WRMSR, A_XADD, A_XBTS, A_XCHG, A_XLAT, A_XLATB,
+    A_XOR, A_CMOVcc, A_Jcc, A_SETcc,
+    A_ADDPS, A_ADDSS, A_ANDNPS, A_ANDPS, 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_CMPPS, A_CMPSS, A_COMISS, A_CVTPI2PS, A_CVTPS2PI, A_CVTSI2SS, A_CVTSS2SI,
+    A_CVTTPS2PI, A_CVTTSS2SI, A_DIVPS, A_DIVSS, A_LDMXCSR, A_MAXPS, A_MAXSS, A_MINPS,
+    A_MINSS, A_MOVAPS, A_MOVHPS, A_MOVLHPS, A_MOVLPS, A_MOVHLPS, A_MOVMSKPS,
+    A_MOVNTPS, A_MOVSS, A_MOVUPS, A_MULPS, A_MULSS, A_ORPS, A_RCPPS, A_RCPSS,
+    A_RSQRTPS, A_RSQRTSS, A_SHUFPS, A_SQRTPS, A_SQRTSS, A_STMXCSR, A_SUBPS, A_SUBSS,
+    A_UCOMISS, A_UNPCKHPS, A_UNPCKLPS, A_XORPS, A_FXRSTOR, A_FXSAVE, A_PREFETCHNTA,
+    A_PREFETCHT0, A_PREFETCHT1,A_PREFETCHT2,
+    A_SFENCE, A_MASKMOVQ, A_MOVNTQ, A_PAVGB, A_PAVGW, A_PEXTRW, A_PINSRW, A_PMAXSW,
+    A_PMAXUB, A_PMINSW, A_PMINUB, A_PMOVMSKB, A_PMULHUW, A_PSADBW, A_PSHUFW
   );
   );
 
 
   op2strtable=array[tasmop] of string[10];
   op2strtable=array[tasmop] of string[10];
@@ -253,63 +278,74 @@ const
     'lock','rep','repe','repne','repnz','repz',
     'lock','rep','repe','repne','repnz','repz',
     'segcs','seges','segds','segfs','seggs','segss',
     'segcs','seges','segds','segfs','seggs','segss',
     { normal }
     { normal }
-    'aaa', 'aad', 'aam', 'aas', 'adc', 'add', 'and', 'arpl',
-    'bound', 'bsf', 'bsr', 'bswap', 'bt', 'btc', 'btr', 'bts',
-    'call', 'cbw', 'cdq', 'clc', 'cld', 'cli', 'clts', 'cmc', 'cmp',
-    'cmpsb', 'cmpsd', 'cmpsw', 'cmpxchg', 'cmpxchg486', 'cmpxchg8b',
-    'cpuid', 'cwd', 'cwde', 'daa', 'das', 'dec', 'div', 'emms',
-    'enter', 'equ', 'f2xm1', 'fabs',
-    'fadd', 'faddp', 'fbld', 'fbstp', 'fchs', 'fclex', 'fcmovb',
-    'fcmovbe', 'fcmove', 'fcmovnb', 'fcmovnbe', 'fcmovne',
-    'fcmovnu', 'fcmovu', 'fcom', 'fcomi', 'fcomip', 'fcomp',
-    'fcompp', 'fcos', 'fdecstp', 'fdisi', 'fdiv', 'fdivp', 'fdivr',
+    'aaa','aad','aam','aas','adc','add','and','arpl',
+    'bound','bsf','bsr','bswap','bt','btc','btr','bts',
+    'call','cbw','cdq','clc','cld','cli','clts','cmc','cmp',
+    'cmpsb','cmpsd','cmpsw','cmpxchg','cmpxchg486','cmpxchg8b',
+    'cpuid','cwd','cwde','daa','das','dec','div','emms',
+    'enter','equ','f2xm1','fabs',
+    'fadd','faddp','fbld','fbstp','fchs','fclex','fcmovb',
+    'fcmovbe','fcmove','fcmovnb','fcmovnbe','fcmovne',
+    'fcmovnu','fcmovu','fcom','fcomi','fcomip','fcomp',
+    'fcompp','fcos','fdecstp','fdisi','fdiv','fdivp','fdivr',
     'fdivrp',
     'fdivrp',
     'femms',
     'femms',
-    'feni', 'ffree', 'fiadd', 'ficom', 'ficomp', 'fidiv',
-    'fidivr', 'fild', 'fimul', 'fincstp', 'finit', 'fist', 'fistp',
-    'fisub', 'fisubr', 'fld', 'fld1', 'fldcw', 'fldenv', 'fldl2e',
-    'fldl2t', 'fldlg2', 'fldln2', 'fldpi', 'fldz', 'fmul', 'fmulp',
-    'fnclex', 'fndisi', 'fneni', 'fninit', 'fnop', 'fnsave',
-    'fnstcw', 'fnstenv', 'fnstsw', 'fpatan', 'fprem', 'fprem1',
-    'fptan', 'frndint', 'frstor', 'fsave', 'fscale', 'fsetpm',
-    'fsin', 'fsincos', 'fsqrt', 'fst', 'fstcw', 'fstenv', 'fstp',
-    'fstsw', 'fsub', 'fsubp', 'fsubr', 'fsubrp', 'ftst', 'fucom',
-    'fucomi', 'fucomip', 'fucomp', 'fucompp', 'fwait', 'fxam', 'fxch',
-    'fxtract', 'fyl2x', 'fyl2xp1', 'hlt', 'ibts', 'icebp', 'idiv',
-    'imul', 'in', 'inc', 'insb', 'insd', 'insw', 'int',
-    'int01', 'int1', 'int3', 'into', 'invd', 'invlpg', 'iret',
-    'iretd', 'iretw', 'jcxz', 'jecxz', 'jmp', 'lahf', 'lar', 'lds',
-    'lea', 'leave', 'les', 'lfs', 'lgdt', 'lgs', 'lidt', 'lldt',
-    'lmsw', 'loadall', 'loadall286', 'lodsb', 'lodsd', 'lodsw',
-    'loop', 'loope', 'loopne', 'loopnz', 'loopz', 'lsl', 'lss',
-    'ltr', 'mov', 'movd', 'movq', 'movsb', 'movsd', 'movsw',
-    'movsx', 'movzx', 'mul', 'neg', 'nop', 'not', 'or', 'out',
-    'outsb', 'outsd', 'outsw', 'packssdw', 'packsswb', 'packuswb',
-    'paddb', 'paddd', 'paddsb', 'paddsiw', 'paddsw', 'paddusb',
-    'paddusw', 'paddw', 'pand', 'pandn', 'paveb',
-    'pavgusb', 'pcmpeqb',
-    'pcmpeqd', 'pcmpeqw', 'pcmpgtb', 'pcmpgtd', 'pcmpgtw',
+    'feni','ffree','fiadd','ficom','ficomp','fidiv',
+    'fidivr','fild','fimul','fincstp','finit','fist','fistp',
+    'fisub','fisubr','fld','fld1','fldcw','fldenv','fldl2e',
+    'fldl2t','fldlg2','fldln2','fldpi','fldz','fmul','fmulp',
+    'fnclex','fndisi','fneni','fninit','fnop','fnsave',
+    'fnstcw','fnstenv','fnstsw','fpatan','fprem','fprem1',
+    'fptan','frndint','frstor','fsave','fscale','fsetpm',
+    'fsin','fsincos','fsqrt','fst','fstcw','fstenv','fstp',
+    'fstsw','fsub','fsubp','fsubr','fsubrp','ftst','fucom',
+    'fucomi','fucomip','fucomp','fucompp','fwait','fxam','fxch',
+    'fxtract','fyl2x','fyl2xp1','hlt','ibts','icebp','idiv',
+    'imul','in','inc','insb','insd','insw','int',
+    'int01','int1','int03','int3','into','invd','invlpg','iret',
+    'iretd','iretw','jcxz','jecxz','jmp','lahf','lar','lds',
+    'lea','leave','les','lfs','lgdt','lgs','lidt','lldt',
+    'lmsw','loadall','loadall286','lodsb','lodsd','lodsw',
+    'loop','loope','loopne','loopnz','loopz','lsl','lss',
+    'ltr','mov','movd','movq','movsb','movsd','movsw',
+    'movsx','movzx','mul','neg','nop','not','or','out',
+    'outsb','outsd','outsw','packssdw','packsswb','packuswb',
+    'paddb','paddd','paddsb','paddsiw','paddsw','paddusb',
+    'paddusw','paddw','pand','pandn','paveb',
+    'pavgusb','pcmpeqb',
+    'pcmpeqd','pcmpeqw','pcmpgtb','pcmpgtd','pcmpgtw',
     'pdistib',
     'pdistib',
-    'pf2id', 'pfacc', 'pfadd', 'pfcmpeq', 'pfcmpge', 'pfcmpgt',
-    'pfmax', 'pfmin', 'pfmul', 'pfrcp', 'pfrcpit1', 'pfrcpit2',
-    'pfrsqit1', 'pfrsqrt', 'pfsub', 'pfsubr', 'pi2fd',
-    'pmachriw', 'pmaddwd', 'pmagw', 'pmulhriw', 'pmulhrwa', 'pmulhrwc',
-    'pmulhw', 'pmullw', 'pmvgezb', 'pmvlzb', 'pmvnzb',
-    'pmvzb', 'pop', 'popa', 'popad', 'popaw', 'popf', 'popfd',
-    'popfw', 'por',
-    'prefetch', 'prefetchw', 'pslld', 'psllq', 'psllw', 'psrad', 'psraw',
-    'psrld', 'psrlq', 'psrlw', 'psubb', 'psubd', 'psubsb',
-    'psubsiw', 'psubsw', 'psubusb', 'psubusw', 'psubw', 'punpckhbw',
-    'punpckhdq', 'punpckhwd', 'punpcklbw', 'punpckldq', 'punpcklwd',
-    'push', 'pusha', 'pushad', 'pushaw', 'pushf', 'pushfd',
-    'pushfw', 'pxor', 'rcl', 'rcr', 'rdmsr', 'rdpmc', 'rdtsc',
-    'resb', 'ret', 'retf', 'retn',
-    'rol', 'ror', 'rsm', 'sahf', 'sal', 'salc', 'sar', 'sbb',
-    'scasb', 'scasd', 'scasw', 'sgdt', 'shl', 'shld', 'shr', 'shrd',
-    'sidt', 'sldt', 'smi', 'smsw', 'stc', 'std', 'sti', 'stosb',
-    'stosd', 'stosw', 'str', 'sub', 'test', 'umov', 'verr', 'verw',
-    'wait', 'wbinvd', 'wrmsr', 'xadd', 'xbts', 'xchg', 'xlat', 'xlatb',
-    'xor','cmov','j','set'
+    'pf2id','pfacc','pfadd','pfcmpeq','pfcmpge','pfcmpgt',
+    'pfmax','pfmin','pfmul','pfrcp','pfrcpit1','pfrcpit2',
+    'pfrsqit1','pfrsqrt','pfsub','pfsubr','pi2fd',
+    'pmachriw','pmaddwd','pmagw','pmulhriw','pmulhrwa','pmulhrwc',
+    'pmulhw','pmullw','pmvgezb','pmvlzb','pmvnzb',
+    'pmvzb','pop','popa','popad','popaw','popf','popfd',
+    'popfw','por',
+    'prefetch','prefetchw','pslld','psllq','psllw','psrad','psraw',
+    'psrld','psrlq','psrlw','psubb','psubd','psubsb',
+    'psubsiw','psubsw','psubusb','psubusw','psubw','punpckhbw',
+    'punpckhdq','punpckhwd','punpcklbw','punpckldq','punpcklwd',
+    'push','pusha','pushad','pushaw','pushf','pushfd',
+    'pushfw','pxor','rcl','rcr','rdshr','rdmsr','rdpmc','rdtsc',
+    'resb','ret','retf','retn',
+    'rol','ror','rsdc','rsldt','rsm','sahf','sal','salc','sar','sbb',
+    'scasb','scasd','scasw','sgdt','shl','shld','shr','shrd',
+    'sidt','sldt','smi','smint','smintold','smsw','stc','std','sti','stosb',
+    'stosd','stosw','str','sub','svdc','svldt','svts','syscall','sysenter',
+    'sysexit','sysret','test','ud1','ud2','umov','verr','verw',
+    'wait','wbinvd','wrshr','wrmsr','xadd','xbts','xchg','xlat','xlatb',
+    'xor','cmov','j','set',
+    'addps','addss','andnps','andps','cmpeqps','cmpeqss','cmpleps','cmpless','cmpltps',
+    'cmpltss','cmpneqps','cmpneqss','cmpnleps','cmpnless','cmpnltps','cmpnltss',
+    'cmpordps','cmpordss','cmpunordps','cmpunordss','cmpps','cmpss','comiss','cvtpi2ps','cvtps2pi',
+    'cvtsi2ss','cvtss2si','cvttps2pi','cvttss2si','divps','divss','ldmxcsr','maxps',
+    'maxss','minps','minss','movaps','movhps','movlhps','movlps','movhlps','movmskps',
+    'movntps','movss','movups','mulps','mulss','orps','rcpps','rcpss','rsqrtps','rsqrtss',
+    'shufps','sqrtps','sqrtss','stmxcsr','subps','subss','ucomiss','unpckhps','unpcklps',
+    'xorps','fxrstor','fxsave','prefetchnta','prefetcht0','prefetcht1','prefetcht2',
+    'sfence','maskmovq','movntq','pavgb','pavgw','pextrw','pinsrw','pmaxsw','pmaxub',
+    'pminsw','pminub','pmovmskb','pmulhuw','psadbw','pshufw'
   );
   );
 {$endif INTELOP}
 {$endif INTELOP}
 
 
@@ -319,62 +355,73 @@ const
     'lock','rep','repe','repne','repnz','repz',
     'lock','rep','repe','repne','repnz','repz',
     'cs','es','ds','fs','gs','ss',
     'cs','es','ds','fs','gs','ss',
     { normal }
     { normal }
-    'aaa', 'aad', 'aam', 'aas', 'adc', 'add', 'and', 'arpl',
-    'bound', 'bsf', 'bsr', 'bswap', 'bt', 'btc', 'btr', 'bts',
-    'call', 'cbtw', 'cltd', 'clc', 'cld', 'cli', 'clts', 'cmc', 'cmp',
-    'cmpsb', 'cmpsl', 'cmpsw', 'cmpxchg', 'cmpxchg486', 'cmpxchg8b',
-    'cpuid', 'cwtd', 'cwtl', 'daa', 'das', 'dec', 'div',
-    'emms', 'enter', 'equ', 'f2xm1', 'fabs',
-    'fadd', 'faddp', 'fbld', 'fbstp', 'fchs', 'fclex', 'fcmovb',
-    'fcmovbe', 'fcmove', 'fcmovnb', 'fcmovnbe', 'fcmovne',
-    'fcmovnu', 'fcmovu', 'fcom', 'fcomi', 'fcomip', 'fcomp',
-    'fcompp', 'fcos', 'fdecstp', 'fdisi', 'fdiv', 'fdivp', 'fdivr',
-    'fdivrp', 'femms',
-    'feni', 'ffree', 'fiadd', 'ficom', 'ficomp', 'fidiv',
-    'fidivr', 'fild', 'fimul', 'fincstp', 'finit', 'fist', 'fistp',
-    'fisub', 'fisubr', 'fld', 'fld1', 'fldcw', 'fldenv', 'fldl2e',
-    'fldl2t', 'fldlg2', 'fldln2', 'fldpi', 'fldz', 'fmul', 'fmulp',
-    'fnclex', 'fndisi', 'fneni', 'fninit', 'fnop', 'fnsave',
-    'fnstcw', 'fnstenv', 'fnstsw', 'fpatan', 'fprem', 'fprem1',
-    'fptan', 'frndint', 'frstor', 'fsave', 'fscale', 'fsetpm',
-    'fsin', 'fsincos', 'fsqrt', 'fst', 'fstcw', 'fstenv', 'fstp',
-    'fstsw', 'fsub', 'fsubp', 'fsubr', 'fsubrp', 'ftst', 'fucom',
-    'fucomi', 'fucomip', 'fucomp', 'fucompp', 'fwait', 'fxam', 'fxch',
-    'fxtract', 'fyl2x', 'fyl2xp1', 'hlt', 'ibts', 'icebp', 'idiv',
-    'imul', 'in', 'inc', 'insb', 'insl', 'insw', 'int',
-    'int01', 'int1', 'int3', 'into', 'invd', 'invlpg', 'iret',
-    'iretd', 'iretw', 'jcxz', 'jecxz', 'jmp', 'lahf', 'lar', 'lds',
-    'lea', 'leave', 'les', 'lfs', 'lgdt', 'lgs', 'lidt', 'lldt',
-    'lmsw', 'loadall', 'loadall286', 'lodsb', 'lodsl', 'lodsw',
-    'loop', 'loope', 'loopne', 'loopnz', 'loopz', 'lsl', 'lss',
-    'ltr', 'mov', 'movd', 'movq', 'movsb', 'movsl', 'movsw',
-    'movs', 'movz', 'mul', 'neg', 'nop', 'not', 'or', 'out',
-    'outsb', 'outsl', 'outsw', 'packssd', 'packssw', 'packusw',
-    'paddb', 'paddd', 'paddsb', 'paddsiw', 'paddsw', 'paddusb',
-    'paddusw', 'paddw', 'pand', 'pandn', 'paveb',
-    'pavgusb', 'pcmpeqb',
-    'pcmpeqd', 'pcmpeqw', 'pcmpgtb', 'pcmpgtd', 'pcmpgtw',
+    'aaa','aad','aam','aas','adc','add','and','arpl',
+    'bound','bsf','bsr','bswap','bt','btc','btr','bts',
+    'call','cbtw','cltd','clc','cld','cli','clts','cmc','cmp',
+    'cmpsb','cmpsl','cmpsw','cmpxchg','cmpxchg486','cmpxchg8b',
+    'cpuid','cwtd','cwtl','daa','das','dec','div',
+    'emms','enter','equ','f2xm1','fabs',
+    'fadd','faddp','fbld','fbstp','fchs','fclex','fcmovb',
+    'fcmovbe','fcmove','fcmovnb','fcmovnbe','fcmovne',
+    'fcmovnu','fcmovu','fcom','fcomi','fcomip','fcomp',
+    'fcompp','fcos','fdecstp','fdisi','fdiv','fdivp','fdivr',
+    'fdivrp','femms',
+    'feni','ffree','fiadd','ficom','ficomp','fidiv',
+    'fidivr','fild','fimul','fincstp','finit','fist','fistp',
+    'fisub','fisubr','fld','fld1','fldcw','fldenv','fldl2e',
+    'fldl2t','fldlg2','fldln2','fldpi','fldz','fmul','fmulp',
+    'fnclex','fndisi','fneni','fninit','fnop','fnsave',
+    'fnstcw','fnstenv','fnstsw','fpatan','fprem','fprem1',
+    'fptan','frndint','frstor','fsave','fscale','fsetpm',
+    'fsin','fsincos','fsqrt','fst','fstcw','fstenv','fstp',
+    'fstsw','fsub','fsubp','fsubr','fsubrp','ftst','fucom',
+    'fucomi','fucomip','fucomp','fucompp','fwait','fxam','fxch',
+    'fxtract','fyl2x','fyl2xp1','hlt','ibts','icebp','idiv',
+    'imul','in','inc','insb','insl','insw','int',
+    'int01','int1','int03','int3','into','invd','invlpg','iret',
+    'iretd','iretw','jcxz','jecxz','jmp','lahf','lar','lds',
+    'lea','leave','les','lfs','lgdt','lgs','lidt','lldt',
+    'lmsw','loadall','loadall286','lodsb','lodsl','lodsw',
+    'loop','loope','loopne','loopnz','loopz','lsl','lss',
+    'ltr','mov','movd','movq','movsb','movsl','movsw',
+    'movs','movz','mul','neg','nop','not','or','out',
+    'outsb','outsl','outsw','packssd','packssw','packusw',
+    'paddb','paddd','paddsb','paddsiw','paddsw','paddusb',
+    'paddusw','paddw','pand','pandn','paveb',
+    'pavgusb','pcmpeqb',
+    'pcmpeqd','pcmpeqw','pcmpgtb','pcmpgtd','pcmpgtw',
     'pdistib',
     'pdistib',
-    'pf2id', 'pfacc', 'pfadd', 'pfcmpeq', 'pfcmpge', 'pfcmpgt',
-    'pfmax', 'pfmin', 'pfmul', 'pfrcp', 'pfrcpit1', 'pfrcpit2',
-    'pfrsqit1', 'pfrsqrt', 'pfsub', 'pfsubr', 'pi2fd',
-    'pmachriw', 'pmaddwd', 'pmagw', 'pmulhriw', 'pmulhrwa', 'pmulhrwc',
-    'pmulhw', 'pmullw', 'pmvgezb', 'pmvlzb', 'pmvnzb',
-    'pmvzb', 'pop', 'popa', 'popal', 'popaw', 'popf', 'popfl',
-    'popfw', 'por',
-    'prefetch', 'prefetchw', 'pslld', 'psllq', 'psllw', 'psrad', 'psraw',
-    'psrld', 'psrlq', 'psrlw', 'psubb', 'psubd', 'psubsb',
-    'psubsiw', 'psubsw', 'psubusb', 'psubusw', 'psubw', 'punpckhbw',
-    'punpckhdq', 'punpckhwd', 'punpcklbw', 'punpckldq', 'punpcklwd',
-    'push', 'pusha', 'pushal', 'pushaw', 'pushf', 'pushfl',
-    'pushfw', 'pxor', 'rcl', 'rcr', 'rdmsr', 'rdpmc', 'rdtsc',
-    'resb', 'ret', 'retf', 'retn',
-    'rol', 'ror', 'rsm', 'sahf', 'sal', 'salc', 'sar', 'sbb',
-    'scasb', 'scasl', 'scasw', 'sgdt', 'shl', 'shld', 'shr', 'shrd',
-    'sidt', 'sldt', 'smi', 'smsw', 'stc', 'std', 'sti', 'stosb',
-    'stosl', 'stosw', 'str', 'sub', 'test', 'umov', 'verr', 'verw',
-    'wait', 'wbinvd', 'wrmsr', 'xadd', 'xbts', 'xchg', 'xlat', 'xlatb',
-    'xor','cmov','j','set'
+    'pf2id','pfacc','pfadd','pfcmpeq','pfcmpge','pfcmpgt',
+    'pfmax','pfmin','pfmul','pfrcp','pfrcpit1','pfrcpit2',
+    'pfrsqit1','pfrsqrt','pfsub','pfsubr','pi2fd',
+    'pmachriw','pmaddwd','pmagw','pmulhriw','pmulhrwa','pmulhrwc',
+    'pmulhw','pmullw','pmvgezb','pmvlzb','pmvnzb',
+    'pmvzb','pop','popa','popal','popaw','popf','popfl',
+    'popfw','por',
+    'prefetch','prefetchw','pslld','psllq','psllw','psrad','psraw',
+    'psrld','psrlq','psrlw','psubb','psubd','psubsb',
+    'psubsiw','psubsw','psubusb','psubusw','psubw','punpckhbw',
+    'punpckhdq','punpckhwd','punpcklbw','punpckldq','punpcklwd',
+    'push','pusha','pushal','pushaw','pushf','pushfl',
+    'pushfw','pxor','rcl','rcr','rdshr','rdmsr','rdpmc','rdtsc',
+    'resb','ret','retf','retn',
+    'rol','ror','rsdc','rsldt','rsm','sahf','sal','salc','sar','sbb',
+    'scasb','scasl','scasw','sgdt','shl','shld','shr','shrd',
+    'sidt','sldt','smi','smint','smintold','smsw','stc','std','sti','stosb',
+    'stosl','stosw','str','sub','svdc','svldt','svts','syscall','sysenter',
+    'sysexit','sysret','test','ud1','ud2','umov','verr','verw',
+    'wait','wbinvd','wrshr','wrmsr','xadd','xbts','xchg','xlat','xlatb',
+    'xor','cmov','j','set',
+    'addps','addss','andnps','andps','cmpeqps','cmpeqss','cmpleps','cmpless','cmpltps',
+    'cmpltss','cmpneqps','cmpneqss','cmpnleps','cmpnless','cmpnltps','cmpnltss',
+    'cmpordps','cmpordss','cmpunordps','cmpunordss','cmpps','cmpss','comiss','cvtpi2ps','cvtps2pi',
+    'cvtsi2ss','cvtss2si','cvttps2pi','cvttss2si','divps','divss','ldmxcsr','maxps',
+    'maxss','minps','minss','movaps','movhps','movlhps','movlps','movhlps','movmskps',
+    'movntps','movss','movups','mulps','mulss','orps','rcpps','rcpss','rsqrtps','rsqrtss',
+    'shufps','sqrtps','sqrtss','stmxcsr','subps','subss','ucomiss','unpckhps','unpcklps',
+    'xorps','fxrstor','fxsave','prefetchnta','prefetcht0','prefetcht1','prefetcht2',
+    'sfence','maskmovq','movntq','pavgb','pavgw','pextrw','pinsrw','pmaxsw','pmaxub',
+    'pminsw','pminub','pmovmskb','pmulhuw','psadbw','pshufw'
   );
   );
 
 
   att_nosuffix:array[tasmop] of boolean=(
   att_nosuffix:array[tasmop] of boolean=(
@@ -401,24 +448,34 @@ const
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     { 200 }
     { 200 }
-    false,true,true,true,true,true,false,false,false,false,
-    false,false,false,false,false,false,false,false,false,false,
+    false,false,true,true,true,true,true,false,false,false,
+    false,false,false,false,false,false,false,false,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,false,false,
     true,true,true,true,true,true,true,true,false,false,
-    false,false,false,false,false,false,false,false,true,true,
-    true,true,true,true,true,true,true,true,true,true,
+    false,false,false,false,false,false,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
     true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,
     { 300 }
     { 300 }
-    false,false,true,true,false,true,true,true,false,false,
+    true,false,false,true,true,false,true,true,true,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
     false,false,false,false,false,false,false,false,false,false,
-    false
+    false,false,false,false,false,false,false,false,false,false,
+    false,false,false,false,false,false,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    { 400 }
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true,
+    true,true,true,true,true,true,true,true,true,true
   );
   );
 
 
 {$endif ATTOP}
 {$endif ATTOP}
@@ -477,9 +534,9 @@ type
 
 
 const
 const
   cond2str:array[TAsmCond] of string[3]=('',
   cond2str:array[TAsmCond] of string[3]=('',
-    'a', 'ae', 'b', 'be', 'c', 'e', 'g', 'ge', 'l', 'le', 'na', 'nae',
-    'nb', 'nbe', 'nc', 'ne', 'ng', 'nge', 'nl', 'nle', 'no', 'np',
-    'ns', 'nz', 'o', 'p', 'pe', 'po', 's', 'z'
+    'a','ae','b','be','c','e','g','ge','l','le','na','nae',
+    'nb','nbe','nc','ne','ng','nge','nl','nle','no','np',
+    'ns','nz','o','p','pe','po','s','z'
   );
   );
   inverse_cond:array[TAsmCond] of TAsmCond=(C_None,
   inverse_cond:array[TAsmCond] of TAsmCond=(C_None,
     C_NA,C_NAE,C_NB,C_NBE,C_NC,C_NE,C_NG,C_NGE,C_NL,C_NLE,C_A,C_AE,
     C_NA,C_NAE,C_NB,C_NBE,C_NC,C_NE,C_NG,C_NGE,C_NL,C_NLE,C_A,C_AE,
@@ -557,7 +614,7 @@ const
     OT_REG_CREG,OT_REG_CREG,OT_REG_CREG,OT_REG_CR4,
     OT_REG_CREG,OT_REG_CREG,OT_REG_CREG,OT_REG_CR4,
     OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,
     OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,OT_REG_TREG,
     OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,
     OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,
-    OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG,OT_MMXREG
+    OT_XMMREG,OT_XMMREG,OT_XMMREG,OT_XMMREG,OT_XMMREG,OT_XMMREG,OT_XMMREG,OT_XMMREG
   );
   );
 
 
 {$ifdef INTELOP}
 {$ifdef INTELOP}
@@ -1007,7 +1064,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.4  1999-08-07 14:20:58  florian
+  Revision 1.5  1999-08-12 14:36:02  peter
+    + KNI instructions
+
+  Revision 1.4  1999/08/07 14:20:58  florian
     * some small problems fixed
     * some small problems fixed
 
 
   Revision 1.3  1999/08/05 14:58:09  florian
   Revision 1.3  1999/08/05 14:58:09  florian

+ 105 - 2
compiler/daopt386.pas

@@ -406,6 +406,7 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_INT} (Ch: (C_All, C_None, C_None)), {don't know value of any register}
   {A_INT} (Ch: (C_All, C_None, C_None)), {don't know value of any register}
   {A_INT01} (Ch: (C_All, C_None, C_None)), { new }
   {A_INT01} (Ch: (C_All, C_None, C_None)), { new }
   {A_INT1} (Ch: (C_All, C_None, C_None)), { new }
   {A_INT1} (Ch: (C_All, C_None, C_None)), { new }
+{!!!} {A_INT03} (Ch: (C_None, C_None, C_None)),
   {A_INT3} (Ch: (C_None, C_None, C_None)),
   {A_INT3} (Ch: (C_None, C_None, C_None)),
   {A_INTO} (Ch: (C_All, C_None, C_None)), {don't know value of any register}
   {A_INTO} (Ch: (C_All, C_None, C_None)), {don't know value of any register}
   {A_INVD} (Ch: (C_All, C_None, C_None)), { new }
   {A_INVD} (Ch: (C_All, C_None, C_None)), { new }
@@ -551,6 +552,7 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_PXOR} (Ch: (C_All, C_None, C_None)), { new }
   {A_PXOR} (Ch: (C_All, C_None, C_None)), { new }
   {A_RCL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_RCL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_RCR} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_RCR} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
+{!!!}  {A_RDSHR} (Ch: (C_All, C_None, C_None)), { new }
   {A_RDMSR} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
   {A_RDMSR} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
   {A_RDPMC} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
   {A_RDPMC} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
   {A_RDTSC} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
   {A_RDTSC} (Ch: (C_WEAX, C_WEDX, C_None)), { new }
@@ -560,6 +562,8 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_RETN} (Ch: (C_All, C_None, C_None)), { new }
   {A_RETN} (Ch: (C_All, C_None, C_None)), { new }
   {A_ROL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_ROL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_ROR} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_ROR} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
+{!!!}  {A_RSDC} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_RSLDT} (Ch: (C_All, C_None, C_None)), { new }
   {A_RSM} (Ch: (C_All, C_None, C_None)), { new }
   {A_RSM} (Ch: (C_All, C_None, C_None)), { new }
   {A_SAHF} (Ch: (C_WFlags, C_REAX, C_None)),
   {A_SAHF} (Ch: (C_WFlags, C_REAX, C_None)),
   {A_SAL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
   {A_SAL} (Ch: (C_Mop2, C_Rop1, C_RWFlags)),
@@ -577,6 +581,8 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_SIDT} (Ch: (C_Wop1, C_None, C_None)),
   {A_SIDT} (Ch: (C_Wop1, C_None, C_None)),
   {A_SLDT} (Ch: (C_Wop1, C_None, C_None)),
   {A_SLDT} (Ch: (C_Wop1, C_None, C_None)),
   {A_SMI} (Ch: (C_All, C_None, C_None)), { new }
   {A_SMI} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SMINT} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SMINTOLD} (Ch: (C_All, C_None, C_None)), { new }
   {A_SMSW} (Ch: (C_Wop1, C_None, C_None)),
   {A_SMSW} (Ch: (C_Wop1, C_None, C_None)),
   {A_STC} (Ch: (C_WFlags, C_None, C_None)),
   {A_STC} (Ch: (C_WFlags, C_None, C_None)),
   {A_STD} (Ch: (C_SDirFlag, C_None, C_None)),
   {A_STD} (Ch: (C_SDirFlag, C_None, C_None)),
@@ -586,12 +592,22 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_STOSW} (Ch: (C_REAX, C_WMemEDI, C_RWEDI)), { new }
   {A_STOSW} (Ch: (C_REAX, C_WMemEDI, C_RWEDI)), { new }
   {A_STR}  (Ch: (C_Wop1, C_None, C_None)),
   {A_STR}  (Ch: (C_Wop1, C_None, C_None)),
   {A_SUB} (Ch: (C_Mop2, C_Rop1, C_WFlags)),
   {A_SUB} (Ch: (C_Mop2, C_Rop1, C_WFlags)),
+{!!!}  {A_SVDC} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SVLDT} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SVTS} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SYSCALL} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SYSENTER} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SYSEXIT} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_SYSRET} (Ch: (C_All, C_None, C_None)), { new }
   {A_TEST} (Ch: (C_WFlags, C_Rop1, C_Rop2)),
   {A_TEST} (Ch: (C_WFlags, C_Rop1, C_Rop2)),
+{!!!}  {A_UD1} (Ch: (C_All, C_None, C_None)), { new }
+{!!!}  {A_UD2} (Ch: (C_All, C_None, C_None)), { new }
   {A_UMOV} (Ch: (C_All, C_None, C_None)), { new }
   {A_UMOV} (Ch: (C_All, C_None, C_None)), { new }
   {A_VERR} (Ch: (C_WFlags, C_None, C_None)),
   {A_VERR} (Ch: (C_WFlags, C_None, C_None)),
   {A_VERW} (Ch: (C_WFlags, C_None, C_None)),
   {A_VERW} (Ch: (C_WFlags, C_None, C_None)),
   {A_WAIT} (Ch: (C_None, C_None, C_None)),
   {A_WAIT} (Ch: (C_None, C_None, C_None)),
   {A_WBINVD} (Ch: (C_None, C_None, C_None)), { new }
   {A_WBINVD} (Ch: (C_None, C_None, C_None)), { new }
+{!!!}  {A_WRSHR} (Ch: (C_All, C_None, C_None)), { new }
   {A_WRMSR} (Ch: (C_All, C_None, C_None)), { new }
   {A_WRMSR} (Ch: (C_All, C_None, C_None)), { new }
   {A_XADD} (Ch: (C_All, C_None, C_None)), { new }
   {A_XADD} (Ch: (C_All, C_None, C_None)), { new }
   {A_XBTS} (Ch: (C_All, C_None, C_None)), { new }
   {A_XBTS} (Ch: (C_All, C_None, C_None)), { new }
@@ -601,7 +617,91 @@ Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
   {A_XOR} (Ch: (C_Mop2, C_Rop1, C_WFlags)),
   {A_XOR} (Ch: (C_Mop2, C_Rop1, C_WFlags)),
   {A_CMOV} (Ch: (C_ROp1, C_WOp2, C_RFLAGS)), { new }
   {A_CMOV} (Ch: (C_ROp1, C_WOp2, C_RFLAGS)), { new }
   {A_J} (Ch: (C_None, C_None, C_None)), { new }
   {A_J} (Ch: (C_None, C_None, C_None)), { new }
-  {A_SET} (Ch: (C_WEAX, C_RFLAGS, C_None))  { new }
+  {A_SET} (Ch: (C_WEAX, C_RFLAGS, C_None)),  { new }
+{!!!! From here everything is new !!!!!!!!}
+  {ADDPS} (Ch: (C_All, C_None, C_None)), { new }
+  {ADDSS} (Ch: (C_All, C_None, C_None)), { new }
+  {ANDNPS} (Ch: (C_All, C_None, C_None)), { new }
+  {ANDPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPEQPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPEQSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPLEPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPLESS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPLTPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPLTSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNEQPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNEQSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNLEPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNLESS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNLTPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPNLTSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPORDPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPORDSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPUNORDPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPUNORDSS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPPS} (Ch: (C_All, C_None, C_None)), { new }
+  {CMPSS} (Ch: (C_All, C_None, C_None)), { new }
+  {COMISS} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTPI2PS} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTPS2PI} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTSI2SS} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTSS2SI} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTTPS2PI} (Ch: (C_All, C_None, C_None)), { new }
+  {CVTTSS2SI} (Ch: (C_All, C_None, C_None)), { new }
+  {DIVPS} (Ch: (C_All, C_None, C_None)), { new }
+  {DIVSS} (Ch: (C_All, C_None, C_None)), { new }
+  {LDMXCSR} (Ch: (C_All, C_None, C_None)), { new }
+  {MAXPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MAXSS} (Ch: (C_All, C_None, C_None)), { new }
+  {MINPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MINSS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVAPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVHPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVLHPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVLPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVHLPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVMSKPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVNTPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVSS} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVUPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MULPS} (Ch: (C_All, C_None, C_None)), { new }
+  {MULSS} (Ch: (C_All, C_None, C_None)), { new }
+  {ORPS} (Ch: (C_All, C_None, C_None)), { new }
+  {RCPPS} (Ch: (C_All, C_None, C_None)), { new }
+  {RCPSS} (Ch: (C_All, C_None, C_None)), { new }
+  {RSQRTPS} (Ch: (C_All, C_None, C_None)), { new }
+  {RSQRTSS} (Ch: (C_All, C_None, C_None)), { new }
+  {SHUFPS} (Ch: (C_All, C_None, C_None)), { new }
+  {SQRTPS} (Ch: (C_All, C_None, C_None)), { new }
+  {SQRTSS} (Ch: (C_All, C_None, C_None)), { new }
+  {STMXCSR} (Ch: (C_All, C_None, C_None)), { new }
+  {SUBPS} (Ch: (C_All, C_None, C_None)), { new }
+  {SUBSS} (Ch: (C_All, C_None, C_None)), { new }
+  {UCOMISS} (Ch: (C_All, C_None, C_None)), { new }
+  {UNPCKHPS} (Ch: (C_All, C_None, C_None)), { new }
+  {UNPCKLPS} (Ch: (C_All, C_None, C_None)), { new }
+  {XORPS} (Ch: (C_All, C_None, C_None)), { new }
+  {FXRSTOR} (Ch: (C_All, C_None, C_None)), { new }
+  {FXSAVE} (Ch: (C_All, C_None, C_None)), { new }
+  {PREFETCHNTA} (Ch: (C_All, C_None, C_None)), { new }
+  {PREFETCHT0} (Ch: (C_All, C_None, C_None)), { new }
+  {PREFETCHT1} (Ch: (C_All, C_None, C_None)), { new }
+  {PREFETCHT2} (Ch: (C_All, C_None, C_None)), { new }
+  {SFENCE} (Ch: (C_All, C_None, C_None)), { new }
+  {MASKMOVQ} (Ch: (C_All, C_None, C_None)), { new }
+  {MOVNTQ} (Ch: (C_All, C_None, C_None)), { new }
+  {PAVGB} (Ch: (C_All, C_None, C_None)), { new }
+  {PAVGW} (Ch: (C_All, C_None, C_None)), { new }
+  {PEXTRW} (Ch: (C_All, C_None, C_None)), { new }
+  {PINSRW} (Ch: (C_All, C_None, C_None)), { new }
+  {PMAXSW} (Ch: (C_All, C_None, C_None)), { new }
+  {PMAXUB} (Ch: (C_All, C_None, C_None)), { new }
+  {PMINSW} (Ch: (C_All, C_None, C_None)), { new }
+  {PMINUB} (Ch: (C_All, C_None, C_None)), { new }
+  {PMOVMSKB} (Ch: (C_All, C_None, C_None)), { new }
+  {PMULHUW} (Ch: (C_All, C_None, C_None)), { new }
+  {PSADBW} (Ch: (C_All, C_None, C_None)), { new }
+  {PSHUFW} (Ch: (C_All, C_None, C_None)) { new }
   );
   );
 
 
 Var
 Var
@@ -2237,7 +2337,10 @@ End.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.54  1999-08-05 15:01:52  jonas
+ Revision 1.55  1999-08-12 14:36:03  peter
+   + KNI instructions
+
+ Revision 1.54  1999/08/05 15:01:52  jonas
    * fix in -darithopt code (sometimes crashed on 8/16bit regs)
    * fix in -darithopt code (sometimes crashed on 8/16bit regs)
 
 
  Revision 1.53  1999/08/04 00:22:59  florian
  Revision 1.53  1999/08/04 00:22:59  florian

File diff suppressed because it is too large
+ 273 - 98
compiler/i386tab.inc


+ 308 - 108
compiler/insns.dat

@@ -87,8 +87,8 @@ AND       rm32,imm            \321\300\1\x81\204\41         386,SM
 AND       mem,imm8            \300\1\x80\204\21             8086,SM
 AND       mem,imm8            \300\1\x80\204\21             8086,SM
 AND       mem,imm16           \320\300\1\x81\204\31         8086,SM
 AND       mem,imm16           \320\300\1\x81\204\31         8086,SM
 AND       mem,imm32           \321\300\1\x81\204\41         386,SM
 AND       mem,imm32           \321\300\1\x81\204\41         386,SM
-ARPL      mem,reg16           \300\1\x63\101                286,PRIV,SM
-ARPL      reg16,reg16         \300\1\x63\101                286,PRIV
+ARPL      mem,reg16           \300\1\x63\101                286,PROT,SM
+ARPL      reg16,reg16         \300\1\x63\101                286,PROT
 BOUND     reg16,mem           \320\301\1\x62\110            186
 BOUND     reg16,mem           \320\301\1\x62\110            186
 BOUND     reg32,mem           \321\301\1\x62\110            386
 BOUND     reg32,mem           \321\301\1\x62\110            386
 BSF       reg16,mem           \320\301\2\x0F\xBC\110        386,SM
 BSF       reg16,mem           \320\301\2\x0F\xBC\110        386,SM
@@ -127,6 +127,12 @@ BTS       rm32,imm            \321\300\2\x0F\xBA\205\25     386,SB
 CALL      imm                 \322\1\xE8\64                 8086
 CALL      imm                 \322\1\xE8\64                 8086
 CALL      imm|near            \322\1\xE8\64                 8086
 CALL      imm|near            \322\1\xE8\64                 8086
 CALL      imm|far             \322\1\x9A\34\37              8086,ND
 CALL      imm|far             \322\1\x9A\34\37              8086,ND
+CALL      imm16               \320\1\xE8\64                 8086
+CALL      imm16|near          \320\1\xE8\64                 8086
+CALL      imm16|far           \320\1\x9A\34\37              8086,ND
+CALL      imm32               \321\1\xE8\64                 8086
+CALL      imm32|near          \321\1\xE8\64                 8086
+CALL      imm32|far           \321\1\x9A\34\37              8086,ND
 CALL      imm:imm             \322\1\x9A\35\30              8086
 CALL      imm:imm             \322\1\x9A\35\30              8086
 CALL      imm16:imm           \320\1\x9A\31\30              8086
 CALL      imm16:imm           \320\1\x9A\31\30              8086
 CALL      imm:imm16           \320\1\x9A\31\30              8086
 CALL      imm:imm16           \320\1\x9A\31\30              8086
@@ -173,9 +179,9 @@ CMP       rm32,imm            \321\300\1\x81\207\41         386,SM
 CMP       mem,imm8            \300\1\x80\207\21             8086,SM
 CMP       mem,imm8            \300\1\x80\207\21             8086,SM
 CMP       mem,imm16           \320\300\1\x81\207\31         8086,SM
 CMP       mem,imm16           \320\300\1\x81\207\31         8086,SM
 CMP       mem,imm32           \321\300\1\x81\207\41         386,SM
 CMP       mem,imm32           \321\300\1\x81\207\41         386,SM
-CMPSB     void                \1\xA6                        8086
-CMPSD     void                \321\1\xA7                    386
-CMPSW     void                \320\1\xA7                    8086
+CMPSB     void                \332\1\xA6                    8086
+CMPSD     void                \332\321\1\xA7                386
+CMPSW     void                \332\320\1\xA7                8086
 CMPXCHG   mem,reg8            \300\2\x0F\xB0\101            PENT,SM
 CMPXCHG   mem,reg8            \300\2\x0F\xB0\101            PENT,SM
 CMPXCHG   reg8,reg8           \300\2\x0F\xB0\101            PENT
 CMPXCHG   reg8,reg8           \300\2\x0F\xB0\101            PENT
 CMPXCHG   mem,reg16           \320\300\2\x0F\xB1\101        PENT,SM
 CMPXCHG   mem,reg16           \320\300\2\x0F\xB1\101        PENT,SM
@@ -289,7 +295,7 @@ FDIVR     fpu0,fpureg         \1\xD8\11\xF8                 8086,FPU
 FDIVRP    void                \2\xDE\xF9                    8086,FPU
 FDIVRP    void                \2\xDE\xF9                    8086,FPU
 FDIVRP    fpureg              \1\xDE\10\xF8                 8086,FPU
 FDIVRP    fpureg              \1\xDE\10\xF8                 8086,FPU
 FDIVRP    fpureg,fpu0         \1\xDE\10\xF8                 8086,FPU
 FDIVRP    fpureg,fpu0         \1\xDE\10\xF8                 8086,FPU
-FEMMS     void                \2\x0F\x0E                    PENT,MMX,FPU
+FEMMS     void                \2\x0F\x0E                    PENT,3DNOW
 FENI      void                \3\x9B\xDB\xE0                8086,FPU
 FENI      void                \3\x9B\xDB\xE0                8086,FPU
 FFREE     fpureg              \1\xDD\10\xC0                 8086,FPU
 FFREE     fpureg              \1\xDD\10\xC0                 8086,FPU
 FIADD     mem32               \300\1\xDA\200                8086,FPU
 FIADD     mem32               \300\1\xDA\200                8086,FPU
@@ -420,12 +426,12 @@ FXTRACT   void                \2\xD9\xF4                    8086,FPU
 FYL2X     void                \2\xD9\xF1                    8086,FPU
 FYL2X     void                \2\xD9\xF1                    8086,FPU
 FYL2XP1   void                \2\xD9\xF9                    8086,FPU
 FYL2XP1   void                \2\xD9\xF9                    8086,FPU
 GS        void                \1\x65                        386,PRE
 GS        void                \1\x65                        386,PRE
-HLT       void                \1\xF4                        8086
+HLT       void                \1\xF4                        8086,PRIV
 IBTS      mem,reg16           \320\300\2\x0F\xA7\101        386,SW,UNDOC,ND
 IBTS      mem,reg16           \320\300\2\x0F\xA7\101        386,SW,UNDOC,ND
 IBTS      reg16,reg16         \320\300\2\x0F\xA7\101        386,UNDOC,ND
 IBTS      reg16,reg16         \320\300\2\x0F\xA7\101        386,UNDOC,ND
 IBTS      mem,reg32           \321\300\2\x0F\xA7\101        386,SD,UNDOC,ND
 IBTS      mem,reg32           \321\300\2\x0F\xA7\101        386,SD,UNDOC,ND
 IBTS      reg32,reg32         \321\300\2\x0F\xA7\101        386,UNDOC,ND
 IBTS      reg32,reg32         \321\300\2\x0F\xA7\101        386,UNDOC,ND
-ICEBP     void                \1\xF1                        P6,ND
+ICEBP     void                \1\xF1                        386,ND
 IDIV      rm8                 \300\1\xF6\207                8086
 IDIV      rm8                 \300\1\xF6\207                8086
 IDIV      rm16                \320\300\1\xF7\207            8086
 IDIV      rm16                \320\300\1\xF7\207            8086
 IDIV      rm32                \321\300\1\xF7\207            386
 IDIV      rm32                \321\300\1\xF7\207            386
@@ -463,12 +469,13 @@ INSB      void                \1\x6C                        186
 INSD      void                \321\1\x6D                    386
 INSD      void                \321\1\x6D                    386
 INSW      void                \320\1\x6D                    186
 INSW      void                \320\1\x6D                    186
 INT       imm                 \1\xCD\24                     8086,SB
 INT       imm                 \1\xCD\24                     8086,SB
-INT01     void                \1\xF1                        P6,ND
-INT1      void                \1\xF1                        P6
+INT01     void                \1\xF1                        386,ND
+INT1      void                \1\xF1                        386
+INT03     void                \1\xCC                        8086,ND
 INT3      void                \1\xCC                        8086
 INT3      void                \1\xCC                        8086
 INTO      void                \1\xCE                        8086
 INTO      void                \1\xCE                        8086
-INVD      void                \2\x0F\x08                    486
-INVLPG    mem                 \300\2\x0F\x01\207            486
+INVD      void                \2\x0F\x08                    486,PRIV
+INVLPG    mem                 \300\2\x0F\x01\207            486,PRIV
 IRET      void                \322\1\xCF                    8086
 IRET      void                \322\1\xCF                    8086
 IRETD     void                \321\1\xCF                    386
 IRETD     void                \321\1\xCF                    386
 IRETW     void                \320\1\xCF                    8086
 IRETW     void                \320\1\xCF                    8086
@@ -476,8 +483,14 @@ JCXZ      imm                 \320\1\xE3\50                 8086
 JECXZ     imm                 \321\1\xE3\50                 386
 JECXZ     imm                 \321\1\xE3\50                 386
 JMP       imm|short           \1\xEB\50                     8086
 JMP       imm|short           \1\xEB\50                     8086
 JMP       imm                 \322\1\xE9\64                 8086,PASS2
 JMP       imm                 \322\1\xE9\64                 8086,PASS2
-JMP       imm|near            \322\1\xE9\64                 8086,PASS2
+JMP       imm|near            \322\1\xE9\64                 8086,ND,PASS2
 JMP       imm|far             \322\1\xEA\34\37              8086,ND
 JMP       imm|far             \322\1\xEA\34\37              8086,ND
+JMP       imm16               \320\1\xE9\64                 8086,PASS2
+JMP       imm16|near          \320\1\xE9\64                 8086,ND,PASS2
+JMP       imm16|far           \320\1\xEA\34\37              8086,ND,PASS2
+JMP       imm32               \321\1\xE9\64                 8086,PASS2
+JMP       imm32|near          \321\1\xE9\64                 8086,ND,PASS2
+JMP       imm32|far           \321\1\xEA\34\37              8086,ND,PASS2
 JMP       imm:imm             \322\1\xEA\35\30              8086
 JMP       imm:imm             \322\1\xEA\35\30              8086
 JMP       imm16:imm           \320\1\xEA\31\30              8086
 JMP       imm16:imm           \320\1\xEA\31\30              8086
 JMP       imm:imm16           \320\1\xEA\31\30              8086
 JMP       imm:imm16           \320\1\xEA\31\30              8086
@@ -495,10 +508,10 @@ JMP       mem                 \322\300\1\xFF\204            8086
 JMP       mem16               \320\300\1\xFF\204            8086
 JMP       mem16               \320\300\1\xFF\204            8086
 JMP       mem32               \321\300\1\xFF\204            386
 JMP       mem32               \321\300\1\xFF\204            386
 LAHF      void                \1\x9F                        8086
 LAHF      void                \1\x9F                        8086
-LAR       reg16,mem           \320\301\2\x0F\x02\110        286,PRIV,SM
-LAR       reg16,reg16         \320\301\2\x0F\x02\110        286,PRIV
-LAR       reg32,mem           \321\301\2\x0F\x02\110        286,PRIV,SM
-LAR       reg32,reg32         \321\301\2\x0F\x02\110        286,PRIV
+LAR       reg16,mem           \320\301\2\x0F\x02\110        286,PROT,SM
+LAR       reg16,reg16         \320\301\2\x0F\x02\110        286,PROT
+LAR       reg32,mem           \321\301\2\x0F\x02\110        286,PROT,SM
+LAR       reg32,reg32         \321\301\2\x0F\x02\110        286,PROT
 LDS       reg16,mem           \320\301\1\xC5\110            8086
 LDS       reg16,mem           \320\301\1\xC5\110            8086
 LDS       reg32,mem           \321\301\1\xC5\110            8086
 LDS       reg32,mem           \321\301\1\xC5\110            8086
 LEA       reg16,mem           \320\301\1\x8D\110            8086
 LEA       reg16,mem           \320\301\1\x8D\110            8086
@@ -513,9 +526,9 @@ LGDT      mem                 \300\2\x0F\x01\202            286,PRIV
 LGS       reg16,mem           \320\301\2\x0F\xB5\110        386
 LGS       reg16,mem           \320\301\2\x0F\xB5\110        386
 LGS       reg32,mem           \321\301\2\x0F\xB5\110        386
 LGS       reg32,mem           \321\301\2\x0F\xB5\110        386
 LIDT      mem                 \300\2\x0F\x01\203            286,PRIV
 LIDT      mem                 \300\2\x0F\x01\203            286,PRIV
-LLDT      mem                 \300\1\x0F\17\202             286,PRIV
-LLDT      mem16               \300\1\x0F\17\202             286,PRIV
-LLDT      reg16               \300\1\x0F\17\202             286,PRIV
+LLDT      mem                 \300\1\x0F\17\202             286,PROT,PRIV
+LLDT      mem16               \300\1\x0F\17\202             286,PROT,PRIV
+LLDT      reg16               \300\1\x0F\17\202             286,PROT,PRIV
 LMSW      mem                 \300\2\x0F\x01\206            286,PRIV
 LMSW      mem                 \300\2\x0F\x01\206            286,PRIV
 LMSW      mem16               \300\2\x0F\x01\206            286,PRIV
 LMSW      mem16               \300\2\x0F\x01\206            286,PRIV
 LMSW      reg16               \300\2\x0F\x01\206            286,PRIV
 LMSW      reg16               \300\2\x0F\x01\206            286,PRIV
@@ -540,15 +553,15 @@ LOOPNZ    imm,reg_ecx         \311\1\xE0\50                 386
 LOOPZ     imm                 \312\1\xE1\50                 8086
 LOOPZ     imm                 \312\1\xE1\50                 8086
 LOOPZ     imm,reg_cx          \310\1\xE1\50                 8086
 LOOPZ     imm,reg_cx          \310\1\xE1\50                 8086
 LOOPZ     imm,reg_ecx         \311\1\xE1\50                 386
 LOOPZ     imm,reg_ecx         \311\1\xE1\50                 386
-LSL       reg16,mem           \320\301\2\x0F\x03\110        286,PRIV,SM
-LSL       reg16,reg16         \320\301\2\x0F\x03\110        286,PRIV
-LSL       reg32,mem           \321\301\2\x0F\x03\110        286,PRIV,SM
-LSL       reg32,reg32         \321\301\2\x0F\x03\110        286,PRIV
+LSL       reg16,mem           \320\301\2\x0F\x03\110        286,PROT,SM
+LSL       reg16,reg16         \320\301\2\x0F\x03\110        286,PROT
+LSL       reg32,mem           \321\301\2\x0F\x03\110        286,PROT,SM
+LSL       reg32,reg32         \321\301\2\x0F\x03\110        286,PROT
 LSS       reg16,mem           \320\301\2\x0F\xB2\110        386
 LSS       reg16,mem           \320\301\2\x0F\xB2\110        386
 LSS       reg32,mem           \321\301\2\x0F\xB2\110        386
 LSS       reg32,mem           \321\301\2\x0F\xB2\110        386
-LTR       mem                 \300\1\x0F\17\203             286,PRIV
-LTR       mem16               \300\1\x0F\17\203             286,PRIV
-LTR       reg16               \300\1\x0F\17\203             286,PRIV
+LTR       mem                 \300\1\x0F\17\203             286,PROT,PRIV
+LTR       mem16               \300\1\x0F\17\203             286,PROT,PRIV
+LTR       reg16               \300\1\x0F\17\203             286,PROT,PRIV
 MOV       mem,reg_cs          \320\300\1\x8C\201            8086,SM
 MOV       mem,reg_cs          \320\300\1\x8C\201            8086,SM
 MOV       mem,reg_dess        \320\300\1\x8C\101            8086,SM
 MOV       mem,reg_dess        \320\300\1\x8C\101            8086,SM
 MOV       mem,reg_fsgs        \320\300\1\x8C\101            386,SM
 MOV       mem,reg_fsgs        \320\300\1\x8C\101            386,SM
@@ -570,14 +583,14 @@ MOV       reg_eax,mem_offs    \301\321\1\xA1\35             386,SM
 MOV       mem_offs,reg_al     \300\1\xA2\34                 8086,SM
 MOV       mem_offs,reg_al     \300\1\xA2\34                 8086,SM
 MOV       mem_offs,reg_ax     \300\320\1\xA3\34             8086,SM
 MOV       mem_offs,reg_ax     \300\320\1\xA3\34             8086,SM
 MOV       mem_offs,reg_eax    \300\321\1\xA3\34             386,SM
 MOV       mem_offs,reg_eax    \300\321\1\xA3\34             386,SM
-MOV       reg32,reg_cr4       \2\x0F\x20\204                PENT
-MOV       reg32,reg_creg      \2\x0F\x20\101                386
-MOV       reg32,reg_dreg      \2\x0F\x21\101                386
-MOV       reg32,reg_treg      \2\x0F\x24\101                386
-MOV       reg_cr4,reg32       \2\x0F\x22\214                PENT
-MOV       reg_creg,reg32      \2\x0F\x22\110                386
-MOV       reg_dreg,reg32      \2\x0F\x23\110                386
-MOV       reg_treg,reg32      \2\x0F\x26\110                386
+MOV       reg32,reg_cr4       \2\x0F\x20\204                PENT,PRIV
+MOV       reg32,reg_creg      \2\x0F\x20\101                386,PRIV
+MOV       reg32,reg_dreg      \2\x0F\x21\101                386,PRIV
+MOV       reg32,reg_treg      \2\x0F\x24\101                386,PRIV
+MOV       reg_cr4,reg32       \2\x0F\x22\214                PENT,PRIV
+MOV       reg_creg,reg32      \2\x0F\x22\110                386,PRIV
+MOV       reg_dreg,reg32      \2\x0F\x23\110                386,PRIV
+MOV       reg_treg,reg32      \2\x0F\x26\110                386,PRIV
 MOV       mem,reg8            \300\1\x88\101                8086,SM
 MOV       mem,reg8            \300\1\x88\101                8086,SM
 MOV       reg8,reg8           \300\1\x88\101                8086
 MOV       reg8,reg8           \300\1\x88\101                8086
 MOV       mem,reg16           \320\300\1\x89\101            8086,SM
 MOV       mem,reg16           \320\300\1\x89\101            8086,SM
@@ -688,8 +701,8 @@ PANDN     mmxreg,mem          \301\2\x0F\xDF\110            PENT,MMX,SM
 PANDN     mmxreg,mmxreg       \2\x0F\xDF\110                PENT,MMX
 PANDN     mmxreg,mmxreg       \2\x0F\xDF\110                PENT,MMX
 PAVEB     mmxreg,mem          \301\2\x0F\x50\110            PENT,MMX,SM,CYRIX
 PAVEB     mmxreg,mem          \301\2\x0F\x50\110            PENT,MMX,SM,CYRIX
 PAVEB     mmxreg,mmxreg       \2\x0F\x50\110                PENT,MMX,CYRIX
 PAVEB     mmxreg,mmxreg       \2\x0F\x50\110                PENT,MMX,CYRIX
-PAVGUSB   mmxreg,mem          \301\2\x0F\x0F\110\01\xBF     PENT,MMX,SM,FPU
-PAVGUSB   mmxreg,mmxreg       \2\x0F\x0F\110\01\xBF         PENT,MMX,FPU
+PAVGUSB   mmxreg,mem          \301\2\x0F\x0F\110\01\xBF     PENT,3DNOW,SM
+PAVGUSB   mmxreg,mmxreg       \2\x0F\x0F\110\01\xBF         PENT,3DNOW
 PCMPEQB   mmxreg,mem          \301\2\x0F\x74\110            PENT,MMX,SM
 PCMPEQB   mmxreg,mem          \301\2\x0F\x74\110            PENT,MMX,SM
 PCMPEQB   mmxreg,mmxreg       \2\x0F\x74\110                PENT,MMX
 PCMPEQB   mmxreg,mmxreg       \2\x0F\x74\110                PENT,MMX
 PCMPEQD   mmxreg,mem          \301\2\x0F\x76\110            PENT,MMX,SM
 PCMPEQD   mmxreg,mem          \301\2\x0F\x76\110            PENT,MMX,SM
@@ -703,40 +716,40 @@ PCMPGTD   mmxreg,mmxreg       \2\x0F\x66\110                PENT,MMX
 PCMPGTW   mmxreg,mem          \301\2\x0F\x65\110            PENT,MMX,SM
 PCMPGTW   mmxreg,mem          \301\2\x0F\x65\110            PENT,MMX,SM
 PCMPGTW   mmxreg,mmxreg       \2\x0F\x65\110                PENT,MMX
 PCMPGTW   mmxreg,mmxreg       \2\x0F\x65\110                PENT,MMX
 PDISTIB   mmxreg,mem          \301\2\x0F\x54\110            PENT,MMX,SM,CYRIX
 PDISTIB   mmxreg,mem          \301\2\x0F\x54\110            PENT,MMX,SM,CYRIX
-PF2ID     mmxreg,mem          \301\2\x0F\x0F\110\01\x1D     PENT,MMX,SM,FPU
-PF2ID     mmxreg,mmxreg       \2\x0F\x0F\110\01\x1D         PENT,MMX,FPU
-PFACC     mmxreg,mem          \301\2\x0F\x0F\110\01\xAE     PENT,MMX,SM,FPU
-PFACC     mmxreg,mmxreg       \2\x0F\x0F\110\01\xAE         PENT,MMX,FPU
-PFADD     mmxreg,mem          \301\2\x0F\x0F\110\01\x9E     PENT,MMX,SM,FPU
-PFADD     mmxreg,mmxreg       \2\x0F\x0F\110\01\x9E         PENT,MMX,FPU
-PFCMPEQ   mmxreg,mem          \301\2\x0F\x0F\110\01\xB0     PENT,MMX,SM,FPU
-PFCMPEQ   mmxreg,mmxreg       \2\x0F\x0F\110\01\xB0         PENT,MMX,FPU
-PFCMPGE   mmxreg,mem          \301\2\x0F\x0F\110\01\x90     PENT,MMX,SM,FPU
-PFCMPGE   mmxreg,mmxreg       \2\x0F\x0F\110\01\x90         PENT,MMX,FPU
-PFCMPGT   mmxreg,mem          \301\2\x0F\x0F\110\01\xA0     PENT,MMX,SM,FPU
-PFCMPGT   mmxreg,mmxreg       \2\x0F\x0F\110\01\xA0         PENT,MMX,FPU
-PFMAX     mmxreg,mem          \301\2\x0F\x0F\110\01\xA4     PENT,MMX,SM,FPU
-PFMAX     mmxreg,mmxreg       \2\x0F\x0F\110\01\xA4         PENT,MMX,FPU
-PFMIN     mmxreg,mem          \301\2\x0F\x0F\110\01\x94     PENT,MMX,SM,FPU
-PFMIN     mmxreg,mmxreg       \2\x0F\x0F\110\01\x94         PENT,MMX,FPU
-PFMUL     mmxreg,mem          \301\2\x0F\x0F\110\01\xB4     PENT,MMX,SM,FPU
-PFMUL     mmxreg,mmxreg       \2\x0F\x0F\110\01\xB4         PENT,MMX,FPU
-PFRCP     mmxreg,mem          \301\2\x0F\x0F\110\01\x96     PENT,MMX,SM,FPU
-PFRCP     mmxreg,mmxreg       \2\x0F\x0F\110\01\x96         PENT,MMX,FPU
-PFRCPIT1  mmxreg,mem          \301\2\x0F\x0F\110\01\xA6     PENT,MMX,SM,FPU
-PFRCPIT1  mmxreg,mmxreg       \2\x0F\x0F\110\01\xA6         PENT,MMX,FPU
-PFRCPIT2  mmxreg,mem          \301\2\x0F\x0F\110\01\xB6     PENT,MMX,SM,FPU
-PFRCPIT2  mmxreg,mmxreg       \2\x0F\x0F\110\01\xB6         PENT,MMX,FPU
-PFRSQIT1  mmxreg,mem          \301\2\x0F\x0F\110\01\xA7     PENT,MMX,SM,FPU
-PFRSQIT1  mmxreg,mmxreg       \2\x0F\x0F\110\01\xA7         PENT,MMX,FPU
-PFRSQRT   mmxreg,mem          \301\2\x0F\x0F\110\01\x97     PENT,MMX,SM,FPU
-PFRSQRT   mmxreg,mmxreg       \2\x0F\x0F\110\01\x97         PENT,MMX,FPU
-PFSUB     mmxreg,mem          \301\2\x0F\x0F\110\01\x9A     PENT,MMX,SM,FPU
-PFSUB     mmxreg,mmxreg       \2\x0F\x0F\110\01\x9A         PENT,MMX,FPU
-PFSUBR    mmxreg,mem          \301\2\x0F\x0F\110\01\xAA     PENT,MMX,SM,FPU
-PFSUBR    mmxreg,mmxreg       \2\x0F\x0F\110\01\xAA         PENT,MMX,FPU
-PI2FD     mmxreg,mem          \301\2\x0F\x0F\110\01\x0D     PENT,MMX,SM,FPU
-PI2FD     mmxreg,mmxreg       \2\x0F\x0F\110\01\x0D         PENT,MMX,FPU
+PF2ID     mmxreg,mem          \301\2\x0F\x0F\110\01\x1D     PENT,3DNOW,SM
+PF2ID     mmxreg,mmxreg       \2\x0F\x0F\110\01\x1D         PENT,3DNOW
+PFACC     mmxreg,mem          \301\2\x0F\x0F\110\01\xAE     PENT,3DNOW,SM
+PFACC     mmxreg,mmxreg       \2\x0F\x0F\110\01\xAE         PENT,3DNOW
+PFADD     mmxreg,mem          \301\2\x0F\x0F\110\01\x9E     PENT,3DNOW,SM
+PFADD     mmxreg,mmxreg       \2\x0F\x0F\110\01\x9E         PENT,3DNOW
+PFCMPEQ   mmxreg,mem          \301\2\x0F\x0F\110\01\xB0     PENT,3DNOW,SM
+PFCMPEQ   mmxreg,mmxreg       \2\x0F\x0F\110\01\xB0         PENT,3DNOW
+PFCMPGE   mmxreg,mem          \301\2\x0F\x0F\110\01\x90     PENT,3DNOW,SM
+PFCMPGE   mmxreg,mmxreg       \2\x0F\x0F\110\01\x90         PENT,3DNOW
+PFCMPGT   mmxreg,mem          \301\2\x0F\x0F\110\01\xA0     PENT,3DNOW,SM
+PFCMPGT   mmxreg,mmxreg       \2\x0F\x0F\110\01\xA0         PENT,3DNOW
+PFMAX     mmxreg,mem          \301\2\x0F\x0F\110\01\xA4     PENT,3DNOW,SM
+PFMAX     mmxreg,mmxreg       \2\x0F\x0F\110\01\xA4         PENT,3DNOW
+PFMIN     mmxreg,mem          \301\2\x0F\x0F\110\01\x94     PENT,3DNOW,SM
+PFMIN     mmxreg,mmxreg       \2\x0F\x0F\110\01\x94         PENT,3DNOW
+PFMUL     mmxreg,mem          \301\2\x0F\x0F\110\01\xB4     PENT,3DNOW,SM
+PFMUL     mmxreg,mmxreg       \2\x0F\x0F\110\01\xB4         PENT,3DNOW
+PFRCP     mmxreg,mem          \301\2\x0F\x0F\110\01\x96     PENT,3DNOW,SM
+PFRCP     mmxreg,mmxreg       \2\x0F\x0F\110\01\x96         PENT,3DNOW
+PFRCPIT1  mmxreg,mem          \301\2\x0F\x0F\110\01\xA6     PENT,3DNOW,SM
+PFRCPIT1  mmxreg,mmxreg       \2\x0F\x0F\110\01\xA6         PENT,3DNOW
+PFRCPIT2  mmxreg,mem          \301\2\x0F\x0F\110\01\xB6     PENT,3DNOW,SM
+PFRCPIT2  mmxreg,mmxreg       \2\x0F\x0F\110\01\xB6         PENT,3DNOW
+PFRSQIT1  mmxreg,mem          \301\2\x0F\x0F\110\01\xA7     PENT,3DNOW,SM
+PFRSQIT1  mmxreg,mmxreg       \2\x0F\x0F\110\01\xA7         PENT,3DNOW
+PFRSQRT   mmxreg,mem          \301\2\x0F\x0F\110\01\x97     PENT,3DNOW,SM
+PFRSQRT   mmxreg,mmxreg       \2\x0F\x0F\110\01\x97         PENT,3DNOW
+PFSUB     mmxreg,mem          \301\2\x0F\x0F\110\01\x9A     PENT,3DNOW,SM
+PFSUB     mmxreg,mmxreg       \2\x0F\x0F\110\01\x9A         PENT,3DNOW
+PFSUBR    mmxreg,mem          \301\2\x0F\x0F\110\01\xAA     PENT,3DNOW,SM
+PFSUBR    mmxreg,mmxreg       \2\x0F\x0F\110\01\xAA         PENT,3DNOW
+PI2FD     mmxreg,mem          \301\2\x0F\x0F\110\01\x0D     PENT,3DNOW,SM
+PI2FD     mmxreg,mmxreg       \2\x0F\x0F\110\01\x0D         PENT,3DNOW
 PMACHRIW  mmxreg,mem          \301\2\x0F\x5E\110            PENT,MMX,SM,CYRIX
 PMACHRIW  mmxreg,mem          \301\2\x0F\x5E\110            PENT,MMX,SM,CYRIX
 PMADDWD   mmxreg,mem          \301\2\x0F\xF5\110            PENT,MMX,SM
 PMADDWD   mmxreg,mem          \301\2\x0F\xF5\110            PENT,MMX,SM
 PMADDWD   mmxreg,mmxreg       \2\x0F\xF5\110                PENT,MMX
 PMADDWD   mmxreg,mmxreg       \2\x0F\xF5\110                PENT,MMX
@@ -744,8 +757,8 @@ PMAGW     mmxreg,mem          \301\2\x0F\x52\110            PENT,MMX,SM,CYRIX
 PMAGW     mmxreg,mmxreg       \2\x0F\x52\110                PENT,MMX,CYRIX
 PMAGW     mmxreg,mmxreg       \2\x0F\x52\110                PENT,MMX,CYRIX
 PMULHRIW  mmxreg,mem          \301\2\x0F\x5D\110            PENT,MMX,SM,CYRIX
 PMULHRIW  mmxreg,mem          \301\2\x0F\x5D\110            PENT,MMX,SM,CYRIX
 PMULHRIW  mmxreg,mmxreg       \2\x0F\x5D\110                PENT,MMX,CYRIX
 PMULHRIW  mmxreg,mmxreg       \2\x0F\x5D\110                PENT,MMX,CYRIX
-PMULHRWA  mmxreg,mem          \301\2\x0F\x0F\110\1\xB7      PENT,MMX,SM,FPU
-PMULHRWA  mmxreg,mmxreg       \2\x0F\x0F\110\1\xB7          PENT,MMX,FPU
+PMULHRWA  mmxreg,mem          \301\2\x0F\x0F\110\1\xB7      PENT,3DNOW,SM
+PMULHRWA  mmxreg,mmxreg       \2\x0F\x0F\110\1\xB7          PENT,3DNOW
 PMULHRWC  mmxreg,mem          \301\2\x0F\x59\110            PENT,MMX,SM,CYRIX
 PMULHRWC  mmxreg,mem          \301\2\x0F\x59\110            PENT,MMX,SM,CYRIX
 PMULHRWC  mmxreg,mmxreg       \2\x0F\x59\110                PENT,MMX,CYRIX
 PMULHRWC  mmxreg,mmxreg       \2\x0F\x59\110                PENT,MMX,CYRIX
 PMULHW    mmxreg,mem          \301\2\x0F\xE5\110            PENT,MMX,SM
 PMULHW    mmxreg,mem          \301\2\x0F\xE5\110            PENT,MMX,SM
@@ -771,8 +784,8 @@ POPFD     void                \321\1\x9D                    386
 POPFW     void                \320\1\x9D                    186
 POPFW     void                \320\1\x9D                    186
 POR       mmxreg,mem          \301\2\x0F\xEB\110            PENT,MMX,SM
 POR       mmxreg,mem          \301\2\x0F\xEB\110            PENT,MMX,SM
 POR       mmxreg,mmxreg       \2\x0F\xEB\110                PENT,MMX
 POR       mmxreg,mmxreg       \2\x0F\xEB\110                PENT,MMX
-PREFETCH  mem                 \2\x0F\x0D\200                PENT,MMX,SM,FPU
-PREFETCHW mem                 \2\x0F\x0D\201                PENT,MMX,SM,FPU
+PREFETCH  mem                 \2\x0F\x0D\200                PENT,3DNOW,SM
+PREFETCHW mem                 \2\x0F\x0D\201                PENT,3DNOW,SM
 PSLLD     mmxreg,mem          \301\2\x0F\xF2\110            PENT,MMX,SM
 PSLLD     mmxreg,mem          \301\2\x0F\xF2\110            PENT,MMX,SM
 PSLLD     mmxreg,mmxreg       \2\x0F\xF2\110                PENT,MMX
 PSLLD     mmxreg,mmxreg       \2\x0F\xF2\110                PENT,MMX
 PSLLD     mmxreg,imm          \2\x0F\x72\206\25             PENT,MMX
 PSLLD     mmxreg,imm          \2\x0F\x72\206\25             PENT,MMX
@@ -860,7 +873,8 @@ RCR       rm16,imm            \320\300\1\xC1\203\25         186,SB
 RCR       rm32,unity          \321\300\1\xD1\203            386
 RCR       rm32,unity          \321\300\1\xD1\203            386
 RCR       rm32,reg_cl         \321\300\1\xD3\203            386
 RCR       rm32,reg_cl         \321\300\1\xD3\203            386
 RCR       rm32,imm            \321\300\1\xC1\203\25         386,SB
 RCR       rm32,imm            \321\300\1\xC1\203\25         386,SB
-RDMSR     void                \2\x0F\x32                    PENT
+RDSHR     void                \2\x0F\x36                    P6,CYRIX,SMM
+RDMSR     void                \2\x0F\x32                    PENT,PRIV
 RDPMC     void                \2\x0F\x33                    P6
 RDPMC     void                \2\x0F\x33                    P6
 RDTSC     void                \2\x0F\x31                    PENT
 RDTSC     void                \2\x0F\x31                    PENT
 REP       void                \1\xF3                        8086,PRE
 REP       void                \1\xF3                        8086,PRE
@@ -893,7 +907,9 @@ ROR       rm16,imm            \320\300\1\xC1\201\25         186,SB
 ROR       rm32,unity          \321\300\1\xD1\201            386
 ROR       rm32,unity          \321\300\1\xD1\201            386
 ROR       rm32,reg_cl         \321\300\1\xD3\201            386
 ROR       rm32,reg_cl         \321\300\1\xD3\201            386
 ROR       rm32,imm            \321\300\1\xC1\201\25         386,SB
 ROR       rm32,imm            \321\300\1\xC1\201\25         386,SB
-RSM       void                \2\x0F\xAA                    PENT
+RSDC      reg_sreg,mem80      \301\2\x0F\x79\101            486,CYRIX,SMM
+RSLDT     mem80               \300\2\x0F\x7B\200            486,CYRIX,SMM
+RSM       void                \2\x0F\xAA                    PENT,SMM
 SAHF      void                \1\x9E                        8086
 SAHF      void                \1\x9E                        8086
 SAL       rm8,unity           \300\1\xD0\204                8086,ND
 SAL       rm8,unity           \300\1\xD0\204                8086,ND
 SAL       rm8,reg_cl          \300\1\xD2\204                8086,ND
 SAL       rm8,reg_cl          \300\1\xD2\204                8086,ND
@@ -937,10 +953,10 @@ SBB       rm32,imm            \321\300\1\x81\203\41         386,SM
 SBB       mem,imm8            \300\1\x80\203\21             8086,SM
 SBB       mem,imm8            \300\1\x80\203\21             8086,SM
 SBB       mem,imm16           \320\300\1\x81\203\31         8086,SM
 SBB       mem,imm16           \320\300\1\x81\203\31         8086,SM
 SBB       mem,imm32           \321\300\1\x81\203\41         386,SM
 SBB       mem,imm32           \321\300\1\x81\203\41         386,SM
-SCASB     void                \1\xAE                        8086
-SCASD     void                \321\1\xAF                    386
-SCASW     void                \320\1\xAF                    8086
-SGDT      mem                 \300\2\x0F\x01\200            286,PRIV
+SCASB     void                \332\1\xAE                    8086
+SCASD     void                \332\321\1\xAF                386
+SCASW     void                \332\320\1\xAF                8086
+SGDT      mem                 \300\2\x0F\x01\200            286
 SHL       rm8,unity           \300\1\xD0\204                8086
 SHL       rm8,unity           \300\1\xD0\204                8086
 SHL       rm8,reg_cl          \300\1\xD2\204                8086
 SHL       rm8,reg_cl          \300\1\xD2\204                8086
 SHL       rm8,imm             \300\1\xC0\204\25             186,SB
 SHL       rm8,imm             \300\1\xC0\204\25             186,SB
@@ -950,10 +966,10 @@ SHL       rm16,imm            \320\300\1\xC1\204\25         186,SB
 SHL       rm32,unity          \321\300\1\xD1\204            386
 SHL       rm32,unity          \321\300\1\xD1\204            386
 SHL       rm32,reg_cl         \321\300\1\xD3\204            386
 SHL       rm32,reg_cl         \321\300\1\xD3\204            386
 SHL       rm32,imm            \321\300\1\xC1\204\25         386,SB
 SHL       rm32,imm            \321\300\1\xC1\204\25         386,SB
-SHLD      mem,reg16,imm       \300\320\2\x0F\xA4\101\26     386,SM2
-SHLD      reg16,reg16,imm     \300\320\2\x0F\xA4\101\26     386,SM2
-SHLD      mem,reg32,imm       \300\321\2\x0F\xA4\101\26     386,SM2
-SHLD      reg32,reg32,imm     \300\321\2\x0F\xA4\101\26     386,SM2
+SHLD      mem,reg16,imm       \300\320\2\x0F\xA4\101\26     386,SM2,SB,AR2
+SHLD      reg16,reg16,imm     \300\320\2\x0F\xA4\101\26     386,SM2,SB,AR2
+SHLD      mem,reg32,imm       \300\321\2\x0F\xA4\101\26     386,SM2,SB,AR2
+SHLD      reg32,reg32,imm     \300\321\2\x0F\xA4\101\26     386,SM2,SB,AR2
 SHLD      mem,reg16,reg_cl    \300\320\2\x0F\xA5\101        386,SM
 SHLD      mem,reg16,reg_cl    \300\320\2\x0F\xA5\101        386,SM
 SHLD      reg16,reg16,reg_cl  \300\320\2\x0F\xA5\101        386
 SHLD      reg16,reg16,reg_cl  \300\320\2\x0F\xA5\101        386
 SHLD      mem,reg32,reg_cl    \300\321\2\x0F\xA5\101        386,SM
 SHLD      mem,reg32,reg_cl    \300\321\2\x0F\xA5\101        386,SM
@@ -967,22 +983,25 @@ SHR       rm16,imm            \320\300\1\xC1\205\25         186,SB
 SHR       rm32,unity          \321\300\1\xD1\205            386
 SHR       rm32,unity          \321\300\1\xD1\205            386
 SHR       rm32,reg_cl         \321\300\1\xD3\205            386
 SHR       rm32,reg_cl         \321\300\1\xD3\205            386
 SHR       rm32,imm            \321\300\1\xC1\205\25         386,SB
 SHR       rm32,imm            \321\300\1\xC1\205\25         386,SB
-SHRD      mem,reg16,imm       \300\320\2\x0F\xAC\101\26     386,SM2
-SHRD      reg16,reg16,imm     \300\320\2\x0F\xAC\101\26     386,SM2
-SHRD      mem,reg32,imm       \300\321\2\x0F\xAC\101\26     386,SM2
-SHRD      reg32,reg32,imm     \300\321\2\x0F\xAC\101\26     386,SM2
+SHRD      mem,reg16,imm       \300\320\2\x0F\xAC\101\26     386,SM2,SB,AR2
+SHRD      reg16,reg16,imm     \300\320\2\x0F\xAC\101\26     386,SM2,SB,AR2
+SHRD      mem,reg32,imm       \300\321\2\x0F\xAC\101\26     386,SM2,SB,AR2
+SHRD      reg32,reg32,imm     \300\321\2\x0F\xAC\101\26     386,SM2,SB,AR2
 SHRD      mem,reg16,reg_cl    \300\320\2\x0F\xAD\101        386,SM
 SHRD      mem,reg16,reg_cl    \300\320\2\x0F\xAD\101        386,SM
 SHRD      reg16,reg16,reg_cl  \300\320\2\x0F\xAD\101        386
 SHRD      reg16,reg16,reg_cl  \300\320\2\x0F\xAD\101        386
 SHRD      mem,reg32,reg_cl    \300\321\2\x0F\xAD\101        386,SM
 SHRD      mem,reg32,reg_cl    \300\321\2\x0F\xAD\101        386,SM
 SHRD      reg32,reg32,reg_cl  \300\321\2\x0F\xAD\101        386
 SHRD      reg32,reg32,reg_cl  \300\321\2\x0F\xAD\101        386
-SIDT      mem                 \300\2\x0F\x01\201            286,PRIV
-SLDT      mem                 \300\1\x0F\17\200             286,PRIV
-SLDT      mem16               \300\1\x0F\17\200             286,PRIV
-SLDT      reg16               \300\1\x0F\17\200             286,PRIV
+SIDT      mem                 \300\2\x0F\x01\201            286
+SLDT      mem                 \300\1\x0F\17\200             286
+SLDT      mem16               \300\1\x0F\17\200             286
+SLDT      reg16               \300\1\x0F\17\200             286
 SMI       void                \1\xF1                        386,UNDOC
 SMI       void                \1\xF1                        386,UNDOC
-SMSW      mem                 \300\2\x0F\x01\204            286,PRIV
-SMSW      mem16               \300\2\x0F\x01\204            286,PRIV
-SMSW      reg16               \300\2\x0F\x01\204            286,PRIV
+SMINT     void                \2\x0F\x38                    P6,CYRIX
+; Older Cyrix chips had this; they had to move due to conflict with MMX
+SMINTOLD  void                \2\x0F\x7E                    486,CYRIX,ND
+SMSW      mem                 \300\2\x0F\x01\204            286
+SMSW      mem16               \300\2\x0F\x01\204            286
+SMSW      reg16               \300\2\x0F\x01\204            286
 SS        void                \1\x36                        8086,PRE
 SS        void                \1\x36                        8086,PRE
 STC       void                \1\xF9                        8086
 STC       void                \1\xF9                        8086
 STD       void                \1\xFD                        8086
 STD       void                \1\xFD                        8086
@@ -990,9 +1009,9 @@ STI       void                \1\xFB                        8086
 STOSB     void                \1\xAA                        8086
 STOSB     void                \1\xAA                        8086
 STOSD     void                \321\1\xAB                    386
 STOSD     void                \321\1\xAB                    386
 STOSW     void                \320\1\xAB                    8086
 STOSW     void                \320\1\xAB                    8086
-STR       mem                 \300\1\x0F\17\201             286,PRIV
-STR       mem16               \300\1\x0F\17\201             286,PRIV
-STR       reg16               \300\1\x0F\17\201             286,PRIV
+STR       mem                 \300\1\x0F\17\201             286,PROT
+STR       mem16               \300\1\x0F\17\201             286,PROT
+STR       reg16               \300\1\x0F\17\201             286,PROT
 SUB       mem,reg8            \300\1\x28\101                8086,SM
 SUB       mem,reg8            \300\1\x28\101                8086,SM
 SUB       reg8,reg8           \300\1\x28\101                8086
 SUB       reg8,reg8           \300\1\x28\101                8086
 SUB       mem,reg16           \320\300\1\x29\101            8086,SM
 SUB       mem,reg16           \320\300\1\x29\101            8086,SM
@@ -1016,6 +1035,13 @@ SUB       rm32,imm            \321\300\1\x81\205\41         386,SM
 SUB       mem,imm8            \300\1\x80\205\21             8086,SM
 SUB       mem,imm8            \300\1\x80\205\21             8086,SM
 SUB       mem,imm16           \320\300\1\x81\205\31         8086,SM
 SUB       mem,imm16           \320\300\1\x81\205\31         8086,SM
 SUB       mem,imm32           \321\300\1\x81\205\41         386,SM
 SUB       mem,imm32           \321\300\1\x81\205\41         386,SM
+SVDC      mem80,reg_sreg      \300\2\x0F\x78\101            486,CYRIX,SMM
+SVLDT     mem80               \300\2\x0F\x7A\200            486,CYRIX,SMM
+SVTS      mem80               \300\2\x0F\x7C\200            486,CYRIX,SMM
+SYSCALL   void                \2\x0F\x05                    P6,AMD
+SYSENTER  void                \2\x0F\x34                    P6
+SYSEXIT   void                \2\x0F\x36                    P6,PRIV
+SYSRET    void                \2\x0F\x07                    P6,PRIV,AMD
 TEST      mem,reg8            \300\1\x84\101                8086,SM
 TEST      mem,reg8            \300\1\x84\101                8086,SM
 TEST      reg8,reg8           \300\1\x84\101                8086
 TEST      reg8,reg8           \300\1\x84\101                8086
 TEST      mem,reg16           \320\300\1\x85\101            8086,SM
 TEST      mem,reg16           \320\300\1\x85\101            8086,SM
@@ -1034,6 +1060,8 @@ TEST      rm32,imm            \321\300\1\xF7\200\41         386,SM
 TEST      mem,imm8            \300\1\xF6\200\21             8086,SM
 TEST      mem,imm8            \300\1\xF6\200\21             8086,SM
 TEST      mem,imm16           \320\300\1\xF7\200\31         8086,SM
 TEST      mem,imm16           \320\300\1\xF7\200\31         8086,SM
 TEST      mem,imm32           \321\300\1\xF7\200\41         386,SM
 TEST      mem,imm32           \321\300\1\xF7\200\41         386,SM
+UD1       void                \2\x0F\xB9                    286,UNDOC
+UD2       void                \2\x0F\x0B                    286
 UMOV      mem,reg8            \300\2\x0F\x10\101            386,UNDOC,SM
 UMOV      mem,reg8            \300\2\x0F\x10\101            386,UNDOC,SM
 UMOV      reg8,reg8           \300\2\x0F\x10\101            386,UNDOC
 UMOV      reg8,reg8           \300\2\x0F\x10\101            386,UNDOC
 UMOV      mem,reg16           \320\300\2\x0F\x11\101        386,UNDOC,SM
 UMOV      mem,reg16           \320\300\2\x0F\x11\101        386,UNDOC,SM
@@ -1046,15 +1074,16 @@ UMOV      reg16,mem           \320\301\2\x0F\x13\110        386,UNDOC,SM
 UMOV      reg16,reg16         \320\301\2\x0F\x13\110        386,UNDOC
 UMOV      reg16,reg16         \320\301\2\x0F\x13\110        386,UNDOC
 UMOV      reg32,mem           \321\301\2\x0F\x13\110        386,UNDOC,SM
 UMOV      reg32,mem           \321\301\2\x0F\x13\110        386,UNDOC,SM
 UMOV      reg32,reg32         \321\301\2\x0F\x13\110        386,UNDOC
 UMOV      reg32,reg32         \321\301\2\x0F\x13\110        386,UNDOC
-VERR      mem                 \300\1\x0F\17\204             286,PRIV
-VERR      mem16               \300\1\x0F\17\204             286,PRIV
-VERR      reg16               \300\1\x0F\17\204             286,PRIV
-VERW      mem                 \300\1\x0F\17\205             286,PRIV
-VERW      mem16               \300\1\x0F\17\205             286,PRIV
-VERW      reg16               \300\1\x0F\17\205             286,PRIV
+VERR      mem                 \300\1\x0F\17\204             286,PROT
+VERR      mem16               \300\1\x0F\17\204             286,PROT
+VERR      reg16               \300\1\x0F\17\204             286,PROT
+VERW      mem                 \300\1\x0F\17\205             286,PROT
+VERW      mem16               \300\1\x0F\17\205             286,PROT
+VERW      reg16               \300\1\x0F\17\205             286,PROT
 WAIT      void                \1\x9B                        8086
 WAIT      void                \1\x9B                        8086
-WBINVD    void                \2\x0F\x09                    486
-WRMSR     void                \2\x0F\x30                    PENT
+WBINVD    void                \2\x0F\x09                    486,PRIV
+WRSHR     void                \2\x0F\x37                    P6,CYRIX,SMM
+WRMSR     void                \2\x0F\x30                    PENT,PRIV
 XADD      mem,reg8            \300\2\x0F\xC0\101            486,SM
 XADD      mem,reg8            \300\2\x0F\xC0\101            486,SM
 XADD      reg8,reg8           \300\2\x0F\xC0\101            486
 XADD      reg8,reg8           \300\2\x0F\xC0\101            486
 XADD      mem,reg16           \320\300\2\x0F\xC1\101        486,SM
 XADD      mem,reg16           \320\300\2\x0F\xC1\101        486,SM
@@ -1111,7 +1140,178 @@ CMOVcc    reg16,reg16         \320\301\1\x0F\330\x40\110    P6
 CMOVcc    reg32,mem           \321\301\1\x0F\330\x40\110    P6,SM
 CMOVcc    reg32,mem           \321\301\1\x0F\330\x40\110    P6,SM
 CMOVcc    reg32,reg32         \321\301\1\x0F\330\x40\110    P6
 CMOVcc    reg32,reg32         \321\301\1\x0F\330\x40\110    P6
 Jcc       imm|near            \322\1\x0F\330\x80\64         386,PASS2
 Jcc       imm|near            \322\1\x0F\330\x80\64         386,PASS2
+Jcc       imm16|near          \320\1\x0F\330\x80\64         386,PASS2
+Jcc       imm32|near          \321\1\x0F\330\x80\64         386,PASS2
 Jcc       imm                 \330\x70\50                   8086
 Jcc       imm                 \330\x70\50                   8086
-Jcc       imm|short           \330\x70\50                   8086
+Jcc       imm|short           \330\x70\50                   8086,ND
 SETcc     mem                 \300\1\x0F\330\x90\200        386,SB
 SETcc     mem                 \300\1\x0F\330\x90\200        386,SB
 SETcc     reg8                \300\1\x0F\330\x90\200        386
 SETcc     reg8                \300\1\x0F\330\x90\200        386
+; Katmai Streaming SIMD instructions (SSE -- a.k.a. KNI, XMM, MMX2)
+ADDPS           xmmreg,mem              \301\331\2\x0F\x58\110          KATMAI,SSE
+ADDPS           xmmreg,xmmreg           \331\2\x0F\x58\110              KATMAI,SSE
+ADDSS           xmmreg,mem              \301\333\2\x0F\x58\110          KATMAI,SSE
+ADDSS           xmmreg,xmmreg           \333\2\x0F\x58\110              KATMAI,SSE
+ANDNPS          xmmreg,mem              \301\2\x0F\x55\110              KATMAI,SSE
+ANDNPS          xmmreg,xmmreg           \2\x0F\x55\110                  KATMAI,SSE
+ANDPS           xmmreg,mem              \301\2\x0F\x54\110              KATMAI,SSE
+ANDPS           xmmreg,xmmreg           \2\x0F\x54\110                  KATMAI,SSE
+CMPEQPS         xmmreg,mem              \301\331\2\x0F\xC2\110\1\x00    KATMAI,SSE
+CMPEQPS         xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x00        KATMAI,SSE
+CMPEQSS         xmmreg,mem              \301\333\2\x0F\xC2\110\1\x00    KATMAI,SSE
+CMPEQSS         xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x00        KATMAI,SSE
+CMPLEPS         xmmreg,mem              \301\331\2\x0F\xC2\110\1\x02    KATMAI,SSE
+CMPLEPS         xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x02        KATMAI,SSE
+CMPLESS         xmmreg,mem              \301\333\2\x0F\xC2\110\1\x02    KATMAI,SSE
+CMPLESS         xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x02        KATMAI,SSE
+CMPLTPS         xmmreg,mem              \301\331\2\x0F\xC2\110\1\x01    KATMAI,SSE
+CMPLTPS         xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x01        KATMAI,SSE
+CMPLTSS         xmmreg,mem              \301\333\2\x0F\xC2\110\1\x01    KATMAI,SSE
+CMPLTSS         xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x01        KATMAI,SSE
+CMPNEQPS        xmmreg,mem              \301\331\2\x0F\xC2\110\1\x04    KATMAI,SSE
+CMPNEQPS        xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x04        KATMAI,SSE
+CMPNEQSS        xmmreg,mem              \301\333\2\x0F\xC2\110\1\x04    KATMAI,SSE
+CMPNEQSS        xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x04        KATMAI,SSE
+CMPNLEPS        xmmreg,mem              \301\331\2\x0F\xC2\110\1\x06    KATMAI,SSE
+CMPNLEPS        xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x06        KATMAI,SSE
+CMPNLESS        xmmreg,mem              \301\333\2\x0F\xC2\110\1\x06    KATMAI,SSE
+CMPNLESS        xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x06        KATMAI,SSE
+CMPNLTPS        xmmreg,mem              \301\331\2\x0F\xC2\110\1\x05    KATMAI,SSE
+CMPNLTPS        xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x05        KATMAI,SSE
+CMPNLTSS        xmmreg,mem              \301\333\2\x0F\xC2\110\1\x05    KATMAI,SSE
+CMPNLTSS        xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x05        KATMAI,SSE
+CMPORDPS        xmmreg,mem              \301\331\2\x0F\xC2\110\1\x07    KATMAI,SSE
+CMPORDPS        xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x07        KATMAI,SSE
+CMPORDSS        xmmreg,mem              \301\333\2\x0F\xC2\110\1\x07    KATMAI,SSE
+CMPORDSS        xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x07        KATMAI,SSE
+CMPUNORDPS      xmmreg,mem              \301\331\2\x0F\xC2\110\1\x03    KATMAI,SSE
+CMPUNORDPS      xmmreg,xmmreg           \331\2\x0F\xC2\110\1\x03        KATMAI,SSE
+CMPUNORDSS      xmmreg,mem              \301\333\2\x0F\xC2\110\1\x03    KATMAI,SSE
+CMPUNORDSS      xmmreg,xmmreg           \333\2\x0F\xC2\110\1\x03        KATMAI,SSE
+; CMPPS/CMPSS must come after the specific ops; that way the disassembler will find the
+; specific ops first and only disassemble illegal ones as cmpps.
+CMPPS         xmmreg,mem,imm          \301\331\2\x0F\xC2\110\22       KATMAI,SSE,SB,AR2
+CMPPS         xmmreg,xmmreg,imm       \331\2\x0F\xC2\110\22           KATMAI,SSE,SB,AR2
+CMPSS         xmmreg,mem,imm          \301\333\2\x0F\xC2\110\22       KATMAI,SSE,SB,AR2
+CMPSS         xmmreg,xmmreg,imm       \333\2\x0F\xC2\110\22           KATMAI,SSE,SB,AR2
+COMISS          xmmreg,mem              \301\2\x0F\x2F\110              KATMAI,SSE
+COMISS          xmmreg,xmmreg           \2\x0F\x2F\110                  KATMAI,SSE
+CVTPI2PS        xmmreg,mem              \301\331\2\x0F\x2A\110          KATMAI,SSE,MMX
+CVTPI2PS        xmmreg,mmxreg           \331\2\x0F\x2A\110              KATMAI,SSE,MMX
+CVTPS2PI        mmxreg,mem              \301\331\2\x0F\x2D\110          KATMAI,SSE,MMX
+CVTPS2PI        mmxreg,xmmreg           \331\2\x0F\x2D\110              KATMAI,SSE,MMX
+CVTSI2SS        xmmreg,mem              \301\333\2\x0F\x2A\110          KATMAI,SSE,SD,AR1
+CVTSI2SS        xmmreg,reg32            \333\2\x0F\x2A\110              KATMAI,SSE
+CVTSS2SI        reg32,mem               \301\333\2\x0F\x2D\110          KATMAI,SSE
+CVTSS2SI        reg32,xmmreg            \333\2\x0F\x2D\110              KATMAI,SSE
+CVTTPS2PI       mmxreg,mem              \301\331\2\x0F\x2C\110          KATMAI,SSE,MMX
+CVTTPS2PI       mmxreg,xmmreg           \331\2\x0F\x2C\110              KATMAI,SSE,MMX
+CVTTSS2SI       reg32,mem               \301\333\2\x0F\x2C\110          KATMAI,SSE
+CVTTSS2SI       reg32,xmmreg            \333\2\x0F\x2C\110              KATMAI,SSE
+DIVPS           xmmreg,mem              \301\331\2\x0F\x5E\110          KATMAI,SSE
+DIVPS           xmmreg,xmmreg           \331\2\x0F\x5E\110              KATMAI,SSE
+DIVSS           xmmreg,mem              \301\333\2\x0F\x5E\110          KATMAI,SSE
+DIVSS           xmmreg,xmmreg           \333\2\x0F\x5E\110              KATMAI,SSE
+LDMXCSR         mem                     \300\2\x0F\xAE\202              KATMAI,SSE,SD
+MAXPS           xmmreg,mem              \301\331\2\x0F\x5F\110          KATMAI,SSE
+MAXPS           xmmreg,xmmreg           \331\2\x0F\x5F\110              KATMAI,SSE
+MAXSS           xmmreg,mem              \301\333\2\x0F\x5F\110          KATMAI,SSE
+MAXSS           xmmreg,xmmreg           \333\2\x0F\x5F\110              KATMAI,SSE
+MINPS           xmmreg,mem              \301\331\2\x0F\x5D\110          KATMAI,SSE
+MINPS           xmmreg,xmmreg           \331\2\x0F\x5D\110              KATMAI,SSE
+MINSS           xmmreg,mem              \301\333\2\x0F\x5D\110          KATMAI,SSE
+MINSS           xmmreg,xmmreg           \333\2\x0F\x5D\110              KATMAI,SSE
+MOVAPS          xmmreg,mem              \301\2\x0F\x28\110              KATMAI,SSE
+MOVAPS          mem,xmmreg              \300\2\x0F\x29\101              KATMAI,SSE
+MOVAPS          xmmreg,xmmreg           \2\x0F\x28\110                  KATMAI,SSE
+MOVAPS          xmmreg,xmmreg           \2\x0F\x29\101                  KATMAI,SSE
+MOVHPS          xmmreg,mem              \301\2\x0F\x16\110              KATMAI,SSE
+MOVHPS          mem,xmmreg              \300\2\x0F\x17\101              KATMAI,SSE
+MOVHPS          xmmreg,xmmreg           \2\x0F\x16\101                  KATMAI,SSE,ND
+MOVLHPS         xmmreg,xmmreg           \2\x0F\x16\110                  KATMAI,SSE
+MOVLPS          xmmreg,mem              \301\2\x0F\x12\110              KATMAI,SSE
+MOVLPS          mem,xmmreg              \300\2\x0F\x13\101              KATMAI,SSE
+MOVLPS          xmmreg,xmmreg           \2\x0F\x12\101                  KATMAI,SSE,ND
+MOVHLPS         xmmreg,xmmreg           \2\x0F\x12\110                  KATMAI,SSE
+MOVMSKPS        reg32,xmmreg            \2\x0F\x50\110                  KATMAI,SSE
+MOVNTPS         mem,xmmreg              \2\x0F\x2B\101                  KATMAI,SSE
+MOVSS           xmmreg,mem              \301\333\2\x0F\x10\110          KATMAI,SSE
+MOVSS           mem,xmmreg              \300\333\2\x0F\x11\101          KATMAI,SSE
+MOVSS           xmmreg,xmmreg           \333\2\x0F\x10\110              KATMAI,SSE
+MOVSS           xmmreg,xmmreg           \333\2\x0F\x11\101              KATMAI,SSE
+MOVUPS          xmmreg,mem              \301\331\2\x0F\x10\110          KATMAI,SSE
+MOVUPS          mem,xmmreg              \300\331\2\x0F\x11\101          KATMAI,SSE
+MOVUPS          xmmreg,xmmreg           \331\2\x0F\x10\110              KATMAI,SSE
+MOVUPS          xmmreg,xmmreg           \331\2\x0F\x11\101              KATMAI,SSE
+MULPS           xmmreg,mem              \301\2\x0F\x59\110              KATMAI,SSE
+MULPS           xmmreg,xmmreg           \2\x0F\x59\110                  KATMAI,SSE
+MULSS           xmmreg,mem              \301\333\2\x0F\x59\110          KATMAI,SSE
+MULSS           xmmreg,xmmreg           \333\2\x0F\x59\110              KATMAI,SSE
+ORPS            xmmreg,mem              \301\2\x0F\x56\110              KATMAI,SSE
+ORPS            xmmreg,xmmreg           \2\x0F\x56\110                  KATMAI,SSE
+RCPPS           xmmreg,mem              \301\331\2\x0F\x53\110          KATMAI,SSE
+RCPPS           xmmreg,xmmreg           \331\2\x0F\x53\110              KATMAI,SSE
+RCPSS           xmmreg,mem              \301\333\2\x0F\x53\110          KATMAI,SSE
+RCPSS           xmmreg,xmmreg           \333\2\x0F\x53\110              KATMAI,SSE
+RSQRTPS         xmmreg,mem              \301\331\2\x0F\x52\110          KATMAI,SSE
+RSQRTPS         xmmreg,xmmreg           \331\2\x0F\x52\110              KATMAI,SSE
+RSQRTSS         xmmreg,mem              \301\333\2\x0F\x52\110          KATMAI,SSE
+RSQRTSS         xmmreg,xmmreg           \333\2\x0F\x52\110              KATMAI,SSE
+SHUFPS                xmmreg,mem,imm          \301\2\x0F\xC6\110\22           KATMAI,SSE,SB,AR2
+SHUFPS          xmmreg,xmmreg,imm       \2\x0F\xC6\110\22               KATMAI,SSE,SB,AR2
+SQRTPS          xmmreg,mem              \301\331\2\x0F\x51\110          KATMAI,SSE
+SQRTPS          xmmreg,xmmreg           \331\2\x0F\x51\110              KATMAI,SSE
+SQRTSS          xmmreg,mem              \301\333\2\x0F\x51\110          KATMAI,SSE
+SQRTSS          xmmreg,xmmreg           \333\2\x0F\x51\110              KATMAI,SSE
+STMXCSR         mem                     \300\2\x0F\xAE\203              KATMAI,SSE,SD
+SUBPS           xmmreg,mem              \301\331\2\x0F\x5C\110          KATMAI,SSE
+SUBPS           xmmreg,xmmreg           \331\2\x0F\x5C\110              KATMAI,SSE
+SUBSS           xmmreg,mem              \301\333\2\x0F\x5C\110          KATMAI,SSE
+SUBSS           xmmreg,xmmreg           \333\2\x0F\x5C\110              KATMAI,SSE
+UCOMISS         xmmreg,mem              \301\2\x0F\x2E\110              KATMAI,SSE
+UCOMISS         xmmreg,xmmreg           \2\x0F\x2E\110                  KATMAI,SSE
+UNPCKHPS        xmmreg,mem              \301\2\x0F\x15\110              KATMAI,SSE
+UNPCKHPS        xmmreg,xmmreg           \2\x0F\x15\110                  KATMAI,SSE
+UNPCKLPS        xmmreg,mem              \301\2\x0F\x14\110              KATMAI,SSE
+UNPCKLPS        xmmreg,xmmreg           \2\x0F\x14\110                  KATMAI,SSE
+XORPS           xmmreg,mem              \301\2\x0F\x57\110              KATMAI,SSE
+XORPS           xmmreg,xmmreg           \2\x0F\x57\110                  KATMAI,SSE
+; Introduced in Dechutes but necessary for SSE support
+FXRSTOR         mem                     \300\2\x0F\xAE\201              P6,SSE,FPU
+FXSAVE          mem                     \300\2\x0F\xAE\200              P6,SSE,FPU
+; These instructions aren't SSE-specific; they are generic memory operations
+; and work even if CR4.OSFXFR == 0
+PREFETCHNTA     mem                     \300\2\x0F\x18\200              KATMAI
+PREFETCHT0      mem                     \300\2\x0F\x18\201              KATMAI
+PREFETCHT1      mem                     \300\2\x0F\x18\202              KATMAI
+PREFETCHT2      mem                     \300\2\x0F\x18\203              KATMAI
+SFENCE          void                    \3\x0F\xAE\xF8                  KATMAI
+; New MMX instructions introduced in Katmai
+MASKMOVQ        mmxreg,mmxreg           \2\x0F\xF7\110                  KATMAI,MMX
+MOVNTQ          mem,mmxreg              \2\x0F\xE7\101                  KATMAI,MMX,SM
+PAVGB           mmxreg,mmxreg           \2\x0F\xE0\110                  KATMAI,MMX
+PAVGB           mmxreg,mem              \301\2\x0F\xE0\110              KATMAI,MMX,SM
+PAVGW           mmxreg,mmxreg           \2\x0F\xE3\110                  KATMAI,MMX
+PAVGW           mmxreg,mem              \301\2\x0F\xE3\110              KATMAI,MMX,SM
+PEXTRW          reg32,mmxreg,imm        \2\x0F\xC5\110\22               KATMAI,MMX,SB,AR2
+; PINSRW is documented as using a reg32, but it's really using only 16 bit
+; -- accept either, but be truthful in disassembly
+PINSRW          mmxreg,reg16,imm        \2\x0F\xC4\110\22               KATMAI,MMX,SB,AR2
+PINSRW          mmxreg,reg32,imm        \2\x0F\xC4\110\22               KATMAI,MMX,SB,AR2,ND
+PINSRW          mmxreg,mem,imm          \301\2\x0F\xC4\110\22           KATMAI,MMX,SB,AR2
+PINSRW          mmxreg,mem16,imm        \301\2\x0F\xC4\110\22           KATMAI,MMX,SB,AR2,ND
+PMAXSW          mmxreg,mmxreg           \2\x0F\xEE\110                  KATMAI,MMX
+PMAXSW          mmxreg,mem              \301\2\x0F\xEE\110              KATMAI,MMX,SM
+PMAXUB          mmxreg,mmxreg           \2\x0F\xDE\110                  KATMAI,MMX
+PMAXUB          mmxreg,mem              \301\2\x0F\xDE\110              KATMAI,MMX,SM
+PMINSW          mmxreg,mmxreg           \2\x0F\xEA\110                  KATMAI,MMX
+PMINSW          mmxreg,mem              \301\2\x0F\xEA\110              KATMAI,MMX,SM
+PMINUB          mmxreg,mmxreg           \2\x0F\xDA\110                  KATMAI,MMX
+PMINUB          mmxreg,mem              \301\2\x0F\xDA\110              KATMAI,MMX,SM
+PMOVMSKB        reg32,mmxreg            \2\x0F\xD7\110                  KATMAI,MMX
+PMULHUW         mmxreg,mmxreg           \2\x0F\xE4\110                  KATMAI,MMX
+PMULHUW         mmxreg,mem              \301\2\x0F\xE4\110              KATMAI,MMX,SM
+PSADBW          mmxreg,mmxreg           \2\x0F\xF6\110                  KATMAI,MMX
+PSADBW          mmxreg,mem              \301\2\x0F\xF6\110              KATMAI,MMX,SM
+PSHUFW          mmxreg,mmxreg,imm       \2\x0F\x70\110\22               KATMAI,MMX,SB,AR2
+PSHUFW          mmxreg,mem,imm          \301\2\x0F\x70\110\22           KATMAI,MMX,SM2,SB,AR2
+

+ 31 - 3
compiler/utils/nasmconv.pp

@@ -20,6 +20,28 @@ var
    s : string;
    s : string;
    i : longint;
    i : longint;
 
 
+{$ifndef FPC}
+  procedure readln(var t:text;var s:string);
+  var
+    c : char;
+    i : longint;
+  begin
+    c:=#0;
+    i:=0;
+    while (not eof(t)) and (c<>#10) do
+     begin
+       read(t,c);
+       if c<>#10 then
+        begin
+          inc(i);
+          s[i]:=c;
+        end;
+     end;
+    if (i>0) and (s[i]=#13) then
+     dec(i);
+    s[0]:=chr(i);
+  end;
+{$endif}
 
 
       function Replace(var s:string;const s1,s2:string):boolean;
       function Replace(var s:string;const s1,s2:string):boolean;
       var
       var
@@ -167,8 +189,9 @@ var
    flags   : string;
    flags   : string;
    optypes : array[1..3] of string;
    optypes : array[1..3] of string;
 begin
 begin
-   writeln('Nasm Instruction Table Converter Version 0.99.11');
+   writeln('Nasm Instruction Table Converter Version 0.99.13');
    insns:=0;
    insns:=0;
+   maxinfolen:=0;
    assign(infile,'insns.dat');
    assign(infile,'insns.dat');
    reset(infile);
    reset(infile);
    assign(outfile,'i386tab.inc');
    assign(outfile,'i386tab.inc');
@@ -179,7 +202,9 @@ begin
      begin
      begin
         { handle comment }
         { handle comment }
         readln(infile,s);
         readln(infile,s);
-        if s[1]=';' then
+        while (s[1]=' ') do
+         delete(s,1,1);
+        if (s='') or (s[1]=';') then
           continue;
           continue;
         { clear }
         { clear }
         opcode:='';
         opcode:='';
@@ -294,7 +319,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.2  1999-05-23 18:42:24  florian
+  Revision 1.3  1999-08-12 14:36:09  peter
+    + KNI instructions
+
+  Revision 1.2  1999/05/23 18:42:24  florian
     * better error recovering in typed constants
     * better error recovering in typed constants
     * some problems with arrays of const fixed, some problems
     * some problems with arrays of const fixed, some problems
       due my previous
       due my previous

Some files were not shown because too many files changed in this diff