Leaked source code of windows server 2003
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.

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