Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ; flat assembler core
  3. ; Copyright (c) 1999-2011, Tomasz Grysztar.
  4. ; All rights reserved.
  5.  
  6. avx_single_source_pd_instruction:
  7.         or      [vex_required],2
  8.         jmp     avx_pd_instruction
  9. avx_pd_instruction_imm8:
  10.         mov     [immediate_size],1
  11. avx_pd_instruction:
  12.         mov     [opcode_prefix],66h
  13.         mov     [mmx_size],0
  14.         jmp     avx_instruction
  15. avx_single_source_ps_instruction:
  16.         or      [vex_required],2
  17.         jmp     avx_ps_instruction
  18. avx_ps_instruction_imm8:
  19.         mov     [immediate_size],1
  20. avx_ps_instruction:
  21.         mov     [mmx_size],0
  22.         jmp     avx_instruction
  23. avx_sd_instruction_imm8:
  24.         mov     [immediate_size],1
  25. avx_sd_instruction:
  26.         mov     [opcode_prefix],0F2h
  27.         mov     [mmx_size],8
  28.         jmp     avx_instruction
  29. avx_ss_instruction_imm8:
  30.         mov     [immediate_size],1
  31. avx_ss_instruction:
  32.         mov     [opcode_prefix],0F3h
  33.         mov     [mmx_size],4
  34.         jmp     avx_instruction
  35. avx_cmp_pd_instruction:
  36.         mov     [opcode_prefix],66h
  37. avx_cmp_ps_instruction:
  38.         mov     [mmx_size],0
  39.         mov     byte [value],al
  40.         mov     al,0C2h
  41.         jmp     avx_instruction
  42. avx_cmp_sd_instruction:
  43.         mov     [opcode_prefix],0F2h
  44.         mov     [mmx_size],8
  45.         mov     byte [value],al
  46.         mov     al,0C2h
  47.         jmp     avx_instruction
  48. avx_cmp_ss_instruction:
  49.         mov     [opcode_prefix],0F3h
  50.         mov     [mmx_size],4
  51.         mov     byte [value],al
  52.         mov     al,0C2h
  53.         jmp     avx_instruction
  54. avx_comiss_instruction:
  55.         or      [vex_required],2
  56.         mov     [mmx_size],4
  57.         jmp     avx_instruction
  58. avx_comisd_instruction:
  59.         or      [vex_required],2
  60.         mov     [opcode_prefix],66h
  61.         mov     [mmx_size],8
  62.         jmp     avx_instruction
  63. avx_haddps_instruction:
  64.         mov     [opcode_prefix],0F2h
  65.         mov     [mmx_size],0
  66.         jmp     avx_instruction
  67. avx_movshdup_instruction:
  68.         or      [vex_required],2
  69.         mov     [opcode_prefix],0F3h
  70.         mov     [mmx_size],0
  71. avx_instruction:
  72.         mov     [base_code],0Fh
  73.         mov     [extended_code],al
  74.       avx_common:
  75.         or      [vex_required],1
  76.         lods    byte [esi]
  77.         call    get_size_operator
  78.         cmp     al,10h
  79.         jne     invalid_operand
  80.       avx_reg:
  81.         lods    byte [esi]
  82.         call    convert_avx_register
  83.         mov     [postbyte_register],al
  84.       avx_vex_reg:
  85.         test    [vex_required],2
  86.         jnz     avx_vex_reg_ok
  87.         lods    byte [esi]
  88.         cmp     al,','
  89.         jne     invalid_operand
  90.         call    take_avx_register
  91.         mov     [vex_register],al
  92.       avx_vex_reg_ok:
  93.         cmp     [mmx_size],0
  94.         je      avx_regs_size_ok
  95.         cmp     ah,16
  96.         jne     invalid_operand
  97.       avx_regs_size_ok:
  98.         lods    byte [esi]
  99.         cmp     al,','
  100.         jne     invalid_operand
  101.         call    take_avx_rm
  102.         jc      avx_regs_reg
  103.         mov     al,[extended_code]
  104.         mov     ah,[supplemental_code]
  105.         cmp     al,0C2h
  106.         je      sse_cmp_mem_ok
  107.         cmp     ax,443Ah
  108.         je      sse_cmp_mem_ok
  109.         mov     al,[base_code]
  110.         and     al,11011100b
  111.         cmp     al,11001100b
  112.         je      sse_cmp_mem_ok
  113.         cmp     [immediate_size],1
  114.         je      mmx_imm8
  115.         cmp     [immediate_size],0
  116.         jge     instruction_ready
  117.         cmp     byte [esi],','
  118.         jne     invalid_operand
  119.         inc     esi
  120.         call    take_avx_register
  121.         shl     al,4
  122.         or      byte [value],al
  123.         test    al,80h
  124.         jz      avx_regs_mem_reg_store
  125.         cmp     [code_type],64
  126.         jne     invalid_operand
  127.       avx_regs_mem_reg_store:
  128.         call    take_imm4_if_needed
  129.         call    store_instruction_with_imm8
  130.         jmp     instruction_assembled
  131.       avx_regs_reg:
  132.         mov     bl,al
  133.         mov     al,[extended_code]
  134.         mov     ah,[supplemental_code]
  135.         cmp     al,0C2h
  136.         je      sse_cmp_nomem_ok
  137.         cmp     ax,443Ah
  138.         je      sse_cmp_nomem_ok
  139.         mov     al,[base_code]
  140.         and     al,11011100b
  141.         cmp     al,11001100b
  142.         je      sse_cmp_nomem_ok
  143.         cmp     [immediate_size],1
  144.         je      mmx_nomem_imm8
  145.         cmp     [immediate_size],0
  146.         jge     nomem_instruction_ready
  147.         lods    byte [esi]
  148.         cmp     al,','
  149.         jne     invalid_operand
  150.         mov     al,bl
  151.         shl     al,4
  152.         or      byte [value],al
  153.         test    al,80h
  154.         jz      avx_regs_reg_
  155.         cmp     [code_type],64
  156.         jne     invalid_operand
  157.       avx_regs_reg_:
  158.         call    take_avx_rm
  159.         jc      avx_regs_reg_reg
  160.         cmp     [immediate_size],-2
  161.         jg      invalid_operand
  162.         or      [rex_prefix],8
  163.         call    take_imm4_if_needed
  164.         call    store_instruction_with_imm8
  165.         jmp     instruction_assembled
  166.       avx_regs_reg_reg:
  167.         shl     al,4
  168.         and     byte [value],1111b
  169.         or      byte [value],al
  170.         call    take_imm4_if_needed
  171.         call    store_nomem_instruction
  172.         mov     al,byte [value]
  173.         stos    byte [edi]
  174.         jmp     instruction_assembled
  175.       take_avx_rm:
  176.         xor     cl,cl
  177.         xchg    cl,[operand_size]
  178.         lods    byte [esi]
  179.         call    get_size_operator
  180.         cmp     al,'['
  181.         je      take_avx_mem
  182.         mov     [operand_size],cl
  183.         cmp     al,10h
  184.         jne     invalid_operand
  185.         lods    byte [esi]
  186.         call    convert_avx_register
  187.         cmp     [mmx_size],0
  188.         je      avx_reg_ok
  189.         cmp     ah,16
  190.         jne     invalid_operand
  191.       avx_reg_ok:
  192.         stc
  193.         ret
  194.       take_avx_mem:
  195.         push    ecx
  196.         call    get_address
  197.         pop     eax
  198.         cmp     [mmx_size],0
  199.         jne     avx_smem
  200.         xchg    al,[operand_size]
  201.         or      al,al
  202.         jz      avx_mem_ok
  203.         cmp     al,[operand_size]
  204.         jne     operand_sizes_do_not_match
  205.       avx_mem_ok:
  206.         clc
  207.         ret
  208.       avx_smem:
  209.         xchg    al,[operand_size]
  210.         cmp     al,[mmx_size]
  211.         jne     invalid_operand_size
  212.         clc
  213.         ret
  214.       take_imm4_if_needed:
  215.         cmp     [immediate_size],-3
  216.         jne     imm4_ok
  217.         push    ebx ecx edx
  218.         lods    byte [esi]
  219.         cmp     al,','
  220.         jne     invalid_operand
  221.         lods    byte [esi]
  222.         cmp     al,'('
  223.         jne     invalid_operand
  224.         call    get_byte_value
  225.         test    al,11110000b
  226.         jnz     value_out_of_range
  227.         or      byte [value],al
  228.         pop     edx ecx ebx
  229.       imm4_ok:
  230.         ret
  231.  
  232. avx_128bit_instruction:
  233.         mov     [mmx_size],16
  234.         mov     [opcode_prefix],66h
  235.         jmp     avx_instruction
  236. avx_single_source_128bit_instruction_38:
  237.         or      [vex_required],2
  238. avx_128bit_instruction_38:
  239.         mov     [mmx_size],16
  240.       avx_instruction_38_setup:
  241.         mov     [opcode_prefix],66h
  242.         mov     [supplemental_code],al
  243.         mov     al,38h
  244.         jmp     avx_instruction
  245. avx_single_source_instruction_38:
  246.         or      [vex_required],2
  247.         mov     [mmx_size],0
  248.         jmp     avx_instruction_38_setup
  249. avx_ss_instruction_3a_imm8:
  250.         mov     [mmx_size],4
  251.         jmp     avx_instruction_3a_imm8_setup
  252. avx_sd_instruction_3a_imm8:
  253.         mov     [mmx_size],8
  254.         jmp     avx_instruction_3a_imm8_setup
  255. avx_single_source_128bit_instruction_3a_imm8:
  256.         or      [vex_required],2
  257. avx_128bit_instruction_3a_imm8:
  258.         mov     [mmx_size],16
  259.         jmp     avx_instruction_3a_imm8_setup
  260. avx_triple_source_instruction_3a:
  261.         mov     [mmx_size],0
  262.         mov     [immediate_size],-1
  263.         mov     byte [value],0
  264.         jmp     avx_instruction_3a_setup
  265. avx_triple_source_128bit_instruction_3a:
  266.         mov     [mmx_size],16
  267.         mov     [immediate_size],-1
  268.         mov     byte [value],0
  269.         jmp     avx_instruction_3a_setup
  270. avx_single_source_instruction_3a_imm8:
  271.         or      [vex_required],2
  272. avx_instruction_3a_imm8:
  273.         mov     [mmx_size],0
  274.       avx_instruction_3a_imm8_setup:
  275.         mov     [immediate_size],1
  276.       avx_instruction_3a_setup:
  277.         mov     [opcode_prefix],66h
  278.         mov     [supplemental_code],al
  279.         mov     al,3Ah
  280.         jmp     avx_instruction
  281. avx_pclmulqdq_instruction:
  282.         mov     byte [value],al
  283.         mov     [mmx_size],16
  284.         mov     al,44h
  285.         jmp     avx_instruction_3a_setup
  286. avx_perm2f128_instruction:
  287.         call    setup_66_0f_3a
  288.         mov     [immediate_size],1
  289.         mov     [mmx_size],0
  290.         or      [vex_required],1
  291.         call    take_avx_register
  292.         cmp     ah,32
  293.         jne     invalid_operand_size
  294.         mov     [postbyte_register],al
  295.         jmp     avx_vex_reg
  296.      setup_66_0f_3a:
  297.         mov     [opcode_prefix],66h
  298.         mov     [base_code],0Fh
  299.         mov     [extended_code],3Ah
  300.         mov     [supplemental_code],al
  301.         ret
  302.  
  303. avx_movdqu_instruction:
  304.         mov     [opcode_prefix],0F3h
  305.         jmp     avx_movps_instruction
  306. avx_movpd_instruction:
  307.         mov     [opcode_prefix],66h
  308. avx_movps_instruction:
  309.         mov     [mmx_size],0
  310.         or      [vex_required],2
  311.         mov     [base_code],0Fh
  312.         mov     [extended_code],al
  313.         lods    byte [esi]
  314.         call    get_size_operator
  315.         cmp     al,10h
  316.         je      avx_reg
  317.         inc     [extended_code]
  318.         test    [extended_code],1
  319.         jnz     avx_mem
  320.         add     [extended_code],-1+10h
  321.       avx_mem:
  322.         cmp     al,'['
  323.         jne     invalid_operand
  324.         call    get_address
  325.         lods    byte [esi]
  326.         cmp     al,','
  327.         jne     invalid_operand
  328.         call    take_avx_register
  329.         mov     [postbyte_register],al
  330.         jmp     instruction_ready
  331. avx_movntpd_instruction:
  332.         mov     [opcode_prefix],66h
  333. avx_movntps_instruction:
  334.         or      [vex_required],1
  335.         mov     [base_code],0Fh
  336.         mov     [extended_code],al
  337.         lods    byte [esi]
  338.         call    get_size_operator
  339.         jmp     avx_mem
  340. avx_lddqu_instruction:
  341.         mov     [opcode_prefix],0F2h
  342.         mov     [mmx_size],0
  343.         xor     cl,cl
  344.       avx_load_instruction:
  345.         mov     [base_code],0Fh
  346.         mov     [extended_code],al
  347.         or      [vex_required],1
  348.         call    take_avx_register
  349.         or      cl,cl
  350.         jz      avx_load_reg_ok
  351.         cmp     ah,cl
  352.         jne     invalid_operand
  353.       avx_load_reg_ok:
  354.         cmp     [mmx_size],0
  355.         je      avx_load_reg_
  356.         xor     ah,ah
  357.       avx_load_reg_:
  358.         xchg    ah,[operand_size]
  359.         push    eax
  360.         lods    byte [esi]
  361.         cmp     al,','
  362.         jne     invalid_operand
  363.         lods    byte [esi]
  364.         call    get_size_operator
  365.         cmp     al,'['
  366.         jne     invalid_operand
  367.         call    get_address
  368.         pop     eax
  369.         xchg    ah,[operand_size]
  370.         mov     [postbyte_register],al
  371.         mov     al,[mmx_size]
  372.         or      al,al
  373.         jz      instruction_ready
  374.         or      ah,ah
  375.         jz      instruction_ready
  376.         cmp     al,ah
  377.         jne     invalid_operand_size
  378.         jmp     instruction_ready
  379. avx_movntdqa_instruction:
  380.         mov     [mmx_size],16
  381.         mov     al,2Ah
  382.         mov     cl,16
  383.         jmp     avx_load_instruction_38
  384. avx_broadcastss_instruction:
  385.         mov     [mmx_size],4
  386.         mov     al,18h
  387.         xor     cl,cl
  388.         jmp     avx_load_instruction_38
  389. avx_broadcastsd_instruction:
  390.         mov     [mmx_size],8
  391.         mov     al,19h
  392.         mov     cl,32
  393.         jmp     avx_load_instruction_38
  394. avx_broadcastf128_instruction:
  395.         mov     [mmx_size],16
  396.         mov     al,1Ah
  397.         mov     cl,32
  398.       avx_load_instruction_38:
  399.         mov     [opcode_prefix],66h
  400.         mov     [supplemental_code],al
  401.         mov     al,38h
  402.         jmp     avx_load_instruction
  403. avx_movlpd_instruction:
  404.         mov     [opcode_prefix],66h
  405. avx_movlps_instruction:
  406.         mov     [base_code],0Fh
  407.         mov     [extended_code],al
  408.         mov     [mmx_size],8
  409.         or      [vex_required],1
  410.         lods    byte [esi]
  411.         call    get_size_operator
  412.         cmp     al,10h
  413.         jne     avx_movlps_mem
  414.         lods    byte [esi]
  415.         call    convert_avx_register
  416.         mov     [postbyte_register],al
  417.         lods    byte [esi]
  418.         cmp     al,','
  419.         jne     invalid_operand
  420.         call    take_avx_register
  421.         mov     [vex_register],al
  422.         cmp     [operand_size],16
  423.         jne     invalid_operand
  424.         mov     [operand_size],0
  425.         lods    byte [esi]
  426.         cmp     al,','
  427.         jne     invalid_operand
  428.         call    take_avx_rm
  429.         jc      invalid_operand
  430.         jmp     instruction_ready
  431.       avx_movlps_mem:
  432.         cmp     al,'['
  433.         jne     invalid_operand
  434.         call    get_address
  435.         mov     al,[operand_size]
  436.         or      al,al
  437.         jz      avx_movlps_mem_size_ok
  438.         cmp     al,[mmx_size]
  439.         jne     invalid_operand_size
  440.         mov     [operand_size],0
  441.       avx_movlps_mem_size_ok:
  442.         lods    byte [esi]
  443.         cmp     al,','
  444.         jne     invalid_operand
  445.         call    take_avx_register
  446.         cmp     ah,16
  447.         jne     invalid_operand
  448.         mov     [postbyte_register],al
  449.         inc     [extended_code]
  450.         jmp     instruction_ready
  451. avx_movhlps_instruction:
  452.         mov     [base_code],0Fh
  453.         mov     [extended_code],al
  454.         or      [vex_required],1
  455.         call    take_avx_register
  456.         cmp     ah,16
  457.         jne     invalid_operand
  458.         mov     [postbyte_register],al
  459.         lods    byte [esi]
  460.         cmp     al,','
  461.         jne     invalid_operand
  462.         call    take_avx_register
  463.         mov     [vex_register],al
  464.         lods    byte [esi]
  465.         cmp     al,','
  466.         jne     invalid_operand
  467.         call    take_avx_register
  468.         mov     bl,al
  469.         jmp     nomem_instruction_ready
  470. avx_maskmov_instruction:
  471.         mov     [opcode_prefix],66h
  472.         mov     [base_code],0Fh
  473.         mov     [extended_code],38h
  474.         mov     [supplemental_code],al
  475.         mov     [mmx_size],0
  476.         or      [vex_required],1
  477.         lods    byte [esi]
  478.         call    get_size_operator
  479.         cmp     al,10h
  480.         jne     avx_maskmov_mem
  481.         lods    byte [esi]
  482.         call    convert_avx_register
  483.         mov     [postbyte_register],al
  484.         lods    byte [esi]
  485.         cmp     al,','
  486.         jne     invalid_operand
  487.         call    take_avx_register
  488.         mov     [vex_register],al
  489.         lods    byte [esi]
  490.         cmp     al,','
  491.         jne     invalid_operand
  492.         call    take_avx_rm
  493.         jc      invalid_operand
  494.         jmp     instruction_ready
  495.       avx_maskmov_mem:
  496.         cmp     al,'['
  497.         jne     invalid_operand
  498.         call    get_address
  499.         lods    byte [esi]
  500.         cmp     al,','
  501.         jne     invalid_operand
  502.         call    take_avx_register
  503.         mov     [vex_register],al
  504.         lods    byte [esi]
  505.         cmp     al,','
  506.         jne     invalid_operand
  507.         call    take_avx_register
  508.         mov     [postbyte_register],al
  509.         add     [supplemental_code],2
  510.         jmp     instruction_ready
  511. avx_movd_instruction:
  512.         or      [vex_required],1
  513.         jmp     movd_instruction
  514. avx_movq_instruction:
  515.         or      [vex_required],1
  516.         jmp     movq_instruction
  517. avx_movddup_instruction:
  518.         or      [vex_required],1
  519.         mov     [opcode_prefix],0F2h
  520.         mov     [base_code],0Fh
  521.         mov     [extended_code],al
  522.         lods    byte [esi]
  523.         call    get_size_operator
  524.         cmp     al,10h
  525.         jne     invalid_operand
  526.         lods    byte [esi]
  527.         call    convert_avx_register
  528.         mov     [postbyte_register],al
  529.         mov     [mmx_size],0
  530.         cmp     ah,32
  531.         je      avx_regs_size_ok
  532.         mov     [mmx_size],8
  533.         jmp     avx_regs_size_ok
  534. avx_movmskpd_instruction:
  535.         mov     [opcode_prefix],66h
  536. avx_movmskps_instruction:
  537.         mov     [base_code],0Fh
  538.         mov     [extended_code],50h
  539.         or      [vex_required],1
  540.         lods    byte [esi]
  541.         call    get_size_operator
  542.         cmp     al,10h
  543.         jne     invalid_operand
  544.         lods    byte [esi]
  545.         call    convert_register
  546.         mov     [postbyte_register],al
  547.         cmp     ah,4
  548.         je      avx_movmskps_reg_ok
  549.         cmp     ah,8
  550.         jne     invalid_operand_size
  551.         cmp     [code_type],64
  552.         jne     invalid_operand
  553.       avx_movmskps_reg_ok:
  554.         mov     [operand_size],0
  555.         lods    byte [esi]
  556.         cmp     al,','
  557.         jne     invalid_operand
  558.         call    take_avx_register
  559.         mov     bl,al
  560.         jmp     nomem_instruction_ready
  561. avx_movsd_instruction:
  562.         mov     [opcode_prefix],0F2h
  563.         mov     [mmx_size],8
  564.         jmp     avx_movs_instruction
  565. avx_movss_instruction:
  566.         mov     [opcode_prefix],0F3h
  567.         mov     [mmx_size],4
  568.       avx_movs_instruction:
  569.         or      [vex_required],1
  570.         mov     [base_code],0Fh
  571.         mov     [extended_code],10h
  572.         lods    byte [esi]
  573.         call    get_size_operator
  574.         cmp     al,10h
  575.         jne     avx_movlps_mem
  576.         lods    byte [esi]
  577.         call    convert_xmm_register
  578.         mov     [postbyte_register],al
  579.         xor     cl,cl
  580.         xchg    cl,[operand_size]
  581.         lods    byte [esi]
  582.         cmp     al,','
  583.         jne     invalid_operand
  584.         lods    byte [esi]
  585.         call    get_size_operator
  586.         cmp     al,10h
  587.         jne     avx_movs_reg_mem
  588.         mov     [operand_size],cl
  589.         lods    byte [esi]
  590.         call    convert_avx_register
  591.         mov     [vex_register],al
  592.         lods    byte [esi]
  593.         cmp     al,','
  594.         jne     invalid_operand
  595.         call    take_avx_register
  596.         mov     bl,al
  597.         cmp     bl,8
  598.         jb      nomem_instruction_ready
  599.         inc     [extended_code]
  600.         xchg    bl,[postbyte_register]
  601.         jmp     nomem_instruction_ready
  602.       avx_movs_reg_mem:
  603.         cmp     al,'['
  604.         jne     invalid_operand
  605.         call    get_address
  606.         mov     al,[operand_size]
  607.         or      al,al
  608.         jz      avx_movs_reg_mem_ok
  609.         cmp     al,[mmx_size]
  610.         jne     invalid_operand_size
  611.       avx_movs_reg_mem_ok:
  612.         jmp     instruction_ready
  613.  
  614. avx_cvtdq2pd_instruction:
  615.         mov     [opcode_prefix],0F3h
  616. avx_cvtps2pd_instruction:
  617.         mov     [base_code],0Fh
  618.         mov     [extended_code],al
  619.         or      [vex_required],1
  620.         call    take_avx_register
  621.         mov     [postbyte_register],al
  622.         lods    byte [esi]
  623.         cmp     al,','
  624.         jne     invalid_operand
  625.         xor     cl,cl
  626.         xchg    cl,[operand_size]
  627.         lods    byte [esi]
  628.         call    get_size_operator
  629.         cmp     al,10h
  630.         jne     avx_cvtdq2pd_reg_mem
  631.         lods    byte [esi]
  632.         call    convert_xmm_register
  633.         mov     bl,al
  634.         mov     [operand_size],cl
  635.         jmp     nomem_instruction_ready
  636.       avx_cvtdq2pd_reg_mem:
  637.         cmp     al,'['
  638.         jne     invalid_operand
  639.         mov     [mmx_size],cl
  640.         call    get_address
  641.         mov     al,[operand_size]
  642.         or      al,al
  643.         jz      instruction_ready
  644.         shl     al,1
  645.         cmp     al,[mmx_size]
  646.         jne     invalid_operand_size
  647.         mov     [operand_size],al
  648.         jmp     instruction_ready
  649. avx_cvtpd2dq_instruction:
  650.         mov     [opcode_prefix],0F2h
  651.         jmp     avx_cvtpd_instruction
  652. avx_cvtpd2ps_instruction:
  653.         mov     [opcode_prefix],66h
  654.       avx_cvtpd_instruction:
  655.         mov     [base_code],0Fh
  656.         mov     [extended_code],al
  657.         or      [vex_required],1
  658.         call    take_avx_register
  659.         mov     [postbyte_register],al
  660.         cmp     ah,16
  661.         jne     invalid_operand
  662.         lods    byte [esi]
  663.         cmp     al,','
  664.         jne     invalid_operand
  665.         mov     [operand_size],0
  666.         lods    byte [esi]
  667.         call    get_size_operator
  668.         cmp     al,10h
  669.         jne     avx_cvtpd2dq_reg_mem
  670.         lods    byte [esi]
  671.         call    convert_avx_register
  672.         mov     bl,al
  673.         jmp     nomem_instruction_ready
  674.       avx_cvtpd2dq_reg_mem:
  675.         cmp     al,'['
  676.         jne     invalid_operand
  677.         call    get_address
  678.         mov     al,[operand_size]
  679.         or      al,al
  680.         jz      operand_size_not_specified
  681.         cmp     al,16
  682.         je      instruction_ready
  683.         cmp     al,32
  684.         jne     invalid_operand_size
  685.         jmp     instruction_ready
  686. avx_cvttps2dq_instruction:
  687.         or      [vex_required],2
  688.         mov     [opcode_prefix],0F3h
  689.         mov     [mmx_size],0
  690.         jmp     avx_instruction
  691. avx_cvtsd2si_instruction:
  692.         or      [vex_required],1
  693.         jmp     cvtsd2si_instruction
  694. avx_cvtss2si_instruction:
  695.         or      [vex_required],1
  696.         jmp     cvtss2si_instruction
  697. avx_cvtsi2ss_instruction:
  698.         mov     [opcode_prefix],0F3h
  699.         jmp     avx_cvtsi_instruction
  700. avx_cvtsi2sd_instruction:
  701.         mov     [opcode_prefix],0F2h
  702.       avx_cvtsi_instruction:
  703.         mov     [base_code],0Fh
  704.         mov     [extended_code],al
  705.         or      [vex_required],1
  706.         call    take_avx_register
  707.         cmp     ah,16
  708.         jne     invalid_operand_size
  709.         mov     [postbyte_register],al
  710.         lods    byte [esi]
  711.         cmp     al,','
  712.         jne     invalid_operand
  713.         call    take_avx_register
  714.         mov     [vex_register],al
  715.         jmp     cvtsi_xmmreg
  716.  
  717. avx_extractf128_instruction:
  718.         or      [vex_required],1
  719.         call    setup_66_0f_3a
  720.         lods    byte [esi]
  721.         call    get_size_operator
  722.         cmp     al,10h
  723.         je      avx_extractf128_reg
  724.         cmp     al,'['
  725.         jne     invalid_operand
  726.         call    get_address
  727.         xor     al,al
  728.         xchg    al,[operand_size]
  729.         or      al,al
  730.         jz      avx_extractf128_mem_size_ok
  731.         cmp     al,16
  732.         jne     invalid_operand_size
  733.       avx_extractf128_mem_size_ok:
  734.         lods    byte [esi]
  735.         cmp     al,','
  736.         jne     invalid_operand
  737.         call    take_avx_register
  738.         cmp     ah,32
  739.         jne     invalid_operand_size
  740.         mov     [postbyte_register],al
  741.         jmp     mmx_imm8
  742.       avx_extractf128_reg:
  743.         lods    byte [esi]
  744.         call    convert_xmm_register
  745.         mov     [operand_size],0
  746.         push    eax
  747.         lods    byte [esi]
  748.         cmp     al,','
  749.         jne     invalid_operand
  750.         call    take_avx_register
  751.         cmp     ah,32
  752.         jne     invalid_operand_size
  753.         mov     [postbyte_register],al
  754.         pop     ebx
  755.         jmp     mmx_nomem_imm8
  756. avx_insertf128_instruction:
  757.         or      [vex_required],1
  758.         call    setup_66_0f_3a
  759.         call    take_avx_register
  760.         cmp     ah,32
  761.         jne     invalid_operand
  762.         mov     [postbyte_register],al
  763.         lods    byte [esi]
  764.         cmp     al,','
  765.         jne     invalid_operand
  766.         call    take_avx_register
  767.         mov     [vex_register],al
  768.         mov     [operand_size],0
  769.         mov     [mmx_size],16
  770.         lods    byte [esi]
  771.         cmp     al,','
  772.         jne     invalid_operand
  773.         call    take_avx_rm
  774.         mov     [operand_size],32
  775.         jnc     mmx_imm8
  776.         mov     bl,al
  777.         jmp     mmx_nomem_imm8
  778. avx_extractps_instruction:
  779.         or      [vex_required],1
  780.         jmp     extractps_instruction
  781. avx_insertps_instruction:
  782.         or      [vex_required],1
  783.         call    take_avx_register
  784.         cmp     ah,16
  785.         jne     invalid_operand_size
  786.         mov     [postbyte_register],al
  787.         lods    byte [esi]
  788.         cmp     al,','
  789.         jne     invalid_operand
  790.         call    take_avx_register
  791.         mov     [vex_register],al
  792.         jmp     insertps_xmmreg
  793. avx_pextrb_instruction:
  794.         or      [vex_required],1
  795.         jmp     pextrb_instruction
  796. avx_pextrw_instruction:
  797.         or      [vex_required],1
  798.         jmp     pextrw_instruction
  799. avx_pextrd_instruction:
  800.         or      [vex_required],1
  801.         jmp     pextrd_instruction
  802. avx_pextrq_instruction:
  803.         or      [vex_required],1
  804.         jmp     pextrq_instruction
  805. avx_pinsrb_instruction:
  806.         mov     [mmx_size],1
  807.         or      [vex_required],1
  808.         jmp     avx_pinsr_instruction_3a
  809. avx_pinsrw_instruction:
  810.         mov     [mmx_size],2
  811.         or      [vex_required],1
  812.         jmp     avx_pinsr_instruction
  813. avx_pinsrd_instruction:
  814.         mov     [mmx_size],4
  815.         or      [vex_required],1
  816.         jmp     avx_pinsr_instruction_3a
  817. avx_pinsrq_instruction:
  818.         mov     [mmx_size],8
  819.         or      [vex_required],1
  820.         call    operand_64bit
  821.       avx_pinsr_instruction_3a:
  822.         mov     [supplemental_code],al
  823.         mov     al,3Ah
  824.       avx_pinsr_instruction:
  825.         mov     [opcode_prefix],66h
  826.         mov     [base_code],0Fh
  827.         mov     [extended_code],al
  828.         call    take_avx_register
  829.         cmp     ah,16
  830.         jne     invalid_operand_size
  831.         mov     [postbyte_register],al
  832.         lods    byte [esi]
  833.         cmp     al,','
  834.         jne     invalid_operand
  835.         call    take_avx_register
  836.         mov     [vex_register],al
  837.         jmp     pinsr_xmmreg
  838. avx_maskmovdqu_instruction:
  839.         or      [vex_required],1
  840.         jmp     maskmovdqu_instruction
  841. avx_pmovmskb_instruction:
  842.         or      [vex_required],1
  843.         jmp     pmovmskb_instruction
  844. avx_pshufd_instruction:
  845.         or      [vex_required],1
  846.         jmp     pshufd_instruction
  847. avx_pmovsxbw_instruction:
  848.         mov     [mmx_size],8
  849.         jmp     avx_pmovsx_instruction
  850. avx_pmovsxbd_instruction:
  851.         mov     [mmx_size],4
  852.         jmp     avx_pmovsx_instruction
  853. avx_pmovsxbq_instruction:
  854.         mov     [mmx_size],2
  855.         jmp     avx_pmovsx_instruction
  856. avx_pmovsxwd_instruction:
  857.         mov     [mmx_size],8
  858.         jmp     avx_pmovsx_instruction
  859. avx_pmovsxwq_instruction:
  860.         mov     [mmx_size],4
  861.         jmp     avx_pmovsx_instruction
  862. avx_pmovsxdq_instruction:
  863.         mov     [mmx_size],8
  864.       avx_pmovsx_instruction:
  865.         or      [vex_required],1
  866.         jmp     pmovsx_instruction
  867. avx_permil_instruction:
  868.         call    setup_66_0f_3a
  869.         or      [vex_required],1
  870.         call    take_avx_register
  871.         mov     [postbyte_register],al
  872.         lods    byte [esi]
  873.         cmp     al,','
  874.         jne     invalid_operand
  875.         lods    byte [esi]
  876.         call    get_size_operator
  877.         cmp     al,'['
  878.         je      avx_permil_reg_mem
  879.         cmp     al,10h
  880.         jne     invalid_operand
  881.         lods    byte [esi]
  882.         call    convert_avx_register
  883.         mov     [vex_register],al
  884.         lods    byte [esi]
  885.         cmp     al,','
  886.         jne     invalid_operand
  887.         push    esi
  888.         xor     cl,cl
  889.         xchg    cl,[operand_size]
  890.         lods    byte [esi]
  891.         call    get_size_operator
  892.         xchg    cl,[operand_size]
  893.         pop     esi
  894.         cmp     al,'['
  895.         je      avx_permil_reg_reg_mem
  896.         cmp     al,10h
  897.         jne     avx_permil_reg_reg_imm8
  898.         call    take_avx_register
  899.         mov     bl,al
  900.         mov     [extended_code],38h
  901.         add     [supplemental_code],8
  902.         jmp     nomem_instruction_ready
  903.       avx_permil_reg_reg_mem:
  904.         lods    byte [esi]
  905.         call    get_size_operator
  906.         call    get_address
  907.         mov     [extended_code],38h
  908.         add     [supplemental_code],8
  909.         jmp     instruction_ready
  910.       avx_permil_reg_reg_imm8:
  911.         dec     esi
  912.         xor     bl,bl
  913.         xchg    bl,[vex_register]
  914.         jmp     mmx_nomem_imm8
  915.       avx_permil_reg_mem:
  916.         call    get_address
  917.         jmp     mmx_imm8
  918. avx_pslldq_instruction:
  919.         mov     [postbyte_register],al
  920.         mov     [opcode_prefix],66h
  921.         mov     [base_code],0Fh
  922.         mov     [extended_code],73h
  923.         or      [vex_required],1
  924.         call    take_avx_register
  925.         cmp     ah,16
  926.         jne     invalid_operand
  927.         mov     [vex_register],al
  928.         lods    byte [esi]
  929.         cmp     al,','
  930.         jne     invalid_operand
  931.         call    take_avx_register
  932.         mov     bl,al
  933.         jmp     mmx_nomem_imm8
  934. avx_bit_shift_instruction:
  935.         mov     [opcode_prefix],66h
  936.         mov     [base_code],0Fh
  937.         mov     [extended_code],al
  938.         or      [vex_required],1
  939.         call    take_avx_register
  940.         cmp     ah,16
  941.         jne     invalid_operand
  942.         mov     [postbyte_register],al
  943.         lods    byte [esi]
  944.         cmp     al,','
  945.         jne     invalid_operand
  946.         call    take_avx_register
  947.         mov     [vex_register],al
  948.         lods    byte [esi]
  949.         cmp     al,','
  950.         jne     invalid_operand
  951.         push    esi
  952.         xor     cl,cl
  953.         xchg    cl,[operand_size]
  954.         lods    byte [esi]
  955.         call    get_size_operator
  956.         xchg    cl,[operand_size]
  957.         pop     esi
  958.         cmp     al,10h
  959.         je      avx_bit_shift_regs_reg
  960.         cmp     al,'['
  961.         je      avx_bit_shift_regs_mem
  962.         dec     esi
  963.         mov     bl,[extended_code]
  964.         mov     al,bl
  965.         shr     bl,4
  966.         and     al,1111b
  967.         add     al,70h
  968.         mov     [extended_code],al
  969.         sub     bl,0Ch
  970.         shl     bl,1
  971.         xchg    bl,[postbyte_register]
  972.         xchg    bl,[vex_register]
  973.         jmp     mmx_nomem_imm8
  974.       avx_bit_shift_regs_reg:
  975.         call    take_avx_register
  976.         mov     bl,al
  977.         jmp     nomem_instruction_ready
  978.       avx_bit_shift_regs_mem:
  979.         lods    byte [esi]
  980.         call    get_size_operator
  981.         call    get_address
  982.         jmp     instruction_ready
  983.  
  984. vzeroall_instruction:
  985.         mov     [operand_size],32
  986. vzeroupper_instruction:
  987.         mov     [base_code],0Fh
  988.         mov     [extended_code],al
  989.         or      [vex_required],1
  990.         call    store_instruction_code
  991.         jmp     instruction_assembled
  992. vldmxcsr_instruction:
  993.         or      [vex_required],1
  994.         jmp     fxsave_instruction
  995. vcvtph2ps_instruction:
  996.         mov     [opcode_prefix],66h
  997.         mov     [supplemental_code],al
  998.         mov     al,38h
  999.         jmp     avx_cvtps2pd_instruction
  1000. vcvtps2ph_instruction:
  1001.         call    setup_66_0f_3a
  1002.         or      [vex_required],1
  1003.         lods    byte [esi]
  1004.         call    get_size_operator
  1005.         cmp     al,10h
  1006.         je      vcvtps2ph_reg
  1007.         cmp     al,'['
  1008.         jne     invalid_operand
  1009.         call    get_address
  1010.         lods    byte [esi]
  1011.         cmp     al,','
  1012.         jne     invalid_operand
  1013.         shl     [operand_size],1
  1014.         call    take_avx_register
  1015.         mov     [postbyte_register],al
  1016.         jmp     mmx_imm8
  1017.       vcvtps2ph_reg:
  1018.         lods    byte [esi]
  1019.         call    convert_xmm_register
  1020.         mov     bl,al
  1021.         mov     [operand_size],0
  1022.         lods    byte [esi]
  1023.         cmp     al,','
  1024.         jne     invalid_operand
  1025.         call    take_avx_register
  1026.         mov     [postbyte_register],al
  1027.         jmp     mmx_nomem_imm8
  1028.  
  1029. fma_instruction_pd:
  1030.         or      [rex_prefix],8
  1031. fma_instruction_ps:
  1032.         mov     [mmx_size],0
  1033.         jmp     avx_instruction_38_setup
  1034. fma_instruction_sd:
  1035.         or      [rex_prefix],8
  1036.         mov     [mmx_size],8
  1037.         jmp     avx_instruction_38_setup
  1038. fma_instruction_ss:
  1039.         mov     [mmx_size],4
  1040.         jmp     avx_instruction_38_setup
  1041.  
  1042. fma4_instruction_p:
  1043.         mov     [mmx_size],0
  1044.         jmp     fma4_instruction_setup
  1045. fma4_instruction_sd:
  1046.         mov     [mmx_size],8
  1047.         jmp     fma4_instruction_setup
  1048. fma4_instruction_ss:
  1049.         mov     [mmx_size],4
  1050.       fma4_instruction_setup:
  1051.         mov     [immediate_size],-2
  1052.         mov     byte [value],0
  1053.         jmp     avx_instruction_3a_setup
  1054.  
  1055. xop_single_source_sd_instruction:
  1056.         or      [vex_required],2
  1057.         mov     [mmx_size],8
  1058.         jmp     xop_instruction_9
  1059. xop_single_source_ss_instruction:
  1060.         or      [vex_required],2
  1061.         mov     [mmx_size],4
  1062.         jmp     xop_instruction_9
  1063. xop_single_source_instruction:
  1064.         or      [vex_required],2
  1065.         mov     [mmx_size],0
  1066.       xop_instruction_9:
  1067.         mov     [base_code],al
  1068.         mov     [xop_opcode_map],9
  1069.         jmp     avx_common
  1070. xop_single_source_128bit_instruction:
  1071.         or      [vex_required],2
  1072.         mov     [mmx_size],16
  1073.         jmp     xop_instruction_9
  1074. xop_triple_source_128bit_instruction:
  1075.         mov     [immediate_size],-1
  1076.         mov     byte [value],0
  1077.         mov     [mmx_size],16
  1078.         jmp     xop_instruction_8
  1079. xop_128bit_instruction:
  1080.         mov     [immediate_size],-2
  1081.         mov     byte [value],0
  1082.         mov     [mmx_size],16
  1083.       xop_instruction_8:
  1084.         mov     [base_code],al
  1085.         mov     [xop_opcode_map],8
  1086.         jmp     avx_common
  1087. xop_pcom_b_instruction:
  1088.         mov     ah,0CCh
  1089.         jmp     xop_pcom_instruction
  1090. xop_pcom_d_instruction:
  1091.         mov     ah,0CEh
  1092.         jmp     xop_pcom_instruction
  1093. xop_pcom_q_instruction:
  1094.         mov     ah,0CFh
  1095.         jmp     xop_pcom_instruction
  1096. xop_pcom_w_instruction:
  1097.         mov     ah,0CDh
  1098.         jmp     xop_pcom_instruction
  1099. xop_pcom_ub_instruction:
  1100.         mov     ah,0ECh
  1101.         jmp     xop_pcom_instruction
  1102. xop_pcom_ud_instruction:
  1103.         mov     ah,0EEh
  1104.         jmp     xop_pcom_instruction
  1105. xop_pcom_uq_instruction:
  1106.         mov     ah,0EFh
  1107.         jmp     xop_pcom_instruction
  1108. xop_pcom_uw_instruction:
  1109.         mov     ah,0EDh
  1110.       xop_pcom_instruction:
  1111.         mov     byte [value],al
  1112.         mov     [mmx_size],16
  1113.         mov     [base_code],ah
  1114.         mov     [xop_opcode_map],8
  1115.         jmp     avx_common
  1116. vpcmov_instruction:
  1117.         or      [vex_required],1
  1118.         mov     [immediate_size],-2
  1119.         mov     byte [value],0
  1120.         mov     [mmx_size],0
  1121.         mov     [base_code],al
  1122.         mov     [xop_opcode_map],8
  1123.         jmp     avx_common
  1124. xop_shift_instruction:
  1125.         mov     [base_code],al
  1126.         or      [vex_required],1
  1127.         mov     [xop_opcode_map],9
  1128.         call    take_avx_register
  1129.         cmp     ah,16
  1130.         jne     invalid_operand
  1131.         mov     [postbyte_register],al
  1132.         lods    byte [esi]
  1133.         cmp     al,','
  1134.         jne     invalid_operand
  1135.         lods    byte [esi]
  1136.         call    get_size_operator
  1137.         cmp     al,'['
  1138.         je      xop_shift_reg_mem
  1139.         cmp     al,10h
  1140.         jne     invalid_operand
  1141.         lods    byte [esi]
  1142.         call    convert_xmm_register
  1143.         mov     [vex_register],al
  1144.         lods    byte [esi]
  1145.         cmp     al,','
  1146.         jne     invalid_operand
  1147.         push    esi
  1148.         xor     cl,cl
  1149.         xchg    cl,[operand_size]
  1150.         lods    byte [esi]
  1151.         call    get_size_operator
  1152.         pop     esi
  1153.         xchg    cl,[operand_size]
  1154.         cmp     al,'['
  1155.         je      xop_shift_reg_reg_mem
  1156.         cmp     al,10h
  1157.         jne     xop_shift_reg_reg_imm
  1158.         call    take_avx_register
  1159.         mov     bl,al
  1160.         xchg    bl,[vex_register]
  1161.         jmp     nomem_instruction_ready
  1162.       xop_shift_reg_reg_mem:
  1163.         or      [rex_prefix],8
  1164.         lods    byte [esi]
  1165.         call    get_size_operator
  1166.         call    get_address
  1167.         jmp     instruction_ready
  1168.       xop_shift_reg_reg_imm:
  1169.         xor     bl,bl
  1170.         xchg    bl,[vex_register]
  1171.         cmp     [base_code],94h
  1172.         jae     invalid_operand
  1173.         add     [base_code],30h
  1174.         mov     [xop_opcode_map],8
  1175.         dec     esi
  1176.         jmp     mmx_nomem_imm8
  1177.       xop_shift_reg_mem:
  1178.         call    get_address
  1179.         lods    byte [esi]
  1180.         cmp     al,','
  1181.         jne     invalid_operand
  1182.         push    esi
  1183.         xor     cl,cl
  1184.         xchg    cl,[operand_size]
  1185.         lods    byte [esi]
  1186.         call    get_size_operator
  1187.         pop     esi
  1188.         xchg    cl,[operand_size]
  1189.         cmp     al,10h
  1190.         jne     xop_shift_reg_mem_imm
  1191.         call    take_avx_register
  1192.         mov     [vex_register],al
  1193.         jmp     instruction_ready
  1194.       xop_shift_reg_mem_imm:
  1195.         cmp     [base_code],94h
  1196.         jae     invalid_operand
  1197.         add     [base_code],30h
  1198.         mov     [xop_opcode_map],8
  1199.         dec     esi
  1200.         jmp     mmx_imm8
  1201.  
  1202. vpermil_2pd_instruction:
  1203.         mov     [immediate_size],-2
  1204.         mov     byte [value],al
  1205.         mov     al,49h
  1206.         jmp     vpermil2_instruction_setup
  1207. vpermil_2ps_instruction:
  1208.         mov     [immediate_size],-2
  1209.         mov     byte [value],al
  1210.         mov     al,48h
  1211.         jmp     vpermil2_instruction_setup
  1212. vpermil2_instruction:
  1213.         mov     [immediate_size],-3
  1214.         mov     byte [value],0
  1215.       vpermil2_instruction_setup:
  1216.         mov     [base_code],0Fh
  1217.         mov     [supplemental_code],al
  1218.         mov     al,3Ah
  1219.         mov     [mmx_size],0
  1220.         jmp     avx_instruction
  1221.  
  1222. take_avx_register:
  1223.         lods    byte [esi]
  1224.         call    get_size_operator
  1225.         cmp     al,10h
  1226.         jne     invalid_operand
  1227.         lods    byte [esi]
  1228. convert_avx_register:
  1229.         mov     ah,al
  1230.         and     al,0Fh
  1231.         and     ah,0F0h
  1232.         sub     ah,0B0h
  1233.         jbe     invalid_operand
  1234.         cmp     ah,32
  1235.         ja      invalid_operand
  1236.         cmp     al,8
  1237.         jb      match_register_size
  1238.         cmp     [code_type],64
  1239.         jne     invalid_operand
  1240.         jmp     match_register_size
  1241. store_vex_instruction_code:
  1242.         mov     al,[base_code]
  1243.         cmp     al,0Fh
  1244.         jne     store_xop_instruction_code
  1245.         mov     ah,[extended_code]
  1246.         cmp     ah,38h
  1247.         je      store_vex_0f38_instruction_code
  1248.         cmp     ah,3Ah
  1249.         je      store_vex_0f3a_instruction_code
  1250.         test    [rex_prefix],1011b
  1251.         jnz     store_vex_0f_instruction_code
  1252.         mov     [edi+2],ah
  1253.         mov     byte [edi],0C5h
  1254.         mov     al,[vex_register]
  1255.         not     al
  1256.         shl     al,3
  1257.         mov     ah,[rex_prefix]
  1258.         shl     ah,5
  1259.         and     ah,80h
  1260.         xor     al,ah
  1261.         call    get_vex_lpp_bits
  1262.         mov     [edi+1],al
  1263.         call    check_vex
  1264.         add     edi,3
  1265.         ret
  1266.       get_vex_lpp_bits:
  1267.         cmp     [operand_size],32
  1268.         jne     vex_l_bit_ok
  1269.         or      al,100b
  1270.       vex_l_bit_ok:
  1271.         mov     ah,[opcode_prefix]
  1272.         cmp     ah,66h
  1273.         je      vex_66
  1274.         cmp     ah,0F3h
  1275.         je      vex_f3
  1276.         cmp     ah,0F2h
  1277.         je      vex_f2
  1278.         test    ah,ah
  1279.         jnz     prefix_conflict
  1280.         ret
  1281.       vex_f2:
  1282.         or      al,11b
  1283.         ret
  1284.       vex_f3:
  1285.         or      al,10b
  1286.         ret
  1287.       vex_66:
  1288.         or      al,1
  1289.         ret
  1290.       store_vex_0f38_instruction_code:
  1291.         mov     al,11100010b
  1292.         mov     ah,[supplemental_code]
  1293.         jmp     make_c4_vex
  1294.       store_vex_0f3a_instruction_code:
  1295.         mov     al,11100011b
  1296.         mov     ah,[supplemental_code]
  1297.         jmp     make_c4_vex
  1298.       store_vex_0f_instruction_code:
  1299.         mov     al,11100001b
  1300.       make_c4_vex:
  1301.         mov     [edi+3],ah
  1302.         mov     byte [edi],0C4h
  1303.         mov     ah,[rex_prefix]
  1304.         shl     ah,5
  1305.         xor     al,ah
  1306.         mov     [edi+1],al
  1307.         call    check_vex
  1308.         mov     al,[vex_register]
  1309.         xor     al,1111b
  1310.         shl     al,3
  1311.         mov     ah,[rex_prefix]
  1312.         shl     ah,4
  1313.         and     ah,80h
  1314.         or      al,ah
  1315.         call    get_vex_lpp_bits
  1316.         mov     [edi+2],al
  1317.         add     edi,4
  1318.         ret
  1319.       check_vex:
  1320.         cmp     [code_type],64
  1321.         je      vex_ok
  1322.         not     al
  1323.         test    al,11000000b
  1324.         jnz     invalid_operand
  1325.         test    [rex_prefix],40h
  1326.         jnz     invalid_operand
  1327.       vex_ok:
  1328.         ret
  1329. store_xop_instruction_code:
  1330.         mov     [edi+3],al
  1331.         mov     byte [edi],8Fh
  1332.         mov     al,[xop_opcode_map]
  1333.         mov     ah,[rex_prefix]
  1334.         test    ah,40h
  1335.         jz      xop_ok
  1336.         cmp     [code_type],64
  1337.         jne     invalid_operand
  1338.       xop_ok:
  1339.         not     ah
  1340.         shl     ah,5
  1341.         xor     al,ah
  1342.         mov     [edi+1],al
  1343.         mov     al,[vex_register]
  1344.         xor     al,1111b
  1345.         shl     al,3
  1346.         mov     ah,[rex_prefix]
  1347.         shl     ah,4
  1348.         and     ah,80h
  1349.         or      al,ah
  1350.         call    get_vex_lpp_bits
  1351.         mov     [edi+2],al
  1352.         add     edi,4
  1353.         ret
  1354.