Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ;-----------------------------------------------------------------------------
  3. match =32,Bitness {
  4. rax     equ     eax
  5. rbx     equ     ebx
  6. rcx     equ     ecx
  7. rdx     equ     edx
  8. rsi     equ     esi
  9. rdi     equ     edi
  10. rbp     equ     ebp
  11. rsp     equ     esp
  12. r9      equ     [r9v]
  13. r15d    equ     [r5v]
  14. r15     equ     [r5v]
  15. r10     equ     [r1v]
  16. dq      equ     dd
  17. _8_     equ     4
  18. }
  19. ;-----------------------------------------------------------------------------
  20. match =64,Bitness {
  21. _8_     equ     8
  22. }
  23. ;-----------------------------------------------------------------------------
  24. macro   jrcxz   Dst
  25. {
  26. if %B=32
  27.         jecxz   Dst
  28. else
  29.         jrcxz   Dst
  30. end if
  31. }
  32. ;-----------------------------------------------------------------------------
  33. ; REX.W = 0 - CS.D, 1 - 64bit
  34. ; REX.R = ModR/M reg field (GPR, SSE, CRx, DRx)
  35. ; REX.X = SIB index field
  36. ; REX.B = ModR/M r/m field, SIB base field, opcode reg field
  37. ;-----------------------------------------------------------------------------
  38. ; In 64Bits
  39. ; REX.W = 1 & 66h -> 66h is ignored if not mandatory
  40. ;-----------------------------------------------------------------------------
  41. ; Prefixes VEX Opc3 ModRM SIB DISP IMM
  42. ;
  43. ;      REX & VEX -> #UD
  44. ;     LOCK & VEX -> #UD
  45. ; 66/F2/F3 & VEX -> #UD
  46. ;
  47. ; VEX3 - 0F / 0F 38 / 0F 3A
  48. ; 11000100 RXBmmmmm WvvvvLpp
  49. ;
  50. ; VEX2 - 0F
  51. ; 11000101 RvvvvLpp
  52. ;
  53. ; REX.R = !VEX.R
  54. ;VEX.R=0: Same as REX.R=1 (64-bit mode only)
  55. ;VEX.R=1: Same as REX.R=0 (must be 1 in 32-bit mode)
  56. ; REX.X = !VEX.X
  57. ;VEX.X=0: Same as REX.X=1 (64-bit mode only)
  58. ;VEX.X=1: Same as REX.X=0 (must be 1 in 32-bit mode
  59. ; REX.B = !VEX.B
  60. ;VEX.B=0: Same as REX.B=1 (64-bit mode only)
  61. ;VEX.B=1: Same as REX.B=0 (Ignored in 32-bit mode)
  62. ;
  63. ; REX.W = VEX.W, 4 operands
  64. ; In 32-bit VEX.W is silently ignored.
  65. ;
  66. ; mmmmm = 01b - 0F
  67. ;         10b - 0F 38
  68. ;         11b - 0F 3A
  69. ; vvvv  = register specifier / 1111 - unused
  70. ; L     = 0 - vector 128bit or scalar / 1 - 256bit vector
  71. ; pp    = opcode extension - 00b - None
  72. ;                            01b - 66
  73. ;                            10b - F3
  74. ;                            11b - F2
  75. ;
  76. ;NDS, NDD, DDS: specifies that VEX.vvvv field is valid for the encoding of a
  77. ;register operand:
  78. ; VEX.NDS: VEX.vvvv encodes the first source register in an instruction
  79. ;syntax where the content of source registers will be preserved.
  80. ; VEX.NDD: VEX.vvvv encodes the destination register that cannot be
  81. ;encoded by ModR/M:reg field.
  82. ; VEX.DDS: VEX.vvvv encodes the second source register in a three-
  83. ;operand instruction syntax where the content of first source register will
  84. ;be overwritten by the result.
  85. ; If none of NDS, NDD, and DDS is present, VEX.vvvv must be 1111b (i.e.
  86. ;VEX.vvvv does not encode an operand). The VEX.vvvv field can be
  87. ;encoded using either the 2-byte or 3-byte form of the VEX prefix.
  88. ; /is4: An 8-bit immediate byte is present containing a source register
  89. ;specifier in imm[7:4] and instruction-specific payload in imm[3:0].
  90. ; imz2: Part of the is4 immediate byte providing control functions that
  91. ;apply to two-source permute instructions
  92. ;-----------------------------------------------------------------------------
  93. ; EVEX 62h P0 P1 P2
  94. ;
  95. ;P0:     7 6  5 4  3  2 0 1
  96. ;        R X  B R' 0  0 m m      P[7:0]
  97. ;P1      7 6  5 4  3  2 0 1
  98. ;        W v  v v  v  1 p p      P[15:8]
  99. ;P2      7 6  5 4  3  2 0 1
  100. ;        z L' L b  V' a a a      P[23:16]
  101. ;EVEX.mm        Compressed legacy escape                P[1:0]          Identical to low two bits of VEX.mmmmm
  102. ;EVEX.pp        Compressed legacy prefix                P[9:8]          Identical to VEX.pp
  103. ;EVEX.RXB       Next-8 register specifier modifier      P[7:5]          Combine with ModR/M.reg, ModR/M.rm (base, index/vidx)
  104. ;EVEX.R'        High-16 register specifier modifier     P[4]            Combine with EVEX.R and ModR/M.reg
  105. ;EVEX.X         High-16 register specifier modifier     P[6]            Combine with EVEX.B and ModR/M.rm, when SIB/VSIB absent
  106. ;EVEX.vvvv      NDS register specifier                  P[14:11]        Same as VEX.vvvv
  107. ;EVEX.V'        High-16 NDS/VIDX register specifier     P[19]           Combine with EVEX.vvvv or when VSIB present
  108. ;EVEX.aaa       Embedded opmask register specifier      P[18:16]
  109. ;EVEX.W         Osize promotion/Opcode extension        P[15]
  110. ;EVEX.z         Zeroing/Merging                         P[23]
  111. ;EVEX.b         Broadcast/RC/SAE Context                P[20]
  112. ;EVEX.L'L       Vector length/RC                        P[22:21]
  113. ;-------------------------------------------------------------------------------------------------------
  114. ;Addressing mode Bit 4           Bit 3   Bits [2:0]      Register type          Common usage
  115. ;-------------------------------------------------------------------------------------------------------
  116. ;REG            EVEX.R'         EVEX.R  ModRM.reg       General purpose, Vector Destination or Source
  117. ;NDS/NDD        EVEX.V'         EVEX.v3v2v1v0           GPR, Vector             2nd Source or Destination
  118. ;RM             EVEX.X          EVEX.B  ModRM.r/m       GPR, Vector             1st Source or Destination
  119. ;BASE           0               EVEX.B  ModRM.r/m       GPR                     Memory addressing
  120. ;INDEX          0               EVEX.X  SIB.index       GPR                     Memory addressing
  121. ;VIDX           EVEX.V'         EVEX.X  SIB.index       Vector                  VSIB memory addressing
  122. ;IS4            Imm8[3]         Imm8[7:4]               Vector                  3rd Source
  123. ;-------------------------------------------------------------------------------------------------------
  124. ;XOP Bit Mnemonic Description
  125. ;Byte 0:
  126. ;7-0 8Fh XOP Prefix Byte for 3-byte XOP Prefix
  127. ;Byte 1:
  128. ;7 R Inverted one bit extension to ModRM.reg field
  129. ;6 X Inverted one bit extension of the SIB index field
  130. ;5 B Inverted one bit extension of the ModRM r/m field or the SIB base field
  131. ;4-0 mmmmm
  132. ;XOP opcode map select:
  133. ;08h-instructions with immediate byte;
  134. ;09h-instructions with no immediate;
  135. ;Byte 2:
  136. ;7 W Default operand size override for a general pur-
  137. ;pose register to 64-bit size in 64-bit mode; oper-
  138. ;and configuration specifier for certain XMM/YMM-based operations.
  139. ;6-3 vvvv Source or destination register specifier
  140. ;2 L Vector length for XMM/YMM-based operations.
  141. ;1-0 pp
  142. ;Specifies whether there's an implied 66, F2, or F3 opcode extension
  143. ;-----------------------------------------------------------------------------
  144. RXB = 1         ;REX.B (extension to the Base)
  145. RXX = 2         ;REX.X (extension to the SIB indeX)
  146. RXR = 4         ;REX.R (extension to the ModRM/REG)
  147. RXW = 8         ;REX.W (operand Width; 0 = default, 1 = 64bit)
  148. RXP = 40h       ;REX prefix
  149. ;-----------------------------------------------------------------------------
  150.  
  151. MaxInstructionLength    = 15
  152.  
  153. MnemonicLength          = 17      ;maximum length of instruction name
  154.  
  155. ;Unsigned Minimum eax,edx to eax
  156. macro MinU
  157. {
  158.         cmp     rax,rdx
  159.         sbb     rcx,rcx
  160.         and     rax,rcx
  161.         not     rcx
  162.         and     rdx,rcx
  163.         or      rax,rdx
  164. }
  165. ;Unsigned Maximum eax,edx to eax
  166. macro MaxU
  167. {
  168.         cmp     rdx,rax
  169.         sbb     rcx,rcx
  170.         and     rax,rcx
  171.         not     rcx
  172.         and     rdx,rcx
  173.         or      rax,rdx
  174. }
  175. ;-----------------------------------------------------------------------------
  176. ; I/O: eax - size
  177. macro   Compress
  178. {
  179.         push    rbx rcx rdx rsi rdi
  180.         mov     rbx,[TheBufferO]
  181.         mov     ecx,eax
  182.         xor     edi,edi
  183.         xor     esi,esi
  184.         mov     [TheK],rdi
  185. .1:     mov     ah,[TabSize]
  186.         xor     edx,edx
  187. .2:     mov     al,[rbx+rsi]
  188.         mov     [rbx+rdi],al
  189.         inc     rsi
  190.         cmp     rsi,rcx
  191.         ja      .6
  192.         inc     rdi
  193.         inc     [TheK]
  194.         cmp     al,32
  195.         jne     .3
  196.         inc     dl
  197.         jmp     .4
  198. .3:     xor     dl,dl
  199. .4:     dec     ah
  200.         jnz     .2
  201.         or      dl,dl
  202.         jz      .5
  203.         dec     dl
  204.         jz      .5
  205.         sub     rdi,rdx
  206.         sub     [TheK],rdx
  207.         mov     al,9
  208.         mov     [rbx+rdi-1],al
  209. .5:     jmp     .1
  210. .6:     mov     rax,[TheK]
  211.         pop     rdi rsi rdx rcx rbx
  212. }
  213.  
  214. Names:  file    "qopcodes.bin"
  215. include "qopcodes.inc"
  216.  
  217. TNULL           =       ($-1-Names)
  218.  
  219. False           =       0
  220. True            =       1
  221.  
  222. NIA             =       1       ;Not Intel/AMD
  223. UND             =       2       ;Undocumented or abandon
  224.  
  225. RACC            =       RRAX
  226.  
  227. RRAX            =       0
  228. RRCX            =       1
  229. RRDX            =       2
  230. RRBX            =       3
  231. RRSP            =       4
  232. RRBP            =       5
  233. RRSI            =       6
  234. RRDI            =       7
  235. RR8             =       8
  236. RR9             =       9
  237. RR10            =       10
  238. RR11            =       11
  239. RR12            =       12
  240. RR13            =       13
  241. RR14            =       14
  242. RR15            =       15
  243.  
  244. RES             =       0
  245. RCS             =       1
  246. RSS             =       2
  247. RDS             =       3
  248. RFS             =       4
  249. RGS             =       5
  250.  
  251. VES             =       26h
  252. VCS             =       2Eh
  253. VSS             =       36h
  254. VDS             =       3Eh
  255. VFS             =       64h
  256. VGS             =       65h
  257.  
  258. VNONE           =       0
  259. VBYTE           =       1
  260. VWORD           =       2
  261. VDWORD          =       3
  262. VQWORD          =       4
  263. VOWORD          =       5
  264. VXWORD          =       5
  265. VYWORD          =       6
  266. VZWORD          =       7
  267. VFWORD          =       8
  268. VTWORD          =       9
  269. ;-----------------------------------------------------------------------------
  270. xN              =       VNONE
  271. xB              =       VBYTE
  272. xW              =       VWORD
  273. xD              =       VDWORD
  274. xQ              =       VQWORD
  275. xO              =       VOWORD
  276. xX              =       VXWORD
  277. xY              =       VYWORD
  278. xZ              =       VZWORD
  279. xF              =       VFWORD
  280. xT              =       VTWORD
  281. ;-----------------------------------------------------------------------------
  282. CPUX16          =       0
  283. CPUX32          =       1
  284. CPUX64          =       2
  285.  
  286. AD16            =       0
  287. AD32            =       1
  288. AD64            =       2
  289. ADXX            =       3
  290. ADYY            =       4
  291. ADZZ            =       5
  292.  
  293. ;kolejno˜† ma znaczenie/the order is significant
  294. PF3             =       0
  295. PF2             =       1
  296. P66             =       2
  297.  
  298. P67             =       3
  299. P4X             =       4
  300. P9B             =       5
  301. PF0             =       6
  302. PSEG            =       7
  303.  
  304. GPR08           =       1
  305. GPR16           =       2
  306. GPR32           =       3
  307. GPR64           =       4
  308. SEGRG           =       5
  309. STXRG           =       6
  310. CTRRG           =       7
  311. DBGRG           =       8
  312. MMXRG           =       9
  313. XMMRG           =       10
  314. YMMRG           =       11
  315. ZMMRG           =       12
  316. BNDRG           =       13
  317. TRXRG           =       14
  318. KXXRG           =       15
  319. ;-----------------------------------------------------------------------------
  320. _R              =           1   ;Clear 66h prefix
  321. _R64            =           2   ;Clear 66h prefix if CPUX64
  322. _O              =           4   ;Do not show memory operand size
  323. _R48            =           8   ;Clear 48h prefix
  324. _J              =         10h   ;Show Branch Hint
  325. _A              =         20h   ;Always call 3rd procedure
  326. _T              =         40h   ;Extended = Table
  327. _E              =         80h   ;Extended Table
  328. _3              =        100h   ;MOD3 (I.Mod=3, CL=3 next 4 names in TABle)
  329. _S              =       8000h   ;add "S"uffix in ATT
  330. _XA             =       4000h   ;XACQUIRE
  331. _XR             =       2000h   ;XRELEASE
  332. _L              =       1000h   ;LOCK unnecessary
  333. _B              =        800h   ;BND prefix instruction
  334. ;-----------------------------------------------------------------------------
  335. VEXF            =       8000h   ;without third opcode
  336. VEX2            =       4000h   ;2nd operand always = xmm
  337. VEX1            =       2000h   ;1st operand always = xmm
  338. VEXH            =       1000h   ;MoveName instead MoveNameV
  339. VEXG            =        800h   ;operands - GPR32, VEXW - GPR64
  340. VEXC            =        400h   ;VEXW=1 = no error
  341. VEXS            =        200h   ;encoded NDS
  342. VEXR            =        100h   ;only register operands
  343. VEXW            =         80h   ;if W=1 then error
  344. VEXI            =         40h   ;imm8
  345. VEX4            =         20h   ;is4
  346. VEXV            =         10h   ;must be vvvv=1111b
  347. VEX8            =         08h   ;imm8=opcode's new name
  348. VEXL            =         04h   ;if L=1 then error
  349. VEXN            =         02h   ;if L=0 then error
  350. VEXM            =         01h   ;only memory operands
  351. VEX0            =         00h   ;undefined
  352. ;-----------------------------------------------------------------------------
  353. XOPO            =         80h   ;00h=RM?R?,80h=R?RM?
  354. XOP2            =         40h   ;2nd operand always = xmm
  355. XOP1            =         20h   ;1st operand always = xmm
  356. XOPV            =         10h   ;must be vvvv=1111b
  357. XOPI            =         08h   ;imm8
  358. ;-----------------------------------------------------------------------------
  359. XOPL            =         04h   ;if L=1 then error & flag like VEX.L
  360. XOPW            =         80h   ;if W=1 then error & flag like REX.W
  361. ;-----------------------------------------------------------------------------
  362. EVEXAA          =      10000h           ;for decorator
  363. EVEXQ1          =      08000h           ;add suffix Q1 when W=1
  364. EVEXD1          =      04000h           ;add suffix D1 when W=1
  365. EVEXE           =      (EVEXQ1+EVEXD1)  ;name points to two names
  366. EVEXI           =      02000h           ;imm8
  367. EVEXM           =      01000h           ;call GetVectorAndMUL
  368. EVEXB           =      00800h           ;inc MemorySize & MULT when (W=1 & BB!=0)
  369. EVEXU           =      00400h           ;inc MemorySize & MULT when W=1
  370. EVEXL0          =      00200h           ;if L'L=00b then error
  371. EVEXLL          =      00100h           ;if L'L<10b then error
  372. EVEXLX          =      (EVEXL0+EVEXLL)  ;if L'L>00b then error
  373. ;-----------------------------------------------------------------------------
  374. EVEXW0          =      (EVEXYW+EVEXNW)  ;ignore W1 in non 64-bits
  375. EVEXYW          =      00080h           ;if W=1 then error
  376. EVEXNW          =      00040h           ;if W=0 then error
  377. EVEXV           =      00020h           ;if VVVV!=1111b then error
  378. EVEX2           =      00010h           ;proc points to two procs
  379. ;-----------------------------------------------------------------------------
  380. EVEXS           =      00008h           ;skip {K1}
  381. EVEXR           =      00004h           ;indicates support for embedded rounding control, which is only applicable to the register-register form of the instruction
  382. EVEXO           =      00002h           ;EVEXR Only if W=1
  383. EVEXX           =      00001h           ;always XMM, L'L ignore
  384. ;-----------------------------------------------------------------------------
  385. EVEX0           =      00000h           ;undefined
  386. ;-----------------------------------------------------------------------------
  387. include "scanitem.inc"
  388. ;-----------------------------------------------------------------------------
  389. macro xx Name,Rtn,Rand=0,DefReg=0,Flags=0
  390. {
  391. local Temp
  392. if Rtn-RtnXX<0
  393.   err invalid procedure address
  394. end if
  395.         dw Name
  396. virtual at 0
  397. Temp::
  398.         dw Rtn-RtnXX
  399. if (Flags) and _E = _E
  400.   if DefReg-EXT80<0
  401.     err invalid table address
  402.   end if
  403.         dw DefReg-EXT80
  404. else if (Flags) and _T = _T
  405.   if DefReg-TTXXXX<0
  406.     err invalid table address
  407.   end if
  408.         dw DefReg-TTXXXX
  409. else
  410.         db Rand shl 4+DefReg,?
  411. end if
  412.         dw Flags
  413. end virtual
  414.         AddElement Temp:
  415. }
  416.  
  417. virtual at 0
  418. xxh:
  419. .Rtn    dw ?
  420. .NxtTab rw 0
  421. .DefReg db ?,?
  422. .Flags  dw ?
  423. .Size:
  424. end virtual
  425.  
  426. virtual at 0
  427. yyh:
  428. .Name:  dw ?
  429. .Addr:  dw ?
  430. .Size:
  431. end virtual
  432. ;-----------------------------------------------------------------------------
  433. virtual at 0    ;XOP
  434. XOP:
  435. .Imm    db ?
  436. .Flags  db ?
  437. .MOS    db ?,?
  438. .Rtn    dw ?
  439. .Name   dw ?
  440. .Size:
  441. end virtual
  442. ;-----------------------------------------------------------------------------
  443. macro XOPc Imm,MOS0,MOS1,Flags,Rtn,NameV
  444. {
  445.         db Imm
  446.         db Flags
  447.         db MOS0,MOS1
  448.         dw Rtn-RtnXX
  449.         dw NameV
  450. }
  451. ;-----------------------------------------------------------------------------
  452. virtual at 0    ;xC
  453. CXX:
  454. .Rtn    dw ?
  455. .Flags  dw ?
  456. .Imm    db ?
  457. .MOS    db ?
  458. .Name   dw ?
  459. .Size:
  460. end virtual
  461. ;-----------------------------------------------------------------------------
  462. macro xC Routine,Flags,Imm,MOS0,MOS1,NameV
  463. {
  464.         dw Routine-RtnXX
  465.         dw Flags
  466.         db Imm
  467.         db (MOS1)*16+MOS0
  468.         dw NameV
  469. }
  470. ;-----------------------------------------------------------------------------
  471. virtual at 0
  472. X62:
  473. .Rtn    dw ?
  474. .Name   dw ?
  475. .Flags  dw ?
  476. .Imm    db ?
  477. .MOS    db ?
  478. .Size:
  479. end virtual
  480. ;-----------------------------------------------------------------------------
  481. macro T62 Routine,Imm,Name,Flags,MemSizeH,MemSizeL
  482. {
  483.         dw Routine-RtnXX
  484.   if ((Flags) and EVEXE = EVEXE)
  485.         dw Name-T62Names
  486.   else
  487.         dw Name
  488.   end if
  489.         dw Flags
  490.         db Imm
  491.         db (MemSizeH*16)+MemSizeL
  492. }
  493. ;-----------------------------------------------------------------------------
  494. macro   FetchB
  495. {
  496.         lodsb
  497. }
  498.  
  499. macro   FetchW
  500. {
  501.         lodsw
  502. }
  503.  
  504. macro   FetchD
  505. {
  506.         lodsd
  507. }
  508.  
  509. macro   FetchUD
  510. {
  511.         lodsd
  512.         or      [I.MainFlags],80h
  513. }
  514.  
  515. macro   FetchSB
  516. {
  517.         FetchB
  518.         movsx   rax,al
  519. }
  520.  
  521. macro   FetchSW
  522. {
  523.         FetchW
  524.         movsx   rax,ax
  525. }
  526.  
  527. macro   FetchSD
  528. {
  529.         FetchD
  530. if %B=64
  531.         movsxd  rax,eax
  532. end if
  533. }
  534.  
  535. macro   FetchQ
  536. {
  537. if %B=64
  538.         lodsq
  539. else
  540.         lodsd
  541.         mov     edx,eax
  542.         lodsd
  543.         xchg    edx,eax
  544. end if
  545. }
  546.  
  547. macro   BitT    Mem,Val
  548. {
  549.         bt      dword [Mem+Val/8],Val and 7
  550. }
  551.  
  552. macro   BitTS   Mem,Val
  553. {
  554.         bts     dword [Mem+Val/8],Val and 7
  555. }
  556.  
  557. macro   BitTR   Mem,Val
  558. {
  559.         btr     dword [Mem+Val/8],Val and 7
  560. }
  561.  
  562. ;Type2nd=
  563. InNONE          = 0
  564. InRM            = 1
  565. InReg           = 2
  566. InVVVV          = 3
  567. Is1             = 4
  568.  
  569. struct  TArg
  570. Type            db ?
  571. Type2nd         db ?
  572. Reg             db ?
  573. Mem             db ?
  574. ImmB            rb 0
  575. Imm             dq ?
  576. if %B=32
  577.                 dd ?
  578. end if
  579. ends
  580.  
  581. struct  TInstruction
  582. ;
  583. Addr            dq ?
  584. SaveRSP         dq ?
  585. SaveRSI         dq ?
  586. Size            dq ?
  587. Item            dd ?
  588. Table           dd ?
  589. ;
  590. Arch            db ?
  591. Only            db ?
  592. NextByte        db ?
  593. NewTable        db ?
  594. ;
  595. NotR            db ?
  596. NotX            db ?
  597. NotB            db ?
  598. NotW            db ?
  599. NotP            db ?
  600. ;
  601. Is62            db ?
  602. ;
  603. R               db ?
  604. X               db ?
  605. B               db ?
  606. W               db ?
  607. P               db ?
  608. V               db ?
  609. Z               db ?
  610. BB              db ?
  611. PP              db ?
  612. LL              db ?
  613. XX              db ?
  614. AAAA            db ?
  615. MULT            db ?
  616. ;
  617. XOP             db ?
  618. VEX             db ?
  619. VVVV            db ?
  620. MMMMM           db ?
  621. ;
  622. FlagsVEX        rb 0
  623. FlagsXOP        db ?,?
  624. FlagsEVEX       db ?,?,?
  625. ;
  626. VT              db ?
  627. AfterVEX        db ?
  628. ;
  629. Fasm            db ?
  630. Medium          db ?
  631. UseDB           db ?
  632. NoREX           db ?
  633. FullHex         db ?
  634. Dollar          db ?
  635. HexPrefix       db ?
  636. Negate          db ?
  637. ShowRand        db ?    ;Always show operand size
  638. ShowSize        db ?
  639. RandSize        db ?
  640. ShowScale       db ?
  641. NoAddress       db ?
  642. HideRIP         db ?
  643. IsShort         db ?
  644. Emulated        db ?
  645. IsAddress       db ?
  646. Sensitive       db ?
  647. NoShowRand      db ?
  648. DisplayHint     db ?
  649. PossibleLOCK    db ?
  650. PossibleF2F3    db ?
  651. Compression     db ?
  652. Intelligent     db ?
  653. IsCALLJMP       db ?
  654. Prefix          db ?
  655. LastByte        db ?
  656. ;
  657. Operand         db ?
  658. Address         db ?
  659. CurSeg          db ?
  660. DefSeg          db ?
  661. PreREX          db ?
  662. IsFloat         db ?
  663. IsRET           db ?
  664. Syntax          db ?
  665. ;
  666. ModRM           db ?
  667. SIB             db ?
  668. Flags           dw ?
  669. Point           dw ?
  670. ;
  671. RM              db ?
  672. Reg             db ?
  673. Mod             db ?
  674. Relative        db ?
  675. ;
  676. Base            db ?
  677. Indx            db ?
  678. Scale           db ?
  679. DispSize        db ?
  680. ;
  681. Pos66           db ?
  682. Pos67           db ?
  683. Pos4X           db ?
  684. Pos9B           db ?
  685. PosF0           db ?
  686. PosF2           db ?
  687. PosF3           db ?
  688. PosSEG          db ?
  689. ;
  690. Disp            dq ?
  691. if %B=32
  692.                 dd ?
  693. end if
  694. ;
  695. IsLEA           db ?
  696. PrefixByte      db ?
  697. Mandatory66     db ?
  698. MemSeparator    db ?
  699. MainFlags       db ?
  700. ;
  701. Name            dw ?
  702. AltName         dw ?
  703. SegmName        dw ?
  704. ;
  705. Arg1            TArg
  706. Arg2            TArg
  707. Arg3            TArg
  708. Arg4            TArg
  709. Arg5            TArg
  710. ;
  711. Suffix          rb 4
  712. Suffix2nd       rb 4
  713. Suffix3rd       rb 4
  714. LastArg         dq ?
  715. ;
  716. Prefixes        dd ?
  717. PrefixesCpy     dd ?
  718. PrefixNames     rw 16
  719. PrefixBites     rb 16
  720. PrefixCount     db ?
  721. ;
  722. ends
  723.  
  724. virtual at rbp-128      ;maximum lower address
  725. I       TInstruction
  726. end virtual
  727.  
  728. macro   HexString
  729. {
  730. local A
  731. virtual at 0
  732. HexVal::db      '0123456789ABCDEF'
  733. end virtual
  734. even 4
  735. HexString:
  736. rept 256 n:0 {\
  737.   load A byte from HexVal:(n shr 4)
  738.         db      A
  739.   load A byte from HexVal:(n and 15)
  740.         db      A
  741.   \}
  742. }
  743.  
  744. HexString
  745. Scales          db      '1248'
  746. Suffixes        db      0,'bwlq'
  747. ;-----------------------------------------------------------------------------
  748. TSAE            dw T?RN?SAE?
  749.                 dw T?RD?SAE?
  750.                 dw T?RU?SAE?
  751.                 dw T?RZ?SAE?
  752. ;-----------------------------------------------------------------------------
  753. T1TO            dw T?1TO2?
  754.                 dw T?1TO4?
  755.                 dw T?1TO8?
  756.                 dw T?1TO16?
  757. ;-----------------------------------------------------------------------------
  758. NGPR08          dw TAL,\
  759.                    TCL,\
  760.                    TDL,\
  761.                    TBL,\
  762.                    TAH,\
  763.                    TCH,\
  764.                    TDH,\
  765.                    TBH,\
  766.                    TAL,\
  767.                    TCL,\
  768.                    TDL,\
  769.                    TBL,\
  770.                    TAH,\
  771.                    TCH,\
  772.                    TDH,\
  773.                    TBH
  774.  
  775. NGPRX8          dw TAL,\
  776.                    TCL,\
  777.                    TDL,\
  778.                    TBL,\
  779.                    TSPL,\
  780.                    TBPL,\
  781.                    TSIL,\
  782.                    TDIL,\
  783.                    TR8B,\
  784.                    TR9B,\
  785.                    TR10B,\
  786.                    TR11B,\
  787.                    TR12B,\
  788.                    TR13B,\
  789.                    TR14B,\
  790.                    TR15B
  791.  
  792. NGPRL8          dw TAL,\
  793.                    TCL,\
  794.                    TDL,\
  795.                    TBL,\
  796.                    TSPL,\
  797.                    TBPL,\
  798.                    TSIL,\
  799.                    TDIL,\
  800.                    TR8L,\
  801.                    TR9L,\
  802.                    TR10L,\
  803.                    TR11L,\
  804.                    TR12L,\
  805.                    TR13L,\
  806.                    TR14L,\
  807.                    TR15L
  808.  
  809. NGPR16          dw TAX,\
  810.                    TCX,\
  811.                    TDX,\
  812.                    TBX,\
  813.                    TSP,\
  814.                    TBP,\
  815.                    TSI,\
  816.                    TDI,\
  817.                    TR8W,\
  818.                    TR9W,\
  819.                    TR10W,\
  820.                    TR11W,\
  821.                    TR12W,\
  822.                    TR13W,\
  823.                    TR14W,\
  824.                    TR15W
  825.  
  826. NGPR32          dw TEAX,\
  827.                    TECX,\
  828.                    TEDX,\
  829.                    TEBX,\
  830.                    TESP,\
  831.                    TEBP,\
  832.                    TESI,\
  833.                    TEDI,\
  834.                    TR8D,\
  835.                    TR9D,\
  836.                    TR10D,\
  837.                    TR11D,\
  838.                    TR12D,\
  839.                    TR13D,\
  840.                    TR14D,\
  841.                    TR15D,\
  842.                    TEIP?
  843.  
  844. NGPR64          dw TRAX,\
  845.                    TRCX,\
  846.                    TRDX,\
  847.                    TRBX,\
  848.                    TRSP,\
  849.                    TRBP,\
  850.                    TRSI,\
  851.                    TRDI,\
  852.                    TR8,\
  853.                    TR9,\
  854.                    TR10,\
  855.                    TR11,\
  856.                    TR12,\
  857.                    TR13,\
  858.                    TR14,\
  859.                    TR15,\
  860.                    TRIP?
  861.  
  862. NSTRXX          dw TST0,\
  863.                    TST1,\
  864.                    TST2,\
  865.                    TST3,\
  866.                    TST4,\
  867.                    TST5,\
  868.                    TST6,\
  869.                    TST7
  870.  
  871. NSTRYY          dw TST?0?,\
  872.                    TST?1?,\
  873.                    TST?2?,\
  874.                    TST?3?,\
  875.                    TST?4?,\
  876.                    TST?5?,\
  877.                    TST?6?,\
  878.                    TST?7?
  879.  
  880. NCTRXX          dw TCR0,\
  881.                    TCR1,\
  882.                    TCR2,\
  883.                    TCR3,\
  884.                    TCR4,\
  885.                    TCR5,\
  886.                    TCR6,\
  887.                    TCR7,\
  888.                    TCR8,\
  889.                    TCR9,\
  890.                    TCR10,\
  891.                    TCR11,\
  892.                    TCR12,\
  893.                    TCR13,\
  894.                    TCR14,\
  895.                    TCR15
  896.  
  897. NDBGXX          dw TDR0,\
  898.                    TDR1,\
  899.                    TDR2,\
  900.                    TDR3,\
  901.                    TDR4,\
  902.                    TDR5,\
  903.                    TDR6,\
  904.                    TDR7,\
  905.                    TDR8,\
  906.                    TDR9,\
  907.                    TDR10,\
  908.                    TDR11,\
  909.                    TDR12,\
  910.                    TDR13,\
  911.                    TDR14,\
  912.                    TDR15
  913.  
  914. NDBGYY          dw TDB0,\
  915.                    TDB1,\
  916.                    TDB2,\
  917.                    TDB3,\
  918.                    TDB4,\
  919.                    TDB5,\
  920.                    TDB6,\
  921.                    TDB7,\
  922.                    TDB8,\
  923.                    TDB9,\
  924.                    TDB10,\
  925.                    TDB11,\
  926.                    TDB12,\
  927.                    TDB13,\
  928.                    TDB14,\
  929.                    TDB15
  930.  
  931. NXMMXX          dw TXMM0,\
  932.                    TXMM1,\
  933.                    TXMM2,\
  934.                    TXMM3,\
  935.                    TXMM4,\
  936.                    TXMM5,\
  937.                    TXMM6,\
  938.                    TXMM7,\
  939.                    TXMM8,\
  940.                    TXMM9,\
  941.                    TXMM10,\
  942.                    TXMM11,\
  943.                    TXMM12,\
  944.                    TXMM13,\
  945.                    TXMM14,\
  946.                    TXMM15,\
  947.                    TXMM16,\
  948.                    TXMM17,\
  949.                    TXMM18,\
  950.                    TXMM19,\
  951.                    TXMM20,\
  952.                    TXMM21,\
  953.                    TXMM22,\
  954.                    TXMM23,\
  955.                    TXMM24,\
  956.                    TXMM25,\
  957.                    TXMM26,\
  958.                    TXMM27,\
  959.                    TXMM28,\
  960.                    TXMM29,\
  961.                    TXMM30,\
  962.                    TXMM31
  963.  
  964. NYMMXX          dw TYMM0,\
  965.                    TYMM1,\
  966.                    TYMM2,\
  967.                    TYMM3,\
  968.                    TYMM4,\
  969.                    TYMM5,\
  970.                    TYMM6,\
  971.                    TYMM7,\
  972.                    TYMM8,\
  973.                    TYMM9,\
  974.                    TYMM10,\
  975.                    TYMM11,\
  976.                    TYMM12,\
  977.                    TYMM13,\
  978.                    TYMM14,\
  979.                    TYMM15,\
  980.                    TYMM16,\
  981.                    TYMM17,\
  982.                    TYMM18,\
  983.                    TYMM19,\
  984.                    TYMM20,\
  985.                    TYMM21,\
  986.                    TYMM22,\
  987.                    TYMM23,\
  988.                    TYMM24,\
  989.                    TYMM25,\
  990.                    TYMM26,\
  991.                    TYMM27,\
  992.                    TYMM28,\
  993.                    TYMM29,\
  994.                    TYMM30,\
  995.                    TYMM31
  996.  
  997. NZMMXX          dw TZMM0,\
  998.                    TZMM1,\
  999.                    TZMM2,\
  1000.                    TZMM3,\
  1001.                    TZMM4,\
  1002.                    TZMM5,\
  1003.                    TZMM6,\
  1004.                    TZMM7,\
  1005.                    TZMM8,\
  1006.                    TZMM9,\
  1007.                    TZMM10,\
  1008.                    TZMM11,\
  1009.                    TZMM12,\
  1010.                    TZMM13,\
  1011.                    TZMM14,\
  1012.                    TZMM15,\
  1013.                    TZMM16,\
  1014.                    TZMM17,\
  1015.                    TZMM18,\
  1016.                    TZMM19,\
  1017.                    TZMM20,\
  1018.                    TZMM21,\
  1019.                    TZMM22,\
  1020.                    TZMM23,\
  1021.                    TZMM24,\
  1022.                    TZMM25,\
  1023.                    TZMM26,\
  1024.                    TZMM27,\
  1025.                    TZMM28,\
  1026.                    TZMM29,\
  1027.                    TZMM30,\
  1028.                    TZMM31
  1029. ;-----------------------------------------------------------------------------
  1030. NBNDX           dw TBND0,TBND1,TBND2,TBND3,TBND4?,TBND5?,TBND6?,TBND7?
  1031. ;-----------------------------------------------------------------------------
  1032. NSEGR           dw TES,TCS,TSS,TDS,TFS,TGS,TS6,TS7
  1033. NKXXX           dw TK0,TK1,TK2,TK3,TK4,TK5,TK6,TK7
  1034. ;-----------------------------------------------------------------------------
  1035. NMMXXX          dw TMM0,TMM1,TMM2,TMM3,TMM4,TMM5,TMM6,TMM7
  1036. NTRXXX          dw TTR0,TTR1,TTR2,TTR3,TTR4,TTR5,TTR6,TTR7
  1037. ;-----------------------------------------------------------------------------
  1038. NSEGX           dw TSEGES,TSEGCS,TSEGSS,TSEGDS,TSEGFS,TSEGGS
  1039. ;-----------------------------------------------------------------------------
  1040. DefCPU2AD       db AD16,AD32,AD64
  1041. XorCPU2AD       db AD32,AD16,AD32
  1042. DefCPU2OS       db 0,1,1
  1043. XorCPU2OS       db 1,0,0
  1044. ;-----------------------------------------------------------------------------
  1045. if used DefArgSize
  1046. DefArgSize      db VWORD,GPR16,VDWORD,GPR32,VQWORD,GPR64
  1047. end if
  1048. ;-----------------------------------------------------------------------------
  1049. NotP4X          dd not (bit P4X)
  1050. ;-----------------------------------------------------------------------------
  1051. SZ2Mems         dw TBYTE,TWORD,TDWORD,TQWORD
  1052. SZ2Name         dw TNULL,TBYTE,TWORD,TDWORD,TQWORD,TXWORD,TYWORD,TZWORD,\
  1053.                    TFWORD,TTWORD
  1054. ;-----------------------------------------------------------------------------
  1055. AD2Regs         dd NGPR16,NGPR32,NGPR64,NXMMXX,NYMMXX,NZMMXX
  1056. ;-----------------------------------------------------------------------------
  1057. IntelName       dd NGPRX8
  1058. SZ2Regs         dd NGPR08,NGPR16,NGPR32,NGPR64,NSEGR,NSTRXX,NCTRXX,NDBGXX,\
  1059.                    NMMXXX,NXMMXX,NYMMXX,NZMMXX,NBNDX,NTRXXX,NKXXX
  1060. ;-----------------------------------------------------------------------------
  1061. TBIT            dd 1 shl GPR08+\
  1062.                    1 shl GPR16+\
  1063.                    1 shl GPR32+\
  1064.                    1 shl GPR64+\
  1065.                    0 shl SEGRG+\
  1066.                    0 shl STXRG+\
  1067.                    1 shl CTRRG+\
  1068.                    1 shl DBGRG+\
  1069.                    0 shl MMXRG+\
  1070.                    1 shl XMMRG+\
  1071.                    1 shl YMMRG+\
  1072.                    1 shl ZMMRG+\
  1073.                    0 shl BNDRG+\
  1074.                    0 shl TRXRG+\
  1075.                    0 shl KXXRG
  1076. ;-----------------------------------------------------------------------------
  1077. SZ2Mask         dq 0x00,0xFF,0xFFFF,0xFFFFFFFF
  1078. ;-----------------------------------------------------------------------------
  1079. ;One Table 0F (X0-XF)
  1080. EXTBITS dd 0 shl 0+\    ;-      0
  1081.            0 shl 1+\    ;-      1
  1082.            1 shl 2+\    ;+      2
  1083.            1 shl 3+\    ;+      3
  1084.            0 shl 4+\    ;-      4
  1085.            1 shl 5+\    ;+      5
  1086.            1 shl 6+\    ;+      6
  1087.            1 shl 7+\    ;+      7
  1088.            1 shl 8+\    ;+      8
  1089.            1 shl 9+\    ;+      9
  1090.            0 shl 10+\   ;-      A
  1091.            0 shl 11+\   ;-      B
  1092.            0 shl 12+\   ;-      C
  1093.            1 shl 13+\   ;+      D
  1094.            1 shl 14+\   ;+      E
  1095.            1 shl 15     ;+      F
  1096. ;-----------------------------------------------------------------------------
  1097. EXT0F   dd EXT0F00,EXT0F10,EXT0F20,EXT0F30,EXT0F40,EXT0F50,EXT0F60,EXT0F70
  1098.         dd EXT0F80,EXT0F90,EXT0FA0,EXT0FB0,EXT0FC0,EXT0FD0,EXT0FE0,EXT0FF0
  1099. ;-----------------------------------------------------------------------------
  1100. TFLDXTable:     dw TFLD1
  1101.                 dw TFLDL2T
  1102.                 dw TFLDL2E
  1103.                 dw TFLDPI
  1104.                 dw TFLDLG2
  1105.                 dw TFLDLN2
  1106.                 dw TFLDZ
  1107.                 dw 0
  1108.  
  1109. TE110Table:     dw TF2XM1
  1110.                 dw TFYL2X
  1111.                 dw TFPTAN
  1112.                 dw TFPATAN
  1113.                 dw TFXTRACT
  1114.                 dw TFPREM1
  1115.                 dw TFDECSTP
  1116.                 dw TFINCSTP
  1117.  
  1118. TE111Table:     dw TFPREM
  1119.                 dw TFYL2XP1
  1120.                 dw TFSQRT
  1121.                 dw TFSINCOS
  1122.                 dw TFRNDINT
  1123.                 dw TFSCALE
  1124.                 dw TFSIN
  1125.                 dw TFCOS
  1126.  
  1127. TVMXXTable:     dw TVMRUN
  1128.                 dw TVMMCALL
  1129.                 dw TVMLOAD
  1130.                 dw TVMSAVE
  1131.                 dw TSTGI
  1132.                 dw TCLGI
  1133.                 dw TSKINIT
  1134.                 dw TINVLPGA
  1135. ;-----------------------------------------------------------------------------
  1136. Now3D:  dv 0Ch,TPI2FW
  1137.         dv 0Dh,TPI2FD
  1138.         dv 1Ch,TPF2IW
  1139.         dv 1Dh,TPF2ID
  1140.         dv 8Ah,TPFNACC
  1141.         dv 8Eh,TPFPNACC
  1142.         dv 90h,TPFCMPGE
  1143.         dv 94h,TPFMIN
  1144.         dv 96h,TPFRCP
  1145.         dv 97h,TPFRSQRT
  1146.         dv 9Ah,TPFSUB
  1147.         dv 9Eh,TPFADD
  1148.         dv $A0,TPFCMPGT
  1149.         dv $A4,TPFMAX
  1150.         dv $A6,TPFRCPIT1
  1151.         dv $A7,TPFRSQIT1
  1152.         dv $AA,TPFSUBR
  1153.         dv $AE,TPFACC
  1154.         dv $B0,TPFCMPEQ
  1155.         dv $B4,TPFMUL
  1156.         dv $B6,TPFRCPIT2
  1157.         dv $B7,TPMULHRW
  1158.         dv $BB,TPSWAPD
  1159.         dv $BF,TPAVGUSB
  1160.         ;
  1161.         dv $86,TPFRCPV  ;Cyrix
  1162.         dv $87,TPFRSQRTV;Cyrix
  1163.         ;
  1164. End3D:
  1165. ;-----------------------------------------------------------------------------
  1166. TabSSE4 rb 0
  1167.         dv $00,TPSHUFB
  1168.         dv $01,TPHADDW
  1169.         dv $02,TPHADDD
  1170.         dv $03,TPHADDSW
  1171.         dv $04,TPMADDUBSW
  1172.         dv $05,TPHSUBW
  1173.         dv $06,TPHSUBD
  1174.         dv $07,TPHSUBSW
  1175.         dv $08,TPSIGNB
  1176.         dv $09,TPSIGNW
  1177.         dv $0A,TPSIGND
  1178.         dv $0B,TPMULHRSW
  1179.         dv $1C,TPABSB
  1180.         dv $1D,TPABSW
  1181.         dv $1E,TPABSD
  1182. EndSSE4 rb 0
  1183. ;-----------------------------------------------------------------------------
  1184. NxtSSE4 rb 0
  1185.         dy $10,VXWORD+80h,TPBLENDVB
  1186.         dy $14,VXWORD+80h,TBLENDVPS
  1187.         dy $15,VXWORD+80h,TBLENDVPD
  1188.         dy $17,VXWORD+80h,TPTEST
  1189.         dy $20,VQWORD+80h,TPMOVSXBW
  1190.         dy $21,VDWORD+80h,TPMOVSXBD
  1191.         dy $22, VWORD+80h,TPMOVSXBQ
  1192.         dy $23,VQWORD+80h,TPMOVSXWD
  1193.         dy $24,VDWORD+80h,TPMOVSXWQ
  1194.         dy $25,VQWORD+80h,TPMOVSXDQ
  1195.         dy $28,VXWORD+80h,TPMULDQ
  1196.         dy $29,VXWORD+80h,TPCMPEQQ
  1197.         dy $2A,VXWORD+80h,TMOVNTDQA
  1198.         dy $2B,VXWORD+80h,TPACKUSDW
  1199.         dy $30,VQWORD+80h,TPMOVZXBW
  1200.         dy $31,VDWORD+80h,TPMOVZXBD
  1201.         dy $32, VWORD+80h,TPMOVZXBQ
  1202.         dy $33,VQWORD+80h,TPMOVZXWD
  1203.         dy $34,VDWORD+80h,TPMOVZXWQ
  1204.         dy $35,VQWORD+80h,TPMOVZXDQ
  1205.         dy $37,VXWORD+80h,TPCMPGTQ
  1206.         dy $38,VXWORD+80h,TPMINSB
  1207.         dy $39,VXWORD+80h,TPMINSD
  1208.         dy $3A,VXWORD+80h,TPMINUW
  1209.         dy $3B,VXWORD+80h,TPMINUD
  1210.         dy $3C,VXWORD+80h,TPMAXSB
  1211.         dy $3D,VXWORD+80h,TPMAXSD
  1212.         dy $3E,VXWORD+80h,TPMAXUW
  1213.         dy $3F,VXWORD+80h,TPMAXUD
  1214.         dy $40,VXWORD+80h,TPMULLD
  1215.         dy $41,VXWORD+80h,TPHMINPOSUW
  1216.         dy $CF,VXWORD+80h,TGF2P8MULB
  1217.         dy $DB,VXWORD+80h,TAESIMC
  1218.         dy $DC,VXWORD+80h,TAESENC
  1219.         dy $DD,VXWORD+80h,TAESENCLAST
  1220.         dy $DE,VXWORD+80h,TAESDEC
  1221.         dy $DF,VXWORD+80h,TAESDECLAST
  1222. EndNxtSSE4:
  1223. ;-----------------------------------------------------------------------------
  1224. TableSXSSE:
  1225.         dy $08,VOWORD+80h,TROUNDPS
  1226.         dy $09,VOWORD+80h,TROUNDPD
  1227.         dy $0A,VDWORD+80h,TROUNDSS
  1228.         dy $0B,VQWORD+80h,TROUNDSD
  1229.         dy $0C,VOWORD+80h,TBLENDPS
  1230.         dy $0D,VOWORD+80h,TBLENDPD
  1231.         dy $0E,VOWORD+80h,TPBLENDW
  1232.         dy $0F,VOWORD+80h,TPALIGNR
  1233.         dy $40,VOWORD+80h,TDPPS
  1234.         dy $41,VOWORD+80h,TDPPD
  1235.         dy $42,VOWORD+80h,TMPSADBW
  1236.         dy $60,VOWORD+80h,TPCMPESTRM
  1237.         dy $61,VOWORD+80h,TPCMPESTRI
  1238.         dy $62,VOWORD+80h,TPCMPISTRM
  1239.         dy $63,VOWORD+80h,TPCMPISTRI
  1240.         dy $CE,VOWORD+80h,TGF2P8AFFINEQB
  1241.         dy $CF,VOWORD+80h,TGF2P8AFFINEINVQB
  1242.         dy $DF,VOWORD+80h,TAESKEYGENASSIST
  1243. TableEXSSE:
  1244. ;-----------------------------------------------------------------------------
  1245. TabCLMUL:
  1246.         dw TPCLMULLQLQDQ        ;0000_0000b
  1247.         dw TPCLMULHQLQDQ        ;0000_0001b
  1248.         rw 14
  1249.         dw TPCLMULLQHQDQ        ;0001_0000b
  1250.         dw TPCLMULHQHQDQ        ;0001_0001b
  1251. ;-----------------------------------------------------------------------------
  1252. T0F71Names:
  1253.         dw 0            ;/0
  1254.         dw 0            ;/1
  1255.         dw TPSRLW       ;/2
  1256.         dw 0            ;/3
  1257.         dw TPSRAW       ;/4
  1258.         dw 0            ;/5
  1259.         dw TPSLLW       ;/6
  1260.         dw 0            ;/7
  1261. ;-----------------------------------------------------------------------------
  1262. T0F72Names:
  1263.         dw 0            ;/0
  1264.         dw 0            ;/1
  1265.         dw TPSRLD       ;/2
  1266.         dw 0            ;/3
  1267.         dw TPSRAD       ;/4
  1268.         dw 0            ;/5
  1269.         dw TPSLLD       ;/6
  1270.         dw 0            ;/7
  1271. ;-----------------------------------------------------------------------------
  1272. T0F73Names:
  1273.         dw 0            ;/0
  1274.         dw 0            ;/1
  1275.         dw TPSRLQ       ;/2
  1276.         dw TPSRLDQ      ;/3
  1277.         dw 0            ;/4
  1278.         dw 0            ;/5
  1279.         dw TPSLLQ       ;/6
  1280.         dw TPSLLDQ      ;/7
  1281. ;-----------------------------------------------------------------------------
  1282. TCentTable:
  1283.         dw TMONTMUL     ;C0
  1284.         dw TXSHA1       ;C8
  1285.         dw TXSHA256     ;D0
  1286. ;-----------------------------------------------------------------------------
  1287. TCRYPTable:
  1288.         dw 0            ;C0
  1289.         dw TXCRYPTECB   ;C8
  1290.         dw TXCRYPTCBC   ;D0
  1291.         dw TXCRYPTCTR   ;D8
  1292.         dw TXCRYPTCFB   ;E0
  1293.         dw TXCRYPTOFB   ;E8
  1294.         dw 0            ;F0
  1295.         dw 0            ;F8
  1296. ;-----------------------------------------------------------------------------
  1297. T0FAETable:
  1298.         dw TFXSAVE
  1299.         dw TFXRSTOR
  1300.         dw TLDMXCSR
  1301.         dw TSTMXCSR
  1302.         dw TXSAVE
  1303.         dw TXRSTOR
  1304.         dw TXSAVEOPT
  1305.         dw TCLFLUSH
  1306. ;-----------------------------------------------------------------------------
  1307. T0FAETab64:
  1308.         dw TFXSAVE64
  1309.         dw TFXRSTOR64
  1310.         dw 0
  1311.         dw 0
  1312.         dw TXSAVE64
  1313.         dw TXRSTOR64
  1314.         dw TXSAVEOPT64
  1315.         dw 0
  1316. ;-----------------------------------------------------------------------------
  1317. TF30FAETable:
  1318.         dw TRDFSBASE
  1319.         dw TRDGSBASE
  1320.         dw TWRFSBASE
  1321.         dw TWRGSBASE
  1322.         dw TPTWRITE
  1323.         dw TINCSSPD
  1324.         dw TUMONITOR
  1325.         dw 0
  1326. ;-----------------------------------------------------------------------------
  1327. T660FAETable0:
  1328.         dw 0
  1329.         dw 0
  1330.         dw 0
  1331.         dw 0
  1332.         dw 0
  1333.         dw 0
  1334.         dw TCLWB
  1335.         dw TCLFLUSHOPT
  1336. ;-----------------------------------------------------------------------------
  1337. T660FAETable3:
  1338.         dw 0
  1339.         dw 0
  1340.         dw 0
  1341.         dw 0
  1342.         dw 0
  1343.         dw 0
  1344.         dw TTPAUSE
  1345.         dw TPCOMMIT
  1346. ;-----------------------------------------------------------------------------
  1347. T0FC7Table:
  1348.         dw 0
  1349.         dw 0
  1350.         dw 0
  1351.         dw TXRSTORS
  1352.         dw TXSAVEC
  1353.         dw TXSAVES
  1354.         dw 0
  1355.         dw 0
  1356. ;-----------------------------------------------------------------------------
  1357. T0FC7Tab64:
  1358.         dw 0
  1359.         dw 0
  1360.         dw 0
  1361.         dw TXRSTORS64
  1362.         dw TXSAVEC64
  1363.         dw TXSAVES64
  1364.         dw 0
  1365.         dw 0
  1366. ;-----------------------------------------------------------------------------
  1367. TablePCOM:
  1368.         dw TPCOMLT      ;0
  1369.         dw TPCOMLE      ;1
  1370.         dw TPCOMGT      ;2
  1371.         dw TPCOMGE      ;3
  1372.         dw TPCOMEQ      ;4
  1373.         dw TPCOMNEQ     ;5
  1374.         dw TPCOMFALSE   ;6
  1375.         dw TPCOMTRUE    ;7
  1376. ;-----------------------------------------------------------------------------
  1377. CMPSuffixesY:
  1378.         db 'ps',VXWORD+80h;00
  1379.         db 'pd',VXWORD+80h;66
  1380.         db 'sd',VQWORD+80h;F2
  1381.         db 'ss',VDWORD+80h;F3
  1382. ;-----------------------------------------------------------------------------
  1383. CMPSuffixesX:
  1384.         db 'ps',VXWORD+80h;00
  1385.         db 'pd',VXWORD+80h;66
  1386.         db 'ss',VDWORD+80h;F3
  1387.         db 'sd',VQWORD+80h;F2
  1388. ;-----------------------------------------------------------------------------
  1389. CMPxxNames:
  1390.         dw TCMPEQ       ;0
  1391.         dw TCMPLT       ;1
  1392.         dw TCMPLE       ;2
  1393.         dw TCMPUNORD    ;3
  1394.         dw TCMPNEQ      ;4
  1395.         dw TCMPNLT      ;5
  1396.         dw TCMPNLE      ;6
  1397.         dw TCMPORD      ;7
  1398.         dw TCMPEQ?UQ    ;8
  1399.         dw TCMPNGE      ;9
  1400.         dw TCMPNGT      ;A
  1401.         dw TCMPFALSE    ;B
  1402.         dw TCMPNEQ?OQ   ;C
  1403.         dw TCMPGE       ;D
  1404.         dw TCMPGT       ;E
  1405.         dw TCMPTRUE     ;F
  1406.         dw TCMPEQ?OS    ;10
  1407.         dw TCMPLT?OQ    ;11
  1408.         dw TCMPLE?OQ    ;12
  1409.         dw TCMPUNORD?S  ;13
  1410.         dw TCMPNEQ?US   ;14
  1411.         dw TCMPNLT?UQ   ;15
  1412.         dw TCMPNLE?UQ   ;16
  1413.         dw TCMPORD?S    ;17
  1414.         dw TCMPEQ?US    ;18
  1415.         dw TCMPNGE?UQ   ;19
  1416.         dw TCMPNGT?UQ   ;1A
  1417.         dw TCMPFALSE?OS ;1B
  1418.         dw TCMPNEQ?OS   ;1C
  1419.         dw TCMPGE?OQ    ;1D
  1420.         dw TCMPGT?OQ    ;1E
  1421.         dw TCMPTRUE?US  ;1F
  1422. ;-----------------------------------------------------------------------------
  1423. TBM1Table:
  1424.         dw 0            ;/0
  1425.         dw 0            ;/1
  1426.         dw TBLSFILL     ;/2
  1427.         dw TBLCS        ;/3
  1428.         dw TTZMSK       ;/4
  1429.         dw TBLCIC       ;/5
  1430.         dw TBLSIC       ;/6
  1431.         dw TT1MSKC      ;/7
  1432. ;-----------------------------------------------------------------------------
  1433. TBM2Table:
  1434.         dw 0            ;/0
  1435.         dw TBLCMSK      ;/1
  1436.         dw 0            ;/2
  1437.         dw 0            ;/3
  1438.         dw 0            ;/4
  1439.         dw 0            ;/5
  1440.         dw TBLCI        ;/6
  1441.         dw 0            ;/7
  1442. ;-----------------------------------------------------------------------------
  1443. TPERMIL2PDX:
  1444.         dw TPERMILTD2PD
  1445.         dw TPERMILTD2PD
  1446.         dw TPERMILMO2PD
  1447.         dw TPERMILMZ2PD
  1448. ;-----------------------------------------------------------------------------
  1449. TPERMIL2PSX:
  1450.         dw TPERMILTD2PS
  1451.         dw TPERMILTD2PS
  1452.         dw TPERMILMO2PS
  1453.         dw TPERMILMZ2PS
  1454. ;-----------------------------------------------------------------------------
  1455. BMI1:   dw 0
  1456.         dw TBLSR
  1457.         dw TBLSMSK
  1458.         dw TBLSI
  1459.         dw 0
  1460.         dw 0
  1461.         dw 0
  1462.         dw 0
  1463. ;-----------------------------------------------------------------------------
  1464. T0F71N: dw 0            ;/0
  1465.         dw 0            ;/1
  1466.         dw TPSRLW       ;/2
  1467.         dw 0            ;/3
  1468.         dw TPSRAW       ;/4
  1469.         dw 0            ;/5
  1470.         dw TPSLLW       ;/6
  1471.         dw 0            ;/7
  1472. ;-----------------------------------------------------------------------------
  1473. T0F72N: dw TPRORD       ;/0
  1474.         dw TPROLD       ;/1
  1475.         dw TPSRLD       ;/2
  1476.         dw 0            ;/3
  1477.         dw TPSRAD       ;/4
  1478.         dw 0            ;/5
  1479.         dw TPSLLD       ;/6
  1480.         dw 0            ;/7
  1481. ;W1
  1482.         dw TPRORQ       ;/0
  1483.         dw TPROLQ       ;/1
  1484.         dw 0            ;/2
  1485.         dw 0            ;/3
  1486.         dw TPSRAQ       ;/4
  1487.         dw 0            ;/5
  1488.         dw 0            ;/6
  1489.         dw 0            ;/7
  1490. ;-----------------------------------------------------------------------------
  1491. T0F73N: dw 0            ;/0
  1492.         dw 0            ;/1
  1493.         dw 0            ;/2
  1494.         dw TPSRLDQ      ;/3
  1495.         dw 0            ;/4
  1496.         dw 0            ;/5
  1497.         dw 0            ;/6
  1498.         dw TPSLLDQ      ;/7
  1499. ;W1
  1500.         dw 0            ;/0
  1501.         dw 0            ;/1
  1502.         dw TPSRLQ       ;/2
  1503.         dw TPSRLDQ      ;/3
  1504.         dw 0            ;/4
  1505.         dw 0            ;/5
  1506.         dw TPSLLQ       ;/6
  1507.         dw TPSLLDQ      ;/7
  1508. ;-----------------------------------------------------------------------------
  1509. T??C6N: dw 0                    ;/0
  1510.         dw TGATHERPF0DPS        ;/1
  1511.         dw TGATHERPF1DPS        ;/2
  1512.         dw 0                    ;/3
  1513.         dw 0                    ;/4
  1514.         dw TSCATTERPF0DPS       ;/5
  1515.         dw TSCATTERPF1DPS       ;/6
  1516.         dw 0                    ;/7
  1517. ;W1
  1518.         dw 0                    ;/0
  1519.         dw TGATHERPF0DPD        ;/1
  1520.         dw TGATHERPF1DPD        ;/2
  1521.         dw 0                    ;/3
  1522.         dw 0                    ;/4
  1523.         dw TSCATTERPF0DPD       ;/5
  1524.         dw TSCATTERPF1DPD       ;/6
  1525.         dw 0                    ;/7
  1526. ;-----------------------------------------------------------------------------
  1527. T??C7N: dw 0                    ;/0
  1528.         dw TGATHERPF0QPS        ;/1
  1529.         dw TGATHERPF1QPS        ;/2
  1530.         dw 0                    ;/3
  1531.         dw 0                    ;/4
  1532.         dw TSCATTERPF0QPS       ;/5
  1533.         dw TSCATTERPF1QPS       ;/6
  1534.         dw 0                    ;/7
  1535. ;W1
  1536.         dw 0                    ;/0
  1537.         dw TGATHERPF0QPD        ;/1
  1538.         dw TGATHERPF1QPD        ;/2
  1539.         dw 0                    ;/3
  1540.         dw 0                    ;/4
  1541.         dw TSCATTERPF0QPD       ;/5
  1542.         dw TSCATTERPF1QPD       ;/6
  1543.         dw 0                    ;/7
  1544. ;-----------------------------------------------------------------------------
  1545. C4C5Tab         dd C4C500,C4C566,C4C5F3,C4C5F2
  1546. C438Tab         dd C43800,C43866,C438F3,C438F2
  1547. C43ATab         dd C43A00,C43A66,C43AF3,C43AF2
  1548. ;-----------------------------------------------------------------------------
  1549. T6200Tab        dd T620000,T620066,T6200F3,T6200F2
  1550. T6238Tab        dd T623800,T623866,T6238F3,T6238F2
  1551. T623ATab        dd T623A00,T623A66,T623AF3,T623AF2
  1552. ;-----------------------------------------------------------------------------
  1553. if used StrLen
  1554. StrLen:
  1555.         push    rbx
  1556.         mov     edx,7
  1557.         add     rdx,rax
  1558.         mov     ebx,[rax]
  1559.         add     rax,4
  1560. .1:     lea     ecx,[rbx-01010101h]
  1561.         xor     ebx,-1
  1562.         and     ecx,ebx
  1563.         mov     ebx,[rax]
  1564.         add     rax,4
  1565.         and     ecx,80808080h
  1566.         jz      .1
  1567.         test    ecx,00008080h
  1568.         jnz     .2
  1569.         shr     ecx,16
  1570.         add     rax,2
  1571. .2:     shl     cl,1
  1572.         sbb     rax,rdx
  1573.         pop     rbx
  1574.         ret
  1575. end if
  1576.  
  1577. DisAsm:
  1578.         mov     [I.SaveRSP],rsp
  1579.  
  1580.         mov     rsi,[I.Addr]
  1581.         mov     rdx,[I.Size]
  1582.         mov     eax,MaxInstructionLength
  1583.         cmp     rdx,rax
  1584.         cmova   rdx,rax
  1585.         add     rdx,rsi
  1586.         mov     r9,rdx
  1587.  
  1588.         movzx   edx,[I.Arch]
  1589.  
  1590.         mov     al,[rdx+DefCPU2AD]
  1591.         mov     [I.Address],al
  1592.         mov     al,[rdx+DefCPU2OS]
  1593.         mov     [I.Operand],al
  1594.  
  1595.         mov     [I.Table],InstTab
  1596.  
  1597.         call    ClrMagicBytes
  1598.  
  1599. .NextByte:
  1600.  
  1601.         FetchB
  1602.         cmp     rsi,r9
  1603.         ja      ErrorDec
  1604.         mov     [LastByte],al
  1605.  
  1606. .NewTable:
  1607.  
  1608.         mov     ebx,[I.Table]
  1609.  
  1610.         movzx   eax,al
  1611. if bsf yyh.Size = bsr yyh.Size
  1612.         shl     eax,bsf yyh.Size
  1613. else
  1614.         imul    eax,yyh.Size
  1615. end if
  1616.         xor     ecx,ecx
  1617.  
  1618.         cmp     [I.Only],0      ;only one table?
  1619.         jnz     .SkipAdd
  1620.         cmp     [I.Operand],0
  1621.         jz      .SkipBBBB
  1622.         mov     ecx,1*yyh.Size
  1623. .SkipBBBB:
  1624.         lea     eax,[rax*3]
  1625.         cmp     [I.Arch],CPUX64
  1626.         jnz     .SkipX64
  1627.         mov     ecx,2*yyh.Size
  1628.         test    [I.PreREX],8    ;REX.W
  1629.         jnz     .SkipX64
  1630.         xor     ecx,ecx
  1631.         cmp     [I.Operand],0
  1632.         jz      .SkipAAA
  1633.         mov     ecx,1*yyh.Size
  1634. .SkipAAA:
  1635.         lea     edx,[rcx+rax]
  1636.         movzx   edx,word [rbx+rdx+yyh.Addr]
  1637.         add     edx,NextTab
  1638.         test    [rdx+xxh.Flags],_A
  1639.         jz      .SkipX64
  1640.         mov     ecx,2*yyh.Size
  1641. .SkipX64:
  1642.         add     eax,ecx
  1643. .SkipAdd:
  1644.         add     ebx,eax
  1645.  
  1646.         movzx   edx,word [rbx+yyh.Addr]
  1647.         add     edx,NextTab
  1648.         xchg    edx,ebx
  1649.  
  1650.         mov     [I.Item],ebx
  1651.  
  1652.         test    [rbx+xxh.Flags],_E+_T
  1653.         jnz     .SkipValue
  1654.         mov     al,[rbx+xxh.DefReg]
  1655.         mov     ah,al
  1656.         and     al,0xF
  1657.         mov     [I.Arg1.Reg],al
  1658.         shr     ah,4
  1659.         mov     [I.RandSize],ah
  1660. .SkipValue:
  1661. if 0
  1662.         test    [rbx+xxh.Flags+1],_D shr 8
  1663.         jz      .SkipDetect
  1664.         movzx   eax,[I.Operand]
  1665.         add     al,[I.W]
  1666.         mov     ax,word [rax*2+DefArgSize]
  1667.         mov     [I.Arg1.Type],al
  1668.         mov     [I.RandSize],ah
  1669. .SkipDetect:
  1670. end if
  1671.         mov     [I.SaveRSI],rsi
  1672.  
  1673.         or      eax,0xFFFFFFFF
  1674.         mov     ax,[rdx+yyh.Name]
  1675.         mov     dword [I.Name],eax
  1676.  
  1677.         movzx   eax,[rbx+xxh.Flags]
  1678.         mov     [I.Flags],ax
  1679.  
  1680.         test    al,_T
  1681.         jz      .SkipTableAddress
  1682.         mov     edx,[I.Item]
  1683.         movzx   edx,[rdx+xxh.NxtTab]
  1684.         add     edx,TTXXXX
  1685. .SkipTableAddress:
  1686.  
  1687.         movzx   eax,[rbx+xxh.Rtn]
  1688.         add     eax,RtnXX
  1689.         call    rax
  1690.  
  1691.         xor     cl,cl
  1692.         xchg    [I.NextByte],cl
  1693.         or      cl,cl
  1694.         jnz     .NextByte
  1695.  
  1696.         xor     cl,cl
  1697.         xchg    [I.NewTable],cl
  1698.         or      cl,cl
  1699.         jnz     .NewTable
  1700.  
  1701.         cmp     rsi,r9
  1702.         ja      ErrorDec
  1703.  
  1704.         cmp     [I.Mandatory66],0
  1705.         jnz     .IsMandatory66
  1706.         test    [I.PreREX],8    ;REX.W
  1707.         jz      .NoRXW
  1708.         BitT    I.Prefixes,P66
  1709.         jc      ErrorDec
  1710. .NoRXW:
  1711. .IsMandatory66:
  1712. if 1
  1713.         mov     al,[I.CurSeg]
  1714.         or      al,al
  1715.         jz      .SkipSegm
  1716.         cmp     al,[I.DefSeg]
  1717.         jnz     .SkipSegm
  1718.         BitTS   I.Prefixes,PSEG
  1719.         cmp     [I.PosSEG],0
  1720.         jz      ErrorDec
  1721. .SkipSegm:
  1722. end if
  1723.         call    SetArguments
  1724.  
  1725.         mov     al,[I.Arch]
  1726.         cmp     al,CPUX64
  1727.         jz      .SkipRand
  1728.         test    [I.Flags],_R
  1729.         jz      .SkipRand
  1730.         BitTR   I.Prefixes,P66
  1731. .SkipRand:
  1732.         cmp     al,CPUX64
  1733.         jnz     .SkipRand64
  1734.         test    [I.Flags],_R48
  1735.         jz      .SkipREX48
  1736.         mov     al,[I.NotW]
  1737.         and     byte [I.Prefixes],al
  1738.       .SkipREX48:
  1739.         test    [I.Flags],_R64
  1740.         jz      .SkipRand64
  1741.         BitTR   I.Prefixes,P66
  1742. .SkipRand64:
  1743.  
  1744.         BitT    I.Prefixes,PF0
  1745.         jnc     .SkipLOCK
  1746.         cmp     [I.PossibleLOCK],0
  1747.         jnz     .SkipLOCK
  1748.         cmp     [I.PrefixNames],TLOCK
  1749.         jz      ErrorDec
  1750. .SkipLOCK:
  1751.  
  1752.         BitT    I.Prefixes,P4X
  1753.         jnc     .Skip4X
  1754.         cmp     [I.PrefixNames],TREX??
  1755.         jz      ErrorDec
  1756. .Skip4X:
  1757.  
  1758.         BitT    I.Prefixes,P66
  1759.         jnc     .Skip66
  1760.         cmp     [I.PrefixNames],TRAND
  1761.         jz      ErrorDec
  1762. .Skip66:
  1763.  
  1764.         BitT    I.Prefixes,P67
  1765.         jnc     .Skip67
  1766.         cmp     [I.PrefixNames],TADDR
  1767.         jz      ErrorDec
  1768. .Skip67:
  1769.  
  1770.         BitT    I.Prefixes,P9B
  1771.         jnc     .SkipWAIT
  1772.         cmp     [I.PrefixNames],TWAIT
  1773.         jz      ErrorDec
  1774. .SkipWAIT:
  1775.  
  1776.         test    [I.Flags],_B
  1777.         jz      .SkipBND
  1778.         BitT    I.Prefixes,PF2
  1779.         jnc     .SkipBND
  1780.         movzx   eax,[I.PosF2]
  1781.         mov     [rax*2+I.PrefixNames],TBND
  1782.         mov     [I.PossibleF2F3],True
  1783. .SkipBND:
  1784.  
  1785.         test    [I.Flags],_XA+_XR
  1786.         jz      .SkipXAXR
  1787.  
  1788.         mov     al,00h
  1789.         test    [I.Flags],_XA
  1790.         jz      .SkipXA
  1791.         BitT    I.Prefixes,PF2
  1792.         setc    al
  1793. .SkipXA:
  1794.         mov     ah,00h
  1795.         test    [I.Flags],_XR
  1796.         jz      .SkipXR
  1797.         BitT    I.Prefixes,PF3
  1798.         setc    ah
  1799. .SkipXR:
  1800.         mov     cl,[I.PosF2]
  1801.         mov     dx,TXACQUIRE
  1802.         cmp     ax,0001h
  1803.         jz      .IsF2
  1804.         mov     cl,[I.PosF3]
  1805.         mov     dx,TXRELEASE
  1806.         cmp     ax,0100h
  1807.         jz      .IsF3
  1808.         cmp     ax,0101h
  1809.         jnz     .SkipXAXR
  1810.         mov     cl,[I.PosF2]
  1811.         mov     ch,[I.PosF3]
  1812.         mov     dx,TXACQUIRE
  1813.         cmp     cl,ch
  1814.         ja      .IsF2F3
  1815.         mov     cl,ch
  1816.         mov     dx,TXRELEASE
  1817.         jmp     .IsF2F3
  1818. .IsF2: .IsF3:
  1819.         mov     eax,[I.Prefixes]
  1820.         and     al,11b
  1821.         cmp     al,11b
  1822.         jnz     .IsF2F3
  1823.         mov     [I.PossibleF2F3],True
  1824. .IsF2F3:
  1825.         test    [I.Flags],_L
  1826.         jnz     .SkipTestF0
  1827.         BitT    I.Prefixes,PF0
  1828.         jnc     .SkipXAXR
  1829. .SkipTestF0:
  1830.         movzx   eax,cl
  1831.         mov     [rax*2+I.PrefixNames],dx
  1832. .SkipXAXR:
  1833.  
  1834.         BitT    I.Prefixes,PF2
  1835.         jnc     .SkipF2
  1836.         cmp     [I.PossibleF2F3],0
  1837.         jnz     .SkipF2
  1838.         cmp     [I.PrefixNames],TREPNE
  1839.         jz      ErrorDec
  1840. .SkipF2:
  1841.  
  1842.         BitT    I.Prefixes,PF3
  1843.         jnc     .SkipF3
  1844.         cmp     [I.PossibleF2F3],0
  1845.         jnz     .SkipF3
  1846.         cmp     [I.PrefixNames],TREP
  1847.         jz      ErrorDec
  1848. .SkipF3:
  1849.  
  1850.         cmp     [I.DisplayHint],0
  1851.         jz      .SkipHint
  1852.         test    [I.Flags],_J
  1853.         jz      .SkipHint
  1854.         cmp     [I.Arch],CPUX64
  1855.         jz      .SkipHint
  1856.         mov     al,[I.CurSeg]
  1857.         cmp     al,3Eh
  1858.         jz      .IsHint
  1859.         cmp     al,2Eh
  1860.         jz      .IsHint
  1861.         cmp     al,64h
  1862.         jnz     .SkipHint
  1863.       .IsHint:
  1864.         BitTR   I.Prefixes,PSEG
  1865.       .SkipHint:
  1866.  
  1867.         BitT    I.Prefixes,PSEG
  1868.         jnc     .SkipPSEG
  1869.         cmp     [I.PosSEG],0
  1870.         jz      ErrorDec
  1871. .SkipPSEG:
  1872.  
  1873.         mov     rax,rsi
  1874.         sub     rax,[I.Addr]
  1875. RtnXX:  ret
  1876.  
  1877. ErrorDec:
  1878.         mov     rsp,[I.SaveRSP]
  1879.  
  1880.         mov     eax,[I.PrefixesCpy]
  1881.         mov     [I.Prefixes],eax
  1882.  
  1883.         mov     [I.PrefixCount],1
  1884.  
  1885.         cmp     [I.Syntax],0
  1886.         jnz     .ForceDB
  1887.         cmp     [I.UseDB],0
  1888.         jnz     .ForceDB
  1889.         movzx   eax,[I.PrefixNames+0*2]
  1890.         or      eax,eax
  1891.         jnz     .Prefix
  1892. .ForceDB:
  1893.  
  1894.         mov     dword [I.Name],T?BYTE shl 16+TDB
  1895.  
  1896.         mov     [I.RandSize],0
  1897.         mov     [I.PrefixCount],0
  1898.  
  1899.         mov     rax,[I.Addr]
  1900.         mov     al,[rax]
  1901.         mov     [I.Arg1.ImmB],al
  1902.         mov     [I.Arg1.Type],80h+1
  1903.         jmp     .Continue
  1904.  
  1905. .Prefix:mov     [I.Name],TNULL
  1906.         mov     [I.Arg1.Type],0
  1907. .Continue:
  1908.         xor     eax,eax
  1909.  
  1910.         mov     [I.Arg2.Type],al
  1911.         mov     [I.Arg3.Type],al
  1912.         mov     [I.Arg4.Type],al
  1913.         mov     [I.Arg5.Type],al
  1914.  
  1915.         mov     [I.Arg1.Mem],al
  1916.         mov     [I.Arg2.Mem],al
  1917.         mov     [I.Arg3.Mem],al
  1918.         mov     [I.Arg4.Mem],al
  1919.         mov     [I.Arg5.Mem],al
  1920.  
  1921.         mov     [I.Prefix],al
  1922.         mov     [I.LastByte],al
  1923.         and     dword [I.Suffix],eax
  1924.         and     dword [I.Suffix2nd],eax
  1925.  
  1926.         mov     [I.AAAA],al
  1927.         mov     [I.Z],al
  1928.  
  1929.         mov     [I.Relative],al         ;* 23-06-2017
  1930.         mov     [I.IsAddress],al        ;* 23-06-2017
  1931.  
  1932.         mov     [I.RandSize],al
  1933.         mov     [I.Point],ax
  1934.  
  1935.         mov     eax,1
  1936.         ret
  1937.  
  1938. SetArguments:
  1939.  
  1940.         call    DetectMULT
  1941.  
  1942.         cmp     [I.VT],0
  1943.         jz      .L1
  1944.         cmp     [I.Indx],-1
  1945.         jnz     .L1
  1946.         mov     [I.Indx],4      ;fix for EVEX
  1947. .L1:
  1948.         lea     rdi,[I.Arg1]
  1949.         call    SetArgument
  1950.         lea     rdi,[I.Arg2]
  1951.         call    SetArgument
  1952.         lea     rdi,[I.Arg3]
  1953.         call    SetArgument
  1954.         lea     rdi,[I.Arg4]
  1955.         call    SetArgument
  1956.         lea     rdi,[I.Arg5]
  1957. SetArgument:
  1958.         movzx   eax,[rdi+TArg.Type2nd]
  1959.         and     al,7Fh
  1960.         mov     eax,[rax*4+SetArg]
  1961.         jmp     rax
  1962.  
  1963. SetArg  dd      .Exit,.RM,.Reg,.VVVV,.Exit
  1964.  
  1965. .RM:
  1966.         cmp     [I.Mod],3
  1967.         setnz   [rdi+TArg.Mem]
  1968.  
  1969.         mov     dl,[I.RM]
  1970.  
  1971.         mov     al,[rdi+TArg.Type]
  1972.         and     eax,0Fh
  1973.         bt      [TBIT],eax
  1974.         jnc     .XXXX
  1975.  
  1976.         add     dl,[I.B]
  1977.         add     dl,[I.XX]
  1978.  
  1979.         cmp     al,GPR08
  1980.         jnz     .NoB8
  1981.         call    ClearPRM
  1982.         jmp     .XXXX
  1983. .NoB8:  call    ClearBRM
  1984.         jmp     .XXXX
  1985.  
  1986. .Reg:   mov     dl,[I.Reg]
  1987.  
  1988.         mov     al,[rdi+TArg.Type]
  1989.         and     eax,0Fh
  1990.         bt      [TBIT],eax
  1991.         jnc     .XXXX
  1992.  
  1993.         add     dl,[I.R]
  1994.  
  1995.         cmp     al,GPR08
  1996.         jnz     .NoR8
  1997.         call    ClearP
  1998.         jmp     .XXXX
  1999. .NoR8:  call    ClearR
  2000.         jmp     .XXXX
  2001.  
  2002. .VVVV:  mov     dl,[I.VVVV]
  2003. .XXXX:  add     [rdi+TArg.Reg],dl
  2004.  
  2005. .Exit:  ret
  2006.  
  2007. ClearR: mov     al,[I.NotR]
  2008.         and     byte [I.Prefixes],al
  2009.         ret
  2010.  
  2011. ClearPRM:
  2012.         cmp     [I.Mod],3
  2013.         jnz     ClearP.NoClear
  2014. ClearP: cmp     dl,4
  2015.         jb      .NoClear
  2016.         mov     al,[I.NotP]
  2017.         and     byte [I.Prefixes],al
  2018. .NoClear:
  2019.         ret
  2020.  
  2021. ClearBRM:
  2022.         cmp     [I.Mod],3
  2023.         jnz     ClearB.NoClear
  2024. ClearB: mov     al,[I.NotB]
  2025.         and     byte [I.Prefixes],al
  2026. .NoClear:
  2027.         ret
  2028.  
  2029. ClearW: mov     al,[I.NotW]
  2030.         and     byte [I.Prefixes],al
  2031.         ret
  2032.  
  2033. MakeSpace:
  2034.         cmp     r10,0
  2035.         jnz     .SkipFill
  2036.         inc     r10
  2037.         push    rdx
  2038.         mov     rdx,rdi
  2039.         sub     rdx,r9
  2040.         mov     r9,rcx
  2041.         mov     ecx,[SpaceSize]
  2042.         sub     rcx,rdx
  2043.         pop     rdx
  2044.         ja      .DoFill
  2045.         mov     ecx,1
  2046.         cmp     byte [rdi-1],32
  2047.         jz      .ZeroFill
  2048. .DoFill:
  2049.         mov     al,32
  2050.         rep     stosb
  2051. .ZeroFill:
  2052.         mov     rcx,r9
  2053. .SkipFill:
  2054.         ret
  2055.  
  2056. ShowHint:
  2057.         cmp     [I.DisplayHint],0
  2058.         jz      .SkipHint
  2059.         test    [I.Flags],_J
  2060.         jz      .SkipHint
  2061.         cmp     [I.Arch],CPUX64
  2062.         jz      .SkipHint
  2063.         mov     si,TJ?
  2064.         cmp     [I.CurSeg],3Eh
  2065.         jz      .IsHint
  2066.         mov     si,TN?
  2067.         cmp     [I.CurSeg],2Eh
  2068.         jz      .IsHint
  2069.         mov     si,TA?
  2070.         cmp     [I.CurSeg],64h
  2071.         jnz     .SkipHint
  2072.       .IsHint:
  2073.         call    MoveStringData
  2074.       .SkipHint:
  2075.         ret
  2076.  
  2077. PrnAsm:
  2078.         mov     rdi,[TheBufferO]
  2079.  
  2080.         add     [DefInst.Addr],rax
  2081.  
  2082.         mov     rsi,rax
  2083.         mov     rax,[Origin]
  2084.         add     [Origin],rsi
  2085.         cmp     [I.NoAddress],0
  2086.         jnz     .SkipAddr
  2087.  
  2088.         cmp     [TheL],0
  2089.         jz      .SkipL
  2090.         mov     byte [rdi],'L'
  2091.         scasb
  2092. .SkipL:
  2093. if 0
  2094.         or      ecx,0xFFFFFFFF
  2095.         cmp     rax,rcx
  2096.         setbe   cl
  2097.         mov     ch,16
  2098.         shr     ch,cl
  2099.         mov     cl,ch
  2100. else
  2101.   if %B=32
  2102.         mov     cl,8
  2103.   else
  2104.         mov     cl,16
  2105.   end if
  2106. end if
  2107. if ~OS
  2108.         push    rdi
  2109. end if
  2110.         call    Hex
  2111. if ~OS
  2112.         push    [LastNames]
  2113. end if
  2114.         mov     word [rdi],': '
  2115.         scasw
  2116. .SkipAddr:
  2117.         mov     rax,rsi
  2118.  
  2119.         cmp     [I.ShowSize],0
  2120.         jz      .NoShowSize
  2121.         mov     byte [rdi],'('
  2122.         scasb
  2123.         mov     bl,10
  2124.         div     bl
  2125.         add     ax,'00'
  2126.         stosw
  2127.         mov     ax,') '
  2128.         stosw
  2129.         mov     rax,rsi
  2130.       .NoShowSize:
  2131.  
  2132.         cmp     [I.Medium],0
  2133.         jnz     .SkipCodeStr
  2134.         mov     edx,MaxInstructionLength+1
  2135.         sub     edx,eax
  2136.         jc      .SkipCodeStr
  2137.         mov     ecx,eax
  2138.         or      ecx,ecx
  2139.         jz      .Skip
  2140.         mov     r10,rcx
  2141.         mov     rsi,[I.Addr]
  2142. .Loop:
  2143.         lodsb
  2144.         mov     ecx,[rax*2+HexString]
  2145.         mov     [rdi],cx
  2146.         scasw
  2147.  
  2148.         dec     r10
  2149.         jnz     .Loop
  2150.  
  2151.         lea     ecx,[rdx*2+1]
  2152.         mov     al,32
  2153.         rep     stosb
  2154. .SkipCodeStr:
  2155. if ~OS
  2156.         pop     [LastNames]
  2157.         xchg    rdi,[rsp]
  2158.         mov     rsi,[LastNames]
  2159.         or      rsi,rsi
  2160.         jz      .SkipEmptyName
  2161. .LoopEmptyName:
  2162.         mov     al,[rsi]
  2163.         or      al,al
  2164.         jz      .LastEmptyName
  2165.         mov     [rdi],al
  2166.         inc     esi
  2167.         inc     edi
  2168.         jmp     .LoopEmptyName
  2169. .LastEmptyName:
  2170. if 1
  2171.         mov     [rdi],byte 32
  2172.         inc     edi
  2173. end if
  2174. .SkipEmptyName:
  2175.         pop     rdi
  2176. end if
  2177.         xor     edx,edx
  2178.         mov     r10,rdx                 ;no space
  2179.         movzx   ecx,[I.PrefixCount]
  2180.         jrcxz   .ZeroPrefixes
  2181. .LoopPrefixes:
  2182.         movzx   eax,[rdx*1+I.PrefixBites]
  2183.         mov     esi,dword [rdx*2+I.PrefixNames]
  2184.  
  2185.         cmp     [I.Syntax],0
  2186.         jz      .SkipSyn
  2187.         mov     ebx,dword [I.SegmName]
  2188.         cmp     al,PSEG
  2189.         jz      .MoveToESI
  2190.         mov     bx,TDATA
  2191.         cmp     al,P66
  2192.         jz      .MoveToESI
  2193.         mov     bx,TADDR
  2194.         cmp     al,P67
  2195.         jz      .MoveToESI
  2196.         cmp     al,PF0
  2197.         jz      .SkipSyn
  2198.         cmp     al,PF2
  2199.         jz      .SkipSyn
  2200.         cmp     al,PF3
  2201.         jz      .SkipSyn
  2202.         jmp     .SkipThisPrefix
  2203.       .MoveToESI:
  2204.         mov     esi,ebx
  2205.       .SkipSyn:
  2206.  
  2207.         cmp     al,P4X
  2208.         jnz     .SkipCheckREX
  2209.         cmp     [I.NoREX],0
  2210.         jnz     .SkipThisPrefix
  2211.       .SkipCheckREX:
  2212.  
  2213.         call    ShowHint
  2214.  
  2215.         bt      [I.Prefixes],eax
  2216.         jnc     .SkipThisPrefix
  2217.         mov     r9,rdi
  2218.         call    MoveStringData
  2219.         call    MakeSpace
  2220.       .SkipThisPrefix:
  2221.         inc     edx
  2222.         loop    .LoopPrefixes
  2223. .ZeroPrefixes:
  2224.  
  2225.         movzx   eax,[I.Syntax]
  2226.         mov     esi,dword [I.Name+rax*2]
  2227.         cmp     si,-1
  2228.         cmovz   esi,dword [I.Name]
  2229.         mov     r9,rdi
  2230.  
  2231.         mov     al,[I.Prefix]
  2232.         or      al,al
  2233.         jz      .SkipPrefix
  2234.         stosb
  2235. .SkipPrefix:
  2236.         call    MoveStringData
  2237.  
  2238.         mov     eax,dword [I.Suffix2nd]
  2239.         or      eax,eax
  2240.         jnz     .SyntaxSuffix
  2241.         mov     eax,dword [I.Suffix]
  2242.         cmp     [I.Syntax],0
  2243.         jz      .SyntaxSuffix
  2244.         test    [I.Flags],_S
  2245.         jz      .SyntaxSuffix
  2246.         movzx   eax,[I.RandSize]
  2247.  
  2248.         cmp     [I.IsFloat],0
  2249.         jz      .NoFloat
  2250.         and     al,7Fh
  2251.         mov     ah,al
  2252.         mov     al,'s'
  2253.         cmp     ah,VDWORD
  2254.         jz      .SyntaxSuffix
  2255.         mov     al,'l'
  2256.         cmp     ah,VQWORD
  2257.         jz      .SyntaxSuffix
  2258.         mov     al,'t'
  2259.         cmp     ah,VTWORD
  2260.         jz      .SyntaxSuffix
  2261.         xor     ah,ah
  2262.       .NoFloat:
  2263.  
  2264.         or      al,al
  2265.         jz      .SyntaxIntel
  2266.       .SelectPoint:
  2267.         cmp     al,VQWORD
  2268.         ja      .SyntaxIntel
  2269.         mov     al,[rax+Suffixes]
  2270.       .SyntaxSuffix:
  2271.         or      al,al
  2272.         jz      .SyntaxIntel
  2273.       .StoreChar:
  2274.         stosb
  2275.         shr     eax,8
  2276.         cmp     al,32
  2277.         jae     .StoreChar
  2278. .SyntaxIntel:
  2279.  
  2280.         mov     al,[I.LastByte]
  2281.         or      al,al
  2282.         jz      .NoModify
  2283.         mov     [rdi-1],al
  2284. .NoModify:
  2285.  
  2286.         push    r10
  2287.         call    MakeSpace
  2288.         pop     r10
  2289.         cmp     r10,0
  2290.         jz      .SkipSpace
  2291.         mov     al,32
  2292.         stosb
  2293. .SkipSpace:
  2294.  
  2295.         cmp     [I.Syntax],0
  2296.         jnz     .SkipPoint
  2297.         movzx   esi,[I.Point]
  2298.         or      esi,esi
  2299.         jz      .SkipPoint
  2300.         call    MoveStringData
  2301. .SkipPoint:
  2302.  
  2303. r8      equ     rbx
  2304.  
  2305.         cmp     [I.Syntax],0
  2306.         jnz     .SyntaxATT
  2307.         lea     r8,[I.Arg1]
  2308.         call    ParseArg
  2309.         call    MoveKandZ
  2310.         lea     r8,[I.Arg2]
  2311.         call    ParseArg
  2312.         lea     r8,[I.Arg3]
  2313.         call    ParseArg
  2314.         lea     r8,[I.Arg4]
  2315.         call    ParseArg
  2316.         lea     r8,[I.Arg5]
  2317.         call    ParseArg
  2318.         test    [I.MainFlags],00000001b
  2319.         jnz     .SkipSAE
  2320.         call    MoveSAE1
  2321. .SkipSAE:
  2322.         jmp     .Print
  2323.  
  2324. .SyntaxATT:
  2325.         call    MoveSAE2
  2326.         lea     r8,[I.Arg5]
  2327.         call    ParseArgATT
  2328.         lea     r8,[I.Arg4]
  2329.         call    ParseArgATT
  2330.         lea     r8,[I.Arg3]
  2331.         call    ParseArgATT
  2332.         lea     r8,[I.Arg2]
  2333.         call    ParseArgATT
  2334.         lea     r8,[I.Arg1]
  2335.         call    ParseArgATT
  2336.         call    MoveKandZ
  2337. .Print:
  2338.  
  2339. .ScanBack:
  2340.         dec     rdi
  2341.         cmp     byte [rdi],32
  2342.         jz      .ScanBack
  2343.         scasb
  2344.  
  2345.         lea     rsi,[CrLf]
  2346.         call    MoveStringDataRSI
  2347.  
  2348.         mov     byte [rdi],0
  2349. if 1
  2350.         mov     rax,rdi
  2351.         sub     rax,[TheBufferO]
  2352. else
  2353.         mov     rax,[TheBufferO]
  2354.         call    StrLen
  2355. end if
  2356. if 0
  2357.         cmp     [I.Compression],0
  2358.         jz      .NoComp
  2359.         Compress
  2360.       .NoComp:
  2361.         add     [TheBufferO],rax
  2362.  
  2363.         mov     rdi,[TheBufferO]
  2364.         cmp     rdi,Buffer+BufferSizeO-255
  2365.         jb      .Skip
  2366.         call    PrintBuffer
  2367.         mov     [TheBufferO],Buffer
  2368. end if
  2369. .Skip:
  2370.         ret
  2371. if 0
  2372. PrintBuffer:
  2373.         mov     edi,Buffer
  2374.         mov     rcx,[TheBufferO]
  2375.         sub     rcx,rdi
  2376.         jbe     .DoNotWrite
  2377.         mov     rdx,rdi
  2378.         call    WriteBlock
  2379.         jc      WriteErr
  2380. .DoNotWrite:
  2381.         ret
  2382. end if
  2383. MoveStringData:
  2384.         movzx   esi,si
  2385.         add     esi,Names
  2386. MoveStringDataRSI:
  2387.       @@:
  2388.         movsb
  2389.         cmp     byte [rdi-1],0
  2390.         jnz     @B
  2391.         dec     rdi
  2392.         ret
  2393.  
  2394. AddVT:
  2395.         cmp     [I.VT],0
  2396.         jz      .Old
  2397.  
  2398.         movzx   edx,[I.VT]
  2399.         mov     edx,[rdx*4+AD2Regs]
  2400. .Old:
  2401.         cmp     [I.VT],0
  2402.         jz      .TTTT
  2403.         add     al,[I.V]
  2404. .TTTT:
  2405.         cmp     [I.Arch],CPUX64
  2406.         jz      .VVVV
  2407.         and     al,00111b
  2408. .VVVV:
  2409.         ret
  2410.  
  2411. StoreSegment:
  2412.         cmp     [I.IsLEA],0
  2413.         jnz     .SkipSegm
  2414.         mov     al,[I.CurSeg]
  2415.         or      al,al
  2416.         jz      .SkipSegm
  2417.         cmp     al,[I.DefSeg]
  2418.         jz      .SkipSegm
  2419.         mov     si,[I.SegmName]
  2420.         cmp     si,TNULL
  2421.         jz      .SkipSegm
  2422.  
  2423.         cmp     [I.Syntax],0
  2424.         jz      .SkipPercent
  2425.         mov     al,'%'
  2426.         stosb
  2427. .SkipPercent:
  2428.  
  2429.         call    MoveStringData
  2430.         mov     al,':'
  2431.         stosb
  2432. .SkipSegm:
  2433.         ret
  2434.  
  2435. ParseArgATT:
  2436.         mov     [I.HexPrefix],True
  2437.  
  2438.         cmp     [r8+TArg.Mem],0
  2439.         jnz     .SkipType
  2440.         cmp     [r8+TArg.Type],0
  2441.         jz      ParseArg.SkipArg
  2442. .SkipType:
  2443.  
  2444.         cmp     [I.IsCALLJMP],0
  2445.         jz      .No
  2446.         mov     al,'*'
  2447.         stosb
  2448. .No:
  2449.         mov     rax,r8
  2450.         xchg    [I.LastArg],rax
  2451.         or      rax,rax
  2452.         jz      .Arg1st
  2453.         mov     al,','
  2454.         stosb
  2455. .Arg1st:
  2456.  
  2457.         cmp     [r8+TArg.Type2nd],Is1
  2458.         jz      .Put1
  2459.         test    [r8+TArg.Type],10h
  2460.         jnz     .PtrATT
  2461.         test    [r8+TArg.Type],80h
  2462.         jnz     ParseArg.ImmATT
  2463.         cmp     [r8+TArg.Mem],0
  2464.         jz      .Reg
  2465. .Mem:
  2466.         call    StoreSegment
  2467.  
  2468.         mov     cl,[I.MULT]
  2469.         cmp     [I.DispSize],1
  2470.         jnz     .NoMULT
  2471.         mov     ch,byte [I.Disp+1]
  2472.         sal     [I.Disp],cl
  2473.         cmp     ch,byte [I.Disp+1]
  2474.         jz      .NoMULT
  2475.         inc     [I.DispSize]
  2476. .NoMULT:
  2477.  
  2478.         mov     al,[I.DispSize]
  2479.         or      al,al
  2480.         jz      .SkipDisp
  2481.  
  2482.         mov     rax,[I.Disp]
  2483. if %B=32
  2484.         mov     edx,[I.Disp+4]
  2485.         test    [I.MainFlags],80h
  2486.         jnz     .SkipCDQ
  2487.         cmp     [I.DispSize],4
  2488.         ja      .SkipCDQ
  2489.         cdq
  2490. .SkipCDQ:
  2491. end if
  2492.         cmp     byte [rdi-1],'['
  2493.         jz      .SkipNegate
  2494.         cmp     [I.Negate],0
  2495.         jz      .SkipNegate
  2496. if %B=64
  2497.         or      rax,rax
  2498. else
  2499.         cmp     [I.Arch],CPUX64
  2500.         jz      .Arch64
  2501. .Arch64:or      eax,eax
  2502.         jmp     .ArchXX
  2503.         or      edx,edx
  2504. .ArchXX:
  2505. end if
  2506.         jns     .SkipNegate
  2507.         mov     byte [rdi],'-'
  2508.         scasb
  2509. .NoPlus:
  2510.         neg     rax
  2511. if %B=32
  2512.         adc     edx,0
  2513.         neg     edx
  2514. end if
  2515. .SkipNegate:
  2516.  
  2517.         mov     cl,[I.DispSize]
  2518.         add     cl,cl
  2519. if %B=32
  2520.         cmp     cl,8
  2521.         jbe     .SkipHigh
  2522.         push    eax
  2523.         mov     eax,edx
  2524.         mov     cl,8
  2525.         call    Bin2Hex32
  2526.         pop     eax
  2527.         mov     cl,8
  2528.         call    Hex
  2529.         jmp     .SkipDisp
  2530. .SkipHigh:
  2531. end if
  2532.         call    Bin2Hex
  2533. .SkipDisp:
  2534.  
  2535.         cmp     [I.Relative],0
  2536.         jnz     .SkipCheck
  2537.         mov     al,[I.Base]
  2538.         and     al,[I.Indx]
  2539.         cmp     al,-1
  2540.         jz      .SkipBaseIndx
  2541. .SkipCheck:
  2542.  
  2543.         mov     al,'('
  2544.         stosb
  2545.  
  2546.         movzx   eax,[I.Address]
  2547.         mov     edx,[rax*4+AD2Regs]
  2548.  
  2549.         cmp     [I.Relative],0
  2550.         jz      .SkipRels
  2551.         mov     byte [rdi],'%'
  2552.         scasb
  2553.         mov     esi,[16*2+rdx]
  2554.         call    MoveStringData
  2555.         dec     rdi
  2556. .SkipRels:
  2557.  
  2558.         mov     al,[I.Base]
  2559.         cmp     al,-1
  2560.         jz      .SkipBase
  2561.  
  2562.         call    AddVT.TTTT
  2563.  
  2564.         mov     byte [rdi],'%'
  2565.         scasb
  2566.         mov     esi,[rax*2+rdx]
  2567.         call    MoveStringData
  2568. .SkipBase:
  2569.  
  2570.         mov     al,[I.Indx]
  2571.         cmp     al,-1
  2572.         jz      .SkipIndx
  2573.  
  2574.         call    AddVT
  2575.  
  2576.         mov     word [rdi],',%'
  2577.         scasw
  2578.         mov     esi,[rax*2+rdx]
  2579.         call    MoveStringData
  2580.         mov     al,','
  2581.         stosb
  2582.         mov     al,[I.Scale]
  2583.         cmp     al,-1
  2584.         jz      .SkipScale
  2585.         mov     al,[rax+Scales]
  2586.         stosb
  2587. .SkipScale:
  2588.  
  2589. .SkipIndx:
  2590.         mov     al,')'
  2591.         stosb
  2592.  
  2593. .SkipBaseIndx:
  2594.  
  2595.         call    MoveXtoX
  2596.  
  2597.         ret
  2598. .Reg:
  2599.         mov     al,'%'
  2600.         stosb
  2601.         jmp     ParseArg.Reg
  2602.  
  2603. .PtrATT:
  2604.         mov     ax,'(%'
  2605.         stosw
  2606.  
  2607.         movzx   eax,[I.Address]
  2608.         mov     edx,[rax*4+AD2Regs]
  2609.  
  2610.         mov     al,[r8+TArg.Reg]
  2611.         mov     esi,dword [rax*2+rdx]
  2612.         call    MoveStringData
  2613.  
  2614.         jmp     .SkipIndx
  2615.  
  2616. ParseArg.SkipArg:
  2617.         ret
  2618.  
  2619. ParseArgATT.Put1:
  2620.         mov     al,'$'
  2621.         stosb
  2622. ParseArg.Put1:
  2623.         mov     al,'1'
  2624.         stosb
  2625.         ret
  2626.  
  2627. ParseArg:
  2628.         test    [r8+TArg.Type],80h
  2629.         jz      .NoIMM
  2630.         or      [I.MainFlags],00000001b
  2631.         call    MoveSAE1
  2632. .NoIMM:
  2633.         cmp     [r8+TArg.Mem],0
  2634.         jnz     .SkipType
  2635.         cmp     [r8+TArg.Type],0
  2636.         jz      .SkipArg
  2637. .SkipType:
  2638.         lea     rax,[I.Arg1]
  2639.         cmp     r8,rax
  2640.         jz      .Arg1st
  2641.         test    [r8+TArg.Type2nd],80h
  2642.         jz      .NoPlusReg
  2643.         mov     ax,'+3'
  2644.         stosw
  2645. .NoPlusReg:
  2646.         mov     al,','
  2647.         cmp     [I.MemSeparator],0
  2648.         jz      .NoSeparate
  2649.         mov     al,':'
  2650.      .NoSeparate:
  2651.         stosb
  2652. .Arg1st:
  2653.  
  2654.         cmp     [r8+TArg.Type2nd],Is1
  2655.         jz      .Put1
  2656.         test    [r8+TArg.Type],10h
  2657.         jnz     .Ptr
  2658.         test    [r8+TArg.Type],80h
  2659.         jnz     .Imm
  2660.  
  2661.         cmp     [r8+TArg.Mem],0
  2662.         jz      .Reg
  2663. .Mem:
  2664.         movzx   eax,[I.Address]
  2665.         mov     edx,[rax*4+AD2Regs]
  2666.  
  2667.         movzx   eax,[I.RandSize]
  2668.  
  2669.         cmp     [I.NoShowRand],0
  2670.         jnz     .SkipRand
  2671.         cmp     [I.ShowRand],0
  2672.         jnz     .DoShowIt
  2673.         test    [I.Flags],_O
  2674.         jnz     .SkipRand
  2675.         bt      eax,7
  2676.         jc      .SkipRand
  2677. .DoShowIt:
  2678.         and     al,7Fh
  2679.         mov     esi,dword [rax*2+SZ2Name]
  2680.         call    MoveStringData
  2681. .SkipRand:
  2682.  
  2683.         cmp     [I.Fasm],0
  2684.         jnz     .SkipSegm
  2685.         call    StoreSegment
  2686. .SkipSegm:
  2687.  
  2688.         mov     al,'['
  2689.         stosb
  2690.  
  2691.         cmp     [I.Fasm],0
  2692.         jz      .SegmSkip
  2693.         call    StoreSegment
  2694. .SegmSkip:
  2695.  
  2696.         cmp     [I.Fasm],0
  2697.         jz      .SkipSizeOvr
  2698.         BitT    I.PrefixesCpy,P67
  2699.         jnc     .NoAddress
  2700.         cmp     [I.Relative],0
  2701.         jnz     .NoAddress
  2702.         mov     al,[I.Base]
  2703.         and     al,[I.Indx]
  2704.         cmp     al,-1
  2705.         jnz     .NoAddress
  2706.         movzx   eax,[I.DispSize]
  2707.         bsf     eax,eax
  2708.         mov     esi,dword [rax*2+SZ2Mems]
  2709.         call    MoveStringData
  2710.         jmp     .SkipSizeOvr
  2711. .NoAddress:
  2712.         movzx   eax,[I.DispSize]
  2713.         or      al,al
  2714.         jz      .SkipSizeOvr
  2715.         mov     rcx,[I.Disp]
  2716.         bsf     eax,eax
  2717.         cmp     rcx,[rax*_8_+SZ2Mask]
  2718.         ja      .SkipSizeOvr
  2719. if %B=32
  2720.         cmp     eax,3
  2721.         jnz     .SkipSizeQWs
  2722.         cmp     [I.Disp+4],0
  2723.         ja      .SkipSizeOvr
  2724. .SkipSizeQWs:
  2725. end if
  2726.         mov     esi,dword [rax*2+SZ2Mems]
  2727.         call    MoveStringData
  2728. .SkipSizeOvr:
  2729.  
  2730.         mov     al,[I.Base]
  2731.         cmp     al,-1
  2732.         jz      .SkipBase
  2733.         call    AddVT.TTTT
  2734.         mov     esi,[rax*2+rdx]
  2735.         call    MoveStringData
  2736. .SkipBase:
  2737.         mov     al,[I.Indx]
  2738.         cmp     al,-1
  2739.         jz      .SkipIndx
  2740.  
  2741.         cmp     [I.Base],-1
  2742.         jz      .Skip1
  2743.         mov     byte [rdi],'+'
  2744.         scasb
  2745.      .Skip1:
  2746.  
  2747.         call    AddVT
  2748.  
  2749.         mov     esi,[rax*2+rdx]
  2750.         call    MoveStringData
  2751. .SkipIndx:
  2752.         mov     al,[I.Indx]
  2753.         cmp     al,-1
  2754.         jz      .SkipScale
  2755.         mov     al,[I.Scale]
  2756.         cmp     al,-1
  2757.         jz      .SkipScale
  2758.         cmp     [I.ShowScale],0
  2759.         jnz     .DoShowScale
  2760.         or      al,al
  2761.         jz      .SkipScale
  2762. .DoShowScale:
  2763.         mov     ah,[rax+Scales]
  2764.         mov     al,'*'
  2765.         stosw
  2766. .SkipScale:
  2767.  
  2768.         mov     cl,[I.MULT]
  2769.         cmp     [I.DispSize],1
  2770.         jnz     .NoMULT
  2771.         mov     ch,byte [I.Disp+1]
  2772.         sal     [I.Disp],cl
  2773.         cmp     ch,byte [I.Disp+1]
  2774.         jz      .NoMULT
  2775.         inc     [I.DispSize]
  2776. .NoMULT:
  2777.  
  2778.         mov     al,[I.DispSize]
  2779.         or      al,al
  2780.         jz      .SkipDisp
  2781.  
  2782.         mov     al,[I.Base]
  2783.         and     al,[I.Indx]
  2784.         cmp     al,-1
  2785.         jz      .Skip2
  2786.         mov     byte [rdi],'+'
  2787.         scasb
  2788.      .Skip2:
  2789.  
  2790.         cmp     [I.Relative],0
  2791.         jz      .SkipRels
  2792.         cmp     [I.HideRIP],0
  2793.         jnz     .HideRels
  2794.         mov     esi,[16*2+rdx]
  2795.         call    MoveStringData
  2796.         jmp     .SkipRels
  2797. .HideRels:
  2798.         mov     [I.DispSize],8
  2799.         mov     rax,[I.Disp]
  2800.         add     rax,[Origin]
  2801. if %B=32
  2802.         mov     edx,[I.Disp+4]
  2803.         adc     edx,0
  2804. end if
  2805.         cmp     [I.Address],AD64
  2806.         jz      .SkipCut
  2807.         mov     eax,eax
  2808.         mov     [I.DispSize],4
  2809.      .SkipCut:
  2810.         mov     [I.Disp],rax
  2811. if %B=32
  2812.         mov     [I.Disp+4],edx
  2813. end if
  2814. .SkipRels:
  2815.         mov     rax,[I.Disp]
  2816. if %B=32
  2817.         mov     edx,[I.Disp+4]
  2818.         test    [I.MainFlags],80h
  2819.         jnz     .SkipCDQ
  2820.         cmp     [I.DispSize],4
  2821.         ja      .SkipCDQ
  2822.         cdq
  2823. .SkipCDQ:
  2824. end if
  2825.         cmp     [TheL],0
  2826.         jz      .SkipL
  2827.         cmp     [I.DispSize],4
  2828.         jb      .SkipL
  2829.         cmp     byte [rdi-1],'+'
  2830.         jz      .SkipL
  2831.         mov     byte [rdi],'L'
  2832.         scasb
  2833.         jmp     .SkipNegate
  2834. .SkipL:
  2835.  
  2836.         cmp     byte [rdi-1],'['
  2837.         jz      .SkipNegate
  2838.         cmp     [I.Negate],0
  2839.         jz      .SkipNegate
  2840.         cmp     [I.DispSize],8
  2841.         jz      .SkipNegate
  2842. if %B=64
  2843.         or      rax,rax
  2844. else
  2845.         cmp     [I.Arch],CPUX64
  2846.         jz      .Arch64
  2847. .Arch64:or      eax,eax
  2848.         jmp     .ArchXX
  2849.         or      edx,edx
  2850. .ArchXX:
  2851. end if
  2852.         jns     .SkipNegate
  2853.         cmp     byte [rdi-1],'+'
  2854.         jnz     .NoPlus
  2855.         mov     byte [rdi-1],'-'
  2856. .NoPlus:
  2857.         neg     rax
  2858. if %B=32
  2859.         adc     edx,0
  2860.         neg     edx
  2861. end if
  2862. .SkipNegate:
  2863.  
  2864.         mov     cl,[I.DispSize]
  2865.         add     cl,cl
  2866. if %B=32
  2867.         cmp     cl,8
  2868.         jbe     .SkipHigh
  2869.         push    eax
  2870.         mov     eax,edx
  2871.         mov     cl,8
  2872.         call    Bin2Hex32
  2873.         pop     eax
  2874.         mov     cl,8
  2875.         call    Hex
  2876.         jmp     .SkipDisp
  2877. .SkipHigh:
  2878. end if
  2879.         call    Bin2Hex
  2880. .SkipDisp:
  2881.  
  2882.         mov     al,']'
  2883.         stosb
  2884.  
  2885.         call    MoveXtoX
  2886.  
  2887.         ret
  2888.  
  2889. .Ptr:
  2890.         test    [r8+TArg.Type],20h
  2891.         jz      .RandSkip
  2892.         movzx   eax,[I.RandSize]
  2893.         mov     esi,dword [rax*2+SZ2Name]
  2894.         call    MoveStringData
  2895.      .RandSkip:
  2896.  
  2897.         mov     al,'['
  2898.         stosb
  2899.  
  2900.         movzx   eax,[I.Address]
  2901.         mov     edx,[rax*4+AD2Regs]
  2902.  
  2903.         mov     al,[r8+TArg.Reg]
  2904.         mov     esi,dword [rax*2+rdx]
  2905.         call    MoveStringData
  2906. .SkipAddr:
  2907.  
  2908.         jmp     .SkipDisp
  2909.  
  2910. .Reg:
  2911.         movzx   eax,[r8+TArg.Type]
  2912.         mov     edx,[(rax-1)*4+SZ2Regs]
  2913.  
  2914.         cmp     al,GPR08
  2915.         jnz     .SkipByte
  2916.         cmp     [I.P],0
  2917.         jz      .SkipByte
  2918.         mov     edx,[IntelName]
  2919. .SkipByte:
  2920.  
  2921.         movzx   eax,[r8+TArg.Reg]
  2922.         mov     esi,[rax*2+rdx]
  2923.         call    MoveStringData
  2924.         ret
  2925.  
  2926. .ImmATT:
  2927.         mov     [I.Dollar],0
  2928.         cmp     [I.IsAddress],0
  2929.         jnz     .ImmContinue
  2930.         mov     byte [rdi],'$'
  2931.         scasb
  2932.         jmp     .ImmContinue
  2933. .Imm:
  2934.         cmp     [I.IsShort],0
  2935.         jz      .NoShort
  2936.         mov     si,TSHORT
  2937.         call    MoveStringData
  2938.       .NoShort:
  2939.  
  2940.         mov     cl,[r8+TArg.Type]
  2941.         test    cl,20h
  2942.         jz      .ImmContinue
  2943.         and     ecx,0Fh
  2944.         bsf     ecx,ecx
  2945.         mov     esi,dword [(rcx+1)*2+SZ2Name]
  2946.         call    MoveStringData
  2947. .ImmContinue:
  2948.         mov     rax,[r8+TArg.Imm]
  2949. if %B=32
  2950.         mov     edx,[r8+TArg.Imm+4]
  2951.         test    [r8+TArg.Type],8
  2952.         jnz     .SkipImmCDQ
  2953.         cdq
  2954. .SkipImmCDQ:
  2955. end if
  2956.         mov     cl,[r8+TArg.Type]
  2957.         test    cl,40h
  2958.         jz      .SkipNeg
  2959. if %B=64
  2960.         or      rax,rax
  2961. else
  2962.         or      edx,edx
  2963. end if
  2964.         jns     .SkipNeg
  2965.         mov     byte [rdi],'-'
  2966.         scasb
  2967.         neg     rax
  2968. if %B=32
  2969.         adc     edx,0
  2970.         neg     edx
  2971. end if
  2972. .SkipNeg:
  2973.         cmp     [I.IsAddress],0
  2974. if %B=32
  2975.         jnz     .Hex32
  2976. else
  2977.         jnz     .Hex
  2978. end if
  2979.         and     cl,0Fh
  2980.         add     cl,cl
  2981. if %B=32
  2982.         cmp     cl,8
  2983.         jbe     .SkipHigh32
  2984.         push    eax
  2985.         mov     eax,edx
  2986.         mov     cl,8
  2987.         call    Bin2Hex32
  2988.         pop     eax
  2989.         mov     cl,8
  2990.         call    Hex
  2991.         jmp     .SkipDisp32
  2992. .SkipHigh32:
  2993. end if
  2994.         call    Bin2Hex
  2995. .SkipDisp32:
  2996.         ret
  2997. if %B=32
  2998. .Hex32: or      edx,edx
  2999.         jz      .Hex
  3000.         push    eax
  3001.         mov     eax,edx
  3002.         call    .Hex
  3003.         pop     eax
  3004.         mov     cl,8
  3005.         jmp     Hex
  3006. end if
  3007. .Hex:   mov     cl,16
  3008.         mov     edx,-1
  3009.         cmp     rax,rdx
  3010.         ja      .DoHex
  3011.         mov     cl,8
  3012. .DoHex:
  3013.         cmp     [I.HexPrefix],0
  3014.         je      .L1
  3015.         mov     word [rdi],'0x'
  3016.         scasw
  3017. if 1
  3018.         cmp     [I.IsAddress],0
  3019.         jz      .L2
  3020.         cmp     [TheL],0
  3021.         jz      .L2
  3022.         dec     rdi
  3023.         mov     byte [rdi-1],'L'
  3024. end if
  3025.         jmp     .L2
  3026. .L1:
  3027.         cmp     [I.Dollar],0
  3028.         jne     .L2
  3029.         mov     byte [rdi],'$'
  3030.         scasb
  3031. if 1
  3032.         cmp     [I.IsAddress],0
  3033.         jz      .L2
  3034.         cmp     [TheL],0
  3035.         jz      .L2
  3036.         mov     byte [rdi-1],'L'
  3037. end if
  3038. .L2:
  3039.         call    Hex
  3040.         ret
  3041.  
  3042. PrefixErrorDec:
  3043.         cmp     [I.PosSEG],0
  3044.         jz      ErrorDec
  3045.         mov     [I.SegmName],TNULL      ;ignore this prefix
  3046.         ret
  3047.  
  3048. Rtn6465:
  3049.         movzx   eax,byte [rsi-1]
  3050.         mov     [I.CurSeg],al
  3051.  
  3052.         mov     dx,[(rax-60h)*2+NSEGR]
  3053.         mov     [I.SegmName],dx
  3054.         mov     dx,[(rax-60h)*2+NSEGX]
  3055.         jmp     Rtn262E363E.C6464
  3056.  
  3057. Rtn262E363E64:
  3058.         push    PrefixErrorDec
  3059. Rtn262E363E:
  3060.         movzx   eax,byte [rsi-1]
  3061.         mov     [I.CurSeg],al
  3062.  
  3063.         shr     al,3
  3064.         mov     dx,[(rax-4)*2+NSEGR]
  3065.         mov     [I.SegmName],dx
  3066.         mov     dx,[(rax-4)*2+NSEGX]
  3067. .C6464:
  3068.         movzx   eax,[I.PrefixCount]
  3069.         mov     [rax*2+I.PrefixNames],dx
  3070.         mov     [rax+I.PrefixBites],PSEG
  3071.         inc     [I.PrefixCount]
  3072.  
  3073.         BitTS   I.PrefixesCpy,PSEG
  3074.         BitTS   I.Prefixes,PSEG
  3075.         jnc     @F
  3076.         cmp     [I.PosSEG],0
  3077.         jz      ErrorDec
  3078.       @@:
  3079.         mov     [I.PosSEG],al
  3080.  
  3081.         call    ClrMagicBytes
  3082.  
  3083.         mov     [I.NextByte],1
  3084.         ret
  3085.  
  3086. Rtn4X:
  3087.         mov     al,[rsi-1]
  3088.         mov     [I.PreREX],al
  3089.  
  3090.         call    SetMagicBytes
  3091.  
  3092.         movzx   eax,[I.PrefixCount]
  3093.         mov     [rax*2+I.PrefixNames],TREX??
  3094.         mov     [rax+I.PrefixBites],P4X
  3095.         inc     [I.PrefixCount]
  3096.         mov     [I.Name],TNULL
  3097.  
  3098.         BitTS   I.PrefixesCpy,P4X
  3099.         BitTS   I.Prefixes,P4X
  3100.         jnc     @F
  3101.         cmp     [I.Pos4X],0
  3102.         jz      ErrorDec
  3103.       @@:
  3104.         mov     [I.Pos4X],al
  3105.  
  3106.         mov     al,[rsi-1]
  3107.         mov     ax,[rax*2+HexString]
  3108.         mov     word [Names+TREX??+3],ax
  3109.  
  3110.         mov     [I.NextByte],1
  3111.         ret
  3112. Rtn66:
  3113.         movzx   eax,[I.Arch]
  3114.         mov     al,[rax+XorCPU2OS]
  3115.         mov     [I.Operand],al
  3116.  
  3117.         movzx   eax,[I.PrefixCount]
  3118.         mov     [rax*2+I.PrefixNames],TRAND
  3119.         mov     [rax+I.PrefixBites],P66
  3120.         inc     [I.PrefixCount]
  3121.  
  3122.         mov     [I.Name],TNULL
  3123.  
  3124.         BitTS   I.PrefixesCpy,P66
  3125.         BitTS   I.PrefixByte,P66
  3126.         BitTS   I.Prefixes,P66
  3127.         jnc     @F
  3128.         cmp     [I.Pos66],0
  3129.         jz      ErrorDec
  3130.       @@:
  3131.         mov     [I.Pos66],al
  3132.  
  3133.         call    ClrMagicBytes
  3134.  
  3135.         mov     [I.NextByte],1
  3136.         ret
  3137. Rtn67:
  3138.         movzx   eax,[I.Arch]
  3139.         mov     al,[rax+XorCPU2AD]
  3140.         mov     [I.Address],al
  3141.  
  3142.         movzx   eax,[I.PrefixCount]
  3143.         mov     [rax*2+I.PrefixNames],TADDR
  3144.         mov     [rax+I.PrefixBites],P67
  3145.         inc     [I.PrefixCount]
  3146.  
  3147.         mov     [I.Name],TNULL
  3148.  
  3149.         BitTS   I.PrefixesCpy,P67
  3150.         BitTS   I.Prefixes,P67
  3151.         jnc     @F
  3152.         cmp     [I.Pos67],0
  3153.         jz      ErrorDec
  3154.       @@:
  3155.         mov     [I.Pos67],al
  3156.  
  3157.         call    ClrMagicBytes
  3158.  
  3159.         mov     [I.NextByte],1
  3160.         ret
  3161. Rtn9B:
  3162.         movzx   eax,[I.PrefixCount]
  3163.         mov     [rax*2+I.PrefixNames],TWAIT
  3164.         mov     [rax+I.PrefixBites],P9B
  3165.         inc     [I.PrefixCount]
  3166.  
  3167.         mov     [I.Name],TNULL
  3168.  
  3169.         BitTS   I.PrefixesCpy,P9B
  3170.         BitTS   I.Prefixes,P9B
  3171.         jnc     @F
  3172.         cmp     [I.Pos9B],0
  3173.         jz      ErrorDec
  3174.       @@:
  3175.         mov     [I.Pos9B],al
  3176.  
  3177.         mov     [I.NextByte],1
  3178.         ret
  3179.  
  3180. RtnF0:
  3181.         movzx   eax,[I.PrefixCount]
  3182.         mov     [rax*2+I.PrefixNames],TLOCK
  3183.         mov     [rax+I.PrefixBites],PF0
  3184.         inc     [I.PrefixCount]
  3185.  
  3186.         mov     [I.Name],TNULL
  3187.  
  3188.         BitTS   I.PrefixesCpy,PF0
  3189.         BitTS   I.Prefixes,PF0
  3190.         jnc     @F
  3191.         cmp     [I.PosF0],0
  3192.         jz      ErrorDec
  3193.       @@:
  3194.         mov     [I.PosF0],al
  3195.  
  3196.         call    ClrMagicBytes
  3197.  
  3198.         mov     [I.NextByte],1
  3199.         ret
  3200. RtnF2:
  3201.         movzx   eax,[I.PrefixCount]
  3202.         mov     [rax*2+I.PrefixNames],TREPNE
  3203.         mov     [rax+I.PrefixBites],PF2
  3204.         inc     [I.PrefixCount]
  3205.  
  3206.         mov     [I.Name],TNULL
  3207.  
  3208.         BitTS   I.PrefixesCpy,PF2
  3209.         BitTS   I.PrefixByte,PF2
  3210.         BitTS   I.Prefixes,PF2
  3211.         jnc     @F
  3212.         cmp     [I.PosF2],0
  3213.         jz      ErrorDec
  3214.       @@:
  3215.         mov     [I.PosF2],al
  3216.  
  3217.         call    ClrMagicBytes
  3218.  
  3219.         mov     [I.NextByte],1
  3220.         ret
  3221. RtnF3:
  3222.         movzx   eax,[I.PrefixCount]
  3223.         mov     [rax*2+I.PrefixNames],TREP
  3224.         mov     [rax+I.PrefixBites],PF3
  3225.         inc     [I.PrefixCount]
  3226.  
  3227.         mov     [I.Name],TNULL
  3228.  
  3229.         BitTS   I.PrefixesCpy,PF3
  3230.         BitTS   I.PrefixByte,PF3
  3231.         BitTS   I.Prefixes,PF3
  3232.         jnc     @F
  3233.         cmp     [I.PosF3],0
  3234.         jz      ErrorDec
  3235.       @@:
  3236.         mov     [I.PosF3],al
  3237.  
  3238.         call    ClrMagicBytes
  3239.  
  3240.         mov     [I.NextByte],1
  3241.         ret
  3242.  
  3243. RtnF1:  cmp     [I.Syntax],0
  3244.         jz      .2
  3245.         mov     [I.Name],TICEBP
  3246. .2:
  3247.         test    [I.Sensitive],UND
  3248.         jz      .1
  3249.         mov     [I.Name],TSMI
  3250. .1:     ret
  3251.  
  3252. r8b     equ     cl
  3253. r8      equ     rcx
  3254.  
  3255. Rtn8F:  mov     al,[rsi]
  3256.         and     al,38h
  3257.         shr     al,3
  3258.         jz      EXTINST
  3259.  
  3260.         cmp     [I.PreREX],0
  3261.         jnz     ErrorDec
  3262.  
  3263.         FetchB
  3264.         mov     ah,al
  3265.        ;and     al,11100000b    ;XOP.RXB
  3266.         xor     al,11100000b
  3267.         shr     al,5
  3268.         mov     [I.PreREX],al
  3269.  
  3270.         call    SetMagicBytes
  3271.  
  3272.         mov     [I.P],1
  3273.  
  3274.         mov     al,ah
  3275.         and     al,11111b
  3276.         mov     edx,StrTabXOP8
  3277.         cmp     al,8
  3278.         jb      ErrorDec
  3279.         je      .Z1
  3280.         mov     edx,StrTabXOP9
  3281.         cmp     al,9
  3282.         je      .Z1
  3283.         mov     edx,StrTabXOPA
  3284.         cmp     al,0Ah
  3285.         ja      ErrorDec
  3286. .Z1:    mov     [I.MMMMM],al
  3287.  
  3288.         FetchB
  3289.         mov     ah,al
  3290.         and     al,01111000b
  3291.         xor     al,01111000b
  3292.         shr     al,3
  3293.         mov     [I.VVVV],al
  3294.  
  3295.         mov     al,ah
  3296.         test    al,11b
  3297.         jnz     ErrorDec
  3298.  
  3299.         and     al,10000100b    ;Mask XOP.W & XOP.L
  3300.         mov     [I.XOP],al
  3301.  
  3302.         FetchB
  3303.         mov     [I.SaveRSI],rsi
  3304.  
  3305. .Z2:    cmp     dword [rdx],-1
  3306.         je      ErrorDec
  3307.         cmp     al,[rdx+XOP.Imm]
  3308.         jz      .Z3
  3309.         add     edx,XOP.Size
  3310.         jmp     .Z2
  3311. .Z3:
  3312.         mov     [I.Prefix],'v'
  3313.  
  3314.         mov     al,[rdx+XOP.Flags]
  3315.         mov     [I.FlagsXOP],al
  3316.         test    al,XOPV
  3317.         jz      .Z4
  3318.         cmp     [I.VVVV],0
  3319.         jnz     ErrorDec
  3320. .Z4:
  3321.         and     al,XOPW+XOPL
  3322.         test    [I.XOP],al
  3323.         jnz     ErrorDec
  3324.  
  3325.         mov     r8b,XMMRG shl 4+XMMRG
  3326.  
  3327.         mov     eax,dword [rdx+XOP.MOS]
  3328.         test    [I.XOP],XOPL
  3329.         jz      .Z5
  3330.         mov     r8b,YMMRG shl 4+YMMRG
  3331.         shr     eax,8
  3332. .Z5:    mov     [I.RandSize],al
  3333.  
  3334.         movzx   ebx,[rdx+XOP.Rtn]
  3335.         add     ebx,RtnXX
  3336.  
  3337.         mov     edx,dword [rdx+XOP.Name]
  3338.         mov     [I.Name],dx
  3339.  
  3340.         push    r8
  3341.         call    .Arg
  3342.         call    rbx
  3343.         pop     r8
  3344. .Arg:
  3345.         test    [I.FlagsXOP],XOP2
  3346.         jz      .Z6
  3347.         and     r8b,0x0F
  3348.         or      r8b,XMMRG shl 4
  3349. .Z6:
  3350.         test    [I.FlagsXOP],XOP1
  3351.         jz      .Z7
  3352.         and     r8b,0xF0
  3353.         or      r8b,XMMRG
  3354. .Z7:
  3355.         mov     al,r8b
  3356.         and     al,0Fh
  3357.         mov     [I.Arg1.Type],al
  3358.         shr     r8b,4
  3359.         mov     [I.Arg2.Type],r8b
  3360.         ret
  3361. ;-----------------------------------------------------------------------------
  3362. XOP3Rtn:call    FetchModRM
  3363.         mov     [I.Arg1.Type2nd],InReg
  3364.         mov     [I.Arg3.Type],XMMRG
  3365.         test    [I.XOP],XOPW
  3366.         jz      .L1
  3367.        ;cmp     [I.Mod],3
  3368.        ;setnz   [I.Arg3.Mem]
  3369.         mov     [I.Arg2.Type2nd],InVVVV
  3370.         mov     [I.Arg3.Type2nd],InRM
  3371.         ret
  3372. .L1:   ;cmp     [I.Mod],3
  3373.        ;setnz   [I.Arg2.Mem]
  3374.         mov     [I.Arg3.Type2nd],InVVVV
  3375.         mov     [I.Arg2.Type2nd],InRM
  3376.         ret
  3377. ;-----------------------------------------------------------------------------
  3378. ;encoded bh,vvvv,bl,imm7:4 / bh,vvvv,bl,imm7:4 - W0 / W1
  3379. ;-----------------------------------------------------------------------------
  3380. XOP4Rtn:
  3381.         call    FetchModRM
  3382.         mov     [I.Arg1.Type2nd],InReg
  3383.         mov     [I.Arg2.Type2nd],InVVVV
  3384.         mov     al,[I.Arg1.Type]
  3385.         mov     [I.Arg3.Type],al
  3386.         mov     [I.Arg4.Type],al
  3387.  
  3388.         test    [I.XOP],XOPW
  3389.         jnz     .L1
  3390.  
  3391.        ;cmp     [I.Mod],3
  3392.        ;setnz   [I.Arg3.Mem]
  3393.         mov     [I.Arg3.Type2nd],InRM
  3394.         test    [I.FlagsXOP],XOPI
  3395.         jnz     .I1
  3396.         ret
  3397. .I1:
  3398.         FetchB
  3399.         shr     al,4
  3400.         mov     [I.Arg4.Reg],al
  3401.         ret
  3402. .L1:
  3403.        ;cmp     [I.Mod],3
  3404.        ;setnz   [I.Arg4.Mem]
  3405.         mov     [I.Arg4.Type2nd],InRM
  3406.         test    [I.FlagsXOP],XOPI
  3407.         jnz     .I2
  3408.         ret
  3409. .I2:
  3410.         FetchB
  3411.         shr     al,4
  3412.         mov     [I.Arg3.Reg],al
  3413.         ret
  3414. ;-----------------------------------------------------------------------------
  3415. XOPImm8:call    RtnXOP
  3416.         FetchB
  3417.         mov     [I.Arg3.Type],80h+1
  3418.         mov     [I.Arg3.ImmB],al
  3419.         ret
  3420. ;-----------------------------------------------------------------------------
  3421. SuffixCOMUQ:
  3422.         mov     bx,'uq'
  3423.         jmp     SuffixCOMB.1
  3424. ;-----------------------------------------------------------------------------
  3425. SuffixCOMUD:
  3426.         mov     bx,'ud'
  3427.         jmp     SuffixCOMB.1
  3428. ;-----------------------------------------------------------------------------
  3429. SuffixCOMUW:
  3430.         mov     bx,'uw'
  3431.         jmp     SuffixCOMB.1
  3432. ;-----------------------------------------------------------------------------
  3433. SuffixCOMUB:
  3434.         mov     bx,'ub'
  3435.         jmp     SuffixCOMB.1
  3436. ;-----------------------------------------------------------------------------
  3437. SuffixCOMQ:
  3438.         mov     bx,'q'
  3439.         jmp     SuffixCOMB.1
  3440. ;-----------------------------------------------------------------------------
  3441. SuffixCOMD:
  3442.         mov     bx,'d'
  3443.         jmp     SuffixCOMB.1
  3444. ;-----------------------------------------------------------------------------
  3445. SuffixCOMW:
  3446.         mov     bx,'w'
  3447.         jmp     SuffixCOMB.1
  3448. ;-----------------------------------------------------------------------------
  3449. SuffixCOMB:
  3450.         mov     bx,'b'
  3451. .1:
  3452.         mov     word [I.Suffix2nd],bx
  3453.         call    XOP4Rtn
  3454.         xor     eax,eax
  3455.         FetchB
  3456.         cmp     al,7
  3457.         jbe     .L1
  3458. .L0:    mov     [I.Arg4.Type],80h+1
  3459.         mov     [I.Arg4.ImmB],al
  3460.         ret
  3461. .L1:    mov     eax,[rax*2+TablePCOM]
  3462.         mov     [I.Name],ax
  3463.         mov     [I.Arg4.Type],0 ;delete
  3464.         ret
  3465. ;-----------------------------------------------------------------------------
  3466. RtnTBM0:
  3467.         add     rsp,2*_8_       ;remove r8 & return
  3468.  
  3469.         mov     [I.RandSize],VDWORD+80h
  3470.         mov     ebx,R32RM32
  3471.         test    [I.XOP],XOPW
  3472.         jz      .L1
  3473.         cmp     [I.Arch],CPUX64
  3474.         jne     .L1
  3475.         mov     [I.RandSize],VQWORD+80h
  3476.         mov     ebx,R64RM64
  3477. .L1:
  3478.         cmp     [I.Arch],CPUX64
  3479.         je      .L2
  3480.         mov     [I.B],0
  3481.         mov     [I.R],0
  3482.         mov     [I.X],0
  3483. .L2:
  3484.         mov     [I.Prefix],0
  3485.         mov     [I.Name],TBEXTR
  3486.         call    rbx
  3487.         FetchD
  3488.         mov     [I.Arg3.Type],80h+4
  3489.         mov     [I.Arg3.Imm],rax
  3490.         ret
  3491. ;-----------------------------------------------------------------------------
  3492. RtnLWPCB:
  3493.         add     rsp,2*_8_       ;remove r8 & return
  3494.  
  3495.         call    FetchModRM
  3496.         cmp     [I.Mod],3
  3497.         jne     ErrorDec
  3498.         mov     [I.Arg1.Type2nd],InRM
  3499.         mov     [I.Arg1.Type],GPR32
  3500.         test    [I.XOP],XOPW
  3501.         jz      .1
  3502.         mov     [I.Arg1.Type],GPR64
  3503. .1:
  3504.         mov     dx,TSLWPCB
  3505.         cmp     [I.Reg],1
  3506.         je      .2
  3507.         ja      ErrorDec
  3508.         mov     dx,TLLWPCB
  3509. .2:     mov     [I.Name],dx
  3510.         mov     [I.Arg2.Type],0 ;delete
  3511.         mov     [I.Prefix],0
  3512.         ret
  3513. ;-----------------------------------------------------------------------------
  3514. RtnLWPxx:
  3515.         add     rsp,2*_8_       ;remove r8 & return
  3516.  
  3517.         call    FetchModRM
  3518.  
  3519.         mov     [I.RandSize],VDWORD+80h
  3520.  
  3521.         mov     dx,TLWPVAL
  3522.         cmp     [I.Reg],1
  3523.         je      .2
  3524.         ja      ErrorDec
  3525.         mov     dx,TLWPINS
  3526. .2:     mov     [I.Name],dx
  3527.         mov     [I.Prefix],0
  3528.  
  3529.         mov     [I.Arg1.Type],GPR32
  3530.         mov     [I.Arg2.Type],GPR32
  3531.         test    [I.XOP],XOPW
  3532.         jz      .1
  3533.         mov     [I.Arg1.Type],GPR64
  3534. .1:
  3535.         mov     [I.Arg1.Type2nd],InVVVV
  3536.        ;cmp     [I.Mod],3
  3537.        ;setnz   [I.Arg2.Mem]
  3538.         mov     [I.Arg2.Type2nd],InRM
  3539.  
  3540.         FetchD
  3541.         mov     [I.Arg3.Type],80h+4
  3542.         mov     [I.Arg3.Imm],rax
  3543.         ret
  3544. ;-----------------------------------------------------------------------------
  3545. r8d     equ     edi
  3546. r8      equ     rdi
  3547. RtnTBM2:mov     r15d,TBM2Table
  3548.         jmp     RtnTBM1.L0
  3549. RtnTBM1:mov     r15d,TBM1Table
  3550. .L0:
  3551.         add     rsp,2*_8_       ;remove r8 & return
  3552.  
  3553.         mov     [I.RandSize],VDWORD+80h
  3554.         mov     r8d,R32RM32
  3555.         test    [I.XOP],XOPW
  3556.         jz      .L1
  3557.         cmp     [I.Arch],CPUX64
  3558.         jne     .L1
  3559.         mov     [I.RandSize],VQWORD+80h
  3560.         mov     r8d,R64RM64
  3561. .L1:
  3562.         cmp     [I.Arch],CPUX64
  3563.         je      .L2
  3564.         mov     [I.B],0
  3565.         mov     [I.R],0
  3566.         mov     [I.X],0
  3567.         and     [I.VVVV],111b
  3568. .L2:
  3569.         call    FetchModRM
  3570.         mov     rsi,[I.SaveRSI]
  3571.  
  3572.         movzx   eax,[I.Reg]
  3573. if %B=32
  3574.         mov     rdx,r15
  3575.         mov     edx,[rax*2+rdx]
  3576. else
  3577.         mov     edx,[rax*2+r15]
  3578. end if
  3579.         or      dx,dx
  3580.         jz      ErrorDec
  3581.         mov     [I.Prefix],0
  3582.         mov     [I.Name],dx
  3583.  
  3584.         call    r8
  3585.         mov     [I.Arg1.Type2nd],InVVVV
  3586.         ret
  3587. ;-----------------------------------------------------------------------------
  3588. RtnC6:  mov     al,[rsi]
  3589.         and     al,38h
  3590.         shr     al,3
  3591.         jz      EXTINSONE
  3592.         FetchB
  3593.         cmp     al,0xF8
  3594.         jnz     ErrorDec
  3595.         mov     [I.Name],TXABORT
  3596.         FetchB
  3597.         mov     [I.Arg1.Type],80h+1
  3598.         mov     [I.Arg1.Imm],rax
  3599.         ret
  3600.  
  3601. RtnC7:  mov     al,[rsi]
  3602.         and     al,38h
  3603.         shr     al,3
  3604.         jz      EXTINST
  3605.         FetchB
  3606.         cmp     al,0xF8
  3607.         jnz     ErrorDec
  3608.         BitTR   I.Prefixes,P66
  3609.         mov     [I.Name],TXBEGIN
  3610. DODISPWD:
  3611.         cmp     [I.Operand],0
  3612.         jnz     DODISPD
  3613.         jmp     DODISPW
  3614.  
  3615. EXTINSTFF:
  3616.         mov     al,[rsi]
  3617.         and     al,38h
  3618.         shr     al,3
  3619.         ;
  3620.         cmp     al,2
  3621.         jb      EXTINST
  3622.         cmp     al,5
  3623.         ja      EXTINST
  3624.         ;
  3625.         mov     [I.IsCALLJMP],True
  3626.         jmp     EXTINST
  3627.  
  3628. EXTINSONEFLT:
  3629.         mov     [I.IsFloat],1
  3630. EXTINSONE:
  3631.         mov     [I.Only],1
  3632. EXTINST:
  3633.         mov     eax,[I.Item]
  3634.         movzx   eax,[rax+xxh.NxtTab]
  3635.         add     eax,EXT80
  3636.         mov     [I.Table],eax
  3637.  
  3638.         mov     al,[rsi]
  3639.         and     al,38h
  3640.         shr     al,3
  3641.         mov     [I.NewTable],1
  3642.         ret
  3643.  
  3644. Rtn0F:  movzx   eax,byte [rsi]
  3645.         shr     al,4                    ;Lose low nibble.
  3646.  
  3647.         bt      [EXTBITS],eax
  3648.         setc    [I.Only]
  3649.  
  3650.         mov     eax,[rax*4+EXT0F]       ;Get new table address.
  3651.         mov     [I.Table],eax
  3652.  
  3653.         FetchB
  3654.         and     al,0Fh                  ;Make sure only lower nibble counts.
  3655.         mov     [I.NewTable],1
  3656.         ret
  3657.  
  3658. Rtn9X16:
  3659.         mov     [I.Arg1.Type],GPR16
  3660.         mov     [I.Arg2.Type],GPR16
  3661.         jmp     Rtn9XXX
  3662. Rtn9X32:
  3663.         mov     [I.Arg1.Type],GPR32
  3664.         mov     [I.Arg2.Type],GPR32
  3665.         jmp     Rtn9XXX
  3666. Rtn9X64:
  3667.         mov     [I.Arg1.Type],GPR64
  3668.         mov     [I.Arg2.Type],GPR64
  3669. Rtn9XXX:
  3670.         mov     al,[rsi-1]
  3671.         and     al,0Fh
  3672.         jnz     .No90
  3673.  
  3674.         cmp     [I.PrefixByte],bit PF3
  3675.         jz      .IsPause
  3676.  
  3677.         cmp     [I.PrefixByte],0
  3678.         jnz     .No90
  3679.         cmp     [I.B],0
  3680.         jnz     .No90
  3681.         mov     [I.Name],TNOP
  3682.         jmp     .PauseNOP
  3683. .IsPause:
  3684.         BitTR   I.Prefixes,PF3
  3685.         mov     [I.Name],TPAUSE
  3686. .PauseNOP:
  3687.         and     [I.Flags],not _S
  3688.         mov     [I.Arg1.Type],0
  3689.         mov     [I.Arg2.Type],0
  3690.         ret
  3691.  
  3692. .No90:
  3693.         add     al,[I.B]
  3694.         mov     [I.Arg1.Reg],al
  3695.         call    ClearB
  3696.         ret
  3697.  
  3698. Rtn9864:mov     [I.AltName],TCLTQ
  3699.         ret
  3700. Rtn9816:mov     [I.AltName],TCBTW
  3701.         ret
  3702. Rtn9832:mov     [I.AltName],TCWTL
  3703.         ret
  3704.  
  3705. Rtn9964:mov     [I.AltName],TCQTO
  3706.         ret
  3707. Rtn9916:mov     [I.AltName],TCWTD
  3708.         ret
  3709. Rtn9932:mov     [I.AltName],TCLTD
  3710.         ret
  3711.  
  3712. RtnEA:  mov     [I.AltName],TLJMP
  3713.         jmp     RtnXA
  3714. Rtn9A:  mov     [I.AltName],TLCALL
  3715. RtnXA:
  3716. r10     equ     rbx
  3717.         mov     [I.MemSeparator],True
  3718.         lea     r10,[I.Arg1]
  3719.         lea     rax,[I.Arg2]
  3720.         mov     r8,rax
  3721.         xor     r8,r10
  3722.  
  3723.         cmp     [I.Syntax],0
  3724.         jnz     .ATT
  3725.         xor     r10,r8
  3726. .ATT:
  3727.         mov     al,[I.Operand]
  3728.         or      al,al
  3729.         jz      .W
  3730.         jmp     .D
  3731. .W:     mov     [I.RandSize],VWORD
  3732.         mov     [I.Point],TDWORD
  3733.         FetchW
  3734.         movzx   eax,ax
  3735.         mov     [r10+TArg.Type],80h+2
  3736.         jmp     .X
  3737. .D:     mov     [I.RandSize],VDWORD
  3738.         mov     [I.Point],TFWORD
  3739.         FetchD
  3740.         mov     [r10+TArg.Type],80h+4
  3741. .X:     mov     [r10+TArg.Imm],rax
  3742.         FetchW
  3743.         movzx   eax,ax
  3744.         xor     r10,r8
  3745.         mov     [r10+TArg.Type],80h+2
  3746.         mov     [r10+TArg.Imm],rax
  3747.         ret
  3748.  
  3749. RtnF16: mov     [I.Suffix],'w'
  3750.         ret
  3751.  
  3752. RtnF32: mov     [I.Suffix],'d'
  3753.         ret
  3754.  
  3755. RtnF64: mov     [I.Suffix],'q'
  3756.         ret
  3757.  
  3758. RtnA0:  mov     al,[I.Arch]
  3759.         cmp     al,CPUX16
  3760.         jz      RtnA016
  3761.         cmp     al,CPUX32
  3762.         jz      RtnA032
  3763.         jmp     RtnA064
  3764.  
  3765. RtnA016:
  3766.         mov     [I.Arg1.Type],GPR08
  3767.  
  3768.         BitTR   I.Prefixes,P67
  3769.         jc      .D
  3770.         mov     [I.DispSize],2
  3771.         FetchW
  3772.         movzx   eax,ax
  3773.         jmp     .X
  3774. .D:     mov     [I.DispSize],4
  3775.         FetchUD
  3776. .X:
  3777.         mov     [I.Arg2.Type],GPR08
  3778.         mov     [I.Arg2.Mem],True
  3779.         mov     [I.Disp],rax
  3780.         call    ClearSeg
  3781.         mov     [I.PossibleLOCK],True
  3782.         ret
  3783.  
  3784. RtnA032:
  3785.         mov     [I.Arg1.Type],GPR08
  3786.  
  3787.         BitTR   I.Prefixes,P67
  3788.         jc      .W
  3789.         mov     [I.DispSize],4
  3790.         FetchUD
  3791.         jmp     .X
  3792. .W:     mov     [I.DispSize],2
  3793.         FetchW
  3794.         movzx   eax,ax
  3795. .X:
  3796.         mov     [I.Arg2.Type],GPR08
  3797.         mov     [I.Arg2.Mem],True
  3798.         mov     [I.Disp],rax
  3799.         call    ClearSeg
  3800.         mov     [I.PossibleLOCK],True
  3801.         ret
  3802.  
  3803. RtnA064:
  3804.         mov     [I.Arg1.Type],GPR08
  3805.  
  3806.         BitTR   I.Prefixes,P67
  3807.         jc      .D
  3808.         mov     [I.DispSize],8
  3809.         FetchQ
  3810. if %B=32
  3811.         mov     [I.Disp+4],edx
  3812. end if
  3813.         jmp     .X
  3814. .D:     mov     [I.DispSize],4
  3815.         FetchUD
  3816. .X:
  3817.         mov     [I.Arg2.Type],GPR08
  3818.         mov     [I.Arg2.Mem],True
  3819.         mov     [I.Disp],rax
  3820.         call    ClearSeg
  3821.         mov     [I.PossibleLOCK],True
  3822.         ret
  3823.  
  3824. RtnA1:  mov     al,[I.Arch]
  3825.         cmp     al,CPUX16
  3826.         jz      RtnA116
  3827.         cmp     al,CPUX32
  3828.         jz      RtnA132
  3829.         jmp     RtnA164
  3830.  
  3831. RtnA116:
  3832.         mov     al,GPR16
  3833.         mov     [I.RandSize],VWORD
  3834.         BitTR   I.Prefixes,P66
  3835.         jnc     .16
  3836.         mov     al,GPR32
  3837.         mov     [I.RandSize],VDWORD
  3838. .16:
  3839.         mov     [I.Arg1.Type],al
  3840.         mov     [I.Arg2.Type],al
  3841.  
  3842.         BitTR   I.Prefixes,P67
  3843.         jc      .D
  3844.         mov     [I.DispSize],2
  3845.         FetchW
  3846.         movzx   eax,ax
  3847.         jmp     .X
  3848. .D:     mov     [I.DispSize],4
  3849.         FetchUD
  3850. .X:
  3851.         mov     [I.Arg2.Mem],True
  3852.         mov     [I.Disp],rax
  3853.         call    ClearSeg
  3854.         mov     [I.PossibleLOCK],True
  3855.         ret
  3856.  
  3857. RtnA132:
  3858.         mov     al,GPR16
  3859.         mov     [I.RandSize],VWORD
  3860.         BitTR   I.Prefixes,P66
  3861.         jc      .16
  3862.         mov     al,GPR32
  3863.         mov     [I.RandSize],VDWORD
  3864. .16:
  3865.         mov     [I.Arg1.Type],al
  3866.         mov     [I.Arg2.Type],al
  3867.  
  3868.         BitTR   I.Prefixes,P67
  3869.         jc      .W
  3870.         mov     [I.DispSize],4
  3871.         FetchUD
  3872.         jmp     .X
  3873. .W:     mov     [I.DispSize],2
  3874.         FetchW
  3875.         movzx   eax,ax
  3876. .X:
  3877.         mov     [I.Arg2.Mem],True
  3878.         mov     [I.Disp],rax
  3879.         call    ClearSeg
  3880.         mov     [I.PossibleLOCK],True
  3881.         ret
  3882.  
  3883. RtnA164:
  3884.         mov     al,GPR16
  3885.         mov     [I.RandSize],VWORD
  3886.         BitTR   I.Prefixes,P66
  3887.         jc      .16
  3888.         mov     al,GPR32
  3889.         mov     [I.RandSize],VDWORD
  3890. .16:
  3891.         cmp     [I.W],0
  3892.         jz      .XX
  3893.         mov     al,GPR64
  3894.         mov     [I.RandSize],VQWORD
  3895. .XX:
  3896.         mov     [I.Arg1.Type],al
  3897.         mov     [I.Arg2.Type],al
  3898.  
  3899.         BitTR   I.Prefixes,P67
  3900.         jc      .D
  3901.         mov     [I.DispSize],8
  3902.         FetchQ
  3903. if %B=32
  3904.         mov     [I.Disp+4],edx
  3905. end if
  3906.         jmp     .X
  3907. .D:     mov     [I.DispSize],4
  3908.         FetchUD
  3909. .X:
  3910.         mov     [I.Arg2.Mem],True
  3911.         mov     [I.Disp],rax
  3912.         call    ClearSeg
  3913.         mov     [I.PossibleLOCK],True
  3914.         ret
  3915.  
  3916. RtnA2:  mov     al,[I.Arch]
  3917.         cmp     al,CPUX16
  3918.         jz      RtnA216
  3919.         cmp     al,CPUX32
  3920.         jz      RtnA232
  3921.         jmp     RtnA264
  3922.         ret
  3923.  
  3924. RtnA216:
  3925.         mov     [I.Arg2.Type],GPR08
  3926.  
  3927.         BitTR   I.Prefixes,P67
  3928.         jc      .D
  3929.         mov     [I.DispSize],2
  3930.         FetchW
  3931.         movzx   eax,ax
  3932.         jmp     .X
  3933. .D:     mov     [I.DispSize],4
  3934.         FetchUD
  3935. .X:
  3936.         mov     [I.Arg1.Type],GPR08
  3937.         mov     [I.Arg1.Mem],True
  3938.         mov     [I.Disp],rax
  3939.         call    ClearSeg
  3940.         mov     [I.PossibleLOCK],True
  3941.         ret
  3942.  
  3943. RtnA232:
  3944.         mov     [I.Arg2.Type],GPR08
  3945.  
  3946.         BitTR   I.Prefixes,P67
  3947.         jc      .W
  3948.         mov     [I.DispSize],4
  3949.         FetchUD
  3950.         jmp     .X
  3951. .W:     mov     [I.DispSize],2
  3952.         FetchW
  3953.         movzx   eax,ax
  3954. .X:
  3955.         mov     [I.Arg1.Type],GPR08
  3956.         mov     [I.Arg1.Mem],True
  3957.         mov     [I.Disp],rax
  3958.         call    ClearSeg
  3959.         mov     [I.PossibleLOCK],True
  3960.         ret
  3961.  
  3962. RtnA264:
  3963.         mov     [I.Arg2.Type],GPR08
  3964.  
  3965.         BitTR   I.Prefixes,P67
  3966.         jc      .D
  3967.         mov     [I.DispSize],8
  3968.         FetchQ
  3969. if %B=32
  3970.         mov     [I.Disp+4],edx
  3971. end if
  3972.         jmp     .X
  3973. .D:     mov     [I.DispSize],4
  3974.         FetchUD
  3975. .X:
  3976.         mov     [I.Arg1.Type],GPR08
  3977.         mov     [I.Arg1.Mem],True
  3978.         mov     [I.Disp],rax
  3979.         call    ClearSeg
  3980.         mov     [I.PossibleLOCK],True
  3981.         ret
  3982.  
  3983. RtnA3:  mov     al,[I.Arch]
  3984.         cmp     al,CPUX16
  3985.         jz      RtnA316
  3986.         cmp     al,CPUX32
  3987.         jz      RtnA332
  3988.         jmp     RtnA364
  3989.         ret
  3990.  
  3991. RtnA316:
  3992.         mov     al,GPR16
  3993.         mov     [I.RandSize],VWORD
  3994.         BitTR   I.Prefixes,P66
  3995.         jnc     .16
  3996.         mov     al,GPR32
  3997.         mov     [I.RandSize],VDWORD
  3998. .16:
  3999.         mov     [I.Arg1.Type],al
  4000.         mov     [I.Arg2.Type],al
  4001.  
  4002.         BitTR   I.Prefixes,P67
  4003.         jc      .D
  4004.         mov     [I.DispSize],2
  4005.         FetchW
  4006.         movzx   eax,ax
  4007.         jmp     .X
  4008. .D:     mov     [I.DispSize],4
  4009.         FetchUD
  4010. .X:
  4011.         mov     [I.Arg1.Mem],True
  4012.         mov     [I.Disp],rax
  4013.         call    ClearSeg
  4014.         mov     [I.PossibleLOCK],True
  4015.         ret
  4016.  
  4017. RtnA332:
  4018.         mov     al,GPR16
  4019.         mov     [I.RandSize],VWORD
  4020.         BitTR   I.Prefixes,P66
  4021.         jc      .16
  4022.         mov     al,GPR32
  4023.         mov     [I.RandSize],VDWORD
  4024. .16:
  4025.         mov     [I.Arg1.Type],al
  4026.         mov     [I.Arg2.Type],al
  4027.  
  4028.         BitTR   I.Prefixes,P67
  4029.         jc      .W
  4030.         mov     [I.DispSize],4
  4031.         FetchUD
  4032.         jmp     .X
  4033. .W:     mov     [I.DispSize],2
  4034.         FetchW
  4035.         movzx   eax,ax
  4036. .X:
  4037.         mov     [I.Arg1.Mem],True
  4038.         mov     [I.Disp],rax
  4039.         call    ClearSeg
  4040.         mov     [I.PossibleLOCK],True
  4041.         ret
  4042.  
  4043. RtnA364:
  4044.         mov     al,GPR16
  4045.         mov     [I.RandSize],VWORD
  4046.         BitTR   I.Prefixes,P66
  4047.         jc      .16
  4048.         mov     al,GPR32
  4049.         mov     [I.RandSize],VDWORD
  4050. .16:
  4051.         cmp     [I.W],0
  4052.         jz      .XX
  4053.         mov     al,GPR64
  4054.         mov     [I.RandSize],VQWORD
  4055. .XX:
  4056.         mov     [I.Arg1.Type],al
  4057.         mov     [I.Arg2.Type],al
  4058.  
  4059.         BitTR   I.Prefixes,P67
  4060.         jc      .D
  4061.         mov     [I.DispSize],8
  4062.         FetchQ
  4063. if %B=32
  4064.         mov     [I.Disp+4],edx
  4065. end if
  4066.         jmp     .X
  4067. .D:     mov     [I.DispSize],4
  4068.         FetchUD
  4069. .X:
  4070.         mov     [I.Arg1.Mem],True
  4071.         mov     [I.Disp],rax
  4072.         call    ClearSeg
  4073.         mov     [I.PossibleLOCK],True
  4074.         ret
  4075.  
  4076. RtnMOVX:
  4077.         mov     [I.PossibleF2F3],True
  4078.  
  4079.         mov     [I.AltName],TMOVS
  4080.  
  4081.         test    byte [I.Prefixes],bit PSEG+bit P67
  4082.         jz      .SkipATT
  4083.  
  4084.         BitTR   I.Prefixes,P67
  4085.  
  4086.         mov     [I.Name],TMOVS
  4087.         mov     [I.NoShowRand],True
  4088.  
  4089.         mov     [I.Base],RRSI
  4090.  
  4091.         mov     [I.Arg1.Type],10h+20h
  4092.         mov     [I.Arg1.Reg],RRDI
  4093.  
  4094.         mov     [I.Arg2.Type],1
  4095.         mov     [I.Arg2.Mem],True
  4096.  
  4097.         call    ClearSeg
  4098. .SkipATT:
  4099.         ret
  4100.  
  4101. RtnCMPX:
  4102.         mov     [I.PossibleF2F3],True
  4103.  
  4104.         mov     [I.AltName],TCMPS
  4105.  
  4106.         test    byte [I.Prefixes],bit PSEG+bit P67
  4107.         jz      .SkipATT
  4108.  
  4109.         BitTR   I.Prefixes,P67
  4110.  
  4111.         mov     [I.Name],TCMPS
  4112.  
  4113.         mov     [I.Base],RRSI
  4114.  
  4115.         mov     [I.Arg2.Type],10h
  4116.         mov     [I.Arg2.Reg],RRDI
  4117.  
  4118.         mov     [I.Arg1.Type],1
  4119.         mov     [I.Arg1.Mem],True
  4120.  
  4121.         call    ClearSeg
  4122. .SkipATT:
  4123.         ret
  4124.  
  4125. RtnSTOX:
  4126.         mov     [I.PossibleF2F3],True
  4127.  
  4128.         mov     [I.AltName],TSTOS
  4129.  
  4130.         BitTR   I.Prefixes,P67
  4131.         jnc     .SkipATT
  4132.  
  4133.         mov     [I.Name],TSTOS
  4134.  
  4135.         mov     [I.Arg1.Reg],RRDI
  4136.         mov     [I.Arg1.Type],10h+20h
  4137. .SkipATT:
  4138.         ret
  4139.  
  4140. RtnLODX:
  4141.         mov     [I.PossibleF2F3],True
  4142.  
  4143.         mov     [I.AltName],TLODS
  4144.  
  4145.         test    byte [I.Prefixes],bit PSEG+bit P67
  4146.         jz      .SkipATT
  4147.  
  4148.         BitTR   I.Prefixes,P67
  4149.  
  4150.         mov     [I.Name],TLODS
  4151.  
  4152.         mov     [I.Base],RRSI
  4153.  
  4154.         mov     [I.Arg1.Type],1
  4155.         mov     [I.Arg1.Mem],True
  4156.  
  4157.         call    ClearSeg
  4158. .SkipATT:
  4159.         ret
  4160.  
  4161. RtnSCAX:
  4162.         mov     [I.PossibleF2F3],True
  4163.  
  4164.         mov     [I.AltName],TSCAS
  4165.  
  4166.         BitTR   I.Prefixes,P67
  4167.         jnc     .SkipATT
  4168.  
  4169.         mov     [I.Name],TSCAS
  4170.  
  4171.         mov     [I.Arg1.Reg],RRDI
  4172.         mov     [I.Arg1.Type],10h+20h
  4173. .SkipATT:
  4174.         ret
  4175.  
  4176. R8IMM8:
  4177.         mov     al,[rsi-1]
  4178.         and     al,0Fh
  4179.         add     al,[I.B]
  4180.         mov     [I.Arg1.Reg],al
  4181.         call    ClearB
  4182.  
  4183.         mov     [I.Arg1.Type],GPR08
  4184.  
  4185.         FetchSB
  4186.         mov     [I.Arg2.Type],80h+1
  4187.         mov     [I.Arg2.Imm],rax
  4188.         ret
  4189.  
  4190. R16IMM16:
  4191.         mov     al,[rsi-1]
  4192.         sub     al,0xB8
  4193.         add     al,[I.B]
  4194.         mov     [I.Arg1.Reg],al
  4195.         call    ClearB
  4196.  
  4197.         mov     [I.Arg1.Type],GPR16
  4198.  
  4199.         FetchSW
  4200.         mov     [I.Arg2.Type],80h+2
  4201.         mov     [I.Arg2.Imm],rax
  4202.         ret
  4203.  
  4204. R32IMM32:
  4205.         mov     al,[rsi-1]
  4206.         sub     al,0xB8
  4207.         add     al,[I.B]
  4208.         mov     [I.Arg1.Reg],al
  4209.         call    ClearB
  4210.  
  4211.         mov     [I.Arg1.Type],GPR32
  4212.  
  4213.         FetchSD
  4214.         mov     [I.Arg2.Type],80h+4
  4215.         mov     [I.Arg2.Imm],rax
  4216.         ret
  4217.  
  4218. R64IMM64:
  4219.         mov     al,[rsi-1]
  4220.         sub     al,0xB8
  4221.         add     al,[I.B]
  4222.         mov     [I.Arg1.Reg],al
  4223.         call    ClearB
  4224.  
  4225.         mov     [I.Arg1.Type],GPR64
  4226.  
  4227.         FetchQ
  4228. if %B=32
  4229.         mov     [I.Arg2.Imm+4],edx
  4230. end if
  4231.         mov     [I.Arg2.Type],80h+8
  4232.         mov     [I.Arg2.Imm],rax
  4233.         ret
  4234.  
  4235. RM8R8:  call    FetchModRM
  4236.  
  4237.        ;cmp     [I.Mod],3
  4238.        ;setnz   [I.Arg1.Mem]
  4239.         mov     [I.Arg1.Type],GPR08
  4240.         mov     [I.Arg1.Type2nd],InRM
  4241.  
  4242.         mov     [I.Arg2.Type],GPR08
  4243.         mov     [I.Arg2.Type2nd],InReg
  4244.         ret
  4245.  
  4246. RM8IMM8:call    FetchModRM
  4247.  
  4248.        ;cmp     [I.Mod],3
  4249.        ;setnz   [I.Arg1.Mem]
  4250.         mov     [I.Arg1.Type],GPR08
  4251.         mov     [I.Arg1.Type2nd],InRM
  4252.  
  4253.         FetchB
  4254.         mov     [I.Arg2.Type],80h+1
  4255.         mov     [I.Arg2.Imm],rax
  4256.         ret
  4257.  
  4258. RM16IMM16:
  4259.         call    FetchModRM
  4260.  
  4261.        ;cmp     [I.Mod],3
  4262.        ;setnz   [I.Arg1.Mem]
  4263.         mov     [I.Arg1.Type],GPR16
  4264.         mov     [I.Arg1.Type2nd],InRM
  4265.  
  4266.         FetchSW
  4267.         mov     [I.Arg2.Type],80h+2
  4268.         mov     [I.Arg2.Imm],rax
  4269.         ret
  4270.  
  4271. RM32IMM32:
  4272.         call    FetchModRM
  4273.  
  4274.        ;cmp     [I.Mod],3
  4275.        ;setnz   [I.Arg1.Mem]
  4276.         mov     [I.Arg1.Type],GPR32
  4277.         mov     [I.Arg1.Type2nd],InRM
  4278.  
  4279.         FetchSD
  4280.         mov     [I.Arg2.Type],80h+4
  4281.         mov     [I.Arg2.Imm],rax
  4282.         ret
  4283.  
  4284. RM64IMM32:
  4285.         call    FetchModRM
  4286.  
  4287.        ;cmp     [I.Mod],3
  4288.        ;setnz   [I.Arg1.Mem]
  4289.         mov     [I.Arg1.Type],GPR64
  4290.         mov     [I.Arg1.Type2nd],InRM
  4291.  
  4292.         FetchSD
  4293.         mov     [I.Arg2.Type],80h+40h+4
  4294.         mov     [I.Arg2.Imm],rax
  4295.         ret
  4296.  
  4297. RM16IMMS8:
  4298.         call    FetchModRM
  4299.  
  4300.        ;cmp     [I.Mod],3
  4301.        ;setnz   [I.Arg1.Mem]
  4302.         mov     [I.Arg1.Type],GPR16
  4303.         mov     [I.Arg1.Type2nd],InRM
  4304.  
  4305.         FetchSB
  4306.         mov     [I.Arg2.Type],80h+40h+20h+1
  4307.         mov     [I.Arg2.Imm],rax
  4308.         ret
  4309.  
  4310. RM32IMMS8:
  4311.         call    FetchModRM
  4312.  
  4313.        ;cmp     [I.Mod],3
  4314.        ;setnz   [I.Arg1.Mem]
  4315.         mov     [I.Arg1.Type],GPR32
  4316.         mov     [I.Arg1.Type2nd],InRM
  4317.  
  4318.         FetchSB
  4319.         mov     [I.Arg2.Type],80h+40h+20h+1
  4320.         mov     [I.Arg2.Imm],rax
  4321.         ret
  4322.  
  4323. RM64IMMS8:
  4324.         call    FetchModRM
  4325.  
  4326.        ;cmp     [I.Mod],3
  4327.        ;setnz   [I.Arg1.Mem]
  4328.         mov     [I.Arg1.Type],GPR64
  4329.         mov     [I.Arg1.Type2nd],InRM
  4330.  
  4331.         FetchSB
  4332.         mov     [I.Arg2.Type],80h+40h+20h+1
  4333.         mov     [I.Arg2.Imm],rax
  4334.         ret
  4335.  
  4336. RM16R16CL:
  4337.         push    SetArg3CL
  4338.         jmp     RM16R16
  4339.  
  4340. RM16R16I8:
  4341.         push    SetArg3Imm
  4342. RM16R16:
  4343.         call    FetchModRM
  4344.  
  4345.        ;cmp     [I.Mod],3
  4346.        ;setnz   [I.Arg1.Mem]
  4347.         mov     [I.Arg1.Type],GPR16
  4348.         mov     [I.Arg1.Type2nd],InRM
  4349.  
  4350.         mov     [I.Arg2.Type],GPR16
  4351.         mov     [I.Arg2.Type2nd],InReg
  4352.         ret
  4353.  
  4354. RM32R32CL:
  4355.         push    SetArg3CL
  4356.         jmp     RM32R32
  4357.  
  4358. RM32R32I8:
  4359.         push    SetArg3Imm
  4360.         jmp     RM32R32
  4361.  
  4362. RM32R32X:
  4363.         push    SetArg12X
  4364. RM32R32:
  4365.         call    FetchModRM
  4366. RM32R32M:
  4367.        ;cmp     [I.Mod],3
  4368.        ;setnz   [I.Arg1.Mem]
  4369.         mov     [I.Arg1.Type],GPR32
  4370.         mov     [I.Arg1.Type2nd],InRM
  4371.  
  4372.         mov     [I.Arg2.Type],GPR32
  4373.         mov     [I.Arg2.Type2nd],InReg
  4374.         ret
  4375.  
  4376. RM64R64CL:
  4377.         push    SetArg3CL
  4378.         jmp     RM64R64
  4379. RM64R64I8:
  4380.         push    SetArg3Imm
  4381. RM64R64:
  4382.         call    FetchModRM
  4383. RM64R64M:
  4384.        ;cmp     [I.Mod],3
  4385.        ;setnz   [I.Arg1.Mem]
  4386.         mov     [I.Arg1.Type],GPR64
  4387.         mov     [I.Arg1.Type2nd],InRM
  4388.  
  4389.         mov     [I.Arg2.Type],GPR64
  4390.         mov     [I.Arg2.Type2nd],InReg
  4391.         ret
  4392.  
  4393. R8RM8:  call    FetchModRM
  4394.  
  4395.        ;cmp     [I.Mod],3
  4396.        ;setnz   [I.Arg2.Mem]
  4397.         mov     [I.Arg2.Type],GPR08
  4398.         mov     [I.Arg2.Type2nd],InRM
  4399.  
  4400.         mov     [I.Arg1.Type],GPR08
  4401.         mov     [I.Arg1.Type2nd],InReg
  4402.         ret
  4403.  
  4404. RM8:    call    FetchModRM
  4405.  
  4406.        ;cmp     [I.Mod],3
  4407.        ;setnz   [I.Arg1.Mem]
  4408.         mov     [I.Arg1.Type],GPR08
  4409.         mov     [I.Arg1.Type2nd],InRM
  4410.         ret
  4411.  
  4412. R16RM16LZ:
  4413.         BitTR   I.Prefixes,PF3
  4414.         jnc     .L1
  4415.         mov     [I.Name],TLZCNT
  4416. .L1:    jmp     R16RM16
  4417. R16RM16TZ:
  4418.         BitTR   I.Prefixes,PF3
  4419.         jnc     .L1
  4420.         mov     [I.Name],TTZCNT
  4421. .L1:    jmp     R16RM16
  4422.  
  4423. R16RM16W:
  4424. R16RM16:
  4425.         call    FetchModRM
  4426.  
  4427.        ;cmp     [I.Mod],3
  4428.        ;setnz   [I.Arg2.Mem]
  4429.         mov     [I.Arg2.Type],GPR16
  4430.         mov     [I.Arg2.Type2nd],InRM
  4431.  
  4432.         mov     [I.Arg1.Type],GPR16
  4433.         mov     [I.Arg1.Type2nd],InReg
  4434.         ret
  4435.  
  4436. R32RM32LZ:
  4437.         BitTR   I.Prefixes,PF3
  4438.         jnc     .L1
  4439.         mov     [I.Name],TLZCNT
  4440. .L1:    jmp     R32RM32
  4441. R32RM32TZ:
  4442.         BitTR   I.Prefixes,PF3
  4443.         jnc     .L1
  4444.         mov     [I.Name],TTZCNT
  4445. .L1:    jmp     R32RM32
  4446.  
  4447. R32RM32X:
  4448.         push    SetArg12X
  4449.         jmp     R32RM32
  4450. R32RM32W:
  4451.         push    SetArg2W
  4452. R32RM32:
  4453.         call    FetchModRM
  4454. R32RM32M:
  4455.        ;cmp     [I.Mod],3
  4456.        ;setnz   [I.Arg2.Mem]
  4457.         mov     [I.Arg2.Type],GPR32
  4458.         mov     [I.Arg2.Type2nd],InRM
  4459.  
  4460.         mov     [I.Arg1.Type],GPR32
  4461.         mov     [I.Arg1.Type2nd],InReg
  4462.         ret
  4463.  
  4464. R64RM64LZ:
  4465.         BitTR   I.Prefixes,PF3
  4466.         jnc     .L1
  4467.         mov     [I.Name],TLZCNT
  4468. .L1:    jmp     R64RM64
  4469. R64RM64TZ:
  4470.         BitTR   I.Prefixes,PF3
  4471.         jnc     .L1
  4472.         mov     [I.Name],TTZCNT
  4473. .L1:    jmp     R64RM64
  4474.  
  4475. R64RM64W:
  4476.         push    SetArg2W
  4477. R64RM64:
  4478.         call    FetchModRM
  4479.  
  4480.        ;cmp     [I.Mod],3
  4481.        ;setnz   [I.Arg2.Mem]
  4482.         mov     [I.Arg2.Type],GPR64
  4483.         mov     [I.Arg2.Type2nd],InRM
  4484.  
  4485.         mov     [I.Arg1.Type],GPR64
  4486.         mov     [I.Arg1.Type2nd],InReg
  4487.         ret
  4488.  
  4489. R3264RM3264:
  4490.         cmp     [I.W],0
  4491.         jz      R32RM32
  4492.         mov     [I.RandSize],VQWORD
  4493.         jmp     R64RM64
  4494.  
  4495. R16RM16L:
  4496.         mov     [I.IsLEA],True
  4497. R16RM163:
  4498.         call    FetchModRM
  4499.  
  4500.         cmp     [I.Mod],3
  4501.         jz      ErrorDec
  4502.  
  4503.        ;cmp     [I.Mod],3
  4504.        ;setnz   [I.Arg2.Mem]
  4505.         mov     [I.Arg2.Type],GPR16
  4506.         mov     [I.Arg2.Type2nd],InRM
  4507.  
  4508.         mov     [I.Arg1.Type],GPR16
  4509.         mov     [I.Arg1.Type2nd],InReg
  4510.         ret
  4511.  
  4512. R32RM32L:
  4513.         mov     [I.IsLEA],True
  4514. R32RM323:
  4515.         call    FetchModRM
  4516.  
  4517.         cmp     [I.Mod],3
  4518.         jz      ErrorDec
  4519.  
  4520.        ;cmp     [I.Mod],3
  4521.        ;setnz   [I.Arg2.Mem]
  4522.         mov     [I.Arg2.Type],GPR32
  4523.         mov     [I.Arg2.Type2nd],InRM
  4524.  
  4525.         mov     [I.Arg1.Type],GPR32
  4526.         mov     [I.Arg1.Type2nd],InReg
  4527.         ret
  4528.  
  4529. R64RM64L:
  4530.         mov     [I.IsLEA],True
  4531. R64RM643:
  4532.         call    FetchModRM
  4533.  
  4534.         cmp     [I.Mod],3
  4535.         jz      ErrorDec
  4536.  
  4537.        ;cmp     [I.Mod],3
  4538.        ;setnz   [I.Arg2.Mem]
  4539.         mov     [I.Arg2.Type],GPR64
  4540.         mov     [I.Arg2.Type2nd],InRM
  4541.  
  4542.         mov     [I.Arg1.Type],GPR64
  4543.         mov     [I.Arg1.Type2nd],InReg
  4544.         ret
  4545.  
  4546. RM16R163:
  4547.         call    FetchModRM
  4548.  
  4549.         cmp     [I.Mod],3
  4550.         jz      ErrorDec
  4551.  
  4552.        ;cmp     [I.Mod],3
  4553.        ;setnz   [I.Arg1.Mem]
  4554.         mov     [I.Arg1.Type],GPR16
  4555.         mov     [I.Arg1.Type2nd],InRM
  4556.  
  4557.         mov     [I.Arg2.Type],GPR16
  4558.         mov     [I.Arg2.Type2nd],InReg
  4559.         ret
  4560.  
  4561. RM32R323:
  4562.         call    FetchModRM
  4563.  
  4564.         cmp     [I.Mod],3
  4565.         jz      ErrorDec
  4566.  
  4567.        ;cmp     [I.Mod],3
  4568.        ;setnz   [I.Arg1.Mem]
  4569.         mov     [I.Arg1.Type],GPR32
  4570.         mov     [I.Arg1.Type2nd],InRM
  4571.  
  4572.         mov     [I.Arg2.Type],GPR32
  4573.         mov     [I.Arg2.Type2nd],InReg
  4574.         ret
  4575.  
  4576. RM64R643:
  4577.         call    FetchModRM
  4578.  
  4579.         cmp     [I.Mod],3
  4580.         jz      ErrorDec
  4581.  
  4582.        ;cmp     [I.Mod],3
  4583.        ;setnz   [I.Arg1.Mem]
  4584.         mov     [I.Arg1.Type],GPR64
  4585.         mov     [I.Arg1.Type2nd],InRM
  4586.  
  4587.         mov     [I.Arg2.Type],GPR64
  4588.         mov     [I.Arg2.Type2nd],InReg
  4589.         ret
  4590.  
  4591. RM16SEG:
  4592.         call    FetchModRM
  4593.  
  4594.        ;cmp     [I.Mod],3
  4595.        ;setnz   [I.Arg1.Mem]
  4596.         mov     [I.Arg1.Type],GPR16
  4597.         mov     [I.Arg1.Type2nd],InRM
  4598.  
  4599.         mov     [I.Arg2.Type],SEGRG
  4600.         mov     [I.Arg2.Type2nd],InReg
  4601.         ret
  4602.  
  4603. RM32SEG:
  4604.         call    FetchModRM
  4605.  
  4606.        ;cmp     [I.Mod],3
  4607.        ;setnz   [I.Arg1.Mem]
  4608.         mov     [I.Arg1.Type],GPR32
  4609.         mov     [I.Arg1.Type2nd],InRM
  4610.  
  4611.         mov     [I.Arg2.Type],SEGRG
  4612.         mov     [I.Arg2.Type2nd],InReg
  4613.         ret
  4614.  
  4615. RM64SEG:
  4616.         call    FetchModRM
  4617.  
  4618.        ;cmp     [I.Mod],3
  4619.        ;setnz   [I.Arg1.Mem]
  4620.         mov     [I.Arg1.Type],GPR64
  4621.         mov     [I.Arg1.Type2nd],InRM
  4622.  
  4623.         mov     [I.Arg2.Type],SEGRG
  4624.         mov     [I.Arg2.Type2nd],InReg
  4625.         ret
  4626.  
  4627. SEGRM16:
  4628.         call    FetchModRM
  4629.  
  4630.        ;cmp     [I.Mod],3
  4631.        ;setnz   [I.Arg2.Mem]
  4632.         mov     [I.Arg2.Type],GPR16
  4633.         mov     [I.Arg2.Type2nd],InRM
  4634.  
  4635.         mov     [I.Arg1.Type],SEGRG
  4636.         mov     [I.Arg1.Type2nd],InReg
  4637.         ret
  4638.  
  4639. SEGRM32:
  4640.         call    FetchModRM
  4641.  
  4642.        ;cmp     [I.Mod],3
  4643.        ;setnz   [I.Arg2.Mem]
  4644.         mov     [I.Arg2.Type],GPR32
  4645.         mov     [I.Arg2.Type2nd],InRM
  4646.  
  4647.         mov     [I.Arg1.Type],SEGRG
  4648.         mov     [I.Arg1.Type2nd],InReg
  4649.         ret
  4650.  
  4651. SEGRM64:
  4652.         call    FetchModRM
  4653.  
  4654.        ;cmp     [I.Mod],3
  4655.        ;setnz   [I.Arg2.Mem]
  4656.         mov     [I.Arg2.Type],GPR64
  4657.         mov     [I.Arg2.Type2nd],InRM
  4658.  
  4659.         mov     [I.Arg1.Type],SEGRG
  4660.         mov     [I.Arg1.Type2nd],InReg
  4661.         ret
  4662.  
  4663. RM16N:  mov     [I.Point],TNEAR
  4664. RM16:   call    FetchModRM
  4665.  
  4666.        ;cmp     [I.Mod],3
  4667.        ;setnz   [I.Arg1.Mem]
  4668.         mov     [I.Arg1.Type],GPR16
  4669.         mov     [I.Arg1.Type2nd],InRM
  4670.         ret
  4671.  
  4672. RM32N:  mov     [I.Point],TNEAR
  4673. RM32:   call    FetchModRM
  4674.  
  4675.        ;cmp     [I.Mod],3
  4676.        ;setnz   [I.Arg1.Mem]
  4677.         mov     [I.Arg1.Type],GPR32
  4678.         mov     [I.Arg1.Type2nd],InRM
  4679.         ret
  4680.  
  4681. RM64N:  mov     [I.Point],TNEAR
  4682. RM64:   call    FetchModRM
  4683.  
  4684.        ;cmp     [I.Mod],3
  4685.        ;setnz   [I.Arg1.Mem]
  4686.         mov     [I.Arg1.Type],GPR64
  4687.         mov     [I.Arg1.Type2nd],InRM
  4688.         ret
  4689.  
  4690. RM163264W:
  4691.         call    FetchModRM
  4692.  
  4693.         cmp     [I.Mod],3
  4694.         jnz     .No3
  4695.         BitTR   I.Prefixes,P66
  4696. .No3:
  4697.         cmp     [I.Syntax],0
  4698.         jz      .SkipIntel
  4699.         mov     [I.RandSize],0
  4700. .SkipIntel:
  4701.  
  4702.        ;cmp     [I.Mod],3
  4703.        ;setnz   [I.Arg1.Mem]
  4704.  
  4705.         mov     [I.Arg1.Type],GPR16
  4706.         cmp     [I.Operand],0
  4707.         jz      .XX
  4708.         mov     [I.Arg1.Type],GPR32
  4709. .XX:
  4710.         cmp     [I.W],0
  4711.         jz      .64
  4712.         BitTR   I.Prefixes,P4X
  4713.         mov     [I.Arg1.Type],GPR64
  4714. .64:
  4715.         mov     [I.Arg1.Type2nd],InRM
  4716.         ret
  4717.  
  4718. RMDW:   call    FetchModRM
  4719.  
  4720.         cmp     [I.Mod],3
  4721.        ;setnz   [I.Arg1.Mem]
  4722.         jnz     .No3
  4723.         BitTR   I.Prefixes,P66
  4724. .No3:
  4725.         mov     [I.Arg1.Type],GPR16
  4726.         cmp     [I.Operand],0
  4727.         jz      .XX
  4728.         mov     [I.RandSize],VDWORD
  4729.         mov     [I.Arg1.Type],GPR32
  4730. .XX:
  4731.         mov     [I.Arg1.Type2nd],InRM
  4732.         ret
  4733.  
  4734. RMW0100:call    FetchModRM
  4735.         cmp     [I.Mod],3
  4736.         setnz   [I.Arg1.Mem]
  4737.         jnz     .Exit
  4738.         mov     dx,TENCLV
  4739.         cmp     al,$C0
  4740.         jz      .L1
  4741.         mov     dx,TVMCALL
  4742.         cmp     al,$C1
  4743.         jz      .L1
  4744.         mov     dx,TVMLAUNCH
  4745.         cmp     al,$C2
  4746.         jz      .L1
  4747.         mov     dx,TVMRESUME
  4748.         cmp     al,$C3
  4749.         jz      .L1
  4750.         mov     dx,TVMXOFF
  4751.         cmp     al,$C4
  4752.         jz      .L1
  4753.         mov     dx,TPCONFIG
  4754.         cmp     al,$C5
  4755.         jnz     ErrorDec
  4756. .L1:    mov     [I.Name],dx
  4757. .Exit:  ret
  4758.  
  4759. RMW0101:call    FetchModRM
  4760.         cmp     [I.Mod],3
  4761.         setnz   [I.Arg1.Mem]
  4762.         jnz     .Exit
  4763.         mov     dx,TMONITOR
  4764.         cmp     al,$C8
  4765.         je      .L1
  4766.         mov     dx,TMWAIT
  4767.         cmp     al,$C9
  4768.         je      .L1
  4769.         mov     dx,TCLAC
  4770.         cmp     al,$CA
  4771.         je      .L1
  4772.         mov     dx,TSTAC
  4773.         cmp     al,$CB
  4774.         jz      .L1
  4775.         mov     dx,TENCLS
  4776.         cmp     al,$CF
  4777.         jne     ErrorDec
  4778. .L1:    mov     [I.Name],dx
  4779.         ret
  4780. .Exit:  call    TWorFW
  4781.         ret
  4782.  
  4783. RMW0102:call    FetchModRM
  4784.         cmp     [I.Mod],3
  4785.         setnz   [I.Arg1.Mem]
  4786.         jnz     .Exit
  4787.         mov     dx,TENCLU
  4788.         cmp     al,$D7
  4789.         je      .L1
  4790.         mov     dx,TXTEST
  4791.         cmp     al,$D6
  4792.         je      .L1
  4793.         mov     dx,TXEND
  4794.         cmp     al,$D5
  4795.         je      .L1
  4796.         mov     dx,TVMFUNC
  4797.         cmp     al,$D4
  4798.         je      .L1
  4799.         mov     dx,TXGETBV
  4800.         cmp     al,$D0
  4801.         je      .L1
  4802.         mov     dx,TXSETBV
  4803.         cmp     al,$D1
  4804.         jne     ErrorDec
  4805. .L1:    mov     [I.Name],dx
  4806.         ret
  4807. .Exit:  call    TWorFW
  4808.         ret
  4809.  
  4810. RMW0103:call    FetchModRM
  4811.         cmp     [I.Mod],3
  4812.         setnz   [I.Arg1.Mem]
  4813.         jnz     .Quit
  4814.         movzx   eax,byte [rsi-1]
  4815.         mov     edx,[rax*2+TVMXXTable-$D8*2]
  4816.         mov     [I.Name],dx
  4817.         cmp     al,$D9
  4818.         je      .Exit
  4819.         cmp     al,$DC
  4820.         je      .Exit
  4821.         cmp     al,$DD
  4822.         je      .Exit
  4823.         ;
  4824.         cmp     [I.Syntax],0
  4825.         jz      .YY
  4826.         cmp     al,$DF
  4827.         je      .Exit
  4828. .YY:    ;
  4829.         mov     al,[I.Arch]
  4830.         cmp     al,CPUX16
  4831.         jz      .16
  4832.         cmp     al,CPUX32
  4833.         jz      .32
  4834.  
  4835. .64:    mov     [I.Arg1.Type],GPR64
  4836.         BitTR   I.Prefixes,P67
  4837.         jnc     @F
  4838.         mov     [I.Arg1.Type],GPR32
  4839.       @@:
  4840.         jmp     .XX
  4841. .16:    mov     [I.Arg1.Type],GPR16
  4842.         BitTR   I.Prefixes,P67
  4843.         jnc     @F
  4844.         mov     [I.Arg1.Type],GPR32
  4845.       @@:
  4846.         jmp     .XX
  4847. .32:    mov     [I.Arg1.Type],GPR32
  4848.         BitTR   I.Prefixes,P67
  4849.         jnc     @F
  4850.         mov     [I.Arg1.Type],GPR16
  4851.       @@:
  4852. .XX:    cmp     dx,TINVLPGA
  4853.         jnz     @F
  4854.         mov     [I.Arg2.Type],GPR32
  4855.         mov     [I.Arg2.Reg],RRCX
  4856.       @@:
  4857. .Exit:  ret
  4858.  
  4859. .Quit:  call    TWorFW
  4860.         ret
  4861.  
  4862. RMW0104:call    FetchModRM
  4863.  
  4864.         cmp     [I.Mod],3
  4865.        ;setnz   [I.Arg1.Mem]
  4866.         jnz     .Exit
  4867.  
  4868.         mov     [I.Arg1.Type],GPR16
  4869.         mov     al,[I.Operand]
  4870.         add     [I.Arg1.Type],al
  4871.  
  4872.         mov     [I.Arg1.Type2nd],InRM
  4873.  
  4874.         cmp     [I.W],0
  4875.         jz      .W0
  4876.         BitTR   I.Prefixes,P4X
  4877.         mov     [I.Arg1.Type],GPR64
  4878. .W0:
  4879.         BitTR   I.Prefixes,P66
  4880. .Exit:  ret
  4881.  
  4882. RtnPKRU:cmp     byte [rsi],0xC0
  4883.         jb      .IsRSTORSSP
  4884.         FetchB
  4885.         mov     dx,TSETSSBSY
  4886.         cmp     al,0xE8
  4887.         jz      .IsEA
  4888.         mov     dx,TSAVEPREVSSP
  4889.         cmp     al,0xEA
  4890.         jz      .IsEA
  4891.         mov     dx,TRDPKRU
  4892.         cmp     al,0xEE
  4893.         jz      .MoveName
  4894.         mov     dx,TWRPKRU
  4895.         cmp     al,0xEF
  4896.         jnz     ErrorDec
  4897. .MoveName:
  4898.         mov     [I.Name],dx
  4899.         ret
  4900. .IsEA:  BitTR   I.Prefixes,PF3
  4901.         jc      .MoveName
  4902.         jmp     ErrorDec
  4903. .IsRSTORSSP:
  4904.         BitTR   I.Prefixes,PF3
  4905.         jnc     ErrorDec
  4906.         setc    [I.Arg1.Mem]
  4907.         mov     [I.Name],TRSTORSSP
  4908.         jmp     FetchModRM
  4909.  
  4910. RMW0107:call    FetchModRM
  4911.  
  4912.         cmp     [I.Mod],3
  4913.         setnz   [I.Arg1.Mem]
  4914.         jnz     .Exit
  4915.  
  4916.         mov     dx,TRDPRU
  4917.         cmp     al,$FD
  4918.         je      .L1
  4919.         mov     dx,TCLZERO
  4920.         cmp     al,$FC
  4921.         je      .L1
  4922.         mov     dx,TMWAITX
  4923.         cmp     al,$FB
  4924.         je      .L1
  4925.         mov     dx,TMONITORX
  4926.         cmp     al,$FA
  4927.         je      .L1
  4928.         mov     dx,TRDTSCP
  4929.         cmp     al,$F9
  4930.         je      .L1
  4931.         cmp     [I.Arch],CPUX64
  4932.         jne     ErrorDec
  4933.         mov     dx,TSWAPGS
  4934.         cmp     al,$F8
  4935.         jne     ErrorDec
  4936. .L1:    mov     [I.Name],dx
  4937. .Exit:  ret
  4938.  
  4939. LOADALL2:
  4940.         test    [I.Sensitive],UND
  4941.         jz      .L1
  4942.         mov     [I.Name],TLOADALL286
  4943. .L1:    ret
  4944.  
  4945. Rtn0F07:
  4946.         test    [I.Sensitive],UND
  4947.         jz      .L1
  4948.         mov     [I.Name],TLOADALL
  4949. .L1:    ret
  4950.  
  4951. PREFETCHRTN:
  4952.         call    FetchModRM
  4953.  
  4954.         cmp     [I.Mod],3
  4955.         setnz   [I.Arg1.Mem]
  4956.         jz      .Exit
  4957.  
  4958.         mov     al,[I.Reg]
  4959.         mov     dx,TPREFETCHWT1
  4960.         cmp     al,2
  4961.         jz      .L1
  4962.         cmp     al,1
  4963.         jne     .Exit
  4964.         mov     dx,TPREFETCHW
  4965. .L1:    mov     [I.Name],dx
  4966. .Exit:  ret
  4967.  
  4968. RtnMM4MM:
  4969.         call    FetchModRM
  4970.  
  4971.        ;cmp     [I.Mod],3
  4972.        ;setnz   [I.Arg1.Mem]
  4973.         mov     [I.Arg1.Type],MMXRG
  4974.         mov     [I.Arg2.Type],MMXRG
  4975.  
  4976.         mov     [I.Arg1.Type2nd],InRM
  4977.         mov     [I.Arg2.Type2nd],InReg
  4978.         ret
  4979.  
  4980. RtnMM2MM:
  4981.         call    FetchModRM
  4982.  
  4983.        ;cmp     [I.Mod],3
  4984.        ;setnz   [I.Arg2.Mem]
  4985.         mov     [I.Arg2.Type],MMXRG
  4986.         mov     [I.Arg1.Type],MMXRG
  4987.  
  4988.         mov     [I.Arg2.Type2nd],InRM
  4989.         mov     [I.Arg1.Type2nd],InReg
  4990.         ret
  4991.  
  4992. Rtn0F0F:call    RtnMM2MM
  4993.         mov     ecx,(End3D-Now3D)/3
  4994.         mov     edx,Now3D
  4995.         FetchB
  4996. .L1:    cmp     [rdx],al
  4997.         je      .L2
  4998.         add     edx,3
  4999.         loop    .L1
  5000.         jmp     ErrorDec
  5001. .L2:    mov     eax,[rdx+1]
  5002.         mov     [I.Name],ax
  5003.         ret
  5004. ;-----------------------------------------------------------------------------
  5005. Rtn0F22:push    R32RM32C
  5006.         jmp     Rtn0F20.L1
  5007. ;-----------------------------------------------------------------------------
  5008. Rtn0F20:push    RM32R32C
  5009. .L1:    call    FetchModRM
  5010.         cmp     [I.Mod],3
  5011.         jne     ErrorDec
  5012.         ret
  5013. ;-----------------------------------------------------------------------------
  5014. Rtn0F23:push    R32RM32D
  5015.         jmp     Rtn0F21.L1
  5016. ;-----------------------------------------------------------------------------
  5017. Rtn0F21:push    RM32R32D
  5018. .L1:    call    FetchModRM
  5019.         cmp     [I.Mod],3
  5020.         jne     ErrorDec
  5021.         ret
  5022. ;-----------------------------------------------------------------------------
  5023. Rtn0F26:push    R32RM32T
  5024.         jmp     Rtn0F24.L1
  5025. ;-----------------------------------------------------------------------------
  5026. Rtn0F24:push    RM32R32T
  5027. .L1:    call    FetchModRM
  5028.         cmp     [I.Mod],3
  5029.         jne     ErrorDec
  5030.         ret
  5031. ;-----------------------------------------------------------------------------
  5032. Rtn0F37:test    [I.Sensitive],NIA
  5033. ifz     ret
  5034.         mov     [I.Name],TWRSHR
  5035. Rtn0F36:test    [I.Sensitive],NIA
  5036.         jz      ErrorDec
  5037.         cmp     [I.Arch],CPUX64
  5038.         jz      ErrorDec
  5039.         call    FetchModRM
  5040.         cmp     [I.Reg],0
  5041.         jnz     ErrorDec
  5042.         BitTR   I.Prefixes,P66
  5043.        ;cmp     [I.Mod],3
  5044.        ;setnz   [I.Arg1.Mem]
  5045.         mov     [I.Arg1.Type],GPR32
  5046.         mov     [I.Arg1.Type2nd],InRM
  5047.         ret
  5048. ;-----------------------------------------------------------------------------
  5049. Rtn0F3800:
  5050.         test    [I.Sensitive],NIA
  5051.         jz      .L1
  5052.         mov     [I.Name],TSMINT
  5053.         ret
  5054. .L1:    FetchB
  5055.         cmp     al,0xF0
  5056.         jb      .L0
  5057.         cmp     al,0xF1
  5058.         jbe     RtnMOVBE
  5059.         cmp     al,0xF6
  5060.         jz      RtnWRSSX
  5061. .L0:
  5062.         mov     dx,TSHA1NEXTE
  5063.         cmp     al,0xC8
  5064.         jz      .0F38XX
  5065.         mov     dx,TSHA1MSG1
  5066.         cmp     al,0xC9
  5067.         jz      .0F38XX
  5068.         mov     dx,TSHA1MSG2
  5069.         cmp     al,0xCA
  5070.         jz      .0F38XX
  5071.         mov     dx,TSHA256RNDS2
  5072.         cmp     al,0xCB
  5073.         jz      .0F38XX
  5074.         mov     dx,TSHA256MSG1
  5075.         cmp     al,0xCC
  5076.         jz      .0F38XX
  5077.         mov     dx,TSHA256MSG2
  5078.         cmp     al,0xCD
  5079.         jnz     .FUCK
  5080. .0F38XX:mov     [I.Name],dx
  5081.         mov     [I.RandSize],VXWORD+80h
  5082.         cmp     al,0xCB
  5083. ifz     mov     [I.Arg3.Type],XMMRG
  5084.         jmp     R32RM32X
  5085. .FUCK:  mov     ebx,RtnMM2MM
  5086.         call    CheckPrevSSE4
  5087.         jc      ErrorDec
  5088.         ret
  5089. ;-----------------------------------------------------------------------------
  5090. RtnWRSSX:
  5091.         mov     [I.Name],TWRSSD
  5092.         test    [I.PreREX],8    ;REX.W
  5093.         jz      RM32R32
  5094.         call    ClearW
  5095.         mov     [I.Name],TWRSSQ
  5096.         jmp     RM64R64
  5097. ;-----------------------------------------------------------------------------
  5098. Rtn0F3X:test    [I.Sensitive],NIA
  5099.         jz      ErrorDec
  5100.         ret
  5101. ;-----------------------------------------------------------------------------
  5102. Rtn0F50:test    [I.Sensitive],NIA
  5103.         jz      Rtn0066F2F3X
  5104. .L0:    mov     [I.RandSize],VQWORD+80h
  5105.         jmp     RtnMM2MM
  5106. ;-----------------------------------------------------------------------------
  5107. RtnIAMM:test    [I.Sensitive],NIA
  5108.         jz      Rtn0066F2F3
  5109.         jmp     Rtn0F50.L0
  5110. ;-----------------------------------------------------------------------------
  5111. RtnIAM3:test    [I.Sensitive],NIA
  5112.         jz      Rtn0066F2F3
  5113.         cmp     byte [rsi],0xC0
  5114.         jae     ErrorDec
  5115.         jmp     Rtn0F50.L0
  5116. ;-----------------------------------------------------------------------------
  5117. Rtn0F6X:cmp     [I.PrefixByte],bit P66
  5118.         jnz     .L1
  5119.         and     byte [I.Prefixes],not (bit P66)
  5120.         mov     [I.Mandatory66],1
  5121.         mov     [I.RandSize],VXWORD+80h
  5122.         jmp     R32RM32X
  5123. .L1:    cmp     [I.PrefixByte],0
  5124.         jnz     ErrorDec
  5125.         cmp     byte [rsi-1],6Ch
  5126.         jae     ErrorDec
  5127.         jmp     RtnMM2MM
  5128. ;-----------------------------------------------------------------------------
  5129. Rtn0F72:mov     r8d,T0F72Names
  5130.         jmp     Rtn0F71.L0
  5131. ;-----------------------------------------------------------------------------
  5132. Rtn0F71:mov     r8d,T0F71Names
  5133. .L0:    call    FetchModRM
  5134. .0L:    movzx   eax,[I.Reg]
  5135.         mov     edx,[rax*2+r8]
  5136.         or      dx,dx
  5137.         jz      .L5
  5138. .L1:    cmp     [I.Mod],3
  5139.         jne     .L5
  5140.         mov     [I.Name],dx
  5141.         mov     al,[I.PrefixByte]
  5142.         cmp     al,bit P66
  5143.         jnz     .L4
  5144.         and     byte [I.Prefixes],not (bit P66)
  5145.         mov     [I.Mandatory66],1
  5146. .L2:    mov     [I.Arg1.Type],XMMRG
  5147. .L3:    mov     [I.Arg1.Type2nd],InRM
  5148.         FetchB
  5149.         mov     [I.Arg2.Type],80h+1
  5150.         mov     [I.Arg2.ImmB],al
  5151.         ret
  5152. .L4:    mov     [I.Arg1.Type],MMXRG
  5153.         or      al,al
  5154.         jz      .L3
  5155. .L5:    jmp     ErrorDec
  5156. ;-----------------------------------------------------------------------------
  5157. Rtn0F73:mov     r8d,T0F73Names
  5158.         call    FetchModRM
  5159.         cmp     [I.PrefixByte],0
  5160.         jnz     Rtn0F71.0L
  5161.         ;MMX /2 /6
  5162.         cmp     [I.Reg],2
  5163.         je      Rtn0F71.0L
  5164.         cmp     [I.Reg],6
  5165.         je      Rtn0F71.0L
  5166.         jmp     ErrorDec
  5167. ;-----------------------------------------------------------------------------
  5168. RtnMMXM:mov     edx,RtnMM2MM
  5169.         mov     al,[I.PrefixByte]
  5170.         or      al,al
  5171.         jz      .L1
  5172.         cmp     al,bit P66
  5173.         jnz     ErrorDec
  5174.         mov     edx,R32RM32X
  5175.         and     byte [I.Prefixes],not (bit P66)
  5176.         mov     [I.Mandatory66],1
  5177.         mov     [I.RandSize],VXWORD+80h
  5178. .L1:    jmp     rdx
  5179. ;-----------------------------------------------------------------------------
  5180. Rtn0F78:
  5181.         test    [I.Sensitive],NIA
  5182.         jz      .L0
  5183.         cmp     byte [rsi],0xC0
  5184.         jae     ErrorDec
  5185.         mov     [I.RandSize],VTWORD+80h
  5186.         mov     [I.Name],TSVDC
  5187.         jmp     RM16SEG
  5188. .L0:    mov     al,[I.PrefixByte]
  5189.         or      al,al
  5190.         jnz     .L2
  5191.         mov     edx,RM32R32
  5192.         mov     [I.RandSize],VDWORD+80h
  5193.         cmp     [I.Arch],CPUX64
  5194.         jnz     .L1
  5195.         mov     edx,RM64R64
  5196.         mov     [I.RandSize],VQWORD+80h
  5197. .L1:    jmp     rdx
  5198. .L2:    cmp     byte [rsi],0xC0
  5199.         jb      ErrorDec
  5200.         cmp     al,bit P66
  5201.         jnz     .L3
  5202.         call    FetchModRM
  5203.         cmp     [I.Reg],0
  5204.         jnz     ErrorDec
  5205.         and     byte [I.Prefixes],not (bit P66)
  5206.         mov     [I.Mandatory66],1
  5207.         mov     [I.Name],TEXTRQ
  5208.         mov     [I.Arg1.Type],XMMRG
  5209.         mov     [I.Arg1.Type2nd],InRM
  5210.         lea     r8,[I.Arg2]
  5211. .LX:    FetchW
  5212.         mov     [r8+TArg.Type],80h+1
  5213.         mov     [r8+TArg.ImmB],al
  5214.         add     r8d,sizeof.TArg
  5215.         mov     [r8+TArg.Type],80h+1
  5216.         mov     al,ah
  5217.         mov     [r8+TArg.ImmB],al
  5218.         ret
  5219. .L3:    cmp     al,bit PF2
  5220.         jnz     ErrorDec
  5221.         and     byte [I.Prefixes],not (bit PF2)
  5222.         mov     [I.Name],TINSERTQ
  5223.         call    R32RM32X
  5224.         lea     r8,[I.Arg3]
  5225.         jmp     .LX
  5226. ;-----------------------------------------------------------------------------
  5227. Rtn0F79:test    [I.Sensitive],NIA
  5228.         jz      .L0
  5229.         cmp     byte [rsi],0xC0
  5230.         jae     ErrorDec
  5231.         mov     [I.RandSize],VTWORD+80h
  5232.         mov     [I.Name],TRSDC
  5233.         jmp     SEGRM16
  5234. .L0:    mov     al,[I.PrefixByte]
  5235.         or      al,al
  5236.         jnz     .L2
  5237.         mov     edx,R32RM32
  5238.         mov     [I.RandSize],VDWORD+80h
  5239.         cmp     [I.Arch],CPUX64
  5240.         jnz     .L1
  5241.         mov     edx,R64RM64
  5242.         mov     [I.RandSize],VQWORD+80h
  5243. .L1:    jmp     rdx
  5244. .L2:    cmp     byte [rsi],0xC0
  5245.         jb      ErrorDec
  5246.         cmp     al,bit P66
  5247.         jnz     .L3
  5248.         and     byte [I.Prefixes],not (bit P66)
  5249.         mov     [I.Mandatory66],1
  5250.         mov     [I.Name],TEXTRQ
  5251.         jmp     R32RM32X
  5252. .L3:    cmp     al,bit PF2
  5253.         jnz     ErrorDec
  5254.         and     byte [I.Prefixes],not (bit PF2)
  5255.         mov     [I.Name],TINSERTQ
  5256.         jmp     R32RM32X
  5257. ;-----------------------------------------------------------------------------
  5258. Rtn0F7B:
  5259. Rtn0F7A:test    [I.Sensitive],NIA
  5260.         jz      ErrorDec
  5261. .L1:    call    FetchModRM
  5262.         cmp     [I.Mod],3
  5263.         jz      ErrorDec
  5264.         cmp     [I.Reg],0
  5265.         jnz     ErrorDec
  5266.         mov     [I.Arg1.Type],GPR32
  5267.         mov     [I.Arg1.Type2nd],InRM
  5268.         ret
  5269. ;-----------------------------------------------------------------------------
  5270. Rtn0F7D:
  5271. Rtn0F7C:
  5272.         test    [I.Sensitive],NIA
  5273.         jz      Rtn0066F2F3
  5274.         jmp     Rtn0F7A.L1
  5275. ;-----------------------------------------------------------------------------
  5276. Rtn0F7E:test    [I.Sensitive],NIA
  5277.         jz      Rtn0066F2F3X
  5278.         ret
  5279. ;-----------------------------------------------------------------------------
  5280. Rtn0FA6:test    [I.Sensitive],NIA
  5281.         jnz     .L1
  5282.         cmp     [I.Arch],CPUX64
  5283.         je      .L0
  5284.         mov     [I.RandSize],VBYTE+80h
  5285.         test    [I.Sensitive],UND
  5286.         jnz     RM8R8
  5287. .L0:    jmp     ErrorDec
  5288.  
  5289. .L1:    call    FetchModRM
  5290.         cmp     [I.Mod],3
  5291.         jnz     .L0
  5292.         cmp     [I.RM],0
  5293.         jnz     .L0
  5294.         movzx   eax,[I.Reg]
  5295.         cmp     al,2
  5296.         ja      .L0
  5297.         BitTR   I.Prefixes,PF3
  5298.         jnc     .L0
  5299.         mov     eax,[rax*2+TCentTable]
  5300.         mov     [I.Name],ax
  5301.         ret
  5302. ;-----------------------------------------------------------------------------
  5303. Rtn0FA7:test    [I.Sensitive],NIA
  5304.         jnz     .L1
  5305.         test    [I.Sensitive],UND
  5306.         jz      .L4
  5307.         cmp     [I.Arch],CPUX64
  5308.         je      .L4
  5309.         BitTR   I.Prefixes,P66
  5310.         cmp     [I.Operand],0
  5311.         mov     [I.RandSize],VDWORD+80h
  5312.         jnz     RM32R32
  5313.         mov     [I.RandSize],VWORD+80h
  5314.         jmp     RM16R16
  5315.  
  5316. .L1:    call    FetchModRM
  5317.         cmp     [I.Mod],3
  5318.         jnz     .L4
  5319.         cmp     [I.RM],0
  5320.         jnz     .L4
  5321.         cmp     [I.PrefixByte],bit PF3
  5322.         jnz     .L3
  5323.         BitTR   I.Prefixes,PF3
  5324.         movzx   eax,[I.Reg]
  5325.         mov     eax,[rax*2+TCRYPTable]
  5326.         or      ax,ax
  5327.         jz      .L4
  5328. .L2:    mov     [I.Name],ax
  5329.         ret
  5330. .L3:    cmp     al,$C0
  5331.         mov     ax,TXSTORE
  5332.         jz      .L2
  5333. .L4:    jmp     ErrorDec
  5334. ;-----------------------------------------------------------------------------
  5335. Rtn0FAE:call    FetchModRM
  5336.         mov     rsi,[I.SaveRSI]
  5337.  
  5338.         movzx   ebx,[I.Reg]
  5339.  
  5340.         cmp     [I.PrefixByte],bit P66
  5341.         je      Rtn660FAE
  5342.  
  5343.         cmp     [I.Mod],3
  5344.         je      .L2
  5345.  
  5346.         mov     edx,T0FAETable
  5347.         cmp     [I.W],0
  5348.         jz      .L0
  5349.         mov     edx,T0FAETab64
  5350.         call    ClearW
  5351. .L0:
  5352.         cmp     [I.PrefixByte],bit PF3
  5353.         je      RtnF30FAE
  5354.  
  5355.         mov     edx,[rbx*2+rdx]
  5356. .L1:    or      dx,dx
  5357.         jz      ErrorDec
  5358.         mov     [I.Name],dx
  5359.         jmp     RM32
  5360. .L2:
  5361.         cmp     [I.PrefixByte],bit PF3
  5362.         je      RtnF30FAE
  5363.         cmp     [I.PrefixByte],bit PF2
  5364.         je      RtnF20FAE
  5365.         mov     dx,TLFENCE
  5366.         cmp     al,$E8
  5367.         je      .L3
  5368.         mov     dx,TMFENCE
  5369.         cmp     al,$F0
  5370.         je      .L3
  5371.         mov     dx,TSFENCE
  5372.         cmp     al,$F8
  5373.         jne     ErrorDec
  5374. .L3:    lodsb
  5375.         mov     [I.Name],dx
  5376.         ret
  5377.  
  5378. Rtn660FAE:
  5379.         and     byte [I.Prefixes],not (bit P66)
  5380.         mov     edx,T660FAETable3
  5381.         cmp     [I.Mod],3
  5382.         jz      .L1
  5383.         mov     edx,T660FAETable0
  5384. .L1:    mov     edx,[rbx*2+rdx]
  5385.         or      dx,dx
  5386.         jz      ErrorDec
  5387.         mov     [I.Name],dx
  5388.         jmp     RM32
  5389.  
  5390. RtnF20FAE:
  5391.         and     byte [I.Prefixes],not (bit PF2)
  5392.         cmp     byte [rsi],0xC0
  5393.         jb      ErrorDec
  5394.         mov     [I.Name],TUMWAIT
  5395.         jmp     RM32
  5396.  
  5397. RtnF30FAE:
  5398.         cmp     bl,06h
  5399.         jz      .L0
  5400.         cmp     [I.Arch],CPUX64
  5401.         jne     ErrorDec
  5402. .L0:
  5403.         mov     edx,[rbx*2+TF30FAETable]
  5404.         or      dx,dx
  5405.         jz      ErrorDec
  5406.         mov     [I.Name],dx
  5407.         and     byte [I.Prefixes],not (bit PF3)
  5408.         cmp     bl,06h
  5409.         jz      IsUMONITOR
  5410.         call    ClearW
  5411.         mov     [I.RandSize],VDWORD
  5412.         cmp     [I.W],0
  5413.         jz      RM32
  5414.         cmp     bl,5
  5415. ifz     mov     [I.Name],TINCSSPQ
  5416.         mov     [I.RandSize],VQWORD
  5417.         jmp     RM64
  5418. IsUMONITOR:
  5419.         cmp     byte [rsi],0xC0
  5420.         jbe     .1
  5421.         BitTR   I.Prefixes,P67
  5422.         call    FetchModRM
  5423.        ;cmp     [I.Mod],3
  5424.        ;setnz   [I.Arg1.Mem]
  5425.         mov     al,[I.Address]
  5426.         add     al,GPR16
  5427.         mov     [I.Arg1.Type],al
  5428.         mov     [I.Arg1.Type2nd],InRM
  5429.         ret
  5430. .1:     mov     [I.Name],TCLRSSBSY
  5431.         call    FetchModRM
  5432.         mov     [I.Arg1.Mem],1
  5433.         ret
  5434. ;-----------------------------------------------------------------------------
  5435. Rtn0FC2:xor     ebx,ebx
  5436.         mov     al,[I.PrefixByte]
  5437.         or      al,al
  5438.         jz      .L1
  5439.         inc     ebx
  5440.         cmp     al,bit P66
  5441.         setz    [I.Mandatory66]
  5442.         jz      .L1
  5443.         inc     ebx
  5444.         cmp     al,bit PF2
  5445.         jz      .L1
  5446.         inc     ebx
  5447.         cmp     al,bit PF3
  5448.         jnz     ErrorDec
  5449. .L1:    not     al
  5450.         and     byte [I.Prefixes],al
  5451.  
  5452.         mov     eax,[rbx*3+CMPSuffixesY]
  5453.         mov     word [I.Suffix2nd],ax
  5454.         shr     eax,16
  5455.         mov     [I.RandSize],al
  5456.  
  5457.         call    R32RM32X
  5458.         xor     eax,eax
  5459.         FetchB
  5460.         mov     edx,[rax*2+CMPxxNames]
  5461.         cmp     al,7
  5462.         ja      .L2
  5463.         mov     [I.Name],dx
  5464.         ret
  5465. .L2:    mov     [I.Name],TCMP
  5466.         mov     [I.Arg3.Type],80h+1
  5467.         mov     [I.Arg3.ImmB],al
  5468.         ret
  5469. ;-----------------------------------------------------------------------------
  5470. Rtn0FC73:
  5471.         mov     ax,TRDPID
  5472.         cmp     [I.Reg],7
  5473.         jnz     .M7
  5474.         BitTR   I.Prefixes,PF3
  5475.         jc      .M0
  5476. .M7:    cmp     [I.Reg],6
  5477.         jb      ErrorDec
  5478.         mov     ax,TRDRAND
  5479.         jz      .M0
  5480.         mov     ax,TRDSEED
  5481. .M0:    mov     [I.Name],ax
  5482.         cmp     [I.W],0
  5483.         jz      .M1
  5484.         call    ClearW
  5485.         jmp     RM64
  5486. .M1:    BitTR   I.Prefixes,P66
  5487.         cmp     [I.Operand],0
  5488.         jnz     RM32
  5489.         jmp     RM16
  5490. ;-----------------------------------------------------------------------------
  5491. Rtn0FC7:call    FetchModRM
  5492.         mov     rsi,[I.SaveRSI]
  5493.         cmp     [I.Mod],3
  5494.         jz      Rtn0FC73
  5495.         cmp     [I.Reg],1
  5496.         jne     .L0
  5497.         or      [I.Flags],_XA+_XR
  5498.         mov     [I.RandSize],VQWORD+80h
  5499.         cmp     [I.W],0
  5500.         jz      .RM
  5501.         mov     [I.RandSize],VXWORD+80h
  5502.         mov     dx,TCMPXCHG16B
  5503. .WWWW:  call    ClearW
  5504. .EA:    mov     [I.Name],dx
  5505. .RM:    jmp     RM32
  5506. .L0:
  5507.         mov     edx,T0FC7Table
  5508.         cmp     [I.W],0
  5509.         jz      .W0
  5510.         mov     edx,T0FC7Tab64
  5511. .W0:    movzx   eax,[I.Reg]
  5512.         mov     dx,[rax*2+rdx]
  5513.         or      dx,dx
  5514.         jnz     .WWWW
  5515.  
  5516.         mov     [I.RandSize],VQWORD+80h
  5517.         mov     ah,[I.Reg]
  5518.         mov     al,[I.PrefixByte]
  5519.         or      al,al
  5520.         jne     .L1
  5521.         mov     dx,TVMPTRLD
  5522.         cmp     ah,6
  5523.         je      .EA
  5524.         mov     dx,TVMPTRST
  5525.         cmp     ah,7
  5526.         je      .EA
  5527. .ED:    jmp     ErrorDec
  5528.  
  5529. .L1:    cmp     [I.Reg],6
  5530.         jne     .ED
  5531.         cmp     al,bit P66
  5532.         jne     .L2
  5533.         mov     dx,TVMCLEAR
  5534.         mov     [I.Mandatory66],1
  5535. .AN:    not     al
  5536.         and     byte [I.Prefixes],al
  5537.         jmp     .EA
  5538.  
  5539. .L2:    cmp     al,bit PF3
  5540.         jne     .ED
  5541.         mov     dx,TVMXON
  5542.         jmp     .AN
  5543. ;-----------------------------------------------------------------------------
  5544. RtnBSWAP:
  5545.         mov     al,[rsi-1]
  5546.         sub     al,0xC8
  5547.         mov     [I.RM],al
  5548.         mov     [I.Mod],3
  5549.         mov     [I.Arg1.Type2nd],InRM
  5550.         mov     [I.Arg1.Type],GPR64
  5551.         cmp     [I.W],0
  5552.         jnz     .Exit
  5553.         BitTR   I.Prefixes,P66
  5554.         mov     [I.Arg1.Type],GPR32
  5555.         cmp     [I.Operand],0
  5556.         jnz     .Exit
  5557.         mov     [I.Arg1.Type],GPR16
  5558. .Exit:  ret
  5559. ;-----------------------------------------------------------------------------
  5560. MOVZXWB:call    R16RM16
  5561.         mov     [I.AltName],TMOVZBW
  5562.         mov     [I.Arg2.Type],GPR08
  5563.         ret
  5564. MOVZXDB:call    R32RM32
  5565.         mov     [I.AltName],TMOVZBL
  5566.         mov     [I.Arg2.Type],GPR08
  5567.         ret
  5568. MOVZXQB:call    R64RM64
  5569.         mov     [I.AltName],TMOVZBQ
  5570.         mov     [I.Arg2.Type],GPR08
  5571.         ret
  5572. MOVZXWW:call    R16RM16
  5573.         mov     [I.AltName],TMOVZWW
  5574.         ret
  5575. MOVZXDW:call    R32RM32
  5576.         mov     [I.AltName],TMOVZWL
  5577.         mov     [I.Arg2.Type],GPR16
  5578.         ret
  5579. MOVZXQW:call    R64RM64
  5580.         mov     [I.AltName],TMOVZWQ
  5581.         mov     [I.Arg2.Type],GPR16
  5582.         ret
  5583. ;-----------------------------------------------------------------------------
  5584. MOVSXWB:call    R16RM16
  5585.         mov     [I.AltName],TMOVSBW
  5586.         mov     [I.Arg2.Type],GPR08
  5587.         ret
  5588. MOVSXDB:call    R32RM32
  5589.         mov     [I.AltName],TMOVSBL
  5590.         mov     [I.Arg2.Type],GPR08
  5591.         ret
  5592. MOVSXQB:call    R64RM64
  5593.         mov     [I.AltName],TMOVSBQ
  5594.         mov     [I.Arg2.Type],GPR08
  5595.         ret
  5596. MOVSXWW:call    R16RM16
  5597.         mov     [I.AltName],TMOVSWW
  5598.         ret
  5599. MOVSXDW:call    R32RM32
  5600.         mov     [I.AltName],TMOVSWL
  5601.         mov     [I.Arg2.Type],GPR16
  5602.         ret
  5603. MOVSXQW:call    R64RM64
  5604.         mov     [I.AltName],TMOVSWQ
  5605.         mov     [I.Arg2.Type],GPR16
  5606.         ret
  5607. ;-----------------------------------------------------------------------------
  5608. R16RM16B8:
  5609.         BitTR   I.Prefixes,PF3
  5610.         jnc     .L1
  5611.         call    R16RM16
  5612.         mov     [I.RandSize],VWORD+80h
  5613.         ret
  5614. .L1:    mov     [I.Name],TJMPE
  5615.         or      [I.Flags],_J
  5616.         jmp     DODISPW
  5617. ;-----------------------------------------------------------------------------
  5618. R32RM32B8:
  5619.         BitTR   I.Prefixes,PF3
  5620.         jnc     .L1
  5621.         call    R32RM32
  5622.         mov     [I.RandSize],VDWORD+80h
  5623.         ret
  5624. .L1:    mov     [I.Name],TJMPE
  5625.         or      [I.Flags],_J
  5626.         jmp     DODISPD
  5627. ;-----------------------------------------------------------------------------
  5628. R64RM64B8:
  5629.         BitTR   I.Prefixes,PF3
  5630.         jnc     .L1
  5631.         call    ClearW
  5632.         call    R64RM64
  5633.         mov     [I.RandSize],VQWORD+80h
  5634.         ret
  5635. .L1:    mov     [I.Name],TJMPE
  5636.         or      [I.Flags],_J
  5637.         jmp     DODISPD
  5638. ;-----------------------------------------------------------------------------
  5639. RtnCRC32:
  5640.         mov     [I.Table],TableCRC32
  5641.         jmp     RtnMOV32
  5642. ;-----------------------------------------------------------------------------
  5643. RtnMOVBE:
  5644.         mov     [I.Table],TableMOVBE
  5645. RtnMOV32:
  5646.         mov     [I.NewTable],1
  5647.         mov     [I.Only],0
  5648.         sub     al,0xF0
  5649.         ret
  5650. ;-----------------------------------------------------------------------------
  5651. RtnADOX:mov     [I.Table],TableADOX
  5652.         jmp     RtnADXX
  5653. RtnADCX:mov     [I.Table],TableADCX
  5654. RtnADXX:mov     [I.NewTable],1
  5655.         mov     [I.Only],1
  5656.         xor     al,al
  5657.         ret
  5658. ;-----------------------------------------------------------------------------
  5659. RtnINVXX:
  5660.         mov     [I.Table],TableINVx
  5661.         mov     [I.NewTable],1
  5662.         mov     [I.Only],1
  5663.         sub     al,80h
  5664.         ret
  5665. ;-----------------------------------------------------------------------------
  5666. Rtn0F388X:
  5667.         call    R32RM32
  5668.         cmp     [I.Mod],3
  5669.         jz      ErrorDec
  5670.         cmp     [I.Arch],CPUX64
  5671.         jnz     .L1
  5672.         mov     [I.Arg1.Type],GPR64
  5673. .L1:    ret
  5674. ;-----------------------------------------------------------------------------
  5675. Rtn0F3866:
  5676.         FetchB
  5677.         cmp     al,0x80
  5678.         jb      .M0
  5679.         cmp     al,0x82
  5680.         jbe     RtnINVXX
  5681. .M0:
  5682.         cmp     al,0xF0
  5683.         jb      .L0
  5684.         cmp     al,0xF1
  5685.         jbe     RtnMOVBE
  5686.  
  5687.         cmp     al,0xF6
  5688.         jz      RtnADCX
  5689.  
  5690. .L0:    mov     ebx,R32RM32X
  5691.         call    CheckPrevSSE4
  5692.         jnc     .LX
  5693.         call    CheckNextSSE4
  5694.         jc      ErrorDec
  5695. .LX:    ret
  5696. ;-----------------------------------------------------------------------------
  5697. Rtn0F38F2:
  5698.         FetchB
  5699.         cmp     al,0xF0
  5700.         jb      .L0
  5701.         cmp     al,0xF1
  5702.         jbe     RtnCRC32
  5703. .L0:    jmp     ErrorDec
  5704. ;-----------------------------------------------------------------------------
  5705. Rtn0F38F3:
  5706.         FetchB
  5707.         cmp     al,0xF6
  5708.         jz      RtnADOX
  5709. .L0:    jmp     ErrorDec
  5710. ;-----------------------------------------------------------------------------
  5711. CRC32R: call    R32RM32
  5712.         mov     [I.Arg2.Type],GPR08
  5713.         cmp     [I.W],0
  5714.         jz      .L1
  5715.         mov     [I.Arg1.Type],GPR64
  5716. .L1:    ret
  5717. ;-----------------------------------------------------------------------------
  5718. CRC32X: call    R32RM32
  5719.         BitTR   I.Prefixes,P66
  5720.         jnc     .L0
  5721.         mov     [I.Arg2.Type],GPR16
  5722. .L0:
  5723.         cmp     [I.W],0
  5724.         jz      .L1
  5725.         mov     [I.Arg1.Type],GPR64
  5726.         mov     [I.Arg2.Type],GPR64
  5727. .L1:    ret
  5728. ;-----------------------------------------------------------------------------
  5729. Rtn0F39:test    [I.Sensitive],NIA
  5730.         jz      ErrorDec
  5731.         ret
  5732. ;-----------------------------------------------------------------------------
  5733. Rtn0F3A:test    [I.Sensitive],NIA
  5734.         jnz     .L0
  5735.         test    [I.Sensitive],UND
  5736.         jz      .L1
  5737.         mov     [I.Name],TRDM
  5738.         ret
  5739. .L0:    mov     [I.Name],TBB0?RESET
  5740.         ret
  5741. .L1:    FetchB
  5742.         cmp     al,14h
  5743.         jz      Rtn0F3A14
  5744.         cmp     al,15h
  5745.         jz      Rtn0F3A15
  5746.         cmp     al,16h
  5747.         jz      Rtn0F3A16
  5748.         cmp     al,17h
  5749.         jz      Rtn0F3A17
  5750.         cmp     al,20h
  5751.         jz      Rtn0F3A20
  5752.         cmp     al,21h
  5753.         jz      Rtn0F3A21
  5754.         cmp     al,22h
  5755.         jz      Rtn0F3A22
  5756.         cmp     al,44h
  5757.         jz      Rtn0F3A44
  5758.         cmp     al,$CC
  5759.         jz      .CC
  5760.  
  5761.         mov     edx,TableSXSSE
  5762. .L5:    cmp     al,[rdx]
  5763.         je      .L4
  5764.         add     edx,4
  5765.         cmp     edx,TableEXSSE
  5766.         jb      .L5
  5767.         jmp     ErrorDec
  5768. .L4:    mov     edx,[rdx+1]
  5769.         mov     [I.RandSize],dl
  5770.         shr     edx,8
  5771.         mov     [I.Name],dx
  5772.  
  5773.         BitTR   I.Prefixes,P66
  5774.         jnc     .No66
  5775.         mov     [I.Mandatory66],1
  5776. .L3:    call    R32RM32X
  5777. .L2:    FetchB
  5778.         mov     [I.Arg3.Type],80h+1
  5779.         mov     [I.Arg3.ImmB],al
  5780.         ret
  5781. .No66:  cmp     al,0Fh
  5782.         jnz     ErrorDec
  5783.         mov     [I.RandSize],VQWORD+80h
  5784.         call    RtnMM2MM
  5785.         jmp     .L2
  5786. .CC:    mov     [I.Name],TSHA1RNDS4
  5787.         mov     [I.RandSize],VXWORD+80h
  5788.         jmp     .L3
  5789. ;-----------------------------------------------------------------------------
  5790. Rtn0F1012:
  5791.         test    [I.Sensitive],UND
  5792.         jnz     RM8R8
  5793.         jmp     Rtn0066F2F3
  5794.  
  5795. Rtn0F11X:
  5796.         test    [I.Sensitive],UND
  5797.         jz      Rtn0066F2F3
  5798.         cmp     [I.Operand],0
  5799.         jz      RM16R16
  5800.         jmp     RM32R32
  5801.  
  5802. Rtn0F13X:
  5803.         test    [I.Sensitive],UND
  5804.         jz      Rtn0066F2F3
  5805.         cmp     [I.Operand],0
  5806.         jz      R16RM16
  5807.         jmp     R32RM32
  5808.  
  5809. Rtn0F18:call    FetchModRM
  5810.         cmp     [I.Mod],3
  5811.         jz      ErrorDec
  5812.         setnz   [I.Arg1.Mem]
  5813.         mov     al,[I.Reg]
  5814.         mov     dx,TPREFETCHNTA
  5815.         or      al,al
  5816.         jz      .L1
  5817.         mov     dx,TPREFETCHT0
  5818.         cmp     al,1
  5819.         jz      .L1
  5820.         mov     dx,TPREFETCHT1
  5821.         cmp     al,2
  5822.         jz      .L1
  5823.         mov     dx,TPREFETCHT2
  5824.         cmp     al,3
  5825.         jnz     ErrorDec
  5826. .L1:    mov     [I.Name],dx
  5827.         mov     [I.RandSize],0
  5828.         ret
  5829.  
  5830.  
  5831. Rtn0F1C:call    FetchModRM
  5832.         cmp     [I.Mod],3
  5833.         jz      .Exit
  5834.         cmp     [I.Reg],0
  5835.         jnz     .Exit
  5836.         stc
  5837.         ret
  5838. .Exit:  mov     rsi,[I.SaveRSI]
  5839.         clc
  5840.         ret
  5841.  
  5842. Is0F1C: mov     [I.RandSize],VBYTE+80h
  5843.         mov     [I.Name],TCLDEMOTE
  5844.        ;cmp     [I.Mod],3
  5845.        ;setnz   [I.Arg1.Mem]
  5846.         mov     [I.Arg1.Type],GPR08
  5847.         mov     [I.Arg1.Type2nd],InRM
  5848.         ret
  5849.  
  5850. Rtn0F1C16:
  5851.         call    Rtn0F1C
  5852.         jc      Is0F1C
  5853. Rtn0F1X16:
  5854.         mov     ebx,RM16
  5855.         jmp     Rtn0F18XX.L1
  5856. Rtn0F1C32:
  5857.         call    Rtn0F1C
  5858.         jc      Is0F1C
  5859. Rtn0F1X32:
  5860.         mov     ebx,RM32
  5861.         jmp     Rtn0F18XX.L1
  5862. Rtn0F1C64:
  5863.         call    Rtn0F1C
  5864.         jc      Is0F1C
  5865. Rtn0F1X64:
  5866.         mov     ebx,RM64
  5867.         jmp     Rtn0F18XX.L1
  5868.  
  5869. Rtn0F1816:
  5870.         mov     ebx,RM16
  5871.         jmp     Rtn0F18XX
  5872. Rtn0F1832:
  5873.         mov     ebx,RM32
  5874.         jmp     Rtn0F18XX
  5875. Rtn0F1864:
  5876.         mov     ebx,RM64
  5877.        ;jmp     Rtn0F18XX
  5878. Rtn0F18XX:
  5879. .L0:    test    [I.Sensitive],UND
  5880.         jz      Rtn0F18
  5881. .L1:    BitTR   I.Prefixes,P66
  5882.         call    ClearW
  5883.  
  5884.         movzx   eax,word [rsi-1]
  5885.         sub     al,18h
  5886.         shl     al,3
  5887.         and     ah,111000b
  5888.         shr     ah,3
  5889.         add     al,ah
  5890.         xor     ah,ah
  5891.         mov     cl,10
  5892.         div     cl
  5893.         add     ax,'00'
  5894.         cmp     al,'0'
  5895.         jne     @F
  5896.         mov     al,ah
  5897.         xor     ah,ah
  5898. @@:     mov     [Names+THINT?NOPXX+8],ax
  5899.         mov     [I.Name],THINT?NOPXX
  5900.         jmp     rbx
  5901.  
  5902. Rtn0F1A:mov     r8d,N0F1A
  5903.         jmp     Rtn0F1B.L0
  5904. Rtn0F1B:mov     r8d,N0F1B
  5905. .L0:    xor     edx,edx
  5906.         mov     dl,3
  5907.         mov     ecx,edx
  5908.         movzx   eax,[I.PrefixByte]
  5909.         bsf     edx,eax
  5910.         bsr     ecx,eax
  5911.         cmp     edx,ecx
  5912.         jnz     ErrorDec
  5913.         push    rdx
  5914.         mov     edx,[rdx*2+r8]
  5915.         mov     [I.Name],dx
  5916.         BitTR   I.Prefixes,P67          ; 0x48 & 0x67 have no effect
  5917.         pushf
  5918.         call    FetchModRM
  5919.         popf
  5920.         jnc     @F
  5921.         BitTS   I.Prefixes,P67
  5922. @@:
  5923.         pop     rdx
  5924.         movzx   eax,word [rdx*2+r8+4*2]
  5925.         add     eax,RtnXX
  5926.         mov     [I.RandSize],0
  5927.         jmp     rax
  5928. ;-----------------------------------------------------------------------------
  5929. Rtn0F1E:
  5930.         BitTR   I.Prefixes,PF3
  5931.         jz      ErrorDec
  5932.         mov     al,[rsi]
  5933.         mov     dx,TENDBR32
  5934.         cmp     al,0xFB
  5935.         jz      .2
  5936.         mov     dx,TENDBR64
  5937.         cmp     al,0xFA
  5938.         jz      .2
  5939.         mov     [I.Arg1.Type],GPR64
  5940.         mov     dx,TRDSSPQ
  5941.         test    [I.PreREX],8    ;REX.W
  5942.         jnz     .1
  5943.         mov     [I.Arg1.Type],GPR32
  5944.         mov     dx,TRDSSPD
  5945. .1:     mov     [I.Name],dx
  5946.         call    FetchModRM
  5947.         cmp     [I.Mod],3
  5948.         jnz     ErrorDec
  5949.         cmp     [I.Reg],1
  5950.         jnz     ErrorDec
  5951.         mov     [I.Arg1.Type2nd],InRM
  5952.         ret
  5953. .2:     mov     [I.Name],dx
  5954.         lodsb
  5955.         ret
  5956. ;-----------------------------------------------------------------------------
  5957. RBNDLDX:push    BNDX1
  5958.         cmp     [I.Mod],3
  5959.         jz      ErrorDec
  5960.         jmp     R32RM32M
  5961. ;-----------------------------------------------------------------------------
  5962. RBNDSTX:push    BNDX2
  5963.         cmp     [I.Mod],3
  5964.         jz      ErrorDec
  5965.         jmp     RM32R32M
  5966. ;-----------------------------------------------------------------------------
  5967. RBNDMOV1:
  5968.         push    BNDX3
  5969.         BitTR   I.Prefixes,P66
  5970.         jmp     RM32R32M
  5971. ;-----------------------------------------------------------------------------
  5972. RBNDMOV2:
  5973.         push    BNDX3
  5974.         BitTR   I.Prefixes,P66
  5975.         jmp     R32RM32M
  5976. ;-----------------------------------------------------------------------------
  5977. RBNDCU: RBNDCN:
  5978.         push    BNDX4
  5979.         BitTR   I.Prefixes,PF2
  5980.         jmp     R32RM32M
  5981. ;-----------------------------------------------------------------------------
  5982. RBNDMK: cmp     [I.Mod],3
  5983.         jz      ErrorDec
  5984. RBNDCL: push    BNDX4
  5985.         BitTR   I.Prefixes,PF3
  5986.         jmp     R32RM32M
  5987. ;-----------------------------------------------------------------------------
  5988. Rtn0066F2F3:
  5989.         call    Start66F2F3
  5990. .L1:
  5991.         movzx   ebx,word [rdx+rbx+4*1+4*2]
  5992.         add     ebx,RtnXX
  5993.  
  5994.         mov     edx,[rdx]
  5995.         or      dx,dx
  5996.         jz      ErrorDec
  5997.         not     al
  5998.         and     byte [I.Prefixes],al
  5999.         mov     [I.Name],dx
  6000.  
  6001.         jmp     rbx
  6002. ;-----------------------------------------------------------------------------
  6003. RtnWB:  BitTR   I.Prefixes,PF3
  6004.         jnc     .Exit
  6005.         mov     [I.Name],TWBNOINVD
  6006. .Exit:  ret
  6007. ;-----------------------------------------------------------------------------
  6008. YaMOVDIRI:
  6009.         mov     [I.Name],TMOVDIRI
  6010.         mov     [I.RandSize],VDWORD+80h
  6011.         cmp     [I.W],0
  6012.         jz      RM32R32
  6013.         BitTR   I.Prefixes,P4X
  6014.         mov     [I.RandSize],VQWORD+80h
  6015.         jmp     RM64R64
  6016. ;-----------------------------------------------------------------------------
  6017. YaMOVDIR64B:
  6018.         BitTR   I.Prefixes,P66
  6019.         mov     [I.Mandatory66],True
  6020.         mov     [I.Name],TMOVDIR64B
  6021.         call    FetchModRM
  6022.        ;cmp     [I.Mod],3
  6023.        ;setnz   [I.Arg1.Mem]
  6024.         mov     al,[I.Address]
  6025.         add     al,GPR16
  6026.         mov     [I.Arg1.Type],al
  6027.         mov     [I.Arg1.Type2nd],InReg
  6028.  
  6029.         mov     [I.Arg2.Type],GPR64
  6030.         mov     [I.Arg2.Type2nd],InRM
  6031.         ret
  6032. ;-----------------------------------------------------------------------------
  6033. Rtn0066F2F3Y:
  6034.         lodsb
  6035.         cmp     [I.PrefixByte],bit P66
  6036.         jnz     NoMOVDIR64B
  6037.         cmp     al,0xF8
  6038.         jnz     NoMOVDIR64B
  6039.         cmp     byte [rsi],0xC0
  6040.         jb      YaMOVDIR64B
  6041. NoMOVDIR64B:
  6042.         cmp     al,0xF9
  6043.         jnz     NoMOVDIRI
  6044.         cmp     byte [rsi],0xC0
  6045.         jb      YaMOVDIRI
  6046. NoMOVDIRI:
  6047.         dec     rsi
  6048.  
  6049.         mov     ecx,[rdx+4*2]
  6050.  
  6051.         mov     al,[I.PrefixByte]
  6052.         or      al,al
  6053.         jz      .L1
  6054.         shr     ecx,8
  6055.         add     edx,2
  6056.         cmp     al,bit P66
  6057.         setz    [I.Mandatory66]
  6058.         jz      .L1
  6059.         shr     ecx,8
  6060.         add     edx,2
  6061.         cmp     al,bit PF2
  6062.         jz      .L1
  6063.         cmp     al,bit PF2+bit P66
  6064.         jz      .L0
  6065.         shr     ecx,8
  6066.         add     edx,2
  6067.         cmp     al,bit PF3
  6068.         jz      .L1
  6069.         jmp     ErrorDec
  6070. .L0:    mov     al,bit PF2
  6071. .L1:    mov     [I.RandSize],cl
  6072.  
  6073.         xor     ebx,ebx
  6074.         jmp     Rtn0066F2F3.L1
  6075. ;-----------------------------------------------------------------------------
  6076. Rtn0066F2F3X:
  6077. r8w     equ     di
  6078.         call    Start66F2F3
  6079.  
  6080.         mov     r8d,[rdx+rbx+2*2*4+4]
  6081.  
  6082.         movzx   ebx,word [rdx+rbx+1*2*4+4]
  6083.         add     ebx,RtnXX
  6084.  
  6085.         mov     edx,[rdx]
  6086.         or      dx,dx
  6087.         jz      ErrorDec
  6088.         not     al
  6089.         and     byte [I.Prefixes],al
  6090.         mov     [I.Name],dx
  6091.  
  6092.         push    r8
  6093.         call    rbx
  6094.         pop     r8
  6095.  
  6096.         mov     eax,r8d
  6097.         and     eax,0F0Fh
  6098.         mov     [I.Arg1.Type],al
  6099.         mov     [I.Arg2.Type],ah
  6100.  
  6101.         test    r8w,8080h
  6102.         jz      .L1
  6103.         cmp     [I.W],0
  6104.         jz      .L1
  6105.         call    ClearW
  6106.  
  6107.         test    r8b,0080h
  6108. ifnz    mov     [I.Arg1.Type],GPR64
  6109.         test    r8w,8000h
  6110. ifnz    mov     [I.Arg2.Type],GPR64
  6111.  
  6112.         test    r8w,2020h
  6113. ifnz    mov     [I.LastByte],'q'
  6114.  
  6115.         test    r8w,4040h
  6116.         jz      .L1
  6117.         and     [I.RandSize],0xF0
  6118.         or      [I.RandSize],VQWORD
  6119. .L1:
  6120.         test    r8w,1010h
  6121.         jz      .L2
  6122.         FetchB
  6123.         mov     [I.Arg3.Type],80h+1
  6124.         mov     [I.Arg3.ImmB],al
  6125. .L2:
  6126.         ret
  6127.  
  6128. RM16F5: mov     [I.AltName],TLJMP
  6129.         jmp     RM16F35
  6130. RM16F3: mov     [I.AltName],TLCALL
  6131. RM16F35:mov     [I.Point],TFAR
  6132.         call    RM16
  6133.         cmp     [I.Mod],3
  6134.         jz      ErrorDec
  6135.         cmp     [I.Syntax],0
  6136.         jnz     .SkipATT
  6137.         mov     [I.RandSize],VDWORD
  6138. .SkipATT:
  6139.         ret
  6140.  
  6141. RM32F5: mov     [I.AltName],TLJMP
  6142.         jmp     RM32F35
  6143. RM32F3: mov     [I.AltName],TLCALL
  6144. RM32F35:mov     [I.Point],TFAR
  6145.         call    RM32
  6146.         cmp     [I.Mod],3
  6147.         jz      ErrorDec
  6148.         cmp     [I.Syntax],0
  6149.         jnz     .SkipATT
  6150.         mov     [I.RandSize],VFWORD
  6151. .SkipATT:
  6152.         ret
  6153.  
  6154. RM64F5: mov     [I.AltName],TLJMP
  6155.         jmp     RM64F35
  6156. RM64F3: mov     [I.AltName],TLCALL
  6157. RM64F35:mov     [I.Point],TFAR
  6158.         call    RM64
  6159.         cmp     [I.Mod],3
  6160.         jz      ErrorDec
  6161.         cmp     [I.Syntax],0
  6162.         jnz     .SkipATT
  6163.         mov     [I.RandSize],VTWORD
  6164. .SkipATT:
  6165.         ret
  6166.  
  6167. R8I08:
  6168.         FetchB
  6169.  
  6170.         mov     [I.Arg1.Type],GPR08
  6171.  
  6172.         mov     [I.Arg2.Type],80h+1
  6173.         mov     [I.Arg2.ImmB],al
  6174.  
  6175.         ret
  6176.  
  6177. R16I16:
  6178.         FetchW
  6179.  
  6180.         mov     [I.Arg1.Type],GPR16
  6181.  
  6182.         mov     [I.Arg2.Type],80h+2
  6183.         mov     [I.Arg2.Imm],rax
  6184.  
  6185.         ret
  6186.  
  6187. R32I32:
  6188.         FetchSD
  6189.  
  6190.         mov     [I.Arg1.Type],GPR32
  6191.  
  6192.         mov     [I.Arg2.Type],80h+4
  6193.         mov     [I.Arg2.Imm],rax
  6194.  
  6195.         ret
  6196.  
  6197. R64I32:
  6198.         FetchSD
  6199.  
  6200.         mov     [I.Arg1.Type],GPR64
  6201.  
  6202.         mov     [I.Arg2.Type],80h+40h+4
  6203.         mov     [I.Arg2.Imm],rax
  6204.  
  6205.         ret
  6206.  
  6207. R16RM16I16:
  6208.         call    FetchModRM
  6209.  
  6210.        ;cmp     [I.Mod],3
  6211.        ;setnz   [I.Arg2.Mem]
  6212.         mov     [I.Arg2.Type],GPR16
  6213.         mov     [I.Arg2.Type2nd],InRM
  6214.  
  6215.         mov     [I.Arg1.Type],GPR16
  6216.         mov     [I.Arg1.Type2nd],InReg
  6217.  
  6218.         FetchSW
  6219.         mov     [I.Arg3.Type],80h+40h+20h+2
  6220.         mov     [I.Arg3.Imm],rax
  6221.         ret
  6222.  
  6223. R32RM32I32:
  6224.         call    FetchModRM
  6225.  
  6226.        ;cmp     [I.Mod],3
  6227.        ;setnz   [I.Arg2.Mem]
  6228.         mov     [I.Arg2.Type],GPR32
  6229.         mov     [I.Arg2.Type2nd],InRM
  6230.  
  6231.         mov     [I.Arg1.Type],GPR32
  6232.         mov     [I.Arg1.Type2nd],InReg
  6233.  
  6234.         FetchSD
  6235.         mov     [I.Arg3.Type],80h+40h+20h+4
  6236.         mov     [I.Arg3.Imm],rax
  6237.         ret
  6238.  
  6239. R64RM64I32:
  6240.         call    FetchModRM
  6241.  
  6242.        ;cmp     [I.Mod],3
  6243.        ;setnz   [I.Arg2.Mem]
  6244.         mov     [I.Arg2.Type],GPR64
  6245.         mov     [I.Arg2.Type2nd],InRM
  6246.  
  6247.         mov     [I.Arg1.Type],GPR64
  6248.         mov     [I.Arg1.Type2nd],InReg
  6249.  
  6250.         FetchSD
  6251.         mov     [I.Arg3.Type],80h+40h+20h+4
  6252.         mov     [I.Arg3.Imm],rax
  6253.         ret
  6254.  
  6255. R16RM16SI16:
  6256.         call    FetchModRM
  6257.  
  6258.        ;cmp     [I.Mod],3
  6259.        ;setnz   [I.Arg2.Mem]
  6260.         mov     [I.Arg2.Type],GPR16
  6261.         mov     [I.Arg2.Type2nd],InRM
  6262.  
  6263.         mov     [I.Arg1.Type],GPR16
  6264.         mov     [I.Arg1.Type2nd],InReg
  6265.  
  6266.         FetchSB
  6267.         mov     [I.Arg3.Type],80h+40h+20h+1
  6268.         mov     [I.Arg3.Imm],rax
  6269.         ret
  6270.  
  6271. R32RM32SI32:
  6272.         call    FetchModRM
  6273.  
  6274.        ;cmp     [I.Mod],3
  6275.        ;setnz   [I.Arg2.Mem]
  6276.         mov     [I.Arg2.Type],GPR32
  6277.         mov     [I.Arg2.Type2nd],InRM
  6278.  
  6279.         mov     [I.Arg1.Type],GPR32
  6280.         mov     [I.Arg1.Type2nd],InReg
  6281.  
  6282.         FetchSB
  6283.         mov     [I.Arg3.Type],80h+40h+20h+1
  6284.         mov     [I.Arg3.Imm],rax
  6285.         ret
  6286.  
  6287. R64RM64SI32:
  6288.         call    FetchModRM
  6289.  
  6290.        ;cmp     [I.Mod],3
  6291.        ;setnz   [I.Arg2.Mem]
  6292.         mov     [I.Arg2.Type],GPR64
  6293.         mov     [I.Arg2.Type2nd],InRM
  6294.  
  6295.         mov     [I.Arg1.Type],GPR64
  6296.         mov     [I.Arg1.Type2nd],InReg
  6297.  
  6298.         FetchSB
  6299.         mov     [I.Arg3.Type],80h+40h+20h+1
  6300.         mov     [I.Arg3.Imm],rax
  6301.         ret
  6302.  
  6303. RtnINSX:
  6304.         mov     [I.PossibleF2F3],True
  6305.  
  6306.         mov     [I.AltName],TINS
  6307.  
  6308.         BitTR   I.Prefixes,P67
  6309.         jnc     .SkipATT
  6310.  
  6311.         mov     [I.Name],TINS
  6312.  
  6313.         mov     [I.Base],RRDI
  6314.  
  6315.         mov     [I.Arg1.Type],1
  6316.         mov     [I.Arg1.Mem],True
  6317.  
  6318.         mov     [I.Arg2.Type],2
  6319.         mov     [I.Arg2.Reg],RRDX
  6320. .SkipATT:
  6321.         ret
  6322.  
  6323. RtnOUTSX:
  6324.         mov     [I.PossibleF2F3],True
  6325.  
  6326.         mov     [I.AltName],TOUTS
  6327.  
  6328.         test    byte [I.Prefixes],bit PSEG+bit P67
  6329.         jz      .SkipATT
  6330.  
  6331.         BitTR   I.Prefixes,P67
  6332.  
  6333.         mov     [I.Name],TOUTS
  6334.  
  6335.         mov     [I.Base],RRSI
  6336.  
  6337.         mov     [I.Arg2.Type],1
  6338.         mov     [I.Arg2.Mem],True
  6339.  
  6340.         mov     [I.Arg1.Type],2
  6341.         mov     [I.Arg1.Reg],RRDX
  6342.  
  6343.         call    ClearSeg
  6344. .SkipATT:
  6345.         ret
  6346.  
  6347. RM16I8: call    FetchModRM
  6348.  
  6349.        ;cmp     [I.Mod],3
  6350.        ;setnz   [I.Arg1.Mem]
  6351.         mov     [I.Arg1.Type],GPR16
  6352.         mov     [I.Arg1.Type2nd],InRM
  6353.  
  6354.         FetchB
  6355.         mov     [I.Arg2.Type],80h+1
  6356.         mov     [I.Arg2.Imm],rax
  6357.         ret
  6358.  
  6359. RM32I8: call    FetchModRM
  6360.  
  6361.        ;cmp     [I.Mod],3
  6362.        ;setnz   [I.Arg1.Mem]
  6363.         mov     [I.Arg1.Type],GPR32
  6364.         mov     [I.Arg1.Type2nd],InRM
  6365.  
  6366.         FetchB
  6367.         mov     [I.Arg2.Type],80h+1
  6368.         mov     [I.Arg2.Imm],rax
  6369.         ret
  6370.  
  6371. RM64I8: call    FetchModRM
  6372.  
  6373.        ;cmp     [I.Mod],3
  6374.        ;setnz   [I.Arg1.Mem]
  6375.         mov     [I.Arg1.Type],GPR64
  6376.         mov     [I.Arg1.Type2nd],InRM
  6377.  
  6378.         FetchB
  6379.         mov     [I.Arg2.Type],80h+1
  6380.         mov     [I.Arg2.Imm],rax
  6381.         ret
  6382.  
  6383. RtnC216:
  6384.         mov     [I.IsRET],True
  6385.         FetchW
  6386.         mov     [I.Arg1.Type],80h+2
  6387.         mov     [I.Arg1.Imm],rax
  6388.  
  6389.         BitT    I.Prefixes,P66
  6390.         jnc     .SkipSuffix
  6391.         mov     [I.Suffix],'w'
  6392. .SkipSuffix:
  6393.         ret
  6394.  
  6395. RtnC232:
  6396.         mov     [I.IsRET],True
  6397.         FetchW
  6398.         mov     [I.Arg1.Type],80h+2
  6399.         mov     [I.Arg1.Imm],rax
  6400.         BitT    I.Prefixes,P66
  6401.         jnc     .SkipSuffix
  6402.         mov     [I.Suffix],'d'
  6403. .SkipSuffix:
  6404.         ret
  6405.  
  6406. RtnC264:
  6407.         mov     [I.IsRET],True
  6408.         FetchW
  6409.         mov     [I.Arg1.Type],80h+2
  6410.         mov     [I.Arg1.Imm],rax
  6411. AddSuffixX:
  6412.         cmp     [I.W],0
  6413.         jz      .SkipSuffix
  6414.         BitTR   I.Prefixes,P4X
  6415.         mov     [I.Suffix],'q'
  6416. .SkipSuffix:
  6417.         ret
  6418.  
  6419. AddSuffixQ:
  6420.         cmp     [I.Syntax],0
  6421.         jz      AddSuffixX
  6422.         ret
  6423.  
  6424. RtnC316:
  6425.         mov     [I.IsRET],True
  6426.         BitT    I.Prefixes,P66
  6427.         jnc     .SkipSuffix
  6428.         mov     [I.Suffix],'w'
  6429. .SkipSuffix:
  6430.         ret
  6431.  
  6432. RtnC332:
  6433.         mov     [I.IsRET],True
  6434.         BitT    I.Prefixes,P66
  6435.         jnc     .SkipSuffix
  6436.         mov     [I.Suffix],'d'
  6437. .SkipSuffix:
  6438.         ret
  6439.  
  6440. RtnC364:
  6441.         mov     [I.IsRET],True
  6442.         cmp     [I.W],0
  6443.         jz      .SkipSuffix
  6444.         BitTR   I.Prefixes,P4X
  6445.         mov     [I.Suffix],'q'
  6446. .SkipSuffix:
  6447.         ret
  6448.  
  6449. RtnC816:
  6450.         BitT    I.Prefixes,P66
  6451.         jnc     .SkipSuffix
  6452.         mov     [I.RandSize],VWORD
  6453.         mov     [I.Suffix],'w'
  6454. .SkipSuffix:
  6455.         jmp     RtnC864
  6456.  
  6457. RtnC832:
  6458.         BitT    I.Prefixes,P66
  6459.         jnc     .SkipSuffix
  6460.         mov     [I.RandSize],VDWORD
  6461.         mov     [I.Suffix],'d'
  6462. .SkipSuffix:
  6463.         jmp     RtnC864
  6464.  
  6465. RtnC864:
  6466.         lea     r10,[I.Arg2]
  6467.         lea     rax,[I.Arg1]
  6468.         mov     r8,rax
  6469.         xor     r8,r10
  6470.  
  6471.         cmp     [I.Syntax],0
  6472.         jnz     .ATT
  6473.         xor     r10,r8
  6474. .ATT:
  6475.         FetchW
  6476.         mov     [r10+TArg.Type],80h+2
  6477.         mov     [r10+TArg.Imm],rax
  6478.         FetchB
  6479.         xor     r10,r8
  6480.         mov     [r10+TArg.Type],80h+1
  6481.         mov     [r10+TArg.Imm],rax
  6482.         ret
  6483.  
  6484. RtnC916:
  6485.         BitT    I.Prefixes,P66
  6486.         jnc     .SkipSuffix
  6487.         mov     [I.RandSize],VWORD
  6488.         mov     [I.Suffix],'w'
  6489. .SkipSuffix:
  6490.         jmp     RtnC964
  6491. RtnC932:
  6492.         BitT    I.Prefixes,P66
  6493.         jnc     .SkipSuffix
  6494.         mov     [I.RandSize],VDWORD
  6495.         mov     [I.Suffix],'d'
  6496. .SkipSuffix:
  6497. RtnC964:
  6498.         ret
  6499.  
  6500. RtnCD:  cmp     [I.Emulated],0
  6501.         jnz     .Emul
  6502.         FetchB
  6503. .L4:    mov     [I.Name],TINT
  6504.         mov     [I.Arg1.Type],80h+1
  6505.         mov     [I.Arg1.ImmB],al
  6506.         ret
  6507. .Emul:
  6508.         FetchB
  6509.         cmp     al,34h
  6510.         jb      .L4
  6511.         cmp     al,3Bh
  6512.         ja      .L1
  6513.         add     al,$D8-34h
  6514.         pop     rdx
  6515.         jmp     DisAsm.NewTable
  6516. .L1:    cmp     al,3Ch
  6517.         jne     .L2
  6518.         FetchB
  6519.         mov     [I.SegmName],TES
  6520.         cmp     al,$C0
  6521.         jae     .V9
  6522.         cmp     al,$3F
  6523.         jb      .V9
  6524.         mov     [I.SegmName],TSS
  6525.         cmp     al,7Fh
  6526.         ja      .V9
  6527.         mov     [I.SegmName],TCS
  6528.       .V9:
  6529.         mov     [I.CurSeg],0xFF
  6530.         and     al,8
  6531.         add     al,$D0
  6532.         pop     rdx
  6533.         jmp     DisAsm.NewTable
  6534. .L2:    cmp     al,3Dh
  6535.         jne     .L3
  6536.         mov     [I.Name],TWAIT
  6537.         ret
  6538. .L3:    cmp     al,3Eh
  6539.         jne     .L4
  6540.         FetchW
  6541.         mov     al,3Eh
  6542.         jmp     .L4
  6543.  
  6544. RM81:   call    FetchModRM
  6545.  
  6546.        ;cmp     [I.Mod],3
  6547.        ;setnz   [I.Arg1.Mem]
  6548.         mov     [I.Arg1.Type],GPR08
  6549.         mov     [I.Arg1.Type2nd],InRM
  6550.  
  6551.         mov     word [I.Arg2.Type],Is1 shl 8+80h+1
  6552.         ret
  6553.  
  6554. RM161:  call    FetchModRM
  6555.  
  6556.        ;cmp     [I.Mod],3
  6557.        ;setnz   [I.Arg1.Mem]
  6558.         mov     [I.Arg1.Type],GPR16
  6559.         mov     [I.Arg1.Type2nd],InRM
  6560.  
  6561.         mov     word [I.Arg2.Type],Is1 shl 8+80h+1
  6562.         ret
  6563.  
  6564. RM321:  call    FetchModRM
  6565.  
  6566.        ;cmp     [I.Mod],3
  6567.        ;setnz   [I.Arg1.Mem]
  6568.         mov     [I.Arg1.Type],GPR32
  6569.         mov     [I.Arg1.Type2nd],InRM
  6570.  
  6571.         mov     word [I.Arg2.Type],Is1 shl 8+80h+1
  6572.         ret
  6573.  
  6574. RM641:  call    FetchModRM
  6575.  
  6576.        ;cmp     [I.Mod],3
  6577.        ;setnz   [I.Arg1.Mem]
  6578.         mov     [I.Arg1.Type],GPR64
  6579.         mov     [I.Arg1.Type2nd],InRM
  6580.  
  6581.         mov     word [I.Arg2.Type],Is1 shl 8+80h+1
  6582.         ret
  6583.  
  6584. RM8CL:  call    FetchModRM
  6585.  
  6586.        ;cmp     [I.Mod],3
  6587.        ;setnz   [I.Arg1.Mem]
  6588.         mov     [I.Arg1.Type],GPR08
  6589.         mov     [I.Arg1.Type2nd],InRM
  6590.  
  6591.         mov     [I.Arg2.Type],GPR08
  6592.         mov     [I.Arg2.Reg],RRCX
  6593.         ret
  6594.  
  6595. RM16CL: call    FetchModRM
  6596.  
  6597.        ;cmp     [I.Mod],3
  6598.        ;setnz   [I.Arg1.Mem]
  6599.         mov     [I.Arg1.Type],GPR16
  6600.         mov     [I.Arg1.Type2nd],InRM
  6601.  
  6602.         mov     [I.Arg2.Type],GPR08
  6603.         mov     [I.Arg2.Reg],RRCX
  6604.         ret
  6605.  
  6606. RM32CL: call    FetchModRM
  6607.  
  6608.        ;cmp     [I.Mod],3
  6609.        ;setnz   [I.Arg1.Mem]
  6610.         mov     [I.Arg1.Type],GPR32
  6611.         mov     [I.Arg1.Type2nd],InRM
  6612.  
  6613.         mov     [I.Arg2.Type],GPR08
  6614.         mov     [I.Arg2.Reg],RRCX
  6615.         ret
  6616.  
  6617. RM64CL: call    FetchModRM
  6618.  
  6619.        ;cmp     [I.Mod],3
  6620.        ;setnz   [I.Arg1.Mem]
  6621.         mov     [I.Arg1.Type],GPR64
  6622.         mov     [I.Arg1.Type2nd],InRM
  6623.  
  6624.         mov     [I.Arg2.Type],GPR08
  6625.         mov     [I.Arg2.Reg],RRCX
  6626.         ret
  6627.  
  6628. LoseByte:
  6629.         FetchB
  6630.         cmp     al,0Ah
  6631.         je      .Default
  6632.         mov     [I.Arg1.Type],80h+1
  6633.         mov     [I.Arg1.ImmB],al
  6634. .Default:
  6635.         ret
  6636.  
  6637. RtnD7:
  6638.         test    byte [I.Prefixes],bit PSEG+bit P67
  6639.         jz      .SkipATT
  6640.  
  6641.         BitTR   I.Prefixes,P67
  6642.  
  6643.         mov     [I.Name],TXLAT
  6644.  
  6645.         mov     [I.RandSize],VBYTE
  6646.  
  6647.         mov     [I.Base],RRBX
  6648.  
  6649.         mov     [I.Arg1.Type],1
  6650.         mov     [I.Arg1.Mem],True
  6651.  
  6652.         call    ClearSeg
  6653. .SkipATT:
  6654.         ret
  6655.  
  6656. RtnE0:  push    DODISPB
  6657.         mov     al,[I.Arch]
  6658.         cmp     al,CPUX32
  6659.         jz      .32
  6660. .16:
  6661. .64:
  6662.         BitTR   I.Prefixes,P67
  6663.         jnc     @F
  6664.         mov     dword [I.Name],TLOOPNZL shl 16+TLOOPNZD
  6665.       @@:
  6666.         ret
  6667. .32:
  6668.         BitTR   I.Prefixes,P67
  6669.         jnc     @F
  6670.         mov     [I.Name],TLOOPNZW
  6671.       @@:
  6672.         ret
  6673.  
  6674. RtnE1:  push    DODISPB
  6675.         mov     al,[I.Arch]
  6676.         cmp     al,CPUX32
  6677.         jz      .32
  6678. .16:
  6679. .64:
  6680.         BitTR   I.Prefixes,P67
  6681.         jnc     @F
  6682.         mov     dword [I.Name],TLOOPZL shl 16+TLOOPZD
  6683.       @@:
  6684.         ret
  6685. .32:
  6686.         BitTR   I.Prefixes,P67
  6687.         jnc     @F
  6688.         mov     [I.Name],TLOOPZW
  6689.       @@:
  6690.         ret
  6691.  
  6692. RtnE2:  push    DODISPB
  6693.         mov     al,[I.Arch]
  6694.         cmp     al,CPUX32
  6695.         jz      .32
  6696. .16:
  6697. .64:
  6698.         BitTR   I.Prefixes,P67
  6699.         jnc     @F
  6700.         mov     dword [I.Name],TLOOPL shl 16+TLOOPD
  6701.       @@:
  6702.         ret
  6703. .32:
  6704.         BitTR   I.Prefixes,P67
  6705.         jnc     @F
  6706.         mov     [I.Name],TLOOPW
  6707.       @@:
  6708.         ret
  6709.  
  6710. RtnE3:  push    DODISPB
  6711.         mov     al,[I.Arch]
  6712.         cmp     al,CPUX16
  6713.         jz      .16
  6714.         cmp     al,CPUX32
  6715.         jz      .32
  6716. .64:
  6717.         mov     [I.Name],TJRCXZ
  6718.         BitTR   I.Prefixes,P67
  6719.         jnc     @F
  6720.         mov     [I.Name],TJECXZ
  6721.       @@:
  6722.         ret
  6723. .32:
  6724.         mov     [I.Name],TJECXZ
  6725.         BitTR   I.Prefixes,P67
  6726.         jnc     @F
  6727.         mov     [I.Name],TJCXZ
  6728.       @@:
  6729.         ret
  6730. .16:
  6731.         mov     [I.Name],TJCXZ
  6732.         BitTR   I.Prefixes,P67
  6733.         jnc     @F
  6734.         mov     [I.Name],TJECXZ
  6735.       @@:
  6736.         ret
  6737.  
  6738. RtnE4:  mov     [I.Arg1.Type],GPR08
  6739. RtnEXVV:
  6740.         FetchB
  6741.         mov     [I.Arg2.Type],80h+1
  6742.         mov     [I.Arg2.ImmB],al
  6743.         ret
  6744.  
  6745. RtnE516:mov     [I.Arg1.Type],GPR16
  6746.         jmp     RtnEXVV
  6747.  
  6748. RtnE532:mov     [I.Arg1.Type],GPR32
  6749.         jmp     RtnEXVV
  6750.  
  6751. RtnEC:  mov     [I.Arg1.Type],GPR08
  6752. RtnEXXX:mov     [I.Arg2.Type],GPR16
  6753.         mov     [I.Arg2.Reg],RRDX
  6754.         ret
  6755.  
  6756. RtnED16:mov     [I.Arg1.Type],GPR16
  6757.         jmp     RtnEXXX
  6758.  
  6759. RtnED32:mov     [I.Arg1.Type],GPR32
  6760.         jmp     RtnEXXX
  6761.  
  6762. RtnE6:  FetchB
  6763.         mov     [I.Arg2.Type],GPR08
  6764. RtnEXYY:mov     [I.Arg1.Type],80h+1
  6765.         mov     [I.Arg1.ImmB],al
  6766.         ret
  6767.  
  6768. RtnE716:FetchB
  6769.         mov     [I.Arg2.Type],GPR16
  6770.         jmp     RtnEXYY
  6771.  
  6772. RtnE732:FetchB
  6773.         mov     [I.Arg2.Type],GPR32
  6774.         jmp     RtnEXYY
  6775.  
  6776. RtnEE:  mov     [I.Arg2.Type],GPR08
  6777. RtnEXZZ:
  6778.         mov     [I.Arg1.Type],GPR16
  6779.         mov     [I.Arg1.Reg],RRDX
  6780.         ret
  6781.  
  6782. RtnEF16:mov     [I.Arg2.Type],GPR16
  6783.         jmp     RtnEXZZ
  6784.  
  6785. RtnEF32:mov     [I.Arg2.Type],GPR32
  6786.         jmp     RtnEXZZ
  6787.  
  6788. ESC_0_000:
  6789. ESC_0_001:
  6790. ESC_0_010:
  6791. ESC_0_011:
  6792. ESC_0_100:
  6793. ESC_0_101:
  6794. ESC_0_110:
  6795. ESC_0_111:
  6796.         call    FetchModRM
  6797.  
  6798.         lea     r8,[I.Arg1]
  6799.  
  6800.         cmp     [I.Mod],3
  6801.         setnz   [I.Arg1.Mem]
  6802.         mov     [I.Arg1.Type],STXRG
  6803.         jnz     .Exit
  6804.  
  6805.         mov     [I.RandSize],0
  6806.  
  6807.         cmp     [I.Reg],2
  6808.         jz      .Exit
  6809.         cmp     [I.Reg],3
  6810.         jz      .Exit
  6811.  
  6812.         lea     r8,[I.Arg2]
  6813.         mov     [r8+TArg.Type],STXRG
  6814. .Exit:
  6815.         mov     [r8+TArg.Type2nd],InRM
  6816.         ret
  6817.  
  6818. ESC_1_000:
  6819.         call    FetchModRM
  6820.  
  6821.         mov     [I.Arg1.Type2nd],InRM
  6822.  
  6823.         cmp     [I.Mod],3
  6824.         setnz   [I.Arg1.Mem]
  6825.         mov     [I.Arg1.Type],STXRG
  6826.         jnz     .Exit
  6827.  
  6828.         mov     [I.RandSize],0
  6829. .Exit:
  6830.         ret
  6831.  
  6832. ESC_1_001:
  6833.         call    FetchModRM
  6834.  
  6835.         cmp     [I.Mod],3
  6836.         setnz   [I.Arg1.Mem]
  6837.         mov     [I.Arg1.Type],STXRG
  6838.         jnz     ErrorDec
  6839.  
  6840.         mov     [I.RandSize],0
  6841.  
  6842.         mov     [I.Arg1.Type2nd],InRM
  6843.         ret
  6844.  
  6845. ESC_1_010:
  6846.         call    FetchModRM
  6847.  
  6848.         cmp     [I.Mod],3
  6849.         setnz   [I.Arg1.Mem]
  6850.         mov     [I.Arg1.Type],STXRG
  6851.         jnz     .Exit
  6852.  
  6853.         mov     [I.RandSize],0
  6854.  
  6855.         cmp     byte [rsi-1],0xD0
  6856.         jnz     ErrorDec
  6857.         mov     [I.Arg1.Type],0
  6858.         mov     [I.Name],TFNOP
  6859. .Exit:
  6860.         ret
  6861.  
  6862. ESC_1_011:
  6863.         call    FetchModRM
  6864.  
  6865.         cmp     [I.Mod],3
  6866.         setnz   [I.Arg1.Mem]
  6867.         mov     [I.Arg1.Type],STXRG
  6868.         jnz     .Exit
  6869.  
  6870.         mov     [I.RandSize],0
  6871.  
  6872.         mov     [I.Name],TFSTP1
  6873.  
  6874.         mov     [I.Arg1.Type2nd],InRM
  6875. .Exit:
  6876.         ret
  6877.  
  6878. ESC_1_100:
  6879.         call    FetchModRM
  6880.  
  6881.         mov     [I.Name],TFLDENV
  6882.  
  6883.         mov     al,[I.Arch]
  6884.         cmp     al,CPUX16
  6885.         jz      .16
  6886. .64:
  6887. .32:
  6888.         BitTR   I.Prefixes,P66
  6889.         jnc     @F
  6890.         mov     dword [I.Name],TFLDENVS shl 16+TFLDENVW
  6891.       @@:
  6892.         jmp     .XX
  6893. .16:
  6894.         BitTR   I.Prefixes,P66
  6895.         jnc     @F
  6896.         mov     dword [I.Name],TFLDENVS shl 16+TFLDENVD
  6897.       @@:
  6898.  
  6899. .XX:    cmp     [I.Mod],3
  6900.         setnz   [I.Arg1.Mem]
  6901.         mov     [I.Arg1.Type],STXRG
  6902.         jnz     .Exit
  6903.  
  6904.         mov     al,[I.RM]
  6905.         mov     [I.Name],TFCHS
  6906.         or      al,al
  6907.         jz      .Quit
  6908.         mov     [I.Name],TFABS
  6909.         cmp     al,1
  6910.         jz      .Quit
  6911.         mov     [I.Name],TFTST
  6912.         cmp     al,4
  6913.         jz      .Quit
  6914.         mov     [I.Name],TFXAM
  6915.         cmp     al,5
  6916.         jnz     ErrorDec
  6917. .Quit:  mov     [I.Arg1.Type],0
  6918. .Exit:  ret
  6919.  
  6920. ESC_1_101:
  6921.         call    FetchModRM
  6922.  
  6923.         cmp     [I.Mod],3
  6924.         setnz   [I.Arg1.Mem]
  6925.         mov     [I.Arg1.Type],STXRG
  6926.         jnz     .Exit
  6927.  
  6928.         mov     [I.Arg1.Type],0
  6929.         movzx   eax,[I.RM]
  6930.         mov     ax,[TFLDXTable+rax*2]
  6931.         or      eax,eax
  6932.         jz      ErrorDec
  6933.         mov     [I.Name],ax
  6934. .Exit:
  6935.         ret
  6936.  
  6937. ESC_1_110:
  6938.         call    FetchModRM
  6939.  
  6940.         cmp     [I.Mod],3
  6941.         setnz   [I.Arg1.Mem]
  6942.         mov     [I.Arg1.Type],STXRG
  6943.         jz      .Mod3
  6944. if %B=64
  6945.         mov     rdx,(TFSTENV shl 16+TFNSTENV)shl 32+(TFSTENV shl 16+TFNSTENV)
  6946. else
  6947.         mov     edx,(TFSTENV shl 16+TFNSTENV)
  6948.         mov     edi,(TFSTENV shl 16+TFNSTENV)
  6949. end if
  6950.         mov     al,[I.Arch]
  6951.         cmp     al,CPUX16
  6952.         jz      .16
  6953. .64:
  6954. .32:
  6955.         BitTR   I.Prefixes,P66
  6956.         jnc     @F
  6957. if %B=64
  6958.         mov     rdx,(TFSTENVS shl 16+TFNSTENVS)shl 32+(TFSTENVW shl 16+TFNSTENVW)
  6959. else
  6960.         mov     edx,(TFSTENVW shl 16+TFNSTENVW)
  6961.         mov     edi,(TFSTENVS shl 16+TFNSTENVS)
  6962. end if
  6963.       @@:
  6964.         jmp     .XX
  6965. .16:
  6966.         BitTR   I.Prefixes,P66
  6967.         jnc     @F
  6968. if %B=64
  6969.         mov     rdx,(TFSTENVS shl 16+TFNSTENVS)shl 32+(TFSTENVD shl 16+TFNSTENVD)
  6970. else
  6971.         mov     edx,(TFSTENVD shl 16+TFNSTENVD)
  6972.         mov     edi,(TFSTENVS shl 16+TFNSTENVS)
  6973. end if
  6974.       @@:
  6975.  
  6976. .XX:
  6977.         cmp     [I.Syntax],0
  6978.         jz      .YY
  6979. if %B=64
  6980.         rol     rdx,32
  6981. else
  6982.         mov     edx,edi
  6983. end if
  6984. .YY:
  6985.         BitTR   I.Prefixes,P9B
  6986.         jnc     @F
  6987.         rol     edx,16
  6988.       @@:
  6989.         mov     [I.Name],dx
  6990.         ret
  6991.  
  6992. .Mod3:
  6993.         mov     [I.Arg1.Type],0
  6994.         movzx   eax,[I.RM]
  6995.         mov     ax,[TE110Table+rax*2]
  6996.         mov     [I.Name],ax
  6997.  
  6998. .Exit:  ret
  6999.  
  7000. ESC_1_111:
  7001.         call    FetchModRM
  7002.  
  7003.         cmp     [I.Mod],3
  7004.         setnz   [I.Arg1.Mem]
  7005.         mov     [I.Arg1.Type],STXRG
  7006.         jz      .Mod3
  7007.  
  7008.         mov     ax,TFNSTCW
  7009.         BitTR   I.Prefixes,P9B
  7010.         jnc     @F
  7011.         mov     ax,TFSTCW
  7012.       @@:
  7013.         jmp     .Name
  7014. .Mod3:
  7015.         mov     [I.Arg1.Type],0
  7016.         movzx   eax,[I.RM]
  7017.         mov     ax,[TE111Table+rax*2]
  7018. .Name:
  7019.         mov     [I.Name],ax
  7020.         ret
  7021.  
  7022. ESC_2_000:
  7023.         mov     di,TFCMOVB
  7024.         jmp     ESC_2_XXX
  7025. ESC_2_001:
  7026.         mov     di,TFCMOVE
  7027.         jmp     ESC_2_XXX
  7028. ESC_2_010:
  7029.         mov     di,TFCMOVBE
  7030.         jmp     ESC_2_XXX
  7031. ESC_2_011:
  7032.         mov     di,TFCMOVU
  7033.         jmp     ESC_2_XXX
  7034. ESC_2_100:
  7035. ESC_2_101:
  7036. ESC_2_110:
  7037. ESC_2_111:
  7038.         xor     edi,edi
  7039. ESC_2_XXX:
  7040.         call    FetchModRM
  7041.  
  7042.         cmp     [I.Mod],3
  7043.         setnz   [I.Arg1.Mem]
  7044.         mov     [I.Arg1.Type],STXRG
  7045.         jnz     .Exit
  7046.  
  7047.         mov     [I.RandSize],0
  7048.  
  7049.         mov     [I.Name],TFUCOMPP
  7050.         cmp     byte [rsi-1],0xE9
  7051.         jz      .Quit
  7052.  
  7053.         or      di,di
  7054.         jz      ErrorDec
  7055.         mov     [I.Name],di
  7056.         mov     [I.Arg2.Type],STXRG
  7057.         mov     [I.Arg2.Type2nd],InRM
  7058. .Exit:  ret
  7059. .Quit:
  7060.         mov     [I.Arg1.Type],0
  7061.         ret
  7062.  
  7063. ESC_3_000:
  7064.         mov     di,TFCMOVNB
  7065.         jmp     ESC_3_XXX
  7066. ESC_3_001:
  7067.         mov     di,TFCMOVNE
  7068.         jmp     ESC_3_XXX
  7069. ESC_3_010:
  7070.         mov     di,TFCMOVNBE
  7071.         jmp     ESC_3_XXX
  7072. ESC_3_011:
  7073.         mov     di,TFCMOVNU
  7074. ESC_3_XXX:
  7075. ESC_3_YYY:
  7076.         call    FetchModRM
  7077.  
  7078.         cmp     [I.Mod],3
  7079.         setnz   [I.Arg1.Mem]
  7080.         mov     [I.Arg1.Type],STXRG
  7081.         jnz     .Exit
  7082.  
  7083.         mov     [I.RandSize],0
  7084.  
  7085.         or      di,di
  7086.         jz      ErrorDec
  7087.         mov     [I.Name],di
  7088.         mov     [I.Arg2.Type],STXRG
  7089.         mov     [I.Arg2.Type2nd],InRM
  7090. .Exit:
  7091.         ret
  7092.  
  7093. ESC_3_100:
  7094.         call    FetchModRM
  7095.         cmp     [I.Mod],3
  7096.         jnz     ErrorDec
  7097.         mov     al,[I.RM]
  7098.         mov     edx,TFENI shl 16 +TFNENI
  7099.         or      al,al
  7100.         jz      .L1
  7101.         mov     edx,TFDISI shl 16 +TFNDISI
  7102.         dec     al
  7103.         jz      .L1
  7104.         mov     edx,TFCLEX shl 16 +TFNCLEX
  7105.         dec     al
  7106.         jz      .L1
  7107.         mov     edx,TFINIT shl 16 +TFNINIT
  7108.         dec     al
  7109.         jz      .L1
  7110.         mov     dx,TFSETPM
  7111.         dec     al
  7112.         jz      .L2
  7113.         mov     dx,TFRSTPM
  7114.         dec     al
  7115.         jnz     ErrorDec
  7116.         jmp     .L2
  7117. .L1:    BitTR   I.Prefixes,P9B
  7118.         jnc     .L2
  7119.         rol     edx,16
  7120. .L2:    mov     [I.Name],dx
  7121.         ret
  7122.  
  7123. ESC_3_101:
  7124.         mov     di,TFUCOMI
  7125.         mov     [I.IsFloat],1
  7126.         test    [I.Sensitive],NIA
  7127.         jz      ESC_3_YYY
  7128.         mov     [I.RandSize],0
  7129.         call    FetchModRM
  7130.         cmp     [I.Mod],3
  7131.         jnz     ErrorDec
  7132.         mov     al,[I.RM]
  7133.         mov     dx,TFSTB0
  7134.         or      al,al
  7135.         jz      .L1
  7136.         dec     al
  7137.         jz      ErrorDec
  7138.         mov     dx,TFSTB2
  7139.         dec     al
  7140.         jz      .L1
  7141.         mov     dx,TFSTB1
  7142.         dec     al
  7143.         jnz     ErrorDec
  7144. .L1:    mov     [I.Name],dx
  7145.         ret
  7146.  
  7147. ESC_3_110:
  7148.         call    FetchModRM
  7149.         cmp     [I.Mod],3
  7150.         jnz     ErrorDec
  7151.  
  7152.         test    [I.Sensitive],NIA
  7153.         jz      .YIA
  7154.  
  7155.         cmp     [I.RM],1
  7156.         jnz     ErrorDec
  7157.         mov     [I.Name],TF4X4
  7158.         ret
  7159. .YIA:
  7160.         mov     [I.Arg1.Type],STXRG
  7161.         mov     [I.Arg2.Type],STXRG
  7162.         mov     [I.Arg2.Type2nd],InRM
  7163.         ret
  7164.  
  7165. ESC_3_111:
  7166.         call    FetchModRM
  7167.         test    [I.Sensitive],NIA
  7168.         jz      .YIA
  7169.  
  7170.         cmp     [I.Mod],3
  7171.         jnz     ErrorDec
  7172.         cmp     [I.RM],4
  7173.         jnz     ErrorDec
  7174.         mov     [I.Name],TFRINT2
  7175.         ret
  7176. .YIA:
  7177.         cmp     [I.Mod],3
  7178.         jz      ErrorDec
  7179.         mov     [I.IsFloat],1
  7180.         mov     [I.Arg1.Mem],True
  7181.         mov     [I.Arg1.Type],STXRG
  7182.         mov     [I.RandSize],VTWORD
  7183.         ret
  7184.  
  7185. ESC_4_010:
  7186.         mov     edi,TFCOM2 shl 16+TFCOM2
  7187.         jmp     ESC_4_XXX
  7188. ESC_4_011:
  7189.         mov     edi,TFCOMP3 shl 16+TFCOMP3
  7190.         jmp     ESC_4_XXX
  7191. ESC_4_000:
  7192. ESC_4_001:
  7193.         xor     edi,edi
  7194.         jmp     ESC_4_XXX
  7195. ESC_4_100:
  7196.         mov     edi,TFSUB shl 16+TFSUBR
  7197.         jmp     ESC_4_XXX
  7198. ESC_4_101:
  7199.         mov     edi,TFSUBR shl 16+TFSUB
  7200.         jmp     ESC_4_XXX
  7201. ESC_4_110:
  7202.         mov     edi,TFDIV shl 16+TFDIVR
  7203.         jmp     ESC_4_XXX
  7204. ESC_4_111:
  7205.         mov     edi,TFDIVR shl 16+TFDIV
  7206. ESC_4_XXX:
  7207.         call    FetchModRM
  7208.  
  7209.         mov     [I.Arg1.Type2nd],InRM
  7210.  
  7211.         cmp     [I.Mod],3
  7212.         setnz   [I.Arg1.Mem]
  7213.         mov     [I.Arg1.Type],STXRG
  7214.         jnz     .Exit
  7215.  
  7216.         or      edi,edi
  7217.         jz      .Null
  7218.         mov     dword [I.Name],edi
  7219. .Null:
  7220.  
  7221.         mov     [I.RandSize],0
  7222.  
  7223.         cmp     [I.Reg],2
  7224.         jz      .Exit
  7225.         cmp     [I.Reg],3
  7226.         jz      .Exit
  7227.  
  7228.         mov     [I.Arg2.Type],STXRG
  7229. .Exit:  ret
  7230.  
  7231. ESC_5_001:
  7232.         mov     di,TFXCH4
  7233.         jmp     ESC_5_XXX
  7234. ESC_5_000:
  7235.         mov     di,TFFREE
  7236.         jmp     ESC_5_XXX
  7237. ESC_5_010:
  7238. ESC_5_011:
  7239.         xor     edi,edi
  7240. ESC_5_XXX:
  7241.         call    FetchModRM
  7242. ESC_5_YYY:
  7243.  
  7244.         mov     [I.Arg1.Type2nd],InRM
  7245.  
  7246.         cmp     [I.Mod],3
  7247.         setnz   [I.Arg1.Mem]
  7248.         mov     [I.Arg1.Type],STXRG
  7249.         jnz     .Exit
  7250.  
  7251.         or      di,di
  7252.         jz      .Null
  7253.         mov     [I.Name],di
  7254. .Null:
  7255.  
  7256.         mov     [I.RandSize],0
  7257. .Exit:  ret
  7258.  
  7259.  
  7260. ESC_5_100:
  7261.         mov     di,TFUCOM
  7262.         call    FetchModRM
  7263.         cmp     [I.Mod],3
  7264.         jz      ESC_5_YYY
  7265.  
  7266.         mov     [I.Name],TFRSTOR
  7267.  
  7268.         mov     al,[I.Arch]
  7269.         cmp     al,CPUX16
  7270.         jz      .16
  7271. .64:
  7272. .32:
  7273.         BitTR   I.Prefixes,P66
  7274.         jnc     @F
  7275.         mov     dword [I.Name],TFRSTORS shl 16+TFRSTORW
  7276.       @@:
  7277.         jmp     .XX
  7278. .16:
  7279.         BitTR   I.Prefixes,P66
  7280.         jnc     @F
  7281.         mov     dword [I.Name],TFRSTORS shl 16+TFRSTORD
  7282.       @@:
  7283.  
  7284. .XX:
  7285.         mov     [I.Arg1.Mem],True
  7286.         mov     [I.Arg1.Type],STXRG
  7287.         ret
  7288.  
  7289. ESC_5_101:
  7290.         call    FetchModRM
  7291.         cmp     [I.Mod],3
  7292.         jnz     ErrorDec
  7293.  
  7294.         mov     [I.Name],TFUCOMP
  7295.  
  7296.         mov     [I.Arg1.Type2nd],InRM
  7297.         mov     [I.Arg1.Type],STXRG
  7298.         ret
  7299.  
  7300. ESC_5_110:
  7301.         call    FetchModRM
  7302.         cmp     [I.Mod],3
  7303.         jz      ErrorDec
  7304.  
  7305.         mov     edi,TFSAVE shl 16+TFNSAVE
  7306.  
  7307.         mov     al,[I.Arch]
  7308.         cmp     al,CPUX16
  7309.         jz      .16
  7310. .64:
  7311. .32:
  7312.         BitTR   I.Prefixes,P66
  7313.         jnc     @F
  7314.         mov     edi,TFSAVEW shl 16+TFNSAVEW
  7315.       @@:
  7316.         jmp     .XX
  7317. .16:
  7318.         BitTR   I.Prefixes,P66
  7319.         jnc     @F
  7320.         mov     edi,TFSAVED shl 16+TFNSAVED
  7321.       @@:
  7322. .XX:
  7323.         BitTR   I.Prefixes,P9B
  7324.         jnc     .YY
  7325.         rol     edi,16
  7326. .YY:
  7327.         mov     [I.Name],di
  7328.         mov     [I.Arg1.Mem],True
  7329.         mov     [I.Arg1.Type],STXRG
  7330.         ret
  7331.  
  7332. ESC_5_111:
  7333.         call    FetchModRM
  7334.  
  7335.         test    [I.Sensitive],NIA
  7336.         jnz     .XX
  7337.  
  7338.         cmp     [I.Mod],3
  7339.         jz      ErrorDec
  7340.  
  7341.         mov     edi,TFSTSW shl 16+TFNSTSW
  7342.         BitTR   I.Prefixes,P9B
  7343.         jnc     .YY
  7344.         rol     edi,16
  7345. .YY:
  7346.         mov     [I.Name],di
  7347.         mov     [I.Arg1.Mem],True
  7348.         mov     [I.Arg1.Type],STXRG
  7349.         ret
  7350. .XX:    cmp     [I.Mod],3
  7351.         jnz     ErrorDec
  7352.         cmp     byte [rsi-1],0xFC
  7353.         jnz     ErrorDec
  7354.         mov     [I.Name],TFRICHOP
  7355.         ret
  7356.  
  7357. ESC_6_111:
  7358.         mov     edi,TFDIVRP shl 16+TFDIVP
  7359.         jmp     ESC_6_XXX
  7360. ESC_6_110:
  7361.         mov     edi,TFDIVP shl 16+TFDIVRP
  7362.         jmp     ESC_6_XXX
  7363. ESC_6_101:
  7364.         mov     edi,TFSUBRP shl 16+TFSUBP
  7365.         jmp     ESC_6_XXX
  7366. ESC_6_100:
  7367.         mov     edi,TFSUBP shl 16+TFSUBRP
  7368.         jmp     ESC_6_XXX
  7369. ESC_6_010:
  7370.         mov     edi,TFCOMP5 shl 16+TFCOMP5
  7371.         jmp     ESC_7_XXX       ;Yes = ESC_7_XXX
  7372. ESC_6_001:
  7373.         mov     edi,TFMULP shl 16+TFMULP
  7374.         jmp     ESC_6_XXX
  7375. ESC_6_000:
  7376.         mov     edi,TFADDP shl 16+TFADDP
  7377.         jmp     ESC_6_XXX
  7378. ESC_6_011:
  7379.         xor     edi,edi
  7380. ESC_6_XXX:
  7381.         call    FetchModRM
  7382.  
  7383.         cmp     [I.Mod],3
  7384.         setnz   [I.Arg1.Mem]
  7385.         mov     [I.Arg1.Type],STXRG
  7386.         jnz     .Exit
  7387.  
  7388.         mov     [I.Arg1.Type2nd],InRM
  7389.  
  7390.         mov     [I.RandSize],0
  7391.  
  7392.         cmp     byte [rsi-1],0xD9
  7393.         jz      .Quit
  7394.  
  7395.         or      edi,edi
  7396.         jz      .Null
  7397.         mov     dword [I.Name],edi
  7398. .Null:
  7399.         mov     [I.Arg2.Type],STXRG
  7400. .Exit:
  7401.         ret
  7402. .Quit:
  7403.         mov     [I.Name],TFCOMPP
  7404.         mov     [I.Arg1.Type],0
  7405.         ret
  7406.  
  7407. ESC_7_011:
  7408.         mov     di,TFSTP9
  7409.         jmp     ESC_7_XXX
  7410. ESC_7_010:
  7411.         mov     di,TFSTP8
  7412.         jmp     ESC_7_XXX
  7413. ESC_7_001:
  7414.         mov     di,TFXCH7
  7415.         jmp     ESC_7_XXX
  7416. ESC_7_000:
  7417.         mov     di,TFFREEP
  7418. ESC_7_XXX:
  7419.         call    FetchModRM
  7420.  
  7421.         cmp     [I.Mod],3
  7422.         setnz   [I.Arg1.Mem]
  7423.         mov     [I.Arg1.Type],STXRG
  7424.         jnz     .Exit
  7425.  
  7426.         mov     [I.Arg1.Type2nd],InRM
  7427.  
  7428.         mov     [I.RandSize],0
  7429.  
  7430.         or      di,di
  7431.         jz      .Null
  7432.         mov     [I.Name],di
  7433. .Null:
  7434.  
  7435. .Exit:
  7436.         ret
  7437.  
  7438. ESC_7_100:
  7439.         call    FetchModRM
  7440.  
  7441.         cmp     [I.Syntax],0
  7442.         jz      .SkipATT
  7443.         mov     [I.RandSize],0
  7444. .SkipATT:
  7445.  
  7446.         cmp     [I.Mod],3
  7447.         setnz   [I.Arg1.Mem]
  7448.         mov     [I.Arg1.Type],STXRG
  7449.         jnz     .Exit
  7450.  
  7451.         mov     al,[I.Reg]
  7452.  
  7453.         mov     edx,TFSTSW shl 16 +TFNSTSW
  7454.         or      al,al
  7455.         jz      .L1
  7456.  
  7457.         test    [I.Sensitive],UND
  7458.         jz      .L1
  7459.  
  7460.         mov     edx,TFSTDW shl 16 +TFNSTDW
  7461.         cmp     al,1
  7462.         jz      .L1
  7463.  
  7464.         mov     edx,TFSTSG shl 16 +TFNSTSG
  7465.         cmp     al,2
  7466. .L1:
  7467.         jnz     ErrorDec
  7468.  
  7469.         BitTR   I.Prefixes,P9B
  7470.         jnc     .L2
  7471.         rol     edx,16
  7472. .L2:    mov     [I.Name],dx
  7473.  
  7474.         mov     [I.Arg1.Type],GPR16
  7475.         mov     [I.RandSize],0
  7476. .Exit:
  7477.         ret
  7478.  
  7479. ESC_7_110:
  7480.         cmp     [I.Syntax],0
  7481.         jz      .SkipATT
  7482.         mov     [I.RandSize],0
  7483. .SkipATT:
  7484.  
  7485.         mov     di,TFCOMIP
  7486.         jmp     ESC_7_YYY
  7487. ESC_7_101:
  7488.         mov     [I.IsFloat],0
  7489.         mov     di,TFUCOMIP
  7490. ESC_7_YYY:
  7491.         call    FetchModRM
  7492.  
  7493.         cmp     [I.Mod],3
  7494.         setnz   [I.Arg1.Mem]
  7495.         mov     [I.Arg1.Type],STXRG
  7496.         jnz     .Exit
  7497.  
  7498.         mov     [I.Name],di
  7499.  
  7500.         mov     [I.Arg2.Type2nd],InRM
  7501.         mov     [I.Arg2.Type],STXRG
  7502.  
  7503.         mov     [I.RandSize],0
  7504. .Exit:
  7505.         ret
  7506.  
  7507. ESC_7_111:
  7508.         call    FetchModRM
  7509.  
  7510.         mov     [I.IsFloat],0
  7511.  
  7512.         cmp     [I.Mod],3
  7513.         setnz   [I.Arg1.Mem]
  7514.         mov     [I.Arg1.Type],STXRG
  7515.         jnz     .Exit
  7516.  
  7517.         test    [I.Sensitive],NIA
  7518.         jz      ErrorDec
  7519.         cmp     byte [rsi-1],0xFC
  7520.         jnz     ErrorDec
  7521.  
  7522.         mov     [I.Name],TFRINEAR
  7523.         mov     [I.Arg1.Type],0
  7524.  
  7525.         mov     [I.RandSize],0
  7526. .Exit:
  7527.         ret
  7528.  
  7529. DODISPBS:
  7530.         mov     [I.IsShort],True
  7531. DODISPB:
  7532.         mov     [I.IsAddress],True
  7533. if %B=64
  7534.         FetchSB
  7535.         add     rax,[Origin]
  7536.         add     rax,rsi
  7537.         sub     rax,[I.Addr]
  7538.  
  7539.         mov     cl,[I.Arch]
  7540.         or      cl,cl
  7541.         jnz     @F
  7542.         movzx   eax,ax
  7543.       @@:
  7544.         cmp     cl,CPUX32
  7545.         jnz     @F
  7546.         mov     eax,eax
  7547.       @@:
  7548.  
  7549.         mov     [I.Arg1.Type],80h+8
  7550.         mov     [I.Arg1.Imm],rax
  7551.         ret
  7552. else
  7553.         FetchSB
  7554.         cdq
  7555.         add     eax,[Origin]
  7556.         adc     edx,0
  7557.         add     eax,esi
  7558.         adc     edx,0
  7559.         sub     eax,[I.Addr]
  7560.         sbb     edx,0
  7561.  
  7562.         mov     cl,[I.Arch]
  7563.         or      cl,cl
  7564.         jnz     @F
  7565.         xor     edx,edx
  7566.         movzx   eax,ax
  7567.       @@:
  7568.         cmp     cl,CPUX32
  7569.         jnz     @F
  7570.         xor     edx,edx
  7571.       @@:
  7572.  
  7573.         mov     [I.Arg1.Type],80h+8
  7574.         mov     [I.Arg1.Imm],eax
  7575.         mov     [I.Arg1.Imm+4],edx
  7576.         ret
  7577. end if
  7578. DODISPW:
  7579.         mov     [I.IsAddress],True
  7580.         mov     [I.RandSize],VWORD
  7581. if %B=64
  7582.         FetchSW
  7583.         add     rax,[Origin]
  7584.         add     rax,rsi
  7585.         sub     rax,[I.Addr]
  7586.  
  7587.         movzx   eax,ax
  7588.  
  7589.         mov     [I.Arg1.Type],80h+8
  7590.         mov     [I.Arg1.Imm],rax
  7591.         ret
  7592. else
  7593.         FetchSW
  7594.         cdq
  7595.         add     eax,[Origin]
  7596.         adc     edx,0
  7597.         add     eax,esi
  7598.         adc     edx,0
  7599.         sub     eax,[I.Addr]
  7600.         sbb     edx,0
  7601.  
  7602.         xor     edx,edx
  7603.         movzx   eax,ax
  7604.  
  7605.         mov     [I.Arg1.Type],80h+8
  7606.         mov     [I.Arg1.Imm],eax
  7607.         mov     [I.Arg1.Imm+4],edx
  7608.         ret
  7609. end if
  7610. DODISPD:
  7611.         mov     [I.IsAddress],True
  7612. if %B=64
  7613.         FetchSD
  7614.         add     rax,[Origin]
  7615.         add     rax,rsi
  7616.         sub     rax,[I.Addr]
  7617.  
  7618.         cmp     [I.Arch],CPUX64
  7619.         jz      @F
  7620.         mov     eax,eax
  7621.       @@:
  7622.  
  7623.         mov     [I.Arg1.Type],80h+8
  7624.         mov     [I.Arg1.Imm],rax
  7625.         ret
  7626. else
  7627.         FetchSD
  7628.         cdq
  7629.         add     eax,[Origin]
  7630.         adc     edx,0
  7631.         add     eax,esi
  7632.         adc     edx,0
  7633.         sub     eax,[I.Addr]
  7634.         sbb     edx,0
  7635.  
  7636.         cmp     [I.Arch],CPUX64
  7637.         jz      @F
  7638.         xor     edx,edx
  7639.       @@:
  7640.  
  7641.         mov     [I.Arg1.Type],80h+8
  7642.         mov     [I.Arg1.Imm],eax
  7643.         mov     [I.Arg1.Imm+4],edx
  7644.         ret
  7645. end if
  7646. RtnArgQ:
  7647.         mov     [I.Arg1.Type],GPR64
  7648. RtnArgX:
  7649.         mov     al,[I.B]
  7650.         add     [I.Arg1.Reg],al
  7651.         call    ClearB
  7652.         ret
  7653.  
  7654. RtnArgD:
  7655.         mov     [I.Arg1.Type],GPR32
  7656.         jmp     RtnArgX
  7657.  
  7658. RtnArgW:
  7659.         mov     [I.Arg1.Type],GPR16
  7660.         jmp     RtnArgX
  7661.  
  7662. RndSizeD60:
  7663.         mov     [I.AltName],TPUSHA
  7664.         ret
  7665. RndSizeD61:
  7666.         mov     [I.AltName],TPOPA
  7667.         ret
  7668.  
  7669. AddPointD:
  7670.         mov     ax,TDWORD
  7671.         jmp     AddPointCommon
  7672. AddPointW:
  7673.         mov     ax,TWORD
  7674. AddPointCommon:
  7675.         BitTR   I.Prefixes,P66
  7676.         jnc     .Skip66
  7677.         mov     [I.Point],ax
  7678. .Skip66:
  7679.         mov     [I.Arg1.Type],SEGRG
  7680.         ret
  7681.  
  7682. RtnMOVSXD:
  7683.         mov     dword [I.Name],TMOVSLQ shl 16+TMOVSXD
  7684.         cmp     [I.W],0
  7685.         jnz     RtnMOVZXD.Continue
  7686. RtnMOVZXD:
  7687.         mov     dword [I.Name],TMOVZLQ shl 16+TMOVZXD
  7688.         BitTR   I.Prefixes,P66
  7689.         jnc     .Continue
  7690.         mov     dword [I.Name],TMOVZWQ shl 16+TMOVZXDW
  7691.  
  7692.         call    FetchModRM
  7693.  
  7694.        ;cmp     [I.Mod],3
  7695.        ;setnz   [I.Arg2.Mem]
  7696.         mov     [I.Arg2.Type],GPR16
  7697.         mov     [I.Arg2.Type2nd],InRM
  7698.  
  7699.         mov     [I.Arg1.Type],GPR64
  7700.         mov     [I.Arg1.Type2nd],InReg
  7701.         ret
  7702.  
  7703. .Continue:
  7704.         call    FetchModRM
  7705.  
  7706.         cmp     [I.Syntax],0
  7707.         jnz     @F
  7708.         mov     [I.RandSize],VDWORD
  7709.       @@:
  7710.  
  7711.        ;cmp     [I.Mod],3
  7712.        ;setnz   [I.Arg2.Mem]
  7713.         mov     [I.Arg2.Type],GPR32
  7714.         mov     [I.Arg2.Type2nd],InRM
  7715.  
  7716.         mov     [I.Arg1.Type],GPR64
  7717.         mov     [I.Arg1.Type2nd],InReg
  7718.         ret
  7719.  
  7720. PushI16:
  7721.         FetchW
  7722.         mov     [I.Arg1.Type],80h+2
  7723.         mov     [I.Arg1.Imm],rax
  7724.  
  7725.         mov     [I.Point],TWORD
  7726.         ret
  7727.  
  7728. PushI32:
  7729.         FetchSD
  7730.         mov     [I.Arg1.Type],80h+4
  7731.         mov     [I.Arg1.Imm],rax
  7732.  
  7733.         mov     [I.Point],TDWORD
  7734.         ret
  7735.  
  7736. PushI64:
  7737.         FetchSD
  7738.         mov     [I.Arg1.Type],80h+40h+4
  7739.         mov     [I.Arg1.Imm],rax
  7740.  
  7741.         mov     [I.Point],TQWORD
  7742.         ret
  7743.  
  7744. PushSI16:
  7745.         FetchSB
  7746.         mov     [I.Arg1.Type],80h+40h+2
  7747.         mov     [I.Arg1.Imm],rax
  7748.  
  7749.         mov     [I.Point],TWORD
  7750.         ret
  7751.  
  7752. PushSI32:
  7753.         FetchSB
  7754.         mov     [I.Arg1.Type],80h+40h+4
  7755.         mov     [I.Arg1.Imm],rax
  7756.  
  7757.         mov     [I.Point],TDWORD
  7758.         ret
  7759.  
  7760. PushSI64:
  7761.         FetchSB
  7762.         mov     [I.Arg1.Type],80h+40h+4
  7763.         mov     [I.Arg1.Imm],rax
  7764.  
  7765.         mov     [I.Point],TQWORD
  7766.         ret
  7767.  
  7768. include "rtn-c4c5.inc"
  7769. include "rtn-62xx.inc"
  7770. include "far-code.inc"
  7771.  
  7772. ClearSeg:
  7773.         cmp     [I.IsLEA],0
  7774.         jnz     .NoClear
  7775.         mov     ax,[I.SegmName]
  7776.         cmp     [I.Arch],CPUX64
  7777.         jnz     .Clear
  7778.         cmp     ax,TFS
  7779.         jz      .Clear
  7780.         cmp     ax,TGS
  7781.         jz      .Clear
  7782. .NoClear:
  7783.         ret
  7784. .Clear: BitTR   I.Prefixes,PSEG
  7785.  
  7786. ModRM2EA.Exit:
  7787.         ret
  7788.  
  7789. ModRM2EA:
  7790.         cmp     [I.Mod],3
  7791.         jz      .Exit
  7792.  
  7793.         mov     [I.DefSeg],VDS
  7794.  
  7795.         call    ClearSeg
  7796.         BitTR   I.Prefixes,P67
  7797.  
  7798.         mov     [I.PossibleLOCK],True
  7799.  
  7800.         cmp     [I.Address],AD16
  7801.         jz      .Address16
  7802. .SkipJmp:
  7803.         mov     al,[I.RM]
  7804.         add     al,[I.B]
  7805.  
  7806.         cmp     al,04h
  7807.         jz      .J4
  7808.         cmp     al,0Ch
  7809.         jz      .JC
  7810.         cmp     al,05h
  7811.         jz      .J5
  7812.         cmp     al,0Dh
  7813.         jz      .JD
  7814.  
  7815.         mov     [I.Base],al
  7816.         jmp     .AddressSizeCont
  7817.  
  7818. .JC:
  7819. .J4:    call    SIBByte
  7820.         jmp     .AddressSizeCont
  7821. .JD:
  7822. .J5:    cmp     [I.Mod],0
  7823.         jne     .ModeX
  7824.         mov     [I.DispSize],4
  7825.         FetchSD
  7826.         mov     [I.Disp],rax
  7827.         cmp     [I.Arch],CPUX64
  7828.         jnz     .No64X
  7829.         mov     [I.Relative],True
  7830. .No64X:
  7831.         jmp     .AddressSizeCont
  7832. .ModeX:
  7833.         mov     [I.Base],al
  7834.         mov     [I.DefSeg],VSS
  7835. .AddressSizeCont:
  7836.         mov     al,[I.Mod]
  7837.         cmp     al,1
  7838.         jne     .ModeNEQ1
  7839.         mov     [I.DispSize],1
  7840.         FetchSB
  7841.         mov     [I.Disp],rax
  7842.         jmp     .ModeNEQ2
  7843. .ModeNEQ1:
  7844.         cmp     al,2
  7845.         jne     .ModeNEQ2
  7846.         mov     [I.DispSize],4
  7847.         FetchSD
  7848.         mov     [I.Disp],rax
  7849. .ModeNEQ2:
  7850.  
  7851.         cmp     [I.Base],-1
  7852.         jz      .NoBase
  7853.         mov     al,[I.NotB]
  7854.         and     byte [I.Prefixes],al
  7855. .NoBase:
  7856.         cmp     [I.Indx],-1
  7857.         jz      .NoIndx
  7858.         mov     al,[I.NotX]
  7859.         and     byte [I.Prefixes],al
  7860. .NoIndx:
  7861.         ret
  7862.  
  7863. .Jump16:dd      .I0,.I1,.I2,.I3,.I4,.I5,.I6,.I7
  7864.  
  7865. .Address16:
  7866.         movzx   eax,[I.RM]
  7867.         mov     eax,[rax*4+.Jump16]
  7868.         jmp     rax
  7869. .I0:
  7870.         mov     [I.Base],RRBX
  7871.         mov     [I.Indx],RRSI
  7872.         jmp     .AddressSizeCont0
  7873. .I1:
  7874.         mov     [I.Base],RRBX
  7875.         mov     [I.Indx],RRDI
  7876.         jmp     .AddressSizeCont0
  7877. .I2:
  7878.         mov     [I.Base],RRBP
  7879.         mov     [I.Indx],RRSI
  7880.         mov     [I.DefSeg],VSS
  7881.         jmp     .AddressSizeCont0
  7882. .I3:
  7883.         mov     [I.Base],RRBP
  7884.         mov     [I.Indx],RRDI
  7885.         mov     [I.DefSeg],VSS
  7886.         jmp     .AddressSizeCont0
  7887. .I4:
  7888.         mov     [I.Base],RRSI
  7889.         jmp     .AddressSizeCont0
  7890. .I5:
  7891.         mov     [I.Base],RRDI
  7892.         jmp     .AddressSizeCont0
  7893. .I6:
  7894.         cmp     [I.Mod],0
  7895.         jne     .ModeY
  7896.         mov     [I.DispSize],2
  7897.         FetchSW
  7898.         mov     [I.Disp],rax
  7899.         jmp     .AddressSizeCont0
  7900. .ModeY:
  7901.         mov     [I.Base],RRBP
  7902.         mov     [I.DefSeg],VSS
  7903.         jmp     .AddressSizeCont0
  7904. .I7:
  7905.         mov     [I.Base],RRBX
  7906. .AddressSizeCont0:
  7907.         mov     al,[I.Mod]
  7908.         cmp     al,1
  7909.         jne     .NotModeEQ1
  7910.         mov     [I.DispSize],1
  7911.         FetchSB
  7912.         mov     [I.Disp],rax
  7913.         ret
  7914. .NotModeEQ1:
  7915.         cmp     al,2
  7916.         jne     .NotModeEQ2
  7917.         mov     [I.DispSize],2
  7918.         FetchSW
  7919.         mov     [I.Disp],rax
  7920. .NotModeEQ2:
  7921.         ret
  7922.  
  7923. SIBByte:
  7924.         FetchB
  7925.  
  7926.         mov     [I.SIB],al
  7927.         shr     al,6
  7928.         mov     [I.Scale],al
  7929.  
  7930.         mov     al,[I.SIB]
  7931.         shr     al,3
  7932.         and     al,7                    ;Index
  7933.         add     al,[I.X]
  7934.         cmp     al,4
  7935.         jz      .NoIndx
  7936.         mov     [I.Indx],al
  7937. .NoIndx:
  7938.         mov     al,[I.SIB]
  7939.         and     al,7                    ;Base
  7940.         add     al,[I.B]
  7941.  
  7942.         cmp     al,05h
  7943.         jz      .X5
  7944.         cmp     al,0Dh
  7945.         jz      .XD
  7946.  
  7947.         mov     [I.Base],al
  7948.  
  7949.         cmp     al,04h
  7950.         jz      .X4
  7951.  
  7952.         ret
  7953. .XD:
  7954.         cmp     [I.Mod],0
  7955.         jne     .ModeNX
  7956. .LD:    mov     [I.DispSize],4
  7957.         FetchSD
  7958.         mov     [I.Disp],rax
  7959.         ret
  7960. .ModeNX:
  7961.         mov     [I.Base],al
  7962.         ret
  7963. .X5:
  7964.         cmp     [I.Mod],0
  7965.         jz      .LD
  7966.         mov     [I.Base],RRBP
  7967. .X4:    mov     [I.DefSeg],VSS
  7968.         ret
  7969.  
  7970. Hex16:  mov     cl,16
  7971.         jmp     Hex
  7972. Hex8:   mov     cl,8
  7973. Hex:    movzx   ecx,cl
  7974.         jrcxz   .L2
  7975. if ~OS
  7976.         push    rdi
  7977.         call    FindEAX
  7978.         pop     rdi
  7979.         jc      .No
  7980.         add     rdi,rcx
  7981.         ret
  7982. .No:
  7983. end if
  7984.         push    rcx
  7985.         push    rdx
  7986.         xchg    rdx,rax
  7987. .L1:    movzx   eax,dl
  7988.         shr     rdx,8
  7989.         mov     ax,[rax*2+HexString]
  7990.         sub     cl,2
  7991.         mov     [rdi+rcx],ax
  7992.         ja      .L1
  7993.         pop     rdx
  7994.         pop     rcx
  7995.         add     rdi,rcx
  7996. .L2:    ret
  7997.  
  7998. if %B=32
  7999. Bin2Hex32:
  8000.         or      eax,eax
  8001.         jnz     Bin2Hex
  8002.         mov     cl,0
  8003.         jmp     Bin2Hex
  8004. end if
  8005.  
  8006. Bin2Hex16:
  8007.         mov     cl,16
  8008.         jmp     Bin2Hex
  8009. Bin2Hex8:
  8010.         mov     cl,8
  8011.         jmp     Bin2Hex
  8012. ;
  8013. Bin2Hex4:
  8014.         mov     cl,4
  8015.         jmp     Bin2Hex
  8016. ;
  8017. Bin2Hex2:
  8018.         mov     cl,2
  8019. ;
  8020. Bin2Hex:
  8021. if ~OS
  8022.         call    FindEAX
  8023.         jc      .No
  8024.         ret
  8025. .No:
  8026. end if
  8027.         push    rcx
  8028.         cmp     cl,16
  8029.         ja      .L0
  8030.         push    rdx
  8031.         cmp     [I.FullHex],True
  8032.         je      .L3
  8033.         cmp     rax,$FF
  8034.         ja      .SB
  8035.         cmp     cl,2
  8036.         jb      .L3
  8037.         mov     cl,2
  8038.         jmp     .L3
  8039. .SB:
  8040.         cmp     rax,$FFFF
  8041.         ja      .SW
  8042.         cmp     cl,4
  8043.         jb      .L3
  8044.         mov     cl,4
  8045.         jmp     .L3
  8046. .SW:
  8047.         cmp     rax,$FFFFFF
  8048.         ja      .SF
  8049.         cmp     cl,6
  8050.         jb      .L3
  8051.         mov     cl,6
  8052.         jmp     .L3
  8053. .SF:
  8054.         or      edx,$FFFFFFFF
  8055.         cmp     rax,rdx
  8056.         ja      .SD
  8057.         cmp     cl,8
  8058.         jb      .L3
  8059.         mov     cl,8
  8060.         jmp     .L3
  8061. .SD:
  8062.  
  8063. .L3:
  8064. if 1
  8065.         cmp     cl,16
  8066.         jnz     .L4
  8067.         or      edx,$FFFFFFFF
  8068.         cmp     rax,rdx
  8069.         ja      .L4
  8070.         mov     cl,8
  8071. .L4:
  8072. end if
  8073.         movzx   ecx,cl
  8074.         push    rdi rcx
  8075.  
  8076.         cmp     [I.HexPrefix],0
  8077.         je      @F
  8078. if 1
  8079.         cmp     byte [rdi-1],'L'
  8080.         jz      .L2
  8081. end if
  8082.         mov     word [rdi],'0x'
  8083.         scasw
  8084.         jmp     .L2
  8085. @@:
  8086.         cmp     [I.Dollar],0
  8087.         jne     .L2
  8088. if 1
  8089.         cmp     byte [rdi-1],'L'
  8090.         jz      .L2
  8091. end if
  8092.         mov     byte [rdi],'$'
  8093.         scasb
  8094. .L2:    xchg    rdx,rax
  8095. .L1:    movzx   eax,dl
  8096.         shr     rdx,8
  8097.         mov     ax,[rax*2+HexString]
  8098.         sub     cl,2
  8099.         mov     [rdi+rcx],ax
  8100.         ja      .L1
  8101.         pop     rcx rdi rdx
  8102.         add     rdi,rcx
  8103.  
  8104.         cmp     [I.HexPrefix],0
  8105.         je      @F
  8106. if 1
  8107.         neg     rcx
  8108.         cmp     byte [rdi+rcx-1],'L'
  8109.         jz      .L0
  8110. end if
  8111.         scasw
  8112.         jmp     .L0
  8113. @@:
  8114.         cmp     [I.Dollar],0
  8115.         jne     .L0
  8116. if 1
  8117.         neg     rcx
  8118.         cmp     byte [rdi+rcx-1],'L'
  8119.         jz      .L0
  8120. end if
  8121.         scasb
  8122. .L0:    pop     rcx
  8123.         ret
  8124.  
  8125. Start66F2F3:
  8126.         FetchB
  8127.         dec     rsi
  8128.  
  8129.         xor     ebx,ebx
  8130.         test    [I.Flags],_3
  8131.         jz      @F
  8132.         mov     bl,2*4
  8133. @@:
  8134.         mov     ecx,[rdx+rbx+4*2]
  8135.  
  8136.         cmp     al,0xC0
  8137.         jb      @F
  8138.         test    [I.Flags],_3
  8139.         jz      @F
  8140.         add     edx,ebx
  8141.         xor     ebx,ebx
  8142. @@:
  8143.         mov     al,[I.PrefixByte]
  8144.         or      al,al
  8145.         jz      .L1
  8146.         shr     ecx,8
  8147.         add     edx,2
  8148.         cmp     al,bit P66
  8149.         setz    [I.Mandatory66]
  8150.         jz      .L1
  8151.         shr     ecx,8
  8152.         add     edx,2
  8153.         cmp     al,bit PF2
  8154.         jz      .L1
  8155.         shr     ecx,8
  8156.         add     edx,2
  8157.         cmp     al,bit PF3
  8158.         jz      .L1
  8159.         jmp     ErrorDec
  8160. .L1:    mov     [I.RandSize],cl
  8161.         ret
  8162.  
  8163. include "selbat.inc"
  8164. include "tables.inc"
  8165.  
  8166.         CpyElements NextTab
  8167.  
  8168. vglobal
  8169. Params  rd      ParamSize/4     ;Parameters buffer
  8170. BufferI rb      BufferSizeI
  8171. Buffer  rb      BufferSizeO
  8172. endg
  8173.  
  8174. if %B=32
  8175. r9v     dd      ?
  8176. r5v     dd      ?
  8177. r1v     dd      ?
  8178. end if
  8179. LastHex db      ?
  8180.  
  8181. rept 16
  8182. {
  8183. restore r8b,r8w,r8d,r8
  8184. restore r9b,r9w,r9d,r9
  8185. restore r10b,r10w,r10d,r10
  8186. restore r11b,r11w,r11d,r11
  8187. restore r12b,r12w,r12d,r12
  8188. restore r13b,r13w,r13d,r13
  8189. restore r14b,r14w,r14d,r14
  8190. restore r15b,r15w,r15d,r15
  8191. }