Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1652 lines
82 KiB

  1. /********************************** module *********************************/
  2. /* */
  3. /* disasmtb */
  4. /* disassembler for CodeView */
  5. /* */
  6. /***************************************************************************/
  7. /* */
  8. /* @ Purpose: */
  9. /* */
  10. /* @ Functions included: */
  11. /* */
  12. /* */
  13. /* @ Author: Gerd Immeyer @ Version: */
  14. /* */
  15. /* @ Creation Date: 10.19.89 @ Modification Date: */
  16. /* */
  17. /***************************************************************************/
  18. #define X86_REPN 0xf2
  19. #define X86_REP 0xf3
  20. #define X86_PAUSE 0x90
  21. #define X86_MOVFREGMEM 0x110
  22. #define X86_MOVFMEMREG 0x111
  23. #define X86_MOVHLPS 0x112
  24. #define X86_MOVLHPS 0x116
  25. #define X86_CVTSPI2SPSD 0x12a
  26. #define X86_CVTSPSD2SPI 0x12d
  27. #define X86_CVTSPSD2SPSD 0x15a
  28. #define X86_CVTPS 0x15b
  29. #define X86_MOVDQA_MR 0x16f
  30. #define X86_PSHUF 0x170
  31. #define X86_MOVDQ_7E 0x17e
  32. #define X86_MOVDQA_RM 0x17f
  33. #define X86_PINSRW 0x1c4
  34. #define X86_PEXTRW 0x1c5
  35. #define X86_MOVQ_D6 0x1d6
  36. #define X86_PMOVMSKB 0x1d7
  37. #define X86_CVTPD 0x1e6
  38. #define X86_MOVNT 0x1e7
  39. #define X86_MASKMOV 0x1f7
  40. /* Strings: Operand mnemonics, Segment overrides, etc. for disasm */
  41. char dszAAA[] = "aaa";
  42. char dszAAD[] = "aad";
  43. char dszAAM[] = "aam";
  44. char dszAAS[] = "aas";
  45. char dszADC[] = "adc";
  46. char dszADD[] = "add";
  47. char dszADDSPSD[] = "add:? ";
  48. char dszADDRPRFX[] = "";
  49. char dszAND[] = "and";
  50. char dszANDNPSD[] = "andnp?";
  51. char dszANDPSD[] = "andp?";
  52. char dszARPL[] = "arpl";
  53. char dszBOUND[] = "bound";
  54. char dszBSF[] = "bsf";
  55. char dszBSR[] = "bsr";
  56. char dszBST[] = "bst";
  57. char dszBSWAP[] = "bswap";
  58. char dszBT[] = "bt";
  59. char dszBTC[] = "btc";
  60. char dszBTR[] = "btr";
  61. char dszBTS[] = "bts";
  62. char dszCALL[] = "call";
  63. char dszCBW[] = "cbw";
  64. char dszCDQ[] = "cdq";
  65. char dszCDQE[] = "cdqe";
  66. char dszCLC[] = "clc";
  67. char dszCLD[] = "cld";
  68. char dszCLFLUSH[] = "clflush";
  69. char dszCLI[] = "cli";
  70. char dszCLTS[] = "clts";
  71. char dszCMC[] = "cmc";
  72. char dszCMOVO[] = "cmovo";
  73. char dszCMOVNO[] = "cmovno";
  74. char dszCMOVB[] = "cmovb";
  75. char dszCMOVNB[] = "cmovnb";
  76. char dszCMOVE[] = "cmove";
  77. char dszCMOVNE[] = "cmovne";
  78. char dszCMOVBE[] = "cmovbe";
  79. char dszCMOVA[] = "cmova";
  80. char dszCMOVS[] = "cmovs";
  81. char dszCMOVNS[] = "cmovns";
  82. char dszCMOVP[] = "cmovp";
  83. char dszCMOVNP[] = "cmovnp";
  84. char dszCMOVL[] = "cmovl";
  85. char dszCMOVGE[] = "cmovge";
  86. char dszCMOVLE[] = "cmovle";
  87. char dszCMOVNLE[] = "cmovnle";
  88. char dszCMP[] = "cmp";
  89. char dszCMPSPSD[] = "cmp:? ";
  90. char dszCMPS[] = "cmps";
  91. char dszCMPSB[] = "cmpsb";
  92. char dszCMPSD[] = "cmpsd";
  93. char dszCMPSW[] = "cmpsw";
  94. char dszCMPXCHG[] = "cmpxchg";
  95. char dszCMPXCHG8B[] = "cmpxchg8b";
  96. char dszCOMISSD[] = "comis? ";
  97. char dszCPUID[] = "cpuid";
  98. char dszCS_[] = "cs:";
  99. char dszCVTBASE[] = "cvt ";
  100. char dszCVTSPI2SPSD[] = "cvt:i2:? ";
  101. char dszCVTSPSD2SPI[] = "cvt:?2:i ";
  102. char dszCVTSPSD2SPSD[] = "cvt:?2:, ";
  103. char dszCVTTSPSD2SPI[] = "cvtt:?2:i ";
  104. char dszCWD[] = "cwd";
  105. char dszCWDE[] = "cwde";
  106. char dszDAA[] = "daa";
  107. char dszDAS[] = "das";
  108. char dszDEC[] = "dec";
  109. char dszDIV[] = "div";
  110. char dszDIVSPSD[] = "div:? ";
  111. char dszDS_[] = "ds:";
  112. char dszEMMS[] = "emms";
  113. char dszENTER[] = "enter";
  114. char dszES_[] = "es:";
  115. char dszF2XM1[] = "f2xm1";
  116. char dszFABS[] = "fabs";
  117. char dszFADD[] = "fadd";
  118. char dszFADDP[] = "faddp";
  119. char dszFBLD[] = "fbld";
  120. char dszFBSTP[] = "fbstp";
  121. char dszFCHS[] = "fchs";
  122. char dszFCLEX[] = "fclex";
  123. char dszFCMOVB[] = "fcmovb";
  124. char dszFCMOVE[] = "fcmove";
  125. char dszFCMOVBE[] = "fcmovbe";
  126. char dszFCMOVU[] = "fcmovu";
  127. char dszFCMOVNB[] = "fcmovnb";
  128. char dszFCMOVNE[] = "fcmovne";
  129. char dszFCMOVNBE[] = "fcmovnbe";
  130. char dszFCMOVNU[] = "fcmovnu";
  131. char dszFCOM[] = "fcom";
  132. char dszFCOMI[] = "fcomi";
  133. char dszFCOMIP[] = "fcomip";
  134. char dszFCOMP[] = "fcomp";
  135. char dszFCOMPP[] = "fcompp";
  136. char dszFCOS[] = "fcos";
  137. char dszFDECSTP[] = "fdecstp";
  138. char dszFDISI[] = "fdisi";
  139. char dszFDIV[] = "fdiv";
  140. char dszFDIVP[] = "fdivp";
  141. char dszFDIVR[] = "fdivr";
  142. char dszFDIVRP[] = "fdivrp";
  143. char dszFEMMS[] = "femms";
  144. char dszFENI[] = "feni";
  145. char dszFFREE[] = "ffree";
  146. char dszFIADD[] = "fiadd";
  147. char dszFICOM[] = "ficom";
  148. char dszFICOMP[] = "ficomp";
  149. char dszFIDIV[] = "fidiv";
  150. char dszFIDIVR[] = "fidivr";
  151. char dszFILD[] = "fild";
  152. char dszFIMUL[] = "fimul";
  153. char dszFINCSTP[] = "fincstp";
  154. char dszFINIT[] = "finit";
  155. char dszFIST[] = "fist";
  156. char dszFISTP[] = "fistp";
  157. char dszFISUB[] = "fisub";
  158. char dszFISUBR[] = "fisubr";
  159. char dszFLD[] = "fld";
  160. char dszFLD1[] = "fld1";
  161. char dszFLDCW[] = "fldcw";
  162. char dszFLDENV[] = "fldenv";
  163. char dszFLDL2E[] = "fldl2e";
  164. char dszFLDL2T[] = "fldl2t";
  165. char dszFLDLG2[] = "fldlg2";
  166. char dszFLDLN2[] = "fldln2";
  167. char dszFLDPI[] = "fldpi";
  168. char dszFLDZ[] = "fldz";
  169. char dszFMUL[] = "fmul";
  170. char dszFMULP[] = "fmulp";
  171. char dszFNCLEX[] = "fnclex";
  172. char dszFNDISI[] = "fndisi";
  173. char dszFNENI[] = "fneni";
  174. char dszFNINIT[] = "fninit";
  175. char dszFNOP[] = "fnop";
  176. char dszFNSAVE[] = "fnsave";
  177. char dszFNSTCW[] = "fnstcw";
  178. char dszFNSTENV[] = "fnstenv";
  179. char dszFNSTSW[] = "fnstsw";
  180. char dszFNSTSWAX[] = "fnstswax";
  181. char dszFPATAN[] = "fpatan";
  182. char dszFPREM[] = "fprem";
  183. char dszFPREM1[] = "fprem1";
  184. char dszFPTAN[] = "fptan";
  185. char dszFRNDINT[] = "frndint";
  186. char dszFRSTOR[] = "frstor";
  187. char dszFSAVE[] = "fsave";
  188. char dszFSCALE[] = "fscale";
  189. char dszFSETPM[] = "fsetpm";
  190. char dszFSIN[] = "fsin";
  191. char dszFSINCOS[] = "fsincos";
  192. char dszFSQRT[] = "fsqrt";
  193. char dszFST[] = "fst";
  194. char dszFSTCW[] = "fstcw";
  195. char dszFSTENV[] = "fstenv";
  196. char dszFSTP[] = "fstp";
  197. char dszFSTSW[] = "fstsw";
  198. char dszFSTSWAX[] = "fstswax";
  199. char dszFSUB[] = "fsub";
  200. char dszFSUBP[] = "fsubp";
  201. char dszFSUBR[] = "fsubr";
  202. char dszFSUBRP[] = "fsubrp";
  203. char dszFS_[] = "fs:";
  204. char dszFTST[] = "ftst";
  205. char dszFUCOM[] = "fucom";
  206. char dszFUCOMI[] = "fucomi";
  207. char dszFUCOMIP[] = "fucomip";
  208. char dszFUCOMP[] = "fucomp";
  209. char dszFUCOMPP[] = "fucompp";
  210. char dszFWAIT[] = "fwait";
  211. char dszFXAM[] = "fxam";
  212. char dszFXCH[] = "fxch";
  213. char dszFXSAVE[] = "fxsave";
  214. char dszFXRSTOR[] = "fxrstor";
  215. char dszFXTRACT[] = "fxtract";
  216. char dszFYL2X[] = "fyl2x";
  217. char dszFYL2XP1[] = "fyl2xp1";
  218. char dszGS_[] = "gs:";
  219. char dszHLT[] = "hlt";
  220. char dszIBTS[] = "ibts";
  221. char dszIDIV[] = "idiv";
  222. char dszIMUL[] = "imul";
  223. char dszIN[] = "in";
  224. char dszINC[] = "inc";
  225. char dszINS[] = "ins";
  226. char dszINSB[] = "insb";
  227. char dszINSD[] = "insd";
  228. char dszINSW[] = "insw";
  229. char dszINT[] = "int";
  230. char dszINTO[] = "into";
  231. char dszINVD[] = "invd";
  232. char dszINVLPG[] = "invlpg";
  233. char dszIRET[] = "iret";
  234. char dszIRETD[] = "iretd";
  235. char dszJA[] = "ja";
  236. char dszJAE[] = "jae";
  237. char dszJB[] = "jb";
  238. char dszJBE[] = "jbe";
  239. char dszJC[] = "jc";
  240. char dszJCXZ[] = "jcxz";
  241. char dszJE[] = "je";
  242. char dszJECXZ[] = "jecxz";
  243. char dszJG[] = "jg";
  244. char dszJGE[] = "jge";
  245. char dszJL[] = "jl";
  246. char dszJLE[] = "jle";
  247. char dszJMP[] = "jmp";
  248. char dszJNA[] = "jna";
  249. char dszJNAE[] = "jnae";
  250. char dszJNB[] = "jnb";
  251. char dszJNBE[] = "jnbe";
  252. char dszJNC[] = "jnc";
  253. char dszJNE[] = "jne";
  254. char dszJNG[] = "jng";
  255. char dszJNGE[] = "jnge";
  256. char dszJNL[] = "jnl";
  257. char dszJNLE[] = "jnle";
  258. char dszJNO[] = "jno";
  259. char dszJNP[] = "jnp";
  260. char dszJNS[] = "jns";
  261. char dszJNZ[] = "jnz";
  262. char dszJO[] = "jo";
  263. char dszJP[] = "jp";
  264. char dszJPE[] = "jpe";
  265. char dszJPO[] = "jpo";
  266. char dszJRCXZ[] = "jrcxz";
  267. char dszJS[] = "js";
  268. char dszJZ[] = "jz";
  269. char dszLAHF[] = "lahf";
  270. char dszLAR[] = "lar";
  271. char dszLDMXCSR[] = "ldmxcsr";
  272. char dszLDS[] = "lds";
  273. char dszLEA[] = "lea";
  274. char dszLEAVE[] = "leave";
  275. char dszLES[] = "les";
  276. char dszLFENCE[] = "lfence";
  277. char dszLFS[] = "lfs";
  278. char dszLGDT[] = "lgdt";
  279. char dszLGS[] = "lgs";
  280. char dszLIDT[] = "lidt";
  281. char dszLLDT[] = "lldt";
  282. char dszLMSW[] = "lmsw";
  283. char dszLOCK[] = "lock";
  284. char dszLODS[] = "lods";
  285. char dszLODSB[] = "lodsb";
  286. char dszLODSD[] = "lodsd";
  287. char dszLODSW[] = "lodsw";
  288. char dszLOOP[] = "loop";
  289. char dszLOOPE[] = "loope";
  290. char dszLOOPNE[] = "loopne";
  291. char dszLOOPNZ[] = "loopnz";
  292. char dszLOOPZ[] = "loopz";
  293. char dszLSL[] = "lsl";
  294. char dszLSS[] = "lss";
  295. char dszLTR[] = "ltr";
  296. char dszMASKMOVDQU[]= "maskmov";
  297. char dszMAXSPSD[] = "max:? ";
  298. char dszMFENCE[] = "mfence";
  299. char dszMINSPSD[] = "min:? ";
  300. char dszMOV[] = "mov";
  301. char dszMOVBASE[] = "mov ";
  302. char dszMOVAPSD[] = "movap? ";
  303. char dszMOVD[] = "movd";
  304. char dszMOVDQA[] = "movdqa";
  305. char dszMOVHLPS[] = "movhlps";
  306. char dszMOVHPSD[] = "movhp? ";
  307. char dszMOVLHPS[] = "movlhps";
  308. char dszMOVLPSD[] = "movlp? ";
  309. char dszMOVMSKPSD[] = "movmskp? ";
  310. char dszMOVNTI[] = "movnti";
  311. char dszMOVNTPSD[] = "movntp? ";
  312. char dszMOVNTDQ[] = "movnt";
  313. char dszMOVQ[] = "movq";
  314. char dszMOVS[] = "movs";
  315. char dszMOVSB[] = "movsb";
  316. char dszMOVSD[] = "movsd";
  317. char dszMOVSW[] = "movsw";
  318. char dszMOVSX[] = "movsx";
  319. char dszMOVSXD[] = "movsxd";
  320. char dszMOVUPSSDX[] = "mov ";
  321. char dszMOVZX[] = "movzx";
  322. char dszMUL[] = "mul";
  323. char dszMULSPSD[] = "mul:? ";
  324. char dszNEG[] = "neg";
  325. char dszNOP[] = "nop";
  326. char dszNOT[] = "not";
  327. char dszOPPRFX[] = "";
  328. char dszOR[] = "or";
  329. char dszORPSD[] = "orp? ";
  330. char dszOUT[] = "out";
  331. char dszOUTS[] = "outs";
  332. char dszOUTSB[] = "outsb";
  333. char dszOUTSD[] = "outsd";
  334. char dszOUTSW[] = "outsw";
  335. char dszPACKSSDW[] = "packssdw";
  336. char dszPACKSSWB[] = "packsswb";
  337. char dszPACKUSWB[] = "packuswb";
  338. char dszPADDB[] = "paddb";
  339. char dszPADDD[] = "paddd";
  340. char dszPADDQ[] = "paddq";
  341. char dszPADDSB[] = "paddsb";
  342. char dszPADDSW[] = "paddsw";
  343. char dszPADDUSB[] = "paddusb";
  344. char dszPADDUSW[] = "paddusw";
  345. char dszPADDW[] = "paddw";
  346. char dszPAND[] = "pand";
  347. char dszPANDN[] = "pandn";
  348. char dszPAUSE[] = "pause";
  349. char dszPAVGB[] = "pavgb";
  350. char dszPAVGW[] = "pavgw";
  351. char dszPCMPEQB[] = "pcmpeqb";
  352. char dszPCMPEQD[] = "pcmpeqd";
  353. char dszPCMPEQW[] = "pcmpeqw";
  354. char dszPCMPGTB[] = "pcmpgtb";
  355. char dszPCMPGTD[] = "pcmpgtd";
  356. char dszPCMPGTW[] = "pcmpgtw";
  357. char dszPEXTRW[] = "pextrw";
  358. char dszPINSRW[] = "pinsrw";
  359. char dszPMADDWD[] = "pmaddwd";
  360. char dszPMAXSW[] = "pmaxsw";
  361. char dszPMAXUB[] = "pmaxub";
  362. char dszPMINSW[] = "pminsw";
  363. char dszPMINUB[] = "pminub";
  364. char dszPMOVMSKB[] = "pmovmskb";
  365. char dszPMULHUW[] = "pmulhuw";
  366. char dszPMULHW[] = "pmulhw";
  367. char dszPMULLW[] = "pmullw";
  368. char dszPMULUDQ[] = "pmuludq";
  369. char dszPOP[] = "pop";
  370. char dszPOPA[] = "popa";
  371. char dszPOPAD[] = "popad";
  372. char dszPOPF[] = "popf";
  373. char dszPOPFD[] = "popfd";
  374. char dszPOR[] = "por";
  375. char dszPREFETCH[] = "prefetch";
  376. char dszPREFETCHNTA[] = "prefetchtnta";
  377. char dszPREFETCHT0[] = "prefetcht0";
  378. char dszPREFETCHT1[] = "prefetcht1";
  379. char dszPREFETCHT2[] = "prefetcht2";
  380. char dszPREFETCHW[] = "prefetchw";
  381. char dszPSADBW[] = "psadbw";
  382. char dszPSHUF[] = "pshuf ";
  383. char dszPSLLD[] = "pslld";
  384. char dszPSLLDQ[] = "pslldq";
  385. char dszPSLLW[] = "psllw";
  386. char dszPSLLQ[] = "psllq";
  387. char dszPSRAD[] = "psrad";
  388. char dszPSRAW[] = "psraw";
  389. char dszPSRLD[] = "psrld";
  390. char dszPSRLDQ[] = "psrldq";
  391. char dszPSRLQ[] = "psrlq";
  392. char dszPSRLW[] = "psrlw";
  393. char dszPSUBB[] = "psubb";
  394. char dszPSUBD[] = "psubd";
  395. char dszPSUBQ[] = "psubq";
  396. char dszPSUBSB[] = "psubsb";
  397. char dszPSUBSW[] = "psubsw";
  398. char dszPSUBUSB[] = "psubusb";
  399. char dszPSUBUSW[] = "psubusw";
  400. char dszPSUBW[] = "psubw";
  401. char dszPUNPCKLBW[] = "punpcklbw";
  402. char dszPUNPCKLDQ[] = "punpckldq";
  403. char dszPUNPCKLWD[] = "punpcklwd";
  404. char dszPUNPCKHBW[] = "punpckhbw";
  405. char dszPUNPCKHDQ[] = "punpckhdq";
  406. char dszPUNPCKHWD[] = "punpckhwd";
  407. char dszPUSH[] = "push";
  408. char dszPUSHA[] = "pusha";
  409. char dszPUSHAD[] = "pushad";
  410. char dszPUSHF[] = "pushf";
  411. char dszPUSHFD[] = "pushfd";
  412. char dszPXOR[] = "pxor";
  413. char dszRCL[] = "rcl";
  414. char dszRCPSPSD[] = "rcp:? ";
  415. char dszRCR[] = "rcr";
  416. char dszRDTSC[] = "rdtsc";
  417. char dszRDMSR[] = "rdmsr";
  418. char dszRDPMC[] = "rdpmc";
  419. char dszREP[] = "rep ";
  420. char dszREPE[] = "repe";
  421. char dszREPNE[] = "repne ";
  422. char dszREPNZ[] = "repnz";
  423. char dszREPZ[] = "repz";
  424. char dszRET[] = "ret";
  425. char dszRETF[] = "retf";
  426. char dszRETN[] = "retn";
  427. char dszROL[] = "rol";
  428. char dszROR[] = "ror";
  429. char dszRSM[] = "rsm";
  430. char dszRSQRTSPSD[] = "rsqrt:? ";
  431. char dszSAHF[] = "sahf";
  432. char dszSAL[] = "sal";
  433. char dszSAR[] = "sar";
  434. char dszSBB[] = "sbb";
  435. char dszSCAS[] = "scas";
  436. char dszSCASB[] = "scasb";
  437. char dszSCASD[] = "scasd";
  438. char dszSCASW[] = "scasw";
  439. char dszSETA[] = "seta";
  440. char dszSETAE[] = "setae";
  441. char dszSETB[] = "setb";
  442. char dszSETBE[] = "setbe";
  443. char dszSETC[] = "setc";
  444. char dszSETE[] = "sete";
  445. char dszSETG[] = "setg";
  446. char dszSETGE[] = "setge";
  447. char dszSETL[] = "setl";
  448. char dszSETLE[] = "setle";
  449. char dszSETNA[] = "setna";
  450. char dszSETNAE[] = "setnae";
  451. char dszSETNB[] = "setnb";
  452. char dszSETNBE[] = "setnbe";
  453. char dszSETNC[] = "setnc";
  454. char dszSETNE[] = "setne";
  455. char dszSETNG[] = "setng";
  456. char dszSETNGE[] = "setnge";
  457. char dszSETNL[] = "setnl";
  458. char dszSETNLE[] = "setnle";
  459. char dszSETNO[] = "setno";
  460. char dszSETNP[] = "setnp";
  461. char dszSETNS[] = "setns";
  462. char dszSETNZ[] = "setnz";
  463. char dszSETO[] = "seto";
  464. char dszSETP[] = "setp";
  465. char dszSETPE[] = "setpe";
  466. char dszSETPO[] = "setpo";
  467. char dszSETS[] = "sets";
  468. char dszSETZ[] = "setz";
  469. char dszSFENCE[] = "sfence";
  470. char dszSGDT[] = "sgdt";
  471. char dszSHL[] = "shl";
  472. char dszSHLD[] = "shld";
  473. char dszSHR[] = "shr";
  474. char dszSHRD[] = "shrd";
  475. char dszSHUFPSD[] = "shufp? ";
  476. char dszSIDT[] = "sidt";
  477. char dszSLDT[] = "sldt";
  478. char dszSMSW[] = "smsw";
  479. char dszSQRTSPSD[] = "sqrt:? ";
  480. char dszSS_[] = "ss:";
  481. char dszSTC[] = "stc";
  482. char dszSTD[] = "std";
  483. char dszSTI[] = "sti";
  484. char dszSTMXCSR[] = "stmxcsr";
  485. char dszSTOS[] = "stos";
  486. char dszSTOSB[] = "stosb";
  487. char dszSTOSD[] = "stosd";
  488. char dszSTOSW[] = "stosw";
  489. char dszSTR[] = "str";
  490. char dszSUB[] = "sub";
  491. char dszSUBSPSD[] = "sub:? ";
  492. char dszSYSCALL[] = "syscall";
  493. char dszSYSENTER[] = "sysenter";
  494. char dszSYSEXIT[] = "sysexit";
  495. char dszSYSRET[] = "sysret";
  496. char dszTEST[] = "test";
  497. char dszUCOMISSD[] = "ucomis? ";
  498. char dszUD2[] = "ud2";
  499. char dszUNPCKHPSD[] = "unpckhp? ";
  500. char dszUNPCKLPSD[] = "unpcklp? ";
  501. char dszVERR[] = "verr";
  502. char dszVERW[] = "verw";
  503. char dszWAIT[] = "wait";
  504. char dszWBINVD[] = "wbinvd";
  505. char dszWRMSR[] = "wrmsr";
  506. char dszXADD[] = "xadd";
  507. char dszXBTS[] = "xbts";
  508. char dszXCHG[] = "xchg";
  509. char dszXLAT[] = "xlat";
  510. char dszXOR[] = "xor";
  511. char dszXORPSD[] = "xorp? ";
  512. char dszRESERVED[] = "???";
  513. char dszMULTI[] = "";
  514. char dszDB[] = "db";
  515. #define MRM 0x40
  516. #define COM 0x80
  517. #define END 0xc0
  518. /* Enumeration of valid actions that can be included in the action table */
  519. enum oprtyp { ADDRP, ADR_OVR, ALSTR, ALT, AXSTR, BOREG,
  520. BREG, BRSTR, xBYTE, CHR, CREG, xDWORD,
  521. EDWORD, EGROUPT, FARPTR, X86_GROUP, GROUPT, IB,
  522. IST, IST_ST, IV, IW, LMODRM, MODRM,
  523. NOP, OFFS, OPC0F, OPR_OVR, QWORD, REL16,
  524. REL8, REP, SEG_OVR, SREG2, SREG3, ST_IST,
  525. STROP, TBYTE, UBYTE, VAR, VOREG, VREG,
  526. xWORD, WREG, WRSTR, MMWREG, MMQWORD,XMMWREG,
  527. OWORD, XMMOWORD,XMMSD, CMPIB, XMMXWORD, MMORWREG,
  528. XORMMREG, XB, JCC8, JCCX, AMD3DNOW,
  529. };
  530. /* Enumeration of indices into the action table for instruction classes */
  531. #define O_DoDB 0
  532. #define O_NoOperands 0
  533. #define O_NoOpAlt5 O_NoOperands+1
  534. #define O_NoOpAlt4 O_NoOpAlt5+2
  535. #define O_NoOpAlt3 O_NoOpAlt4+2
  536. #define O_NoOpAlt1 O_NoOpAlt3+2
  537. #define O_NoOpAlt0 O_NoOpAlt1+2
  538. #define O_NoOpStrSI O_NoOpAlt0+2
  539. #define O_NoOpStrDI O_NoOpStrSI+2
  540. #define O_NoOpStrSIDI O_NoOpStrDI+2
  541. #define O_bModrm_Reg O_NoOpStrSIDI+2
  542. #define O_vModrm_Reg O_bModrm_Reg+3
  543. #define O_Modrm_Reg O_vModrm_Reg+3
  544. #define O_bReg_Modrm O_Modrm_Reg+3
  545. #define O_fReg_Modrm O_bReg_Modrm+3
  546. #define O_Reg_Modrm O_fReg_Modrm+3
  547. #define O_AL_Ib O_Reg_Modrm+3
  548. #define O_AX_Iv O_AL_Ib+2
  549. #define O_sReg2 O_AX_Iv+2
  550. #define O_oReg O_sReg2+1
  551. #define O_DoBound O_oReg+1
  552. #define O_Iv O_DoBound+3
  553. #define O_wModrm_Reg O_Iv+1
  554. #define O_Ib O_wModrm_Reg+3
  555. #define O_Imulxb O_Ib+1
  556. #define O_Imul O_Imulxb+4
  557. #define O_Rel8 O_Imul+4
  558. #define O_bModrm_Ib O_Rel8+1
  559. #define O_Modrm_Ib O_bModrm_Ib+3
  560. #define O_Modrm_Iv O_Modrm_Ib+3
  561. #define O_Modrm_sReg3 O_Modrm_Iv+3
  562. #define O_sReg3_Modrm O_Modrm_sReg3+3
  563. #define O_Modrm O_sReg3_Modrm+3
  564. #define O_FarPtr O_Modrm+2
  565. #define O_AL_Offs O_FarPtr+1
  566. #define O_Offs_AL O_AL_Offs+2
  567. #define O_AX_Offs O_Offs_AL+2
  568. #define O_Offs_AX O_AX_Offs+2
  569. #define O_oReg_Ib O_Offs_AX+2
  570. #define O_oReg_Iv O_oReg_Ib+2
  571. #define O_Iw O_oReg_Iv+2
  572. #define O_Enter O_Iw+1
  573. #define O_Ubyte_AL O_Enter+2
  574. #define O_Ubyte_AX O_Ubyte_AL+2
  575. #define O_AL_Ubyte O_Ubyte_AX+2
  576. #define O_AX_Ubyte O_AL_Ubyte+2
  577. #define O_DoInAL O_AX_Ubyte+2
  578. #define O_DoInAX O_DoInAL+3
  579. #define O_DoOutAL O_DoInAX+3
  580. #define O_DoOutAX O_DoOutAL+3
  581. #define O_Rel16 O_DoOutAX+3
  582. #define O_ADR_OVERRIDE O_Rel16+1
  583. #define O_OPR_OVERRIDE O_ADR_OVERRIDE+1
  584. #define O_SEG_OVERRIDE O_OPR_OVERRIDE+1
  585. #define O_DoInt3 O_SEG_OVERRIDE+1
  586. #if (O_DoInt3 != 115)
  587. #error "operand table has been modified!"
  588. #endif
  589. /* #define O_DoInt O_DoInt3+2 */
  590. #define O_DoInt 117
  591. #define O_OPC0F O_DoInt+1
  592. #define O_GROUP11 O_OPC0F+1
  593. #define O_GROUP13 O_GROUP11+5
  594. #define O_GROUP12 O_GROUP13+5
  595. #define O_GROUP21 O_GROUP12+5
  596. #define O_GROUP22 O_GROUP21+5
  597. #define O_GROUP23 O_GROUP22+5
  598. #define O_GROUP24 O_GROUP23+6
  599. #define O_GROUP25 O_GROUP24+6
  600. #define O_GROUP26 O_GROUP25+6
  601. #define O_GROUP4 O_GROUP26+6
  602. #define O_GROUP6 O_GROUP4+4
  603. #define O_GROUP8 O_GROUP6+4
  604. #define O_GROUP31 O_GROUP8+5
  605. #define O_GROUP32 O_GROUP31+3
  606. #define O_GROUP5 O_GROUP32+3
  607. #define O_GROUP7 O_GROUP5+3
  608. #define O_x87_ESC O_GROUP7+3
  609. #define O_bModrm O_x87_ESC+2
  610. #define O_wModrm O_bModrm+2
  611. #define O_dModrm O_wModrm+2
  612. #define O_fModrm O_dModrm+2
  613. #define O_vModrm O_fModrm+2
  614. #define O_vModrm_Iv O_vModrm+2
  615. #define O_Reg_bModrm O_vModrm_Iv+3
  616. #define O_Reg_wModrm O_Reg_bModrm+3
  617. #define O_Modrm_Reg_Ib O_Reg_wModrm+3
  618. #define O_Modrm_Reg_CL O_Modrm_Reg_Ib+4
  619. #define O_ST_iST O_Modrm_Reg_CL+5
  620. #define O_iST O_ST_iST+2
  621. #define O_iST_ST O_iST+2
  622. #define O_qModrm O_iST_ST+2
  623. #define O_tModrm O_qModrm+2
  624. #define O_DoRep O_tModrm+2
  625. #define O_Modrm_CReg O_DoRep+1
  626. #define O_CReg_Modrm O_Modrm_CReg+3
  627. #define O_AX_oReg O_CReg_Modrm+3
  628. #define O_MmReg_qModrm O_AX_oReg+2
  629. #define O_qModrm_MmReg O_MmReg_qModrm+3
  630. #define O_MmReg_dModrm O_qModrm_MmReg+3
  631. #define O_dModrm_MmReg O_MmReg_dModrm+3
  632. #define O_qModrm_Ib O_dModrm_MmReg+3
  633. #define O_PSHimw O_qModrm_Ib+3
  634. #define O_PSHimd O_PSHimw+5
  635. #define O_PSHimq O_PSHimd+5
  636. #define O_GROUP_0F_AE O_PSHimq+5
  637. #define O_Sd_XmmReg_oModrm O_GROUP_0F_AE+3
  638. #define O_Sd_oModrm_XmmReg O_Sd_XmmReg_oModrm+4
  639. #define O_Sd_Reg_XmmReg O_Sd_oModrm_XmmReg+4
  640. #define O_Sd_XmmReg_oModrm_CmpIb O_Sd_Reg_XmmReg+3
  641. #define O_Sd_XmmReg_xModrm O_Sd_XmmReg_oModrm_CmpIb+5
  642. #define O_Sd_MmOrWReg_oModrm O_Sd_XmmReg_xModrm+4
  643. #define O_Sd_XOrMmReg_XOrMmReg O_Sd_MmOrWReg_oModrm+4
  644. #define O_Sd_xModrm_XOrMmReg O_Sd_XOrMmReg_XOrMmReg+3
  645. #define O_GROUP_0F_18 O_Sd_xModrm_XOrMmReg+4
  646. #define O_Sd_XmmReg_oModrm_Ib O_GROUP_0F_18+3
  647. #define O_Jcc8 O_Sd_XmmReg_oModrm_Ib+5
  648. #define O_JccX O_Jcc8+1
  649. #define O_Sd_XmmReg_qModrm O_JccX+1
  650. #define O_MmReg_dModrm_Ib O_Sd_XmmReg_qModrm+4
  651. #define O_Reg_MmReg_Ib O_MmReg_dModrm_Ib+4
  652. #define O_Reg_MmReg O_Reg_MmReg_Ib+4
  653. #define O_MmReg_qModrm_3DNow O_Reg_MmReg+3
  654. #define O_GROUP_0F_0D O_MmReg_qModrm_3DNow+4
  655. #define O_length O_GROUP_0F_0D+4
  656. typedef unsigned short ActionIndex;
  657. #if( O_length > 65535 )
  658. #error "operand table too large!"
  659. #endif
  660. /* The action table: range of lists of actions to be taken for each possible */
  661. /* instruction class. */
  662. static unsigned char actiontbl[] = {
  663. /* NoOperands */ NOP+END,
  664. /* NoOpAlt5 */ ALT+END, 5,
  665. /* NoOpAlt4 */ ALT+END, 4,
  666. /* NoOpAlt3 */ ALT+END, 3,
  667. /* NoOpAlt1 */ ALT+END, 1,
  668. /* NoOpAlt0 */ ALT+END, 0,
  669. /* NoOpStrSI */ STROP+END, 1,
  670. /* NoOpStrDI */ STROP+END, 2,
  671. /* NoOpStrSIDI */ STROP+END, 3,
  672. /* bModrm_Reg */ xBYTE+MRM, MODRM+COM, BREG+END,
  673. /* vModrm_Reg */ VAR+MRM, LMODRM+COM, BREG+END,
  674. /* Modrm_Reg */ VAR+MRM, MODRM+COM, VREG+END,
  675. /* bReg_Modrm */ xBYTE+MRM, BREG+COM, MODRM+END,
  676. /* fReg_Modrm */ FARPTR+MRM,VREG+COM, MODRM+END,
  677. /* Reg_Modrm */ VAR+MRM, VREG+COM, MODRM+END,
  678. /* AL_Ib */ ALSTR+COM, IB+END,
  679. /* AX_Iv */ AXSTR+COM, IV+END,
  680. /* sReg2 */ SREG2+END,
  681. /* oReg */ VOREG+END,
  682. /* DoBound */ VAR+MRM, VREG+COM, MODRM+END,
  683. /* Iv */ IV+END,
  684. /* wModrm_Reg */ xWORD+MRM, LMODRM+COM, WREG+END,
  685. /* Ib */ IB+END,
  686. /* Imulxb */ VAR+MRM, VREG+COM, MODRM+COM, XB+END,
  687. /* Imul */ VAR+MRM, VREG+COM, MODRM+COM, IV+END,
  688. /* REL8 */ REL8+END,
  689. /* bModrm_Ib */ xBYTE+MRM, LMODRM+COM, IB+END,
  690. /* Modrm_Ib */ VAR+MRM, LMODRM+COM, IB+END,
  691. /* Modrm_Iv */ VAR+MRM, LMODRM+COM, IV+END,
  692. /* Modrm_sReg3 */ xWORD+MRM, MODRM+COM, SREG3+END,
  693. /* sReg3_Modrm */ xWORD+MRM, SREG3+COM, MODRM+END,
  694. /* Modrm */ VAR+MRM, MODRM+END,
  695. /* FarPtr */ ADDRP+END,
  696. /* AL_Offs */ ALSTR+COM, OFFS+END,
  697. /* Offs_AL */ OFFS+COM, ALSTR+END,
  698. /* AX_Offs */ AXSTR+COM, OFFS+END,
  699. /* Offs_AX */ OFFS+COM, AXSTR+END,
  700. /* oReg_Ib */ BOREG+COM, IB+END,
  701. /* oReg_Iv */ VOREG+COM, IV+END,
  702. /* Iw */ IW+END,
  703. /* enter */ IW+COM, IB+END,
  704. /* Ubyte_AL */ UBYTE+COM, ALSTR+END,
  705. /* Ubyte_AX */ UBYTE+COM, AXSTR+END,
  706. /* AL_Ubyte */ ALSTR+COM, UBYTE+END,
  707. /* AX_Ubyte */ AXSTR+COM, UBYTE+END,
  708. /* DoInAL */ ALSTR+COM, WRSTR+END, 2,
  709. /* DoInAX */ AXSTR+COM, WRSTR+END, 2,
  710. /* DoOutAL */ WRSTR+COM, 2, ALSTR+END,
  711. /* DoOutAX */ WRSTR+COM, 2, AXSTR+END,
  712. /* REL16 */ REL16+END,
  713. /* ADR_OVERRIDE*/ ADR_OVR,
  714. /* OPR_OVERRIDE*/ OPR_OVR,
  715. /* SEG_OVERRIDE*/ SEG_OVR,
  716. /* DoInt3 */ CHR+END, '3',
  717. /* DoInt */ UBYTE+END,
  718. /* Opcode0F */ OPC0F,
  719. /* group1_1 */ xBYTE+MRM, X86_GROUP, 0, LMODRM+COM, IB+END,
  720. /* group1_3 */ VAR+MRM, X86_GROUP, 0, LMODRM+COM, XB+END,
  721. /* group1_2 */ VAR+MRM, X86_GROUP, 0, LMODRM+COM, IV+END,
  722. /* group2_1 */ xBYTE+MRM, X86_GROUP, 1, LMODRM+COM, IB+END,
  723. /* group2_2 */ VAR+MRM, X86_GROUP, 1, LMODRM+COM, IB+END,
  724. /* group2_3 */ xBYTE+MRM, X86_GROUP, 1, LMODRM+COM, CHR+END, '1',
  725. /* group2_4 */ VAR+MRM, X86_GROUP, 1, LMODRM+COM, CHR+END, '1',
  726. /* group2_5 */ xBYTE+MRM, X86_GROUP, 1, LMODRM+COM, BRSTR+END, 1,
  727. /* group2_6 */ VAR+MRM, X86_GROUP, 1, LMODRM+COM, BRSTR+END, 1,
  728. /* group4 */ xBYTE+MRM, X86_GROUP, 2, LMODRM+END,
  729. /* group6 */ xWORD+MRM, X86_GROUP, 3, LMODRM+END,
  730. /* group8 */ xWORD+MRM, X86_GROUP, 4, LMODRM+COM, IB+END,
  731. /* group3_1 */ xBYTE+MRM, GROUPT, 20,
  732. /* group3_2 */ VAR+MRM, GROUPT, 21,
  733. /* group5 */ VAR+MRM, GROUPT, 22,
  734. /* group7 */ NOP+MRM, GROUPT, 23,
  735. /* x87_ESC */ NOP+MRM, EGROUPT,
  736. /* bModrm */ xBYTE+MRM, LMODRM+END,
  737. /* wModrm */ xWORD+MRM, LMODRM+END,
  738. /* dModrm */ xDWORD+MRM,LMODRM+END,
  739. /* fModrm */ FARPTR+MRM,LMODRM+END,
  740. /* vModrm */ VAR+MRM, LMODRM+END,
  741. /* vModrm_Iv */ VAR+MRM, LMODRM+COM, IV+END,
  742. /* reg_bModrm */ xBYTE+MRM, VREG+COM, LMODRM+END,
  743. /* reg_wModrm */ xWORD+MRM, VREG+COM, LMODRM+END,
  744. /* Modrm_Reg_Ib*/ VAR+MRM, MODRM+COM, VREG+COM, IB+END,
  745. /* Modrm_Reg_CL*/ VAR+MRM, MODRM+COM, VREG+COM, BRSTR+END, 1,
  746. /* ST_iST */ NOP+MRM, ST_IST+END,
  747. /* iST */ NOP+MRM, IST+END,
  748. /* iST_ST */ NOP+MRM, IST_ST+END,
  749. /* qModrm */ QWORD+MRM, LMODRM+END,
  750. /* tModrm */ TBYTE+MRM, LMODRM+END,
  751. /* REP */ REP,
  752. /* Modrm_CReg */ EDWORD+MRM,MODRM+COM, CREG+END,
  753. /* CReg_Modrm */ EDWORD+MRM,CREG+COM, MODRM+END,
  754. /* AX_oReg */ AXSTR+COM, VOREG+END,
  755. /* MmReg_qModrm*/ MMQWORD+MRM, MMWREG+COM, LMODRM+END,
  756. /* qModrm_MmReg*/ MMQWORD+MRM, LMODRM+COM, MMWREG+END,
  757. /* MmReg_dModrm*/ xDWORD+MRM, MMWREG+COM, LMODRM+END,
  758. /* dModrm_MmReg*/ xDWORD+MRM, LMODRM+COM, MMWREG+END,
  759. /* qModrm_Ib */ MMQWORD+MRM, LMODRM+COM, IB+END,
  760. /* PSHimw */ MMQWORD+MRM, X86_GROUP,5, MMWREG+COM, IB+END,
  761. /* PSHimd */ MMQWORD+MRM, X86_GROUP,6, MMWREG+COM, IB+END,
  762. /* PSHimq */ MMQWORD+MRM, X86_GROUP,7, MMWREG+COM, IB+END,
  763. /* group_0f_ae */ NOP+MRM, GROUPT, 25,
  764. /* Sd_XmmReg_oModrm*/ XMMSD, XMMOWORD+MRM, XMMWREG+COM, LMODRM+END,
  765. /* Sd_oModrm_XmmReg*/ XMMSD, XMMOWORD+MRM, LMODRM+COM, XMMWREG+END,
  766. /* Sd_Reg_XmmReg */ XMMSD+MRM, VREG+COM, XMMWREG+END,
  767. /* Sd_XmmReg_oModrm_CmpIb */ XMMSD, XMMOWORD+MRM, XMMWREG+COM, LMODRM+COM, CMPIB+END,
  768. /* Sd_XmmReg_xModrm*/ XMMSD, XMMXWORD+MRM, XMMWREG+COM, LMODRM+END,
  769. /* Sd_MmOrWReg_xModrm*/ XMMSD, XMMOWORD+MRM, MMORWREG+COM, LMODRM+END,
  770. /* Sd_XOrMmReg_XOrMmReg */ XMMSD+MRM, XORMMREG+COM, LMODRM+END,
  771. /* Sd_xModrm_XOrMmReg */ XMMSD, XMMXWORD+MRM, LMODRM+COM, XORMMREG+END,
  772. /* group_0f_18 */ NOP+MRM, GROUPT, 26,
  773. /* Sd_XmmReg_oModrm_Ib */ XMMSD, XMMOWORD+MRM, XMMWREG+COM, LMODRM+COM, IB+END,
  774. /* Jcc8 */ JCC8+END,
  775. /* JccX */ JCCX+END,
  776. /* Sd_XmmReg_qModrm*/ XMMSD, MMQWORD+MRM, XMMWREG+COM, LMODRM+END,
  777. /* MmReg_dModrm_Ib*/ xWORD+MRM, MMWREG+COM, LMODRM+COM, IB+END,
  778. /* Reg_MmReg_Ib*/ MMQWORD+MRM, VREG+COM, MMWREG+COM, IB+END,
  779. /* Reg_MmReg */ NOP+MRM, VREG+COM, MMWREG+END,
  780. /* MmReg_qModrm_3DNow*/ MMQWORD+MRM, MMWREG+COM, LMODRM, AMD3DNOW+END,
  781. /* group_0f_0d */ xBYTE+MRM, X86_GROUP, 8, LMODRM+END,
  782. };
  783. #if defined(_M_IX86)
  784. #define BUILDING_ON_X86 1
  785. #else
  786. #define BUILDING_ON_X86 0
  787. #endif
  788. #if BUILDING_ON_X86 == 1
  789. #pragma pack(1)
  790. #endif
  791. typedef struct Tdistbl{
  792. char *instruct;
  793. ActionIndex opr;
  794. } Tdistbl;
  795. #if BUILDING_ON_X86 == 1
  796. #pragma pack()
  797. #endif
  798. /* List of ordered pairs for each instruction: */
  799. /* (pointer to string literal mnemonic, */
  800. /* instruction class index for action table) */
  801. static Tdistbl distbl[] = {
  802. dszADD, O_bModrm_Reg, /* 00 ADD mem/reg, reg (byte) */
  803. dszADD, O_Modrm_Reg, /* 01 ADD mem/reg, reg (word) */
  804. dszADD, O_bReg_Modrm, /* 02 ADD reg, mem/reg (byte) */
  805. dszADD, O_Reg_Modrm, /* 03 ADD reg, mem/reg (word) */
  806. dszADD, O_AL_Ib, /* 04 ADD AL, I */
  807. dszADD, O_AX_Iv, /* 05 ADD AX, I */
  808. dszPUSH, O_sReg2, /* 06 PUSH ES */
  809. dszPOP, O_sReg2, /* 07 POP ES */
  810. dszOR, O_bModrm_Reg, /* 08 OR mem/reg, reg (byte) */
  811. dszOR, O_Modrm_Reg, /* 09 OR mem/reg, reg (word) */
  812. dszOR, O_bReg_Modrm, /* 0A OR reg, mem/reg (byte) */
  813. dszOR, O_Reg_Modrm, /* 0B OR reg, mem/reg (word) */
  814. dszOR, O_AL_Ib, /* 0C OR AL, I */
  815. dszOR, O_AX_Iv, /* 0D OR AX, I */
  816. dszPUSH, O_sReg2, /* 0E PUSH CS */
  817. dszMULTI, O_OPC0F, /* 0F CLTS & protection ctl(286) */
  818. dszADC, O_bModrm_Reg, /* 10 ADC mem/reg, reg (byte) */
  819. dszADC, O_Modrm_Reg, /* 11 ADC mem/reg, reg (word) */
  820. dszADC, O_bReg_Modrm, /* 12 ADC reg, mem/reg (byte) */
  821. dszADC, O_Reg_Modrm, /* 13 ADC reg, mem/reg (word) */
  822. dszADC, O_AL_Ib, /* 14 ADC AL, I */
  823. dszADC, O_AX_Iv, /* 15 ADC AX, I */
  824. dszPUSH, O_sReg2, /* 16 PUSH SS */
  825. dszPOP, O_sReg2, /* 17 POP SS */
  826. dszSBB, O_bModrm_Reg, /* 18 SBB mem/reg, reg (byte) */
  827. dszSBB, O_Modrm_Reg, /* 19 SBB mem/reg, reg (word) */
  828. dszSBB, O_bReg_Modrm, /* 1A SBB reg, mem/reg (byte) */
  829. dszSBB, O_Reg_Modrm, /* 1B SBB reg, mem/reg (word) */
  830. dszSBB, O_AL_Ib, /* 1C SBB AL, I */
  831. dszSBB, O_AX_Iv, /* 1D SBB AX, I */
  832. dszPUSH, O_sReg2, /* 1E PUSH DS */
  833. dszPOP, O_sReg2, /* 1F POP DS */
  834. dszAND, O_bModrm_Reg, /* 20 AND mem/reg, reg (byte) */
  835. dszAND, O_Modrm_Reg, /* 21 AND mem/reg, reg (word) */
  836. dszAND, O_bReg_Modrm, /* 22 AND reg, mem/reg (byte) */
  837. dszAND, O_Reg_Modrm, /* 23 AND reg, mem/reg (word) */
  838. dszAND, O_AL_Ib, /* 24 AND AL, I */
  839. dszAND, O_AX_Iv, /* 25 AND AX, I */
  840. dszES_, O_SEG_OVERRIDE, /* 26 SEG ES: */
  841. dszDAA, O_NoOperands, /* 27 DAA */
  842. dszSUB, O_bModrm_Reg, /* 28 SUB mem/reg, reg (byte) */
  843. dszSUB, O_Modrm_Reg, /* 29 SUB mem/reg, reg (word) */
  844. dszSUB, O_bReg_Modrm, /* 2A SUB reg, mem/reg (byte) */
  845. dszSUB, O_Reg_Modrm, /* 2B SUB reg, mem/reg (word) */
  846. dszSUB, O_AL_Ib, /* 2C SUB AL, I */
  847. dszSUB, O_AX_Iv, /* 2D SUB AX, I */
  848. dszCS_, O_SEG_OVERRIDE, /* 2E SEG CS: */
  849. dszDAS, O_NoOperands, /* 2F DAS */
  850. dszXOR, O_bModrm_Reg, /* 30 XOR mem/reg, reg (byte) */
  851. dszXOR, O_Modrm_Reg, /* 31 XOR mem/reg, reg (word) */
  852. dszXOR, O_bReg_Modrm, /* 32 XOR reg, mem/reg (byte) */
  853. dszXOR, O_Reg_Modrm, /* 33 XOR reg, mem/reg (word) */
  854. dszXOR, O_AL_Ib, /* 34 XOR AL, I */
  855. dszXOR, O_AX_Iv, /* 35 XOR AX, I */
  856. dszSS_, O_SEG_OVERRIDE, /* 36 SEG SS: */
  857. dszAAA, O_NoOperands, /* 37 AAA */
  858. dszCMP, O_bModrm_Reg, /* 38 CMP mem/reg, reg (byte) */
  859. dszCMP, O_Modrm_Reg, /* 39 CMP mem/reg, reg (word) */
  860. dszCMP, O_bReg_Modrm, /* 3A CMP reg, mem/reg (byte) */
  861. dszCMP, O_Reg_Modrm, /* 3B CMP reg, mem/reg (word) */
  862. dszCMP, O_AL_Ib, /* 3C CMP AL, I */
  863. dszCMP, O_AX_Iv, /* 3D CMP AX, I */
  864. dszDS_, O_SEG_OVERRIDE, /* 3E SEG DS: */
  865. dszAAS, O_NoOperands, /* 3F AAS */
  866. dszINC, O_oReg, /* 40 INC AX */
  867. dszINC, O_oReg, /* 41 INC CX */
  868. dszINC, O_oReg, /* 42 INC DX */
  869. dszINC, O_oReg, /* 43 INC BX */
  870. dszINC, O_oReg, /* 44 INC SP */
  871. dszINC, O_oReg, /* 45 INC BP */
  872. dszINC, O_oReg, /* 46 INC SI */
  873. dszINC, O_oReg, /* 47 INC DI */
  874. dszDEC, O_oReg, /* 48 DEC AX */
  875. dszDEC, O_oReg, /* 49 DEC CX */
  876. dszDEC, O_oReg, /* 4A DEC DX */
  877. dszDEC, O_oReg, /* 4B DEC BX */
  878. dszDEC, O_oReg, /* 4C DEC SP */
  879. dszDEC, O_oReg, /* 4D DEC BP */
  880. dszDEC, O_oReg, /* 4E DEC SI */
  881. dszDEC, O_oReg, /* 4F DEC DI */
  882. dszPUSH, O_oReg, /* 50 PUSH AX */
  883. dszPUSH, O_oReg, /* 51 PUSH CX */
  884. dszPUSH, O_oReg, /* 52 PUSH DX */
  885. dszPUSH, O_oReg, /* 53 PUSH BX */
  886. dszPUSH, O_oReg, /* 54 PUSH SP */
  887. dszPUSH, O_oReg, /* 55 PUSH BP */
  888. dszPUSH, O_oReg, /* 56 PUSH SI */
  889. dszPUSH, O_oReg, /* 57 PUSH DI */
  890. dszPOP, O_oReg, /* 58 POP AX */
  891. dszPOP, O_oReg, /* 59 POP CX */
  892. dszPOP, O_oReg, /* 5A POP DX */
  893. dszPOP, O_oReg, /* 5B POP BX */
  894. dszPOP, O_oReg, /* 5C POP SP */
  895. dszPOP, O_oReg, /* 5D POP BP */
  896. dszPOP, O_oReg, /* 5E POP SI */
  897. dszPOP, O_oReg, /* 5F POP DI */
  898. dszPUSHA, O_NoOpAlt5, /* 60 PUSHA (286) / PUSHAD (386) */
  899. dszPOPA, O_NoOpAlt4, /* 61 POPA (286) / POPAD (286) */
  900. dszBOUND, O_DoBound, /* 62 BOUND reg, Modrm (286) */
  901. dszARPL, O_Modrm_Reg, /* 63 ARPL Modrm, reg (286) */
  902. dszFS_, O_SEG_OVERRIDE, /* 64 */
  903. dszGS_, O_SEG_OVERRIDE, /* 65 */
  904. dszOPPRFX,O_OPR_OVERRIDE, /* 66 */
  905. dszADDRPRFX,O_ADR_OVERRIDE, /* 67 */
  906. dszPUSH, O_Iv, /* 68 PUSH word (286) */
  907. dszIMUL, O_Imul, /* 69 IMUL (286) */
  908. dszPUSH, O_Ib, /* 6A PUSH byte (286) */
  909. dszIMUL, O_Imulxb, /* 6B IMUL (286) */
  910. dszINSB, O_NoOperands, /* 6C INSB (286) */
  911. dszINSW, O_NoOpAlt3, /* 6D INSW (286) / INSD (386) */
  912. dszOUTSB, O_NoOperands, /* 6E OUTSB (286) */
  913. dszOUTSW, O_NoOpAlt4, /* 6F OUTSW (286) / OUTSD (386) */
  914. dszJO, O_Jcc8, /* 70 JO */
  915. dszJNO, O_Jcc8, /* 71 JNO */
  916. dszJB, O_Jcc8, /* 72 JB or JNAE or JC */
  917. dszJNB, O_Jcc8, /* 73 JNB or JAE or JNC */
  918. dszJZ, O_Jcc8, /* 74 JE or JZ */
  919. dszJNZ, O_Jcc8, /* 75 JNE or JNZ */
  920. dszJBE, O_Jcc8, /* 76 JBE or JNA */
  921. dszJA, O_Jcc8, /* 77 JNBE or JA */
  922. dszJS, O_Jcc8, /* 78 JS */
  923. dszJNS, O_Jcc8, /* 79 JNS */
  924. dszJPE, O_Jcc8, /* 7A JP or JPE */
  925. dszJPO, O_Jcc8, /* 7B JNP or JPO */
  926. dszJL, O_Jcc8, /* 7C JL or JNGE */
  927. dszJGE, O_Jcc8, /* 7D JNL or JGE */
  928. dszJLE, O_Jcc8, /* 7E JLE or JNG */
  929. dszJG, O_Jcc8, /* 7F JNLE or JG */
  930. dszMULTI, O_GROUP11, /* 80 */
  931. dszMULTI, O_GROUP12, /* 81 */
  932. dszRESERVED, O_DoDB, /* 82 */
  933. dszMULTI, O_GROUP13, /* 83 */
  934. dszTEST, O_bModrm_Reg, /* 84 TEST reg, mem/reg (byte) */
  935. dszTEST, O_Modrm_Reg, /* 85 TEST reg, mem/reg (word) */
  936. dszXCHG, O_bModrm_Reg, /* 86 XCHG reg, mem/reg (byte) */
  937. dszXCHG, O_Modrm_Reg, /* 87 XCHG reg, mem/reg (word) */
  938. dszMOV, O_bModrm_Reg, /* 88 MOV mem/reg, reg (byte) */
  939. dszMOV, O_Modrm_Reg, /* 89 MOV mem/reg, reg (word) */
  940. dszMOV, O_bReg_Modrm, /* 8A MOV reg, mem/reg (byte) */
  941. dszMOV, O_Reg_Modrm, /* 8B MOV reg, mem/reg (word) */
  942. dszMOV, O_Modrm_sReg3, /* 8C MOV mem/reg, segreg */
  943. dszLEA, O_Reg_Modrm, /* 8D LEA reg, mem */
  944. dszMOV, O_sReg3_Modrm, /* 8E MOV segreg, mem/reg */
  945. dszPOP, O_Modrm, /* 8F POP mem/reg */
  946. dszNOP, O_NoOperands, /* 90 NOP */
  947. dszXCHG, O_AX_oReg, /* 91 XCHG AX,CX */
  948. dszXCHG, O_AX_oReg, /* 92 XCHG AX,DX */
  949. dszXCHG, O_AX_oReg, /* 93 XCHG AX,BX */
  950. dszXCHG, O_AX_oReg, /* 94 XCHG AX,SP */
  951. dszXCHG, O_AX_oReg, /* 95 XCHG AX,BP */
  952. dszXCHG, O_AX_oReg, /* 96 XCHG AX,SI */
  953. dszXCHG, O_AX_oReg, /* 97 XCHG AX,DI */
  954. dszCBW, O_NoOpAlt0, /* 98 CBW / CWDE (386) */
  955. dszCWD, O_NoOpAlt1, /* 99 CWD / CDQ (386) */
  956. dszCALL, O_FarPtr, /* 9A CALL seg:off */
  957. dszWAIT, O_NoOperands, /* 9B WAIT */
  958. dszPUSHF, O_NoOpAlt5, /* 9C PUSHF / PUSHFD (386) */
  959. dszPOPF, O_NoOpAlt4, /* 9D POPF / POPFD (386) */
  960. dszSAHF, O_NoOperands, /* 9E SAHF */
  961. dszLAHF, O_NoOperands, /* 9F LAHF */
  962. dszMOV, O_AL_Offs, /* A0 MOV AL, mem */
  963. dszMOV, O_AX_Offs, /* A1 MOV AX, mem */
  964. dszMOV, O_Offs_AL, /* A2 MOV mem, AL */
  965. dszMOV, O_Offs_AX, /* A3 MOV mem, AX */
  966. dszMOVSB, O_NoOpStrSIDI, /* A4 MOVSB */
  967. dszMOVSW, O_NoOpStrSIDI, /* A5 MOVSW / MOVSD (386) */
  968. dszCMPSB, O_NoOpStrSIDI, /* A6 CMPSB */
  969. dszCMPSW, O_NoOpStrSIDI, /* A7 CMPSW / CMPSD (386) */
  970. dszTEST, O_AL_Ib, /* A8 TEST AL, I */
  971. dszTEST, O_AX_Iv, /* A9 TEST AX, I */
  972. dszSTOSB, O_NoOpStrDI, /* AA STOSB */
  973. dszSTOSW, O_NoOpStrDI, /* AB STOSW / STOSD (386) */
  974. dszLODSB, O_NoOpStrSI, /* AC LODSB */
  975. dszLODSW, O_NoOpStrSI, /* AD LODSW / LODSD (386) */
  976. dszSCASB, O_NoOpStrDI, /* AE SCASB */
  977. dszSCASW, O_NoOpStrDI, /* AF SCASW / SCASD (386) */
  978. dszMOV, O_oReg_Ib, /* B0 MOV AL, I */
  979. dszMOV, O_oReg_Ib, /* B1 MOV CL, I */
  980. dszMOV, O_oReg_Ib, /* B2 MOV DL, I */
  981. dszMOV, O_oReg_Ib, /* B3 MOV BL, I */
  982. dszMOV, O_oReg_Ib, /* B4 MOV AH, I */
  983. dszMOV, O_oReg_Ib, /* B5 MOV CH, I */
  984. dszMOV, O_oReg_Ib, /* B6 MOV DH, I */
  985. dszMOV, O_oReg_Ib, /* B7 MOV BH, I */
  986. dszMOV, O_oReg_Iv, /* B8 MOV AX, I */
  987. dszMOV, O_oReg_Iv, /* B9 MOV CX, I */
  988. dszMOV, O_oReg_Iv, /* BA MOV DX, I */
  989. dszMOV, O_oReg_Iv, /* BB MOV BX, I */
  990. dszMOV, O_oReg_Iv, /* BC MOV SP, I */
  991. dszMOV, O_oReg_Iv, /* BD MOV BP, I */
  992. dszMOV, O_oReg_Iv, /* BE MOV SI, I */
  993. dszMOV, O_oReg_Iv, /* BF MOV DI, I */
  994. dszMULTI, O_GROUP21, /* C0 shifts & rotates (286) */
  995. dszMULTI, O_GROUP22, /* C1 shifts & rotates (286) */
  996. dszRET, O_Iw, /* C2 RET Rel16 */
  997. dszRET, O_NoOperands, /* C3 RET */
  998. dszLES, O_fReg_Modrm, /* C4 LES reg, mem */
  999. dszLDS, O_fReg_Modrm, /* C5 LDS reg, mem */
  1000. dszMOV, O_bModrm_Ib, /* C6 MOV mem/reg, I(byte) */
  1001. dszMOV, O_Modrm_Iv, /* C7 MOV mem/reg, I(word) */
  1002. dszENTER, O_Enter, /* C8 ENTER (286) */
  1003. dszLEAVE, O_NoOperands, /* C9 LEAVE (286) */
  1004. dszRETF, O_Iw, /* CA RETF I(word) */
  1005. dszRETF, O_NoOperands, /* CB RETF */
  1006. dszINT, O_DoInt3, /* CC INT 3 */
  1007. dszINT, O_DoInt, /* CD INT */
  1008. dszINTO, O_NoOperands, /* CE INTO */
  1009. dszIRET, O_NoOpAlt4, /* CF IRET / IRETD (386) */
  1010. dszMULTI, O_GROUP23, /* D0 shifts & rotates,1 (byte) */
  1011. dszMULTI, O_GROUP24, /* D1 shifts & rotates,1 (word) */
  1012. dszMULTI, O_GROUP25, /* D2 shifts & rotates,CL (byte) */
  1013. dszMULTI, O_GROUP26, /* D3 shifts & rotates,CL (word) */
  1014. dszAAM, O_Ib, /* D4 AAM */
  1015. dszAAD, O_Ib, /* D5 AAD */
  1016. dszRESERVED, O_DoDB, /* D6 */
  1017. dszXLAT, O_NoOperands, /* D7 XLAT */
  1018. dszMULTI, O_x87_ESC, /* D8 ESC */
  1019. dszMULTI, O_x87_ESC, /* D9 ESC */
  1020. dszMULTI, O_x87_ESC, /* DA ESC */
  1021. dszMULTI, O_x87_ESC, /* DB ESC */
  1022. dszMULTI, O_x87_ESC, /* DC ESC */
  1023. dszMULTI, O_x87_ESC, /* DD ESC */
  1024. dszMULTI, O_x87_ESC, /* DE ESC */
  1025. dszMULTI, O_x87_ESC, /* DF ESC */
  1026. dszLOOPNE,O_Jcc8, /* E0 LOOPNE or LOOPNZ */
  1027. dszLOOPE, O_Jcc8, /* E1 LOOPE or LOOPZ */
  1028. dszLOOP, O_Jcc8, /* E2 LOOP */
  1029. dszJCXZ, O_Jcc8, /* E3 JCXZ / JECXZ (386) */
  1030. dszIN, O_AL_Ubyte, /* E4 IN AL, I */
  1031. dszIN, O_AX_Ubyte, /* E5 IN AX, I */
  1032. dszOUT, O_Ubyte_AL, /* E6 OUT I, AL */
  1033. dszOUT, O_Ubyte_AX, /* E7 OUT I, AX */
  1034. dszCALL, O_Rel16, /* E8 CALL Rel16 */
  1035. dszJMP, O_Rel16, /* E9 JMP Rel16 */
  1036. dszJMP, O_FarPtr, /* EA JMP seg:off */
  1037. dszJMP, O_Rel8, /* EB JMP Rel8 */
  1038. dszIN, O_DoInAL, /* EC IN AL, DX */
  1039. dszIN, O_DoInAX, /* ED IN AX, DX */
  1040. dszOUT, O_DoOutAL, /* EE OUT DX, AL */
  1041. dszOUT, O_DoOutAX, /* EF OUT DX, AX */
  1042. dszLOCK, O_DoRep, /* F0 LOCK */
  1043. dszRESERVED, O_DoDB, /* F1 */
  1044. dszREPNE, O_DoRep, /* F2 REPNE or REPNZ */
  1045. dszREP, O_DoRep, /* F3 REP or REPE or REPZ */
  1046. dszHLT, O_NoOperands, /* F4 HLT */
  1047. dszCMC, O_NoOperands, /* F5 CMC */
  1048. dszMULTI, O_GROUP31, /* F6 TEST, NOT, NEG, MUL, IMUL, */
  1049. dszMULTI, O_GROUP32, /* F7 DIv, IDIv F6=Byte F7=Word */
  1050. dszCLC, O_NoOperands, /* F8 CLC */
  1051. dszSTC, O_NoOperands, /* F9 STC */
  1052. dszCLI, O_NoOperands, /* FA CLI */
  1053. dszSTI, O_NoOperands, /* FB STI */
  1054. dszCLD, O_NoOperands, /* FC CLD */
  1055. dszSTD, O_NoOperands, /* FD STD */
  1056. dszMULTI, O_GROUP4, /* FE INC, DEC mem/reg (byte) */
  1057. dszMULTI, O_GROUP5, /* FF INC, DEC, CALL, JMP, PUSH */
  1058. // Secondary opcode table begins.
  1059. dszMULTI, O_GROUP6, /* 00 MULTI */
  1060. dszMULTI, O_GROUP7, /* 01 MULTI */
  1061. dszLAR, O_Reg_Modrm, /* 02 LAR */
  1062. dszLSL, O_Reg_Modrm, /* 03 LSL */
  1063. dszRESERVED, O_DoDB, /* 04 */
  1064. dszSYSCALL, O_NoOperands, /* 05 SYSCALL */
  1065. dszCLTS, O_NoOperands, /* 06 CLTS */
  1066. dszSYSRET, O_NoOperands, /* 07 SYSRET */
  1067. dszINVD, O_NoOperands, /* 08 INVD */
  1068. dszWBINVD, O_NoOperands, /* 09 WBINVD */
  1069. dszRESERVED, O_DoDB, /* 0A */
  1070. dszUD2, O_NoOperands, /* 0B UD2 undefined */
  1071. dszRESERVED, O_DoDB, /* 0C */
  1072. dszMULTI, O_GROUP_0F_0D, /* 0D PREFETCH[W] */
  1073. dszFEMMS, O_NoOperands, /* 0E FEMMS */
  1074. dszRESERVED, O_MmReg_qModrm_3DNow, /* 0F AMD 3DNow family */
  1075. dszMOVUPSSDX,O_Sd_XmmReg_oModrm, /* 10 MOVS[SD]X MOVUP[SD] reg, mem*/
  1076. dszMOVUPSSDX,O_Sd_oModrm_XmmReg, /* 11 MOVS[SD]X MOVUP[SD] mem, reg*/
  1077. dszMOVLPSD, O_Sd_XmmReg_oModrm, /* 12 MOVLP[SD] xmm, m64 */
  1078. dszMOVLPSD, O_Sd_oModrm_XmmReg, /* 13 MOVLP[SD] m64, xmm */
  1079. dszUNPCKLPSD,O_Sd_XmmReg_oModrm, /* 14 UNPCKLP[SD] */
  1080. dszUNPCKHPSD,O_Sd_XmmReg_oModrm, /* 15 UNPCKHP[SD] */
  1081. dszMOVHPSD, O_Sd_XmmReg_oModrm, /* 16 MOVHP[SD] xmm, m64 */
  1082. dszMOVHPSD, O_Sd_oModrm_XmmReg, /* 17 MOVHP[SD] m64, xmm */
  1083. dszMULTI, O_GROUP_0F_18, /* 18 MULTI */
  1084. dszRESERVED, O_DoDB, /* 19 */
  1085. dszRESERVED, O_DoDB, /* 1A */
  1086. dszRESERVED, O_DoDB, /* 1B */
  1087. dszRESERVED, O_DoDB, /* 1C */
  1088. dszRESERVED, O_DoDB, /* 1D */
  1089. dszRESERVED, O_DoDB, /* 1E */
  1090. dszRESERVED, O_DoDB, /* 1F */
  1091. dszMOV, O_Modrm_CReg, /* 20 MOV Rd,Cd */
  1092. dszMOV, O_Modrm_CReg, /* 21 MOV Rd,Dd */
  1093. dszMOV, O_CReg_Modrm, /* 22 MOV Cd,Rd */
  1094. dszMOV, O_CReg_Modrm, /* 23 MOV Dd,Rd */
  1095. dszMOV, O_Modrm_CReg, /* 24 MOV Rd,Td */
  1096. dszRESERVED, O_DoDB, /* 25 */
  1097. dszMOV, O_CReg_Modrm, /* 26 MOV Td,Rd */
  1098. dszRESERVED, O_DoDB, /* 27 */
  1099. dszMOVAPSD, O_Sd_XmmReg_oModrm, /* 28 MOVAP[SD] xmm1, xmm2/m128 */
  1100. dszMOVAPSD, O_Sd_oModrm_XmmReg, /* 29 MOVAP[SD] xmm2/m128, xmm1 */
  1101. dszCVTSPI2SPSD, O_Sd_XmmReg_qModrm, /* 2A CVT[SP]I2[SP][SD] */
  1102. dszMOVNTPSD, O_Sd_oModrm_XmmReg, /* 2B MOVNTP[SD] */
  1103. dszCVTTSPSD2SPI, O_Sd_MmOrWReg_oModrm, /* 2C CVTT[SP][SD]2[SP]I */
  1104. dszCVTSPSD2SPI, O_Sd_MmOrWReg_oModrm, /* 2D CVT[SP][SD]2[SP]I */
  1105. dszUCOMISSD, O_Sd_XmmReg_xModrm, /* 2E UCOMIS[SD] */
  1106. dszCOMISSD, O_Sd_XmmReg_xModrm, /* 2F COMIS[SD] */
  1107. dszWRMSR, O_NoOperands, /* 30 WRMSR */
  1108. dszRDTSC, O_NoOperands, /* 31 RDTSC */
  1109. dszRDMSR, O_NoOperands, /* 32 RDMSR */
  1110. dszRDPMC, O_NoOperands, /* 33 RDPMC */
  1111. dszSYSENTER, O_NoOperands, /* 34 SYSENTER */
  1112. dszSYSEXIT, O_NoOperands, /* 35 SYSEXIT */
  1113. dszRESERVED, O_DoDB, /* 36 */
  1114. dszRESERVED, O_DoDB, /* 37 */
  1115. dszRESERVED, O_DoDB, /* 38 */
  1116. dszRESERVED, O_DoDB, /* 39 */
  1117. dszRESERVED, O_DoDB, /* 3A */
  1118. dszRESERVED, O_DoDB, /* 3B */
  1119. dszRESERVED, O_DoDB, /* 3C */
  1120. dszRESERVED, O_DoDB, /* 3D */
  1121. dszRESERVED, O_DoDB, /* 3E */
  1122. dszRESERVED, O_DoDB, /* 3F */
  1123. dszCMOVO, O_Reg_Modrm, /* 40 CMOVO */
  1124. dszCMOVNO, O_Reg_Modrm, /* 41 CMOVNO */
  1125. dszCMOVB, O_Reg_Modrm, /* 42 CMOVB */
  1126. dszCMOVNB, O_Reg_Modrm, /* 43 CMOVNB */
  1127. dszCMOVE, O_Reg_Modrm, /* 44 CMOVE */
  1128. dszCMOVNE, O_Reg_Modrm, /* 45 CMOVNE */
  1129. dszCMOVBE, O_Reg_Modrm, /* 46 CMOVBE */
  1130. dszCMOVA, O_Reg_Modrm, /* 47 CMOVNBE */
  1131. dszCMOVS, O_Reg_Modrm, /* 48 CMOVS */
  1132. dszCMOVNS, O_Reg_Modrm, /* 49 CMOVNS */
  1133. dszCMOVP, O_Reg_Modrm, /* 4A CMOVP */
  1134. dszCMOVNP, O_Reg_Modrm, /* 4B CMOVNP */
  1135. dszCMOVL, O_Reg_Modrm, /* 4C CMOVL */
  1136. dszCMOVGE, O_Reg_Modrm, /* 4D CMOVGE */
  1137. dszCMOVLE, O_Reg_Modrm, /* 4E CMOVLE */
  1138. dszCMOVNLE, O_Reg_Modrm, /* 4F CMOVNLE */
  1139. dszMOVMSKPSD,O_Sd_Reg_XmmReg, /* 50 MOVMSKP[SD] */
  1140. dszSQRTSPSD, O_Sd_XmmReg_oModrm, /* 51 SQRT[SP][SD] */
  1141. dszRSQRTSPSD,O_Sd_XmmReg_oModrm, /* 52 RSQRT[SP][SD] */
  1142. dszRCPSPSD, O_Sd_XmmReg_oModrm, /* 53 RCP[SP][SD] */
  1143. dszANDPSD, O_Sd_XmmReg_oModrm, /* 54 ANDP[SD] */
  1144. dszANDNPSD, O_Sd_XmmReg_oModrm, /* 55 ANDNP[SD] */
  1145. dszORPSD, O_Sd_XmmReg_oModrm, /* 56 ORP[SD] */
  1146. dszXORPSD, O_Sd_XmmReg_oModrm, /* 57 XORP[SD] */
  1147. dszADDSPSD, O_Sd_XmmReg_oModrm, /* 58 ADD[SP][SD] */
  1148. dszMULSPSD, O_Sd_XmmReg_oModrm, /* 59 MUL[SP][SD] */
  1149. dszCVTSPSD2SPSD, O_Sd_XmmReg_oModrm,/* 5A CVT[SP][SD]2[SP][SD] */
  1150. dszCVTBASE, O_Sd_XmmReg_oModrm, /* 5B CVT<PS> family */
  1151. dszSUBSPSD, O_Sd_XmmReg_oModrm, /* 5C SUB[SP][SD] */
  1152. dszMINSPSD, O_Sd_XmmReg_oModrm, /* 5D MIN[SP][SD] */
  1153. dszDIVSPSD, O_Sd_XmmReg_oModrm, /* 5E DIV[SP][SD] */
  1154. dszMAXSPSD, O_Sd_XmmReg_oModrm, /* 5F MAX[SP][SD] */
  1155. dszPUNPCKLBW,O_MmReg_qModrm, /* 60 PUNPCKLBW */
  1156. dszPUNPCKLWD,O_MmReg_qModrm, /* 61 PUNPCKLWD */
  1157. dszPUNPCKLDQ,O_MmReg_qModrm, /* 62 PUNPCKLDQ */
  1158. dszPACKSSWB, O_MmReg_qModrm, /* 63 PACKSSWB */
  1159. dszPCMPGTB, O_MmReg_qModrm, /* 64 PCMPGTB */
  1160. dszPCMPGTW, O_MmReg_qModrm, /* 65 PCMPGTW */
  1161. dszPCMPGTD, O_MmReg_qModrm, /* 66 PCMPGTD */
  1162. dszPACKUSWB, O_MmReg_qModrm, /* 67 PACKUSWB */
  1163. dszPUNPCKHBW,O_MmReg_qModrm, /* 68 PUNPCKHBW */
  1164. dszPUNPCKHWD,O_MmReg_qModrm, /* 69 PUNPCKHWD */
  1165. dszPUNPCKHDQ,O_MmReg_qModrm, /* 6A PUNPCKHDQ */
  1166. dszPACKSSDW, O_MmReg_qModrm, /* 6B PACKSSDW */
  1167. dszRESERVED, O_DoDB, /* 6C */
  1168. dszRESERVED, O_DoDB, /* 6D */
  1169. dszMOVD, O_MmReg_dModrm, /* 6E MOVD */
  1170. dszMOVQ, O_MmReg_qModrm, /* 6F MOVQ */
  1171. dszPSHUF, O_Sd_XmmReg_oModrm_Ib, /* 70 PSHUF family */
  1172. dszMULTI, O_PSHimw, /* 71 PS[LR][AL]W immediate */
  1173. dszMULTI, O_PSHimd, /* 72 PS[LR][AL]D immediate */
  1174. dszMULTI, O_PSHimq, /* 73 PS[LR]LQ immediate */
  1175. dszPCMPEQB, O_MmReg_qModrm, /* 74 PCMPEQB */
  1176. dszPCMPEQW, O_MmReg_qModrm, /* 75 PCMPEQW */
  1177. dszPCMPEQD, O_MmReg_qModrm, /* 76 PCMPEQD */
  1178. dszEMMS, O_NoOperands, /* 77 EMMS */
  1179. dszRESERVED, O_DoDB, /* 78 */
  1180. dszRESERVED, O_DoDB, /* 79 */
  1181. dszRESERVED, O_DoDB, /* 7A */
  1182. dszRESERVED, O_DoDB, /* 7B */
  1183. dszRESERVED, O_DoDB, /* 7C */
  1184. dszSETNL, O_bModrm, /* 7D SETNL */
  1185. dszMOVD, O_dModrm_MmReg, /* 7E MOVD */
  1186. dszMOVQ, O_qModrm_MmReg, /* 7F MOVQ */
  1187. dszJO, O_JccX, /* 80 JO */
  1188. dszJNO, O_JccX, /* 81 JNO */
  1189. dszJB, O_JccX, /* 82 JB */
  1190. dszJNB, O_JccX, /* 83 JNB */
  1191. dszJE, O_JccX, /* 84 JE */
  1192. dszJNE, O_JccX, /* 85 JNE */
  1193. dszJBE, O_JccX, /* 86 JBE */
  1194. dszJNBE, O_JccX, /* 87 JNBE */
  1195. dszJS, O_JccX, /* 88 JS */
  1196. dszJNS, O_JccX, /* 89 JNS */
  1197. dszJP, O_JccX, /* 8A JP */
  1198. dszJNP, O_JccX, /* 8B JNP */
  1199. dszJL, O_JccX, /* 8C JL */
  1200. dszJNL, O_JccX, /* 8D JNL */
  1201. dszJLE, O_JccX, /* 8E JLE */
  1202. dszJNLE, O_JccX, /* 8F JNLE */
  1203. dszSETO, O_bModrm, /* 90 SETO */
  1204. dszSETNO, O_bModrm, /* 91 SETNO */
  1205. dszSETB, O_bModrm, /* 92 SETB */
  1206. dszSETNB, O_bModrm, /* 93 SETNB */
  1207. dszSETE, O_bModrm, /* 94 SETE */
  1208. dszSETNE, O_bModrm, /* 95 SETNE */
  1209. dszSETBE, O_bModrm, /* 96 SETBE */
  1210. dszSETA, O_bModrm, /* 97 SETNBE */
  1211. dszSETS, O_bModrm, /* 98 SETS */
  1212. dszSETNS, O_bModrm, /* 99 SETNS */
  1213. dszSETP, O_bModrm, /* 9A SETP */
  1214. dszSETNP, O_bModrm, /* 9B SETNP */
  1215. dszSETL, O_bModrm, /* 9C SETL */
  1216. dszSETGE, O_bModrm, /* 9D SETGE */
  1217. dszSETLE, O_bModrm, /* 9E SETLE */
  1218. dszSETNLE, O_bModrm, /* 9F SETNLE */
  1219. dszPUSH, O_sReg2, /* A0 PUSH FS */
  1220. dszPOP, O_sReg2, /* A1 POP FS */
  1221. dszCPUID, O_NoOperands, /* A2 CPUID */
  1222. dszBT, O_Modrm_Reg, /* A3 BT */
  1223. dszSHLD, O_Modrm_Reg_Ib, /* A4 SHLD */
  1224. dszSHLD, O_Modrm_Reg_CL, /* A5 SHLD */
  1225. dszRESERVED, O_DoDB, /* A6 */
  1226. dszRESERVED, O_DoDB, /* A7 */
  1227. dszPUSH, O_sReg2, /* A8 PUSH GS */
  1228. dszPOP, O_sReg2, /* A9 POP GS */
  1229. dszRSM, O_NoOperands, /* AA RSM */
  1230. dszBTS, O_vModrm_Reg, /* AB BTS */
  1231. dszSHRD, O_Modrm_Reg_Ib, /* AC SHRD */
  1232. dszSHRD, O_Modrm_Reg_CL, /* AD SHRD */
  1233. dszMULTI, O_GROUP_0F_AE, /* AE MULTI */
  1234. dszIMUL, O_Reg_Modrm, /* AF IMUL */
  1235. dszCMPXCHG, O_bModrm_Reg, /* B0 CMPXCH */
  1236. dszCMPXCHG, O_Modrm_Reg, /* B1 CMPXCH */
  1237. dszLSS, O_fReg_Modrm, /* B2 LSS */
  1238. dszBTR, O_Modrm_Reg, /* B3 BTR */
  1239. dszLFS, O_fReg_Modrm, /* B4 LFS */
  1240. dszLGS, O_fReg_Modrm, /* B5 LGS */
  1241. dszMOVZX, O_Reg_bModrm, /* B6 MOVZX */
  1242. dszMOVZX, O_Reg_wModrm, /* B7 MOVZX */
  1243. dszRESERVED, O_DoDB, /* B8 */
  1244. dszRESERVED, O_DoDB, /* B9 */
  1245. dszMULTI, O_GROUP8, /* BA MULTI */
  1246. dszBTC, O_Modrm_Reg, /* BB BTC */
  1247. dszBSF, O_Reg_Modrm, /* BC BSF */
  1248. dszBSR, O_Reg_Modrm, /* BD BSR */
  1249. dszMOVSX, O_Reg_bModrm, /* BE MOVSX */
  1250. dszMOVSX, O_Reg_wModrm, /* BF MOVSX */
  1251. dszXADD, O_bModrm_Reg, /* C0 XADD */
  1252. dszXADD, O_Modrm_Reg, /* C1 XADD */
  1253. dszCMPSPSD, O_Sd_XmmReg_oModrm_CmpIb, /* C2 CMP[SP][SD] */
  1254. dszMOVNTI, O_Modrm_Reg, /* C3 MOVNTI */
  1255. dszPINSRW, O_MmReg_dModrm_Ib, /* C4 PINSRW */
  1256. dszPEXTRW, O_Reg_MmReg_Ib, /* C5 PEXTRW */
  1257. dszSHUFPSD, O_Sd_XmmReg_oModrm_Ib, /* C6 SHUFP[SD] */
  1258. dszCMPXCHG8B,O_qModrm, /* C7 CMPXCHG8B */
  1259. dszBSWAP, O_oReg, /* C8 BSWAP */
  1260. dszBSWAP, O_oReg, /* C9 BSWAP */
  1261. dszBSWAP, O_oReg, /* CA BSWAP */
  1262. dszBSWAP, O_oReg, /* CB BSWAP */
  1263. dszBSWAP, O_oReg, /* CC BSWAP */
  1264. dszBSWAP, O_oReg, /* CD BSWAP */
  1265. dszBSWAP, O_oReg, /* CE BSWAP */
  1266. dszBSWAP, O_oReg, /* CF BSWAP */
  1267. dszRESERVED, O_DoDB, /* D0 */
  1268. dszPSRLW, O_MmReg_qModrm, /* D1 PSRLW */
  1269. dszPSRLD, O_MmReg_qModrm, /* D2 PSRLD */
  1270. dszPSRLQ, O_MmReg_qModrm, /* D3 PSRLQ */
  1271. dszPADDQ, O_MmReg_qModrm, /* D4 PADDQ */
  1272. dszPMULLW, O_MmReg_qModrm, /* D5 PMULLW */
  1273. dszMOVBASE, O_Sd_oModrm_XmmReg, /* D6 MOVDQ2Q, MOVQ, MOVQ2DQ */
  1274. dszPMOVMSKB, O_Reg_MmReg, /* D7 PMOVMSKB */
  1275. dszPSUBUSB, O_MmReg_qModrm, /* D8 PSUBUSB */
  1276. dszPSUBUSW, O_MmReg_qModrm, /* D9 PSUBUSW */
  1277. dszPMINUB, O_MmReg_qModrm, /* DA PMINUB */
  1278. dszPAND, O_MmReg_qModrm, /* DB PAND */
  1279. dszPADDUSB, O_MmReg_qModrm, /* DC PADDUSB */
  1280. dszPADDUSW, O_MmReg_qModrm, /* DD PADDUSW */
  1281. dszPMAXUB, O_MmReg_qModrm, /* DE PMAXUB */
  1282. dszPANDN, O_MmReg_qModrm, /* DF PANDN */
  1283. dszPAVGB, O_MmReg_qModrm, /* E0 PAVGB */
  1284. dszPSRAW, O_MmReg_qModrm, /* E1 PSRAW */
  1285. dszPSRAD, O_MmReg_qModrm, /* E2 PSRAD */
  1286. dszPAVGW, O_MmReg_qModrm, /* E3 PAVGW */
  1287. dszPMULHUW, O_MmReg_qModrm, /* E4 PMULHUW */
  1288. dszPMULHW, O_MmReg_qModrm, /* E5 PMULHW */
  1289. dszCVTBASE, O_Sd_XmmReg_oModrm, /* E6 CVT<PD> family */
  1290. dszMOVNTDQ, O_Sd_xModrm_XOrMmReg, /* E7 MOVNT{Q}{DQ} */
  1291. dszPSUBSB, O_MmReg_qModrm, /* E8 PSUBSB */
  1292. dszPSUBSW, O_MmReg_qModrm, /* E9 PSUBSW */
  1293. dszPMINSW, O_MmReg_qModrm, /* EA PMINSW */
  1294. dszPOR, O_MmReg_qModrm, /* EB POR */
  1295. dszPADDSB, O_MmReg_qModrm, /* EC PADDSB */
  1296. dszPADDSW, O_MmReg_qModrm, /* ED PADDSW */
  1297. dszPMAXSW, O_MmReg_qModrm, /* EE PMAXSW */
  1298. dszPXOR, O_MmReg_qModrm, /* EF PXOR */
  1299. dszRESERVED, O_DoDB, /* F0 */
  1300. dszPSLLW, O_MmReg_qModrm, /* F1 PSLLW */
  1301. dszPSLLD, O_MmReg_qModrm, /* F2 PSLLD */
  1302. dszPSLLQ, O_MmReg_qModrm, /* F3 PSLLQ */
  1303. dszPMULUDQ, O_MmReg_qModrm, /* F4 PMULUDQ */
  1304. dszPMADDWD, O_MmReg_qModrm, /* F5 PMADDWD */
  1305. dszPSADBW, O_MmReg_qModrm, /* F6 PSADBQ */
  1306. dszMASKMOVDQU, O_Sd_XOrMmReg_XOrMmReg, /* F7 MASKMOV{Q}{DQU} */
  1307. dszPSUBB, O_MmReg_qModrm, /* F8 PSUBB */
  1308. dszPSUBW, O_MmReg_qModrm, /* F9 PSUBW */
  1309. dszPSUBD, O_MmReg_qModrm, /* FA PSUBD */
  1310. dszPSUBQ, O_MmReg_qModrm, /* FB PSUBQ */
  1311. dszPADDB, O_MmReg_qModrm, /* FC PADDB */
  1312. dszPADDW, O_MmReg_qModrm, /* FD PADDW */
  1313. dszPADDD, O_MmReg_qModrm, /* FE PADDD */
  1314. dszRESERVED, O_DoDB, /* FF */
  1315. };
  1316. /* Auxilary lists of mnemonics for groups of two byte instructions: */
  1317. /* All of the instructions within each of these groups are of the same */
  1318. /* class, so only the mnemonic string is needed, the index into the */
  1319. /* action table is implicit. */
  1320. static char *group[][8] = {
  1321. /* 00 */ {dszADD, dszOR, dszADC, dszSBB, /* group 1 */
  1322. dszAND, dszSUB, dszXOR, dszCMP},
  1323. /* 01 */ {dszROL, dszROR, dszRCL, dszRCR, /* group 2 */
  1324. dszSHL, dszSHR, dszSHL, dszSAR},
  1325. /* 02 */ {dszINC, dszDEC, dszRESERVED, dszRESERVED, /* group 4 */
  1326. dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED},
  1327. /* 03 */ {dszSLDT, dszSTR, dszLLDT, dszLTR, /* group 6 */
  1328. dszVERR, dszVERW, dszRESERVED, dszRESERVED},
  1329. /* 04 */ {dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED, /* group 8 */
  1330. dszBT, dszBTS, dszBTR, dszBTC},
  1331. /* 05 */ {dszRESERVED, dszRESERVED, dszPSRLW, dszRESERVED, /* PSHimw */
  1332. dszPSRAW, dszRESERVED, dszPSLLW, dszRESERVED},
  1333. /* 06 */ {dszRESERVED, dszRESERVED, dszPSRLD, dszRESERVED, /* PSHimd */
  1334. dszPSRAD, dszRESERVED, dszPSLLD, dszRESERVED},
  1335. /* 07 */ {dszRESERVED, dszRESERVED, dszPSRLQ, dszPSRLDQ, /* PSHimq */
  1336. dszRESERVED, dszRESERVED, dszPSLLQ, dszPSLLDQ},
  1337. /* 08 */ {dszPREFETCH, dszPREFETCHW, dszPREFETCH, dszPREFETCH,/* PREFETCH */
  1338. dszPREFETCH, dszPREFETCH, dszPREFETCH, dszPREFETCH},
  1339. };
  1340. /* Auxilary orderd pairs for groups of two byte instructions structured */
  1341. /* the same was as distbl above. */
  1342. static Tdistbl groupt[][8] = {
  1343. /* 00 00 x87-D8-1 */
  1344. { dszFADD, O_dModrm, /* D8-0 FADD */
  1345. dszFMUL, O_dModrm, /* D8-1 FMUL */
  1346. dszFCOM, O_dModrm, /* D8-2 FCOM */
  1347. dszFCOMP, O_dModrm, /* D8-3 FCOMP */
  1348. dszFSUB, O_dModrm, /* D8-4 FSUB */
  1349. dszFSUBR, O_dModrm, /* D8-5 FSUBR */
  1350. dszFDIV, O_dModrm, /* D8-6 FDIV */
  1351. dszFDIVR, O_dModrm }, /* D8-7 FDIVR */
  1352. /* 01 x87-D8-2 */
  1353. { dszFADD, O_ST_iST, /* D8-0 FADD */
  1354. dszFMUL, O_ST_iST, /* D8-1 FMUL */
  1355. dszFCOM, O_iST, /* D8-2 FCOM */
  1356. dszFCOMP, O_iST, /* D8-3 FCOMP */
  1357. dszFSUB, O_ST_iST, /* D8-4 FSUB */
  1358. dszFSUBR, O_ST_iST, /* D8-5 FSUBR */
  1359. dszFDIV, O_ST_iST, /* D8-6 FDIV */
  1360. dszFDIVR, O_ST_iST }, /* D8-7 FDIVR */
  1361. /* 02 01 x87-D9-1 */
  1362. { dszFLD, O_dModrm, /* D9-0 FLD */
  1363. dszRESERVED, O_DoDB, /* D9-1 */
  1364. dszFST, O_dModrm, /* D9-2 FST */
  1365. dszFSTP, O_dModrm, /* D9-3 FSTP */
  1366. dszFLDENV, O_Modrm, /* D9-4 FLDENV */
  1367. dszFLDCW, O_Modrm, /* D9-5 FLDCW */
  1368. dszFSTENV, O_Modrm, /* D9-6 FSTENV */
  1369. dszFSTCW, O_Modrm }, /* D9-7 FSTCW */
  1370. /* 03 01 x87-D9-2 TTT=0,1,2,3 */
  1371. { dszFLD, O_iST, /* D9-0 FLD */
  1372. dszFXCH, O_iST, /* D9-1 FXCH */
  1373. dszFNOP, O_NoOperands, /* D9-2 FNOP */
  1374. dszFSTP, O_iST, /* D9-3 FSTP */
  1375. dszRESERVED, O_DoDB, /* D9-4 */
  1376. dszRESERVED, O_DoDB, /* D9-5 */
  1377. dszRESERVED, O_DoDB, /* D9-6 */
  1378. dszRESERVED, O_DoDB }, /* D9-7 */
  1379. /* 04 02 x89-DA-1 */
  1380. { dszFIADD, O_dModrm, /* DA-0 FIADD */
  1381. dszFIMUL, O_dModrm, /* DA-1 FIMUL */
  1382. dszFICOM, O_dModrm, /* DA-2 FICOM */
  1383. dszFICOMP, O_dModrm, /* DA-3 FICOMP */
  1384. dszFISUB, O_dModrm, /* DA-4 FISUB */
  1385. dszFISUBR, O_dModrm, /* DA-5 FISUBR */
  1386. dszFIDIV, O_dModrm, /* DA-6 FIDIV */
  1387. dszFIDIVR, O_dModrm }, /* DA-7 FIDIVR */
  1388. /* 05 x87-DA-2 */
  1389. { dszFCMOVB, O_ST_iST, /* DA-0 FCMOVB */
  1390. dszFCMOVE, O_ST_iST, /* DA-1 FCMOVE */
  1391. dszFCMOVBE, O_ST_iST, /* DA-2 FCMOVBE */
  1392. dszFCMOVU, O_ST_iST, /* DA-3 FCMOVU */
  1393. dszRESERVED, O_DoDB, /* DA-4 */
  1394. dszFUCOMPP, O_NoOperands, /* DA-5 */
  1395. dszRESERVED, O_DoDB, /* DA-6 */
  1396. dszRESERVED, O_DoDB }, /* DA-7 */
  1397. /* 06 03 x87-DB-1 */
  1398. { dszFILD, O_dModrm, /* DB-0 FILD */
  1399. dszRESERVED, O_DoDB, /* DB-1 */
  1400. dszFIST, O_dModrm, /* DB-2 FIST */
  1401. dszFISTP, O_dModrm, /* DB-3 FISTP */
  1402. dszRESERVED, O_DoDB, /* DB-4 */
  1403. dszFLD, O_tModrm, /* DB-5 FLD */
  1404. dszRESERVED, O_DoDB, /* DB-6 */
  1405. dszFSTP, O_tModrm }, /* DB-7 FSTP */
  1406. /* 07 x87-DB-2 ttt=4 */
  1407. { dszFENI, O_NoOperands, /* DB-0 FENI */
  1408. dszFDISI, O_NoOperands, /* DB-1 FDISI */
  1409. dszFCLEX, O_NoOperands, /* DB-2 FCLEX */
  1410. dszFINIT, O_NoOperands, /* DB-3 FINIT */
  1411. dszFSETPM, O_DoDB, /* DB-4 FSETPM */
  1412. dszRESERVED, O_DoDB, /* DB-5 */
  1413. dszRESERVED, O_DoDB, /* DB-6 */
  1414. dszRESERVED, O_DoDB }, /* DB-7 */
  1415. /* 08 04 x87-DC-1 */
  1416. { dszFADD, O_qModrm, /* DC-0 FADD */
  1417. dszFMUL, O_qModrm, /* DC-1 FMUL */
  1418. dszFCOM, O_qModrm, /* DC-2 FCOM */
  1419. dszFCOMP, O_qModrm, /* DC-3 FCOMP */
  1420. dszFSUB, O_qModrm, /* DC-4 FSUB */
  1421. dszFSUBR, O_qModrm, /* DC-5 FSUBR */
  1422. dszFDIV, O_qModrm, /* DC-6 FDIV */
  1423. dszFDIVR, O_qModrm }, /* DC-7 FDIVR */
  1424. /* 09 x87-DC-2 */
  1425. { dszFADD, O_iST_ST, /* DC-0 FADD */
  1426. dszFMUL, O_iST_ST, /* DC-1 FMUL */
  1427. dszFCOM, O_iST, /* DC-2 FCOM */
  1428. dszFCOMP, O_iST, /* DC-3 FCOMP */
  1429. dszFSUB, O_iST_ST, /* DC-4 FSUB */
  1430. dszFSUBR, O_iST_ST, /* DC-5 FSUBR */
  1431. dszFDIV, O_iST_ST, /* DC-6 FDIVR */
  1432. dszFDIVR, O_iST_ST }, /* DC-7 FDIV */
  1433. /* 10 05 x87-DD-1 */
  1434. { dszFLD, O_qModrm, /* DD-0 FLD */
  1435. dszRESERVED, O_DoDB, /* DD-1 */
  1436. dszFST, O_qModrm, /* DD-2 FST */
  1437. dszFSTP, O_qModrm, /* DD-3 FSTP */
  1438. dszFRSTOR, O_Modrm, /* DD-4 FRSTOR */
  1439. dszRESERVED, O_DoDB, /* DD-5 */
  1440. dszFSAVE, O_Modrm, /* DD-6 FSAVE */
  1441. dszFSTSW, O_Modrm }, /* DD-7 FSTSW */
  1442. /* 11 x87-DD-2 */
  1443. { dszFFREE, O_iST, /* DD-0 FFREE */
  1444. dszFXCH, O_iST, /* DD-1 FXCH */
  1445. dszFST, O_iST, /* DD-2 FST */
  1446. dszFSTP, O_iST, /* DD-3 FSTP */
  1447. dszFUCOM, O_iST, /* DD-4 FUCOM */
  1448. dszFUCOMP, O_iST, /* DD-5 FUCOMP */
  1449. dszRESERVED, O_DoDB, /* DD-6 */
  1450. dszRESERVED, O_DoDB }, /* DD-7 */
  1451. /* 12 06 x87-DE-1 */
  1452. { dszFIADD, O_wModrm, /* DE-0 FIADD */
  1453. dszFIMUL, O_wModrm, /* DE-1 FIMUL */
  1454. dszFICOM, O_wModrm, /* DE-2 FICOM */
  1455. dszFICOMP, O_wModrm, /* DE-3 FICOMP */
  1456. dszFISUB, O_wModrm, /* DE-4 FISUB */
  1457. dszFISUBR, O_wModrm, /* DE-5 FISUBR */
  1458. dszFIDIV, O_wModrm, /* DE-6 FIDIV */
  1459. dszFIDIVR, O_wModrm }, /* DE-7 FIDIVR */
  1460. /* 13 x87-DE-2 */
  1461. { dszFADDP, O_iST_ST, /* DE-0 FADDP */
  1462. dszFMULP, O_iST_ST, /* DE-1 FMULP */
  1463. dszFCOMP, O_iST, /* DE-2 FCOMP */
  1464. dszFCOMPP, O_NoOperands, /* DE-3 FCOMPP */
  1465. dszFSUBP, O_iST_ST, /* DE-4 FSUBP */
  1466. dszFSUBRP, O_iST_ST, /* DE-5 FSUBRP */
  1467. dszFDIVP, O_iST_ST, /* DE-6 FDIVP */
  1468. dszFDIVRP, O_iST_ST }, /* DE-7 FDIVRP */
  1469. /* 14 07 x87-DF-1 */
  1470. { dszFILD, O_wModrm, /* DF-0 FILD */
  1471. dszRESERVED, O_DoDB, /* DF-1 */
  1472. dszFIST, O_wModrm, /* DF-2 FIST */
  1473. dszFISTP, O_wModrm, /* DF-3 FISTP */
  1474. dszFBLD, O_tModrm, /* DF-4 FBLD */
  1475. dszFILD, O_qModrm, /* DF-5 FILD */
  1476. dszFBSTP, O_tModrm, /* DF-6 FBSTP */
  1477. dszFISTP, O_qModrm }, /* DF-7 FISTP */
  1478. /* 15 x87-DF-2 */
  1479. { dszFFREE, O_iST, /* DF-0 FFREE */
  1480. dszFXCH, O_iST, /* DF-1 FXCH */
  1481. dszFST, O_iST, /* DF-2 FST */
  1482. dszFSTP, O_iST, /* DF-3 FSTP */
  1483. dszFSTSW, O_NoOperands, /* DF-4 FSTSW */
  1484. dszFUCOMIP, O_ST_iST, /* DF-5 FUCOMIP */
  1485. dszFCOMIP, O_ST_iST, /* DF-6 FCOMIP */
  1486. dszRESERVED, O_DoDB }, /* DF-7 */
  1487. /* 16 01 x87-D9 Mod=3 TTT=4 */
  1488. { dszFCHS, O_NoOperands, /* D9-0 FCHS */
  1489. dszFABS, O_NoOperands, /* D9-1 FABS */
  1490. dszRESERVED, O_DoDB, /* D9-2 */
  1491. dszRESERVED, O_DoDB, /* D9-3 */
  1492. dszFTST, O_NoOperands, /* D9-4 FTST */
  1493. dszFXAM, O_NoOperands, /* D9-5 FXAM */
  1494. dszRESERVED, O_DoDB, /* D9-6 */
  1495. dszRESERVED, O_DoDB }, /* D9-7 */
  1496. /* 17 01 x87-D9 Mod=3 TTT=5 */
  1497. { dszFLD1, O_NoOperands, /* D9-0 FLD1 */
  1498. dszFLDL2T, O_NoOperands, /* D9-1 FLDL2T */
  1499. dszFLDL2E, O_NoOperands, /* D9-2 FLDL2E */
  1500. dszFLDPI, O_NoOperands, /* D9-3 FLDPI */
  1501. dszFLDLG2, O_NoOperands, /* D9-4 FLDLG2 */
  1502. dszFLDLN2, O_NoOperands, /* D9-5 FLDLN2 */
  1503. dszFLDZ, O_NoOperands, /* D9-6 FLDZ */
  1504. dszRESERVED, O_DoDB }, /* D9-7 */
  1505. /* 18 01 x87-D9 Mod=3 TTT=6 */
  1506. { dszF2XM1, O_NoOperands, /* D9-0 F2XM1 */
  1507. dszFYL2X, O_NoOperands, /* D9-1 FYL2X */
  1508. dszFPTAN, O_NoOperands, /* D9-2 FPTAN */
  1509. dszFPATAN, O_NoOperands, /* D9-3 FPATAN */
  1510. dszFXTRACT, O_NoOperands, /* D9-4 FXTRACT */
  1511. dszFPREM1, O_NoOperands, /* D9-5 FPREM1 */
  1512. dszFDECSTP, O_NoOperands, /* D9-6 FDECSTP */
  1513. dszFINCSTP, O_NoOperands }, /* D9-7 FINCSTP */
  1514. /* 19 01 x87-D9 Mod=3 TTT=7 */
  1515. { dszFPREM, O_NoOperands, /* D9-0 FPREM */
  1516. dszFYL2XP1, O_NoOperands, /* D9-1 FYL2XP1 */
  1517. dszFSQRT, O_NoOperands, /* D9-2 FSQRT */
  1518. dszFSINCOS, O_NoOperands, /* D9-3 FSINCOS */
  1519. dszFRNDINT, O_NoOperands, /* D9-4 FRNDINT */
  1520. dszFSCALE, O_NoOperands, /* D9-5 FSCALE */
  1521. dszFSIN, O_NoOperands, /* D9-6 FSIN */
  1522. dszFCOS, O_NoOperands }, /* D9-7 FCOS */
  1523. /* 20 group 3 */
  1524. { dszTEST, O_bModrm_Ib, /* F6-0 TEST */
  1525. dszRESERVED, O_DoDB, /* F6-1 */
  1526. dszNOT, O_bModrm, /* F6-2 NOT */
  1527. dszNEG, O_bModrm, /* F6-3 NEG */
  1528. dszMUL, O_bModrm, /* F6-4 MUL */
  1529. dszIMUL, O_bModrm, /* F6-5 IMUL */
  1530. dszDIV, O_bModrm, /* F6-6 DIV */
  1531. dszIDIV, O_bModrm }, /* F6-7 IDIV */
  1532. /* 21 group 3 */
  1533. { dszTEST, O_vModrm_Iv, /* F7-0 TEST */
  1534. dszRESERVED, O_DoDB, /* F7-1 */
  1535. dszNOT, O_vModrm, /* F7-2 NOT */
  1536. dszNEG, O_vModrm, /* F7-3 NEG */
  1537. dszMUL, O_vModrm, /* F7-4 MUL */
  1538. dszIMUL, O_vModrm, /* F7-5 IMUL */
  1539. dszDIV, O_vModrm, /* F7-6 DIV */
  1540. dszIDIV, O_vModrm }, /* F7-7 IDIV */
  1541. /* 22 group 5 */
  1542. { dszINC, O_vModrm, /* FF-0 INC */
  1543. dszDEC, O_vModrm, /* FF-1 DEC */
  1544. dszCALL, O_vModrm, /* FF-2 CALL */
  1545. dszCALL, O_fModrm, /* FF-3 CALL */
  1546. dszJMP, O_vModrm, /* FF-4 JMP */
  1547. dszJMP, O_fModrm, /* FF-5 JMP */
  1548. dszPUSH, O_vModrm, /* FF-6 PUSH */
  1549. dszRESERVED, O_DoDB }, /* FF-7 */
  1550. /* 23 group 7 */
  1551. { dszSGDT, O_Modrm, /* 0F-0 SGDT */
  1552. dszSIDT, O_Modrm, /* 0F-1 SIDT */
  1553. dszLGDT, O_Modrm, /* 0F-2 LGDT */
  1554. dszLIDT, O_Modrm, /* 0F-3 LIDT */
  1555. dszSMSW, O_wModrm, /* 0F-4 MSW */
  1556. dszRESERVED, O_DoDB, /* 0F-5 */
  1557. dszLMSW, O_wModrm, /* 0F-6 LMSW */
  1558. dszINVLPG, O_Modrm }, /* 0F-7 INVLPG */
  1559. /* 24 x87-DB Mod=3 TTT != 4 */
  1560. { dszFCMOVNB, O_ST_iST, /* DB-0 FCMOVNB */
  1561. dszFCMOVNE, O_ST_iST, /* DB-1 FCMOVNE */
  1562. dszFCMOVNBE, O_ST_iST, /* DB-2 FCMOVNBE */
  1563. dszFCMOVNU, O_ST_iST, /* DB-3 FCMOVNU */
  1564. dszRESERVED, O_DoDB, /* DB-4 */
  1565. dszFUCOMI, O_ST_iST, /* DB-5 FUCOMI */
  1566. dszFCOMI, O_ST_iST, /* DB-6 FCOMI */
  1567. dszRESERVED, O_DoDB }, /* DB-7 */
  1568. /* 25 Group 0F AE */
  1569. { dszFXSAVE, O_bModrm, /* AE-0 FXSAVE */
  1570. dszFXRSTOR, O_bModrm, /* AE-1 FXRSTOR */
  1571. dszLDMXCSR, O_dModrm, /* AE-2 LDMXCSR */
  1572. dszSTMXCSR, O_dModrm, /* AE-3 STMXCSR */
  1573. dszCLFLUSH, O_bModrm, /* AE-4 CLFLUSH */
  1574. dszLFENCE, O_NoOperands, /* AE-5 LFENCE */
  1575. dszMFENCE, O_NoOperands, /* AE-6 MFENCE */
  1576. dszSFENCE, O_NoOperands }, /* AE-7 SFENCE */
  1577. /* 26 Group 0F 18 */
  1578. { dszPREFETCHNTA, O_bModrm, /* 18-0 PREFETCHNTA */
  1579. dszPREFETCHT0, O_bModrm, /* 18-1 PREFETCHT0 */
  1580. dszPREFETCHT1, O_bModrm, /* 18-2 PREFETCHT1 */
  1581. dszPREFETCHT2, O_bModrm, /* 18-3 PREFETCHT2 */
  1582. dszRESERVED, O_DoDB, /* 18-4 */
  1583. dszRESERVED, O_DoDB, /* 18-5 */
  1584. dszRESERVED, O_DoDB, /* 18-6 */
  1585. dszRESERVED, O_DoDB }, /* 18-7 */
  1586. };