Subversion Repositories Kolibri OS

Rev

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

  1. ;-----------------------------------------------------------------------------
  2. BNDEVEX62:
  3.         cmp     byte [rsi],0xC0
  4.         jae     EVEX62
  5.         ;
  6.         call    GetP0P1P2
  7.         jmp     EVEX62.Loop
  8.         ;
  9. .Error: cmp     [I.Arch],CPUX64
  10.         jz      ErrorDec
  11.         ;
  12.         xor     al,al
  13.         ;
  14.         mov     [I.R],al
  15.         mov     [I.X],al
  16.         mov     [I.B],al
  17.         mov     [I.W],al
  18.         mov     [I.V],al
  19.         mov     [I.Z],al
  20.         mov     [I.BB],al
  21.         mov     [I.XX],al
  22.         mov     [I.VVVV],al
  23.         mov     [I.AAAA],al
  24.         ;
  25.         mov     rsi,[I.SaveRSI]
  26.         ;
  27.         BitTR   I.Prefixes,P66
  28.         cmp     [I.Operand],0
  29.         mov     [I.RandSize],VQWORD+80h ;32:32
  30.         jnz     R32RM32
  31.         mov     [I.RandSize],VDWORD+80h ;16:16
  32.         jmp     R16RM16
  33. ;-----------------------------------------------------------------------------
  34. EVEX62: cmp     [I.PreREX],0
  35.         jnz     ErrorDec
  36.         call    GetP0P1P2
  37. .Loop:
  38.         mov     [I.Is62],1
  39.  
  40.         cmp     dword [rbx],-1
  41.         jz      ErrorDec
  42.         cmp     al,[rbx+X62.Imm]
  43.         je      .Found
  44.         add     ebx,X62.Size
  45.         jmp     .Loop
  46. .Found:
  47.         mov     al,[rbx+X62.MOS]
  48.         cmp     [I.BB],0
  49.         jnz     .L1
  50.         shr     al,4
  51. .L1:
  52.         and     al,0Fh
  53.         mov     [I.RandSize],al
  54.         ;
  55.         mov     eax,dword [rbx+X62.Flags]
  56.         mov     word [I.FlagsEVEX],ax
  57.         ;
  58.         and     ah,EVEXLX shr 8
  59.         cmp     ah,EVEXLX shr 8
  60.         jnz     .L2
  61.         cmp     [I.LL],00b
  62.         jnz     ErrorDec
  63.         jmp     .SkipLX
  64. .L2:    ;
  65.         test    ah,EVEXL0 shr 8
  66.         jz      .L3
  67.         cmp     [I.LL],00b
  68.         jz      ErrorDec
  69. .L3:    ;
  70.         test    ah,EVEXLL shr 8
  71.         jz      .L4
  72.         cmp     [I.LL],10b
  73.         jb      ErrorDec
  74. .L4:
  75.         ;
  76. .SkipLX:
  77.         ;
  78.         mov     ah,al
  79.         and     ah,EVEXW0
  80.         cmp     ah,EVEXW0
  81.         jnz     .L5
  82.         cmp     [I.Arch],CPUX64
  83.         jz      .SkipWNW
  84.         mov     [I.W],0
  85.         jmp     .SkipWNW
  86. .L5:    ;
  87.         test    al,EVEXYW
  88.         jz      .L6
  89.         cmp     [I.W],1
  90.         jz      ErrorDec
  91. .L6:    ;
  92.         test    al,EVEXNW
  93.         jz      .L7
  94.         cmp     [I.W],0
  95.         jz      ErrorDec
  96. .L7:
  97. ;
  98. .SkipWNW:
  99. ;
  100.         test    al,EVEXV
  101.         jz      .L8
  102.         mov     al,[I.VVVV]
  103.         and     al,1111b
  104.         or      al,al
  105.         jnz     ErrorDec
  106. .L8:    ;
  107.         mov     edx,dword [rbx+X62.Name]
  108.         mov     al,byte [rbx+X62.Flags+1]
  109.         and     al,EVEXE shr 8
  110.         cmp     al,EVEXE shr 8
  111.         jnz     .L9
  112.         movzx   eax,[I.W]
  113.         movzx   edx,dx
  114.         add     edx,T62Names
  115.         mov     edx,[rdx+rax*2]
  116. .L9:
  117.         mov     [I.Prefix],'v'
  118.         mov     [I.Name],dx
  119.  
  120.         cmp     [I.W],1
  121.         jnz     .LA
  122.         mov     al,byte [rbx+X62.Flags+1]
  123.         and     al,EVEXE shr 8
  124.         cmp     al,EVEXE shr 8
  125.         jz      .LA
  126.         test    al,EVEXD1 shr 8
  127. ifnz    mov     [I.LastByte],'d'
  128.         test    al,EVEXQ1 shr 8
  129. ifnz    mov     [I.LastByte],'q'
  130. .LA:    ;
  131.         movzx   r8d,word [rbx+X62.Rtn]
  132.         add     r8d,RtnXX
  133.         test    [rbx+X62.Flags],EVEX2
  134.         jz      .LB
  135.         movzx   eax,[I.W]
  136.         movzx   r8d,word [r8+rax*2]
  137.         add     r8d,RtnXX
  138. .LB:    ;
  139.         call    FetchModRM
  140.         test    byte [I.FlagsEVEX+1],EVEXM shr 8
  141.         jz      .LC
  142.         call    GetVectorAndMUL
  143. .LC:
  144.         test    byte [I.FlagsEVEX+1],EVEXU shr 8
  145.         jnz     .SkipBB
  146.         test    byte [I.FlagsEVEX+1],EVEXB shr 8
  147.         jz      .LD
  148.         ;
  149.         cmp     [I.BB],0
  150.         jz      .LD
  151. .SkipBB:
  152.         cmp     [I.W],1
  153.         jnz     .LD
  154.        ;inc     [I.MULT]
  155.         inc     [I.RandSize]
  156. .LD:
  157.         call    r8
  158.         ;
  159.         test    byte [I.FlagsEVEX+1],EVEXI shr 8
  160.         jz      .LG
  161.         lea     r8,[I.Arg1]
  162.         mov     ecx,5
  163. .LE:
  164.         cmp     [r8+TArg.Type],0
  165.         jz      .LF
  166.         add     r8,sizeof.TArg
  167.         loop    .LE
  168.         ret
  169. .LF:
  170.         FetchB
  171.         mov     [r8+TArg.Type],80h+1
  172.         mov     [r8+TArg.ImmB],al
  173. .LG:    ret
  174. ;-----------------------------------------------------------------------------
  175. T6244:
  176.         cmp     [I.ModRM],3
  177.         jz      ErrorDec
  178.         cmp     [I.BB],1
  179.         jz      ErrorDec
  180.         mov     [I.RandSize],VOWORD
  181.         mov     [I.Arg1.Type2nd],InReg
  182.         mov     [I.Arg2.Type2nd],InVVVV
  183.         mov     [I.Arg3.Type2nd],InRM or 80h
  184.         mov     [I.Arg1.Type],al
  185.         mov     [I.Arg2.Type],al
  186.         mov     [I.Arg3.Type],ah
  187.         ret
  188. ;-----------------------------------------------------------------------------
  189. T6214:
  190.         call    GetRDRQAH
  191.        ;jmp     T6201
  192. ;-----------------------------------------------------------------------------
  193. T6201:
  194.         mov     [I.Arg1.Type2nd],InReg
  195.         mov     [I.Arg2.Type2nd],InVVVV
  196.         mov     [I.Arg3.Type2nd],InRM
  197.         mov     [I.Arg1.Type],al
  198.         mov     [I.Arg2.Type],al
  199.         mov     [I.Arg3.Type],ah
  200.         ret
  201. ;-----------------------------------------------------------------------------
  202. T6215:
  203.         mov     [I.RandSize],xO
  204.         mov     ah,XMMRG
  205.         jmp     T6201
  206. ;-----------------------------------------------------------------------------
  207. T6200:
  208.         mov     [I.RandSize],xD
  209.  
  210.         mov     [I.Arg1.Type],al
  211.         mov     [I.Arg1.Type2nd],InReg
  212.         mov     [I.Arg2.Type],ah
  213.         mov     [I.Arg2.Type2nd],InRM
  214.  
  215.         cmp     [I.W],0
  216.         jz      .L1
  217.  
  218.         inc     [I.RandSize]
  219.  
  220.         dec     al
  221.         cmp     al,XMMRG
  222.         jae     .L1
  223.         mov     al,XMMRG
  224. .L1:    jmp     SetVT3
  225. ;-----------------------------------------------------------------------------
  226. T621B:
  227.         mov     [I.RandSize],xQ
  228.         ;
  229.         cmp     [I.W],0
  230.         jnz     .L1
  231.         ;
  232.         dec     [I.RandSize]
  233.         ;
  234.         dec     al
  235.         cmp     al,XMMRG
  236.         jae     .L1
  237.         mov     al,XMMRG
  238.         ;
  239. .L1:
  240.         ;
  241.         mov     [I.Arg1.Type],al
  242.         mov     [I.Arg1.Type2nd],InReg
  243.         mov     [I.Arg2.Type],ah
  244.         mov     [I.Arg2.Type2nd],InRM
  245.         ;
  246.         mov     al,ah
  247.         jmp     SetVT3
  248. ;-----------------------------------------------------------------------------
  249. T6202:
  250.         mov     [I.Arg1.Type2nd],InReg
  251.         mov     [I.Arg2.Type2nd],InVVVV
  252.         mov     [I.Arg3.Type2nd],InRM
  253.         mov     [I.Arg1.Type],KXXRG
  254.         mov     [I.Arg2.Type],al
  255.         mov     [I.Arg3.Type],ah
  256.         ret
  257. ;-----------------------------------------------------------------------------
  258. T6219:
  259.         cmp     [I.Mod],3
  260.         jz      ErrorDec
  261.        ;jmp     T6203
  262. ;-----------------------------------------------------------------------------
  263. T6203:
  264.         mov     ah,XMMRG
  265.         call    GetVectorAL
  266. T6204:
  267.         mov     [I.Arg1.Type2nd],InReg
  268.         mov     [I.Arg2.Type2nd],InRM
  269.         mov     [I.Arg1.Type],al
  270.         mov     [I.Arg2.Type],ah
  271.         ret
  272. ;-----------------------------------------------------------------------------
  273. T621A:
  274.         cmp     [I.Mod],3
  275.         jz      ErrorDec
  276.         mov     al,ZMMRG
  277.         mov     ah,XMMRG
  278.         jmp     T6204
  279. ;-----------------------------------------------------------------------------
  280. T6208:
  281.         cmp     [I.BB],0
  282.         jz      .L1
  283.         dec     [I.RandSize]
  284. .L1:
  285.         jmp     T6204
  286. ;-----------------------------------------------------------------------------
  287. T6209:
  288.         or      byte [I.FlagsEVEX+2],EVEXAA shr 16
  289.         ;
  290.         cmp     [I.BB],0
  291.         jnz     .L1
  292.         dec     [I.RandSize]
  293. .L1:
  294. T6207:
  295.         dec     ah
  296.         cmp     ah,XMMRG
  297.         jae     .L1
  298.         mov     ah,XMMRG
  299. .L1:    jmp     T6204
  300. ;-----------------------------------------------------------------------------
  301. T6205:
  302.         dec     al
  303.         cmp     al,XMMRG
  304.         jae     .L1
  305.         mov     al,XMMRG
  306. .L1:
  307.         jmp     T6204
  308. ;-----------------------------------------------------------------------------
  309. T6206:
  310.         cmp     [I.W],0
  311.         jnz     T6204
  312.         ;
  313.         dec     [I.RandSize]
  314.         ;
  315.         or      byte [I.FlagsEVEX+2],EVEXAA shr 16
  316.         ;
  317.         jmp     T6207
  318. ;-----------------------------------------------------------------------------
  319. T620A:
  320.         dec     ah
  321.         cmp     ah,XMMRG
  322.         jae     .L1
  323.         mov     ah,XMMRG
  324. .L1:
  325. T620B:
  326.         mov     [I.Arg2.Type2nd],InReg
  327.         mov     [I.Arg1.Type2nd],InRM
  328.         mov     [I.Arg2.Type],al
  329.         mov     [I.Arg1.Type],ah
  330.         ret
  331. ;-----------------------------------------------------------------------------
  332. T6223:
  333.         mov     al,XMMRG
  334.         mov     ah,GPR32
  335.         jmp     T620B
  336. ;-----------------------------------------------------------------------------
  337. T6221:  mov     [I.RandSize],xO
  338.        ;call    DetectMULT
  339.        ;jmp     T6220
  340. ;-----------------------------------------------------------------------------
  341. T6220:
  342.         mov     ah,XMMRG
  343.         jmp     T620B
  344. ;-----------------------------------------------------------------------------
  345. T6222:
  346.         mov     [I.RandSize],xY
  347.        ;call    DetectMULT
  348.         mov     ah,YMMRG
  349.         jmp     T620B
  350. ;-----------------------------------------------------------------------------
  351. T620C:
  352.         cmp     [I.Mod],3
  353.         jnz     T6201
  354.         mov     [I.Name],TMOVHLPS
  355.         jmp     T6201
  356. ;-----------------------------------------------------------------------------
  357. T620D:
  358.         cmp     [I.Mod],3
  359.         jz      ErrorDec
  360.         jmp     T6201
  361. ;-----------------------------------------------------------------------------
  362. T620E:
  363.         cmp     [I.Mod],3
  364.         jnz     .L1
  365.         mov     [I.Name],TMOVLHPS
  366. .L1:    jmp     T6201
  367. ;-----------------------------------------------------------------------------
  368. T620F:
  369.         cmp     [I.Mod],3
  370.         jz      ErrorDec
  371.         jmp     T620B
  372. ;-----------------------------------------------------------------------------
  373. T6210:
  374.         cmp     [I.Mod],3
  375.         jz      ErrorDec
  376.         jmp     T620B
  377. ;-----------------------------------------------------------------------------
  378. T621C:
  379.         cmp     [I.Mod],3
  380.         jz      ErrorDec
  381.         jmp     T6204
  382. ;-----------------------------------------------------------------------------
  383. T6211:
  384.         call    GetRDRQAH
  385.         jmp     T6204
  386. ;-----------------------------------------------------------------------------
  387. T6212:
  388.         call    GetRDRQAH
  389.         jmp     T620B
  390. ;-----------------------------------------------------------------------------
  391. T6213:
  392.         call    GetRDRQAL
  393.         jmp     T6204
  394. ;-----------------------------------------------------------------------------
  395. T6271:
  396.         mov     ebx,T0F71N
  397.         movzx   edx,[I.Reg]
  398. .L0:    mov     dx,[rdx*2+rbx]
  399.         or      dx,dx
  400.         jz      ErrorDec
  401.         mov     [I.Name],dx
  402.         mov     [I.Arg1.Type2nd],InVVVV
  403.         mov     [I.Arg2.Type2nd],InRM
  404.         mov     [I.Arg1.Type],al
  405.         mov     [I.Arg2.Type],ah
  406.         ret
  407. ;-----------------------------------------------------------------------------
  408. T6272:
  409.         mov     ebx,T0F72N
  410. .L0:    movzx   edx,[I.Reg]
  411.         cmp     [I.W],1
  412.         jnz     .L1
  413.         add     dl,8
  414. .L1:    jmp     T6271.L0
  415. ;-----------------------------------------------------------------------------
  416. T6273:
  417.         mov     ebx,T0F73N
  418.         jmp     T6272.L0
  419. ;-----------------------------------------------------------------------------
  420. T6216:
  421.         cmp     [I.VVVV],00000b
  422.         jnz     T6201
  423.         jmp     T6203
  424. ;-----------------------------------------------------------------------------
  425. T6217:
  426.         cmp     [I.VVVV],00000b
  427.         jnz     T6201
  428.         jmp     T620B
  429. ;-----------------------------------------------------------------------------
  430. T6218:
  431.         cmp     al,XMMRG
  432.         jz      .L1
  433.         inc     [I.RandSize]
  434. .L1:    jmp     T6204
  435. ;-----------------------------------------------------------------------------
  436. T62RD:  call    GetRDRQAH
  437.         jmp     T62RB.L0
  438. ;-----------------------------------------------------------------------------
  439. T62RW:  mov     ah,GPR16
  440.         jmp     T62RB.L0
  441. ;-----------------------------------------------------------------------------
  442. T62RB:  mov     ah,GPR08
  443. .L0:    cmp     [I.Mod],3
  444.         jnz     ErrorDec
  445.         call    GetVectorAL
  446.         mov     [I.XX],0
  447.         jmp     T6204
  448. ;-----------------------------------------------------------------------------
  449. T62V1XYZ:
  450.         mov     [I.RandSize],xD
  451.         ;
  452.         cmp     [I.W],0
  453.         jz      .L1
  454.         ;
  455.         inc     [I.RandSize]
  456.         ;
  457.         dec     al
  458.         cmp     al,XMMRG
  459.         jae     .L1
  460.         mov     al,XMMRG
  461. .L1:    ;
  462.         call    SetVT3
  463.         ;
  464.         mov     [I.Arg1.Type2nd],InRM
  465.         mov     [I.Arg2.Type2nd],InReg
  466.         mov     [I.Arg1.Type],ah
  467.         ;
  468.         mov     dl,[I.RandSize]
  469.         call    GetVectorAndMUL
  470.         mov     [I.RandSize],dl
  471.         mov     [I.Arg2.Type],al
  472.         ret
  473. ;-----------------------------------------------------------------------------
  474. T62V2XYZ:
  475.         mov     [I.RandSize],xQ
  476.                 ;
  477.         cmp     [I.W],0
  478.         jnz     .L1
  479.                 ;
  480.         dec     [I.RandSize]
  481.                 ;
  482.         dec     al
  483.         cmp     al,XMMRG
  484.         jae     .L1
  485.         mov     al,XMMRG
  486.         ;
  487. .L1:    push    rax
  488.         mov     al,ah
  489.         call    SetVT3
  490.         pop     rax
  491.         ;
  492.         mov     [I.Arg1.Type2nd],InRM
  493.         mov     [I.Arg2.Type2nd],InReg
  494.         mov     [I.Arg1.Type],ah
  495.         mov     [I.Arg2.Type],al
  496.         ret
  497. ;-----------------------------------------------------------------------------
  498. T62XYZVV1:
  499.         movzx   edx,[I.Reg]
  500.         cmp     [I.W],0
  501.         jz      .L1
  502.         add     dl,8
  503. .L1:
  504.         mov     edx,[rdx*2+T??C6N]
  505.         or      dx,dx
  506.         jz      ErrorDec
  507.         mov     [I.Name],dx
  508.  
  509.         mov     al,ZMMRG
  510.         cmp     [I.W],0
  511.         jz      .L2
  512.         mov     al,YMMRG
  513. .L2:
  514.         mov     [I.Arg1.Type],ah
  515.         mov     [I.Arg1.Type2nd],InRM
  516.         jmp     SetVT3
  517. ;-----------------------------------------------------------------------------
  518. T62XYZVV2:
  519.         movzx   edx,[I.Reg]
  520.         cmp     [I.W],0
  521.         jz      .L1
  522.         add     dl,8
  523. .L1:
  524.         mov     edx,[rdx*2+T??C7N]
  525.         or      dx,dx
  526.         jz      ErrorDec
  527.         mov     [I.Name],dx
  528.         mov     al,ZMMRG
  529.  
  530.         mov     [I.Arg1.Type],ah
  531.         mov     [I.Arg1.Type2nd],InRM
  532.         jmp     SetVT3
  533. ;-----------------------------------------------------------------------------
  534. T621D:
  535.         cmp     [I.Mod],3
  536.         jnz     ErrorDec
  537.         mov     ah,KXXRG
  538.         jmp     T6204
  539. ;-----------------------------------------------------------------------------
  540. T621E:
  541.         cmp     [I.Mod],3
  542.         jnz     ErrorDec
  543. T621F:
  544.         mov     al,KXXRG
  545.         jmp     T6204
  546. ;-----------------------------------------------------------------------------
  547. T6224:
  548.         mov     [I.RandSize],xO
  549.         mov     ah,XMMRG
  550.         jmp     T6225.L0
  551. ;-----------------------------------------------------------------------------
  552. T6225:
  553.         mov     [I.RandSize],xY
  554.         mov     ah,YMMRG
  555. .L0:    jmp     T6201
  556. ;-----------------------------------------------------------------------------
  557.