odin-blend2d

Odin bindings to Blend2D
Log | Files | Refs | README | LICENSE

asmjit_bench_codegen_x86.cpp (179294B)


      1 // This file is part of AsmJit project <https://asmjit.com>
      2 //
      3 // See <asmjit/core.h> or LICENSE.md for license and copyright information
      4 // SPDX-License-Identifier: Zlib
      5 
      6 #include <asmjit/core.h>
      7 
      8 #if !defined(ASMJIT_NO_X86)
      9 #include <asmjit/x86.h>
     10 
     11 #include <limits>
     12 #include <stdio.h>
     13 #include <string.h>
     14 
     15 #include "asmjit_bench_codegen.h"
     16 #include "../tests/asmjit_test_misc.h"
     17 
     18 using namespace asmjit;
     19 
     20 enum class InstForm {
     21   kReg,
     22   kMem
     23 };
     24 
     25 // Generates a long sequence of GP instructions.
     26 template<typename Emitter>
     27 static void generate_gp_sequence_internal(
     28   Emitter& cc,
     29   InstForm form,
     30   const x86::Gp& a, const x86::Gp& b, const x86::Gp& c, const x86::Gp& d) {
     31 
     32   cc.mov(a, 0xAAAAAAAA);
     33   cc.mov(b, 0xBBBBBBBB);
     34   cc.mov(c, 0xCCCCCCCC);
     35   cc.mov(d, 0xFFFFFFFF);
     36 
     37   if (form == InstForm::kReg) {
     38     cc.adc(a, b);
     39     cc.adc(b, c);
     40     cc.adc(c, d);
     41     cc.add(a, b);
     42     cc.add(b, c);
     43     cc.add(c, d);
     44     cc.and_(a, b);
     45     cc.and_(b, c);
     46     cc.and_(c, d);
     47     cc.bsf(a, b);
     48     cc.bsf(b, c);
     49     cc.bsf(c, d);
     50     cc.bsr(a, b);
     51     cc.bsr(b, c);
     52     cc.bsr(c, d);
     53     cc.bswap(a);
     54     cc.bswap(b);
     55     cc.bswap(c);
     56     cc.bt(a, b);
     57     cc.bt(b, c);
     58     cc.bt(c, d);
     59     cc.btc(a, b);
     60     cc.btc(b, c);
     61     cc.btc(c, d);
     62     cc.btr(a, b);
     63     cc.btr(b, c);
     64     cc.btr(c, d);
     65     cc.bts(a, b);
     66     cc.bts(b, c);
     67     cc.bts(c, d);
     68     cc.cmp(a, b);
     69     cc.cmovc(a, b);
     70     cc.cmp(b, c);
     71     cc.cmovc(b, c);
     72     cc.cmp(c, d);
     73     cc.cmovc(c, d);
     74     cc.dec(a);
     75     cc.dec(b);
     76     cc.dec(c);
     77     cc.imul(a, b);
     78     cc.imul(b, c);
     79     cc.imul(c, d);
     80     cc.movsx(a, b.r8_lo());
     81     cc.movsx(b, c.r8_lo());
     82     cc.movsx(c, d.r8_lo());
     83     cc.movzx(a, b.r8_lo());
     84     cc.movzx(b, c.r8_lo());
     85     cc.movzx(c, d.r8_lo());
     86     cc.neg(a);
     87     cc.neg(b);
     88     cc.neg(c);
     89     cc.not_(a);
     90     cc.not_(b);
     91     cc.not_(c);
     92     cc.or_(a, b);
     93     cc.or_(b, c);
     94     cc.or_(c, d);
     95     cc.sbb(a, b);
     96     cc.sbb(b, c);
     97     cc.sbb(c, d);
     98     cc.sub(a, b);
     99     cc.sub(b, c);
    100     cc.sub(c, d);
    101     cc.test(a, b);
    102     cc.test(b, c);
    103     cc.test(c, d);
    104     cc.xchg(a, b);
    105     cc.xchg(b, c);
    106     cc.xchg(c, d);
    107     cc.xor_(a, b);
    108     cc.xor_(b, c);
    109     cc.xor_(c, d);
    110 
    111     cc.rcl(a, c.r8_lo());
    112     cc.rcl(b, c.r8_lo());
    113     cc.rcl(d, c.r8_lo());
    114     cc.rcr(a, c.r8_lo());
    115     cc.rcr(b, c.r8_lo());
    116     cc.rcr(d, c.r8_lo());
    117     cc.rol(a, c.r8_lo());
    118     cc.rol(b, c.r8_lo());
    119     cc.rol(d, c.r8_lo());
    120     cc.ror(a, c.r8_lo());
    121     cc.ror(b, c.r8_lo());
    122     cc.ror(d, c.r8_lo());
    123     cc.shl(a, c.r8_lo());
    124     cc.shl(b, c.r8_lo());
    125     cc.shl(d, c.r8_lo());
    126     cc.shr(a, c.r8_lo());
    127     cc.shr(b, c.r8_lo());
    128     cc.shr(d, c.r8_lo());
    129     cc.sar(a, c.r8_lo());
    130     cc.sar(b, c.r8_lo());
    131     cc.sar(d, c.r8_lo());
    132     cc.shld(a, b, c.r8_lo());
    133     cc.shld(b, d, c.r8_lo());
    134     cc.shld(d, a, c.r8_lo());
    135     cc.shrd(a, b, c.r8_lo());
    136     cc.shrd(b, d, c.r8_lo());
    137     cc.shrd(d, a, c.r8_lo());
    138 
    139     cc.adcx(a, b);
    140     cc.adox(a, b);
    141     cc.adcx(b, c);
    142     cc.adox(b, c);
    143     cc.adcx(c, d);
    144     cc.adox(c, d);
    145     cc.andn(a, b, c);
    146     cc.andn(b, c, d);
    147     cc.andn(c, d, a);
    148     cc.bextr(a, b, c);
    149     cc.bextr(b, c, d);
    150     cc.bextr(c, d, a);
    151     cc.blsi(a, b);
    152     cc.blsi(b, c);
    153     cc.blsi(c, d);
    154     cc.blsmsk(a, b);
    155     cc.blsmsk(b, c);
    156     cc.blsmsk(c, d);
    157     cc.blsr(a, b);
    158     cc.blsr(b, c);
    159     cc.blsr(c, d);
    160     cc.bzhi(a, b, c);
    161     cc.bzhi(b, c, d);
    162     cc.bzhi(c, d, a);
    163     cc.lzcnt(a, b);
    164     cc.lzcnt(b, c);
    165     cc.lzcnt(c, d);
    166     cc.pdep(a, b, c);
    167     cc.pdep(b, c, d);
    168     cc.pdep(c, d, a);
    169     cc.pext(a, b, c);
    170     cc.pext(b, c, d);
    171     cc.pext(c, d, a);
    172     cc.popcnt(a, b);
    173     cc.popcnt(b, c);
    174     cc.popcnt(c, d);
    175     cc.rorx(a, b, 8);
    176     cc.rorx(b, c, 8);
    177     cc.rorx(c, d, 8);
    178     cc.sarx(a, b, c);
    179     cc.sarx(b, c, d);
    180     cc.sarx(c, d, a);
    181     cc.shlx(a, b, c);
    182     cc.shlx(b, c, d);
    183     cc.shlx(c, d, a);
    184     cc.shrx(a, b, c);
    185     cc.shrx(b, c, d);
    186     cc.shrx(c, d, a);
    187     cc.tzcnt(a, b);
    188     cc.tzcnt(b, c);
    189     cc.tzcnt(c, d);
    190   }
    191   else {
    192     uint32_t register_size = cc.register_size();
    193     x86::Mem m = x86::ptr(c, 0, register_size);
    194     x86::Mem m8 = x86::byte_ptr(c);
    195 
    196     cc.adc(a, m);
    197     cc.adc(b, m);
    198     cc.adc(c, m);
    199     cc.add(a, m);
    200     cc.add(b, m);
    201     cc.add(c, m);
    202     cc.and_(a, m);
    203     cc.and_(b, m);
    204     cc.and_(c, m);
    205     cc.bsf(a, m);
    206     cc.bsf(b, m);
    207     cc.bsf(c, m);
    208     cc.bsr(a, m);
    209     cc.bsr(b, m);
    210     cc.bsr(c, m);
    211     cc.bt(m, a);
    212     cc.bt(m, b);
    213     cc.bt(m, c);
    214     cc.btc(m, a);
    215     cc.btc(m, b);
    216     cc.btc(m, c);
    217     cc.btr(m, a);
    218     cc.btr(m, b);
    219     cc.btr(m, c);
    220     cc.bts(m, a);
    221     cc.bts(m, b);
    222     cc.bts(m, c);
    223     cc.cmp(a, m);
    224     cc.cmovc(a, m);
    225     cc.cmp(b, m);
    226     cc.cmovc(b, m);
    227     cc.cmp(c, m);
    228     cc.cmovc(c, m);
    229     cc.dec(m);
    230     cc.movsx(a, m8);
    231     cc.movsx(b, m8);
    232     cc.movsx(c, m8);
    233     cc.movzx(a, m8);
    234     cc.movzx(b, m8);
    235     cc.movzx(c, m8);
    236     cc.neg(m);
    237     cc.not_(m);
    238     cc.or_(a, m);
    239     cc.or_(b, m);
    240     cc.or_(c, m);
    241     cc.sbb(a, m);
    242     cc.sbb(b, m);
    243     cc.sbb(c, m);
    244     cc.sub(a, m);
    245     cc.sub(b, m);
    246     cc.sub(c, m);
    247     cc.test(m, a);
    248     cc.test(m, b);
    249     cc.test(m, c);
    250     cc.xchg(a, m);
    251     cc.xchg(b, m);
    252     cc.xchg(c, m);
    253     cc.xor_(a, m);
    254     cc.xor_(b, m);
    255     cc.xor_(c, m);
    256 
    257     cc.rcl(m, c.r8_lo());
    258     cc.rcr(m, c.r8_lo());
    259     cc.rol(m, c.r8_lo());
    260     cc.ror(m, c.r8_lo());
    261     cc.shl(m, c.r8_lo());
    262     cc.shr(m, c.r8_lo());
    263     cc.sar(m, c.r8_lo());
    264     cc.shld(m, b, c.r8_lo());
    265     cc.shld(m, d, c.r8_lo());
    266     cc.shld(m, a, c.r8_lo());
    267     cc.shrd(m, b, c.r8_lo());
    268     cc.shrd(m, d, c.r8_lo());
    269     cc.shrd(m, a, c.r8_lo());
    270 
    271     cc.adcx(a, m);
    272     cc.adox(a, m);
    273     cc.adcx(b, m);
    274     cc.adox(b, m);
    275     cc.adcx(c, m);
    276     cc.adox(c, m);
    277     cc.andn(a, b, m);
    278     cc.andn(b, c, m);
    279     cc.andn(c, d, m);
    280     cc.bextr(a, m, c);
    281     cc.bextr(b, m, d);
    282     cc.bextr(c, m, a);
    283     cc.blsi(a, m);
    284     cc.blsi(b, m);
    285     cc.blsi(c, m);
    286     cc.blsmsk(a, m);
    287     cc.blsmsk(b, m);
    288     cc.blsmsk(c, m);
    289     cc.blsr(a, m);
    290     cc.blsr(b, m);
    291     cc.blsr(c, m);
    292     cc.bzhi(a, m, c);
    293     cc.bzhi(b, m, d);
    294     cc.bzhi(c, m, a);
    295     cc.lzcnt(a, m);
    296     cc.lzcnt(b, m);
    297     cc.lzcnt(c, m);
    298     cc.pdep(a, b, m);
    299     cc.pdep(b, c, m);
    300     cc.pdep(c, d, m);
    301     cc.pext(a, b, m);
    302     cc.pext(b, c, m);
    303     cc.pext(c, d, m);
    304     cc.popcnt(a, m);
    305     cc.popcnt(b, m);
    306     cc.popcnt(c, m);
    307     cc.rorx(a, m, 8);
    308     cc.rorx(b, m, 8);
    309     cc.rorx(c, m, 8);
    310     cc.sarx(a, m, c);
    311     cc.sarx(b, m, d);
    312     cc.sarx(c, m, a);
    313     cc.shlx(a, m, c);
    314     cc.shlx(b, m, d);
    315     cc.shlx(c, m, a);
    316     cc.shrx(a, m, c);
    317     cc.shrx(b, m, d);
    318     cc.shrx(c, m, a);
    319     cc.tzcnt(a, m);
    320     cc.tzcnt(b, m);
    321     cc.tzcnt(c, m);
    322   }
    323 }
    324 
    325 static void generate_empty_function(BaseEmitter& emitter, bool emit_prolog_epilog) {
    326   using namespace asmjit::x86;
    327 
    328 #ifndef ASMJIT_NO_COMPILER
    329   if (emitter.is_compiler()) {
    330     Compiler& cc = *emitter.as<Compiler>();
    331 
    332     Gp rv = cc.new_gp32("rv");
    333 
    334     cc.add_func(FuncSignature::build<uint32_t>());
    335     cc.mov(rv, 0);
    336     cc.ret(rv);
    337     cc.end_func();
    338 
    339     return;
    340   }
    341 #endif
    342 
    343 #ifndef ASMJIT_NO_BUILDER
    344   if (emitter.is_builder()) {
    345     Builder& cc = *emitter.as<Builder>();
    346 
    347     Gp rv = eax;
    348 
    349     if (emit_prolog_epilog) {
    350       FuncDetail func;
    351       func.init(FuncSignature::build<uint32_t>(), cc.environment());
    352 
    353       FuncFrame frame;
    354       frame.init(func);
    355       frame.add_dirty_regs(rv);
    356       frame.finalize();
    357 
    358       cc.emit_prolog(frame);
    359       cc.mov(rv, 0);
    360       cc.emit_epilog(frame);
    361     }
    362     else {
    363       cc.mov(rv, 0);
    364       cc.ret();
    365     }
    366 
    367     return;
    368   }
    369 #endif
    370 
    371   if (emitter.is_assembler()) {
    372     Assembler& cc = *emitter.as<Assembler>();
    373 
    374     Gp rv = eax;
    375 
    376     if (emit_prolog_epilog) {
    377       FuncDetail func;
    378       func.init(FuncSignature::build<uint32_t>(), cc.environment());
    379 
    380       FuncFrame frame;
    381       frame.init(func);
    382       frame.add_dirty_regs(rv);
    383       frame.finalize();
    384 
    385       cc.emit_prolog(frame);
    386       cc.mov(rv, 0);
    387       cc.emit_epilog(frame);
    388     }
    389     else {
    390       cc.mov(rv, 0);
    391       cc.ret();
    392     }
    393 
    394     return;
    395   }
    396 }
    397 
    398 static void generate_n_ops_sequence(BaseEmitter& emitter, uint32_t ops, bool emit_prolog_epilog) {
    399   using namespace asmjit::x86;
    400 
    401 #ifndef ASMJIT_NO_COMPILER
    402   if (emitter.is_compiler()) {
    403     Compiler& cc = *emitter.as<Compiler>();
    404 
    405     Gp ra = cc.new_gp32("ra");
    406     Gp rb = cc.new_gp32("rb");
    407     Gp rc = cc.new_gp32("rc");
    408     Gp rd = cc.new_gp32("rd");
    409 
    410     FuncNode* f = cc.add_func(FuncSignature::build<uint32_t, uint32_t, uint32_t, uint32_t, uint32_t>());
    411     f->set_arg(0, ra);
    412     f->set_arg(1, rb);
    413     f->set_arg(2, rc);
    414     f->set_arg(3, rd);
    415 
    416     for (uint32_t i = 0; i < ops; i += 4) {
    417       cc.add(ra, rb);
    418       cc.imul(ra, rc);
    419       cc.sub(ra, rd);
    420       cc.imul(ra, rc);
    421     }
    422 
    423     cc.ret(ra);
    424     cc.end_func();
    425 
    426     return;
    427   }
    428 #endif
    429 
    430 #ifndef ASMJIT_NO_BUILDER
    431   if (emitter.is_builder()) {
    432     Builder& cc = *emitter.as<Builder>();
    433 
    434     Gp ra = eax;
    435     Gp rb = ebx;
    436     Gp rc = ecx;
    437     Gp rd = edx;
    438 
    439     if (emit_prolog_epilog) {
    440       FuncDetail func;
    441       func.init(FuncSignature::build<uint32_t, uint32_t, uint32_t, uint32_t, uint32_t>(), cc.environment());
    442 
    443       FuncFrame frame;
    444       frame.init(func);
    445       frame.add_dirty_regs(ra, rb, rc, rd);
    446       frame.finalize();
    447 
    448       cc.emit_prolog(frame);
    449       for (uint32_t i = 0; i < ops; i += 4) {
    450         cc.add(ra, rb);
    451         cc.imul(ra, rc);
    452         cc.sub(ra, rd);
    453         cc.imul(ra, rc);
    454       }
    455       cc.emit_epilog(frame);
    456     }
    457     else {
    458       for (uint32_t i = 0; i < ops; i += 4) {
    459         cc.add(ra, rb);
    460         cc.imul(ra, rc);
    461         cc.sub(ra, rd);
    462         cc.imul(ra, rc);
    463       }
    464       cc.ret();
    465     }
    466 
    467     return;
    468   }
    469 #endif
    470 
    471   if (emitter.is_assembler()) {
    472     Assembler& cc = *emitter.as<Assembler>();
    473 
    474     Gp ra = eax;
    475     Gp rb = ebx;
    476     Gp rc = ecx;
    477     Gp rd = edx;
    478 
    479     if (emit_prolog_epilog) {
    480       FuncDetail func;
    481       func.init(FuncSignature::build<uint32_t, uint32_t, uint32_t, uint32_t, uint32_t>(), cc.environment());
    482 
    483       FuncFrame frame;
    484       frame.init(func);
    485       frame.add_dirty_regs(ra, rb, rc, rd);
    486       frame.finalize();
    487 
    488       cc.emit_prolog(frame);
    489       for (uint32_t i = 0; i < ops; i += 4) {
    490         cc.add(ra, rb);
    491         cc.imul(ra, rc);
    492         cc.sub(ra, rd);
    493         cc.imul(ra, rc);
    494       }
    495       cc.emit_epilog(frame);
    496     }
    497     else {
    498       for (uint32_t i = 0; i < ops; i += 4) {
    499         cc.add(ra, rb);
    500         cc.imul(ra, rc);
    501         cc.sub(ra, rd);
    502         cc.imul(ra, rc);
    503       }
    504       cc.ret();
    505     }
    506 
    507     return;
    508   }
    509 }
    510 
    511 static void generate_gp_sequence(BaseEmitter& emitter, InstForm form, bool emit_prolog_epilog) {
    512   using namespace asmjit::x86;
    513 
    514 #ifndef ASMJIT_NO_COMPILER
    515   if (emitter.is_compiler()) {
    516     Compiler& cc = *emitter.as<Compiler>();
    517 
    518     Gp a = cc.new_gp_ptr("a");
    519     Gp b = cc.new_gp_ptr("b");
    520     Gp c = cc.new_gp_ptr("c");
    521     Gp d = cc.new_gp_ptr("d");
    522 
    523     cc.add_func(FuncSignature::build<void>());
    524     generate_gp_sequence_internal(cc, form, a, b, c, d);
    525     cc.end_func();
    526 
    527     return;
    528   }
    529 #endif
    530 
    531 #ifndef ASMJIT_NO_BUILDER
    532   if (emitter.is_builder()) {
    533     Builder& cc = *emitter.as<Builder>();
    534 
    535     x86::Gp a = cc.zax();
    536     x86::Gp b = cc.zbx();
    537     x86::Gp c = cc.zcx();
    538     x86::Gp d = cc.zdx();
    539 
    540     if (emit_prolog_epilog) {
    541       FuncDetail func;
    542       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
    543 
    544       FuncFrame frame;
    545       frame.init(func);
    546       frame.add_dirty_regs(a, b, c, d);
    547       frame.finalize();
    548 
    549       cc.emit_prolog(frame);
    550       generate_gp_sequence_internal(cc, form, a, b, c, d);
    551       cc.emit_epilog(frame);
    552     }
    553     else {
    554       generate_gp_sequence_internal(cc, form, a, b, c, d);
    555     }
    556 
    557     return;
    558   }
    559 #endif
    560 
    561   if (emitter.is_assembler()) {
    562     Assembler& cc = *emitter.as<Assembler>();
    563 
    564     x86::Gp a = cc.zax();
    565     x86::Gp b = cc.zbx();
    566     x86::Gp c = cc.zcx();
    567     x86::Gp d = cc.zdx();
    568 
    569     if (emit_prolog_epilog) {
    570       FuncDetail func;
    571       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
    572 
    573       FuncFrame frame;
    574       frame.init(func);
    575       frame.add_dirty_regs(a, b, c, d);
    576       frame.finalize();
    577 
    578       cc.emit_prolog(frame);
    579       generate_gp_sequence_internal(cc, form, a, b, c, d);
    580       cc.emit_epilog(frame);
    581     }
    582     else {
    583       generate_gp_sequence_internal(cc, form, a, b, c, d);
    584     }
    585 
    586     return;
    587   }
    588 }
    589 
    590 // Generates a long sequence of SSE instructions using only registers.
    591 template<typename Emitter>
    592 static void generate_sse_sequenceInternal(
    593   Emitter& cc,
    594   InstForm form,
    595   const x86::Gp& gp,
    596   const x86::Vec& xmm_a, const x86::Vec& xmm_b, const x86::Vec& xmm_c, const x86::Vec& xmm_d) {
    597 
    598   x86::Gp gpd = gp.r32();
    599   x86::Gp gpq = gp.r64();
    600   x86::Gp gpz = cc.is_32bit() ? gpd : gpq;
    601 
    602   cc.xor_(gpd, gpd);
    603   cc.xorps(xmm_a, xmm_a);
    604   cc.xorps(xmm_b, xmm_b);
    605   cc.xorps(xmm_c, xmm_c);
    606   cc.xorps(xmm_d, xmm_d);
    607 
    608   if (form == InstForm::kReg) {
    609     // SSE.
    610     cc.addps(xmm_a, xmm_b);
    611     cc.addss(xmm_a, xmm_b);
    612     cc.andnps(xmm_a, xmm_b);
    613     cc.andps(xmm_a, xmm_b);
    614     cc.cmpps(xmm_a, xmm_b, 0);
    615     cc.cmpss(xmm_a, xmm_b, 0);
    616     cc.comiss(xmm_a, xmm_b);
    617     cc.cvtsi2ss(xmm_a, gpd);
    618     cc.cvtsi2ss(xmm_a, gpz);
    619     cc.cvtss2si(gpd, xmm_b);
    620     cc.cvtss2si(gpz, xmm_b);
    621     cc.cvttss2si(gpd, xmm_b);
    622     cc.cvttss2si(gpz, xmm_b);
    623     cc.divps(xmm_a, xmm_b);
    624     cc.divss(xmm_a, xmm_b);
    625     cc.maxps(xmm_a, xmm_b);
    626     cc.maxss(xmm_a, xmm_b);
    627     cc.minps(xmm_a, xmm_b);
    628     cc.minss(xmm_a, xmm_b);
    629     cc.movaps(xmm_a, xmm_b);
    630     cc.movd(gpd, xmm_b);
    631     cc.movd(xmm_a, gpd);
    632     cc.movq(xmm_a, xmm_b);
    633     cc.movhlps(xmm_a, xmm_b);
    634     cc.movlhps(xmm_a, xmm_b);
    635     cc.movups(xmm_a, xmm_b);
    636     cc.mulps(xmm_a, xmm_b);
    637     cc.mulss(xmm_a, xmm_b);
    638     cc.orps(xmm_a, xmm_b);
    639     cc.rcpps(xmm_a, xmm_b);
    640     cc.rcpss(xmm_a, xmm_b);
    641     cc.psadbw(xmm_a, xmm_b);
    642     cc.rsqrtps(xmm_a, xmm_b);
    643     cc.rsqrtss(xmm_a, xmm_b);
    644     cc.sfence();
    645     cc.shufps(xmm_a, xmm_b, 0);
    646     cc.sqrtps(xmm_a, xmm_b);
    647     cc.sqrtss(xmm_a, xmm_b);
    648     cc.subps(xmm_a, xmm_b);
    649     cc.subss(xmm_a, xmm_b);
    650     cc.ucomiss(xmm_a, xmm_b);
    651     cc.unpckhps(xmm_a, xmm_b);
    652     cc.unpcklps(xmm_a, xmm_b);
    653     cc.xorps(xmm_a, xmm_b);
    654 
    655     // SSE2.
    656     cc.addpd(xmm_a, xmm_b);
    657     cc.addsd(xmm_a, xmm_b);
    658     cc.andnpd(xmm_a, xmm_b);
    659     cc.andpd(xmm_a, xmm_b);
    660     cc.cmppd(xmm_a, xmm_b, 0);
    661     cc.cmpsd(xmm_a, xmm_b, 0);
    662     cc.comisd(xmm_a, xmm_b);
    663     cc.cvtdq2pd(xmm_a, xmm_b);
    664     cc.cvtdq2ps(xmm_a, xmm_b);
    665     cc.cvtpd2dq(xmm_a, xmm_b);
    666     cc.cvtpd2ps(xmm_a, xmm_b);
    667     cc.cvtps2dq(xmm_a, xmm_b);
    668     cc.cvtps2pd(xmm_a, xmm_b);
    669     cc.cvtsd2si(gpd, xmm_b);
    670     cc.cvtsd2si(gpz, xmm_b);
    671     cc.cvtsd2ss(xmm_a, xmm_b);
    672     cc.cvtsi2sd(xmm_a, gpd);
    673     cc.cvtsi2sd(xmm_a, gpz);
    674     cc.cvtss2sd(xmm_a, xmm_b);
    675     cc.cvtss2si(gpd, xmm_b);
    676     cc.cvtss2si(gpz, xmm_b);
    677     cc.cvttpd2dq(xmm_a, xmm_b);
    678     cc.cvttps2dq(xmm_a, xmm_b);
    679     cc.cvttsd2si(gpd, xmm_b);
    680     cc.cvttsd2si(gpz, xmm_b);
    681     cc.divpd(xmm_a, xmm_b);
    682     cc.divsd(xmm_a, xmm_b);
    683     cc.maxpd(xmm_a, xmm_b);
    684     cc.maxsd(xmm_a, xmm_b);
    685     cc.minpd(xmm_a, xmm_b);
    686     cc.minsd(xmm_a, xmm_b);
    687     cc.movdqa(xmm_a, xmm_b);
    688     cc.movdqu(xmm_a, xmm_b);
    689     cc.movmskps(gpd, xmm_b);
    690     cc.movmskpd(gpd, xmm_b);
    691     cc.movsd(xmm_a, xmm_b);
    692     cc.mulpd(xmm_a, xmm_b);
    693     cc.mulsd(xmm_a, xmm_b);
    694     cc.orpd(xmm_a, xmm_b);
    695     cc.packsswb(xmm_a, xmm_b);
    696     cc.packssdw(xmm_a, xmm_b);
    697     cc.packuswb(xmm_a, xmm_b);
    698     cc.paddb(xmm_a, xmm_b);
    699     cc.paddw(xmm_a, xmm_b);
    700     cc.paddd(xmm_a, xmm_b);
    701     cc.paddq(xmm_a, xmm_b);
    702     cc.paddsb(xmm_a, xmm_b);
    703     cc.paddsw(xmm_a, xmm_b);
    704     cc.paddusb(xmm_a, xmm_b);
    705     cc.paddusw(xmm_a, xmm_b);
    706     cc.pand(xmm_a, xmm_b);
    707     cc.pandn(xmm_a, xmm_b);
    708     cc.pavgb(xmm_a, xmm_b);
    709     cc.pavgw(xmm_a, xmm_b);
    710     cc.pcmpeqb(xmm_a, xmm_b);
    711     cc.pcmpeqw(xmm_a, xmm_b);
    712     cc.pcmpeqd(xmm_a, xmm_b);
    713     cc.pcmpgtb(xmm_a, xmm_b);
    714     cc.pcmpgtw(xmm_a, xmm_b);
    715     cc.pcmpgtd(xmm_a, xmm_b);
    716     cc.pmaxsw(xmm_a, xmm_b);
    717     cc.pmaxub(xmm_a, xmm_b);
    718     cc.pminsw(xmm_a, xmm_b);
    719     cc.pminub(xmm_a, xmm_b);
    720     cc.pmovmskb(gpd, xmm_b);
    721     cc.pmulhw(xmm_a, xmm_b);
    722     cc.pmulhuw(xmm_a, xmm_b);
    723     cc.pmullw(xmm_a, xmm_b);
    724     cc.pmuludq(xmm_a, xmm_b);
    725     cc.por(xmm_a, xmm_b);
    726     cc.pslld(xmm_a, xmm_b);
    727     cc.pslld(xmm_a, 0);
    728     cc.psllq(xmm_a, xmm_b);
    729     cc.psllq(xmm_a, 0);
    730     cc.psllw(xmm_a, xmm_b);
    731     cc.psllw(xmm_a, 0);
    732     cc.pslldq(xmm_a, 0);
    733     cc.psrad(xmm_a, xmm_b);
    734     cc.psrad(xmm_a, 0);
    735     cc.psraw(xmm_a, xmm_b);
    736     cc.psraw(xmm_a, 0);
    737     cc.psubb(xmm_a, xmm_b);
    738     cc.psubw(xmm_a, xmm_b);
    739     cc.psubd(xmm_a, xmm_b);
    740     cc.psubq(xmm_a, xmm_b);
    741     cc.pmaddwd(xmm_a, xmm_b);
    742     cc.pshufd(xmm_a, xmm_b, 0);
    743     cc.pshufhw(xmm_a, xmm_b, 0);
    744     cc.pshuflw(xmm_a, xmm_b, 0);
    745     cc.psrld(xmm_a, xmm_b);
    746     cc.psrld(xmm_a, 0);
    747     cc.psrlq(xmm_a, xmm_b);
    748     cc.psrlq(xmm_a, 0);
    749     cc.psrldq(xmm_a, 0);
    750     cc.psrlw(xmm_a, xmm_b);
    751     cc.psrlw(xmm_a, 0);
    752     cc.psubsb(xmm_a, xmm_b);
    753     cc.psubsw(xmm_a, xmm_b);
    754     cc.psubusb(xmm_a, xmm_b);
    755     cc.psubusw(xmm_a, xmm_b);
    756     cc.punpckhbw(xmm_a, xmm_b);
    757     cc.punpckhwd(xmm_a, xmm_b);
    758     cc.punpckhdq(xmm_a, xmm_b);
    759     cc.punpckhqdq(xmm_a, xmm_b);
    760     cc.punpcklbw(xmm_a, xmm_b);
    761     cc.punpcklwd(xmm_a, xmm_b);
    762     cc.punpckldq(xmm_a, xmm_b);
    763     cc.punpcklqdq(xmm_a, xmm_b);
    764     cc.pxor(xmm_a, xmm_b);
    765     cc.sqrtpd(xmm_a, xmm_b);
    766     cc.sqrtsd(xmm_a, xmm_b);
    767     cc.subpd(xmm_a, xmm_b);
    768     cc.subsd(xmm_a, xmm_b);
    769     cc.ucomisd(xmm_a, xmm_b);
    770     cc.unpckhpd(xmm_a, xmm_b);
    771     cc.unpcklpd(xmm_a, xmm_b);
    772     cc.xorpd(xmm_a, xmm_b);
    773 
    774     // SSE3.
    775     cc.addsubpd(xmm_a, xmm_b);
    776     cc.addsubps(xmm_a, xmm_b);
    777     cc.haddpd(xmm_a, xmm_b);
    778     cc.haddps(xmm_a, xmm_b);
    779     cc.hsubpd(xmm_a, xmm_b);
    780     cc.hsubps(xmm_a, xmm_b);
    781     cc.movddup(xmm_a, xmm_b);
    782     cc.movshdup(xmm_a, xmm_b);
    783     cc.movsldup(xmm_a, xmm_b);
    784 
    785     // SSSE3.
    786     cc.psignb(xmm_a, xmm_b);
    787     cc.psignw(xmm_a, xmm_b);
    788     cc.psignd(xmm_a, xmm_b);
    789     cc.phaddw(xmm_a, xmm_b);
    790     cc.phaddd(xmm_a, xmm_b);
    791     cc.phaddsw(xmm_a, xmm_b);
    792     cc.phsubw(xmm_a, xmm_b);
    793     cc.phsubd(xmm_a, xmm_b);
    794     cc.phsubsw(xmm_a, xmm_b);
    795     cc.pmaddubsw(xmm_a, xmm_b);
    796     cc.pabsb(xmm_a, xmm_b);
    797     cc.pabsw(xmm_a, xmm_b);
    798     cc.pabsd(xmm_a, xmm_b);
    799     cc.pmulhrsw(xmm_a, xmm_b);
    800     cc.pshufb(xmm_a, xmm_b);
    801     cc.palignr(xmm_a, xmm_b, 0);
    802 
    803     // SSE4.1.
    804     cc.blendpd(xmm_a, xmm_b, 0);
    805     cc.blendps(xmm_a, xmm_b, 0);
    806     cc.blendvpd(xmm_a, xmm_b, xmm_a);
    807     cc.blendvps(xmm_a, xmm_b, xmm_a);
    808 
    809     cc.dppd(xmm_a, xmm_b, 0);
    810     cc.dpps(xmm_a, xmm_b, 0);
    811     cc.extractps(gpd, xmm_b, 0);
    812     cc.insertps(xmm_a, xmm_b, 0);
    813     cc.mpsadbw(xmm_a, xmm_b, 0);
    814     cc.packusdw(xmm_a, xmm_b);
    815     cc.pblendvb(xmm_a, xmm_b, xmm_a);
    816     cc.pblendw(xmm_a, xmm_b, 0);
    817     cc.pcmpeqq(xmm_a, xmm_b);
    818     cc.pextrb(gpd, xmm_b, 0);
    819     cc.pextrd(gpd, xmm_b, 0);
    820     if (cc.is_64bit()) cc.pextrq(gpq, xmm_b, 0);
    821     cc.pextrw(gpd, xmm_b, 0);
    822     cc.phminposuw(xmm_a, xmm_b);
    823     cc.pinsrb(xmm_a, gpd, 0);
    824     cc.pinsrd(xmm_a, gpd, 0);
    825     cc.pinsrw(xmm_a, gpd, 0);
    826     cc.pmaxuw(xmm_a, xmm_b);
    827     cc.pmaxsb(xmm_a, xmm_b);
    828     cc.pmaxsd(xmm_a, xmm_b);
    829     cc.pmaxud(xmm_a, xmm_b);
    830     cc.pminsb(xmm_a, xmm_b);
    831     cc.pminuw(xmm_a, xmm_b);
    832     cc.pminud(xmm_a, xmm_b);
    833     cc.pminsd(xmm_a, xmm_b);
    834     cc.pmovsxbw(xmm_a, xmm_b);
    835     cc.pmovsxbd(xmm_a, xmm_b);
    836     cc.pmovsxbq(xmm_a, xmm_b);
    837     cc.pmovsxwd(xmm_a, xmm_b);
    838     cc.pmovsxwq(xmm_a, xmm_b);
    839     cc.pmovsxdq(xmm_a, xmm_b);
    840     cc.pmovzxbw(xmm_a, xmm_b);
    841     cc.pmovzxbd(xmm_a, xmm_b);
    842     cc.pmovzxbq(xmm_a, xmm_b);
    843     cc.pmovzxwd(xmm_a, xmm_b);
    844     cc.pmovzxwq(xmm_a, xmm_b);
    845     cc.pmovzxdq(xmm_a, xmm_b);
    846     cc.pmuldq(xmm_a, xmm_b);
    847     cc.pmulld(xmm_a, xmm_b);
    848     cc.ptest(xmm_a, xmm_b);
    849     cc.roundps(xmm_a, xmm_b, 0);
    850     cc.roundss(xmm_a, xmm_b, 0);
    851     cc.roundpd(xmm_a, xmm_b, 0);
    852     cc.roundsd(xmm_a, xmm_b, 0);
    853   }
    854   else {
    855     x86::Mem m = x86::ptr(gpz);
    856 
    857     cc.addps(xmm_a, m);
    858     cc.addss(xmm_a, m);
    859     cc.andnps(xmm_a, m);
    860     cc.andps(xmm_a, m);
    861     cc.cmpps(xmm_a, m, 0);
    862     cc.cmpss(xmm_a, m, 0);
    863     cc.comiss(xmm_a, m);
    864     cc.cvtpi2ps(xmm_a, m);
    865     cc.cvtsi2ss(xmm_a, m);
    866     cc.cvtss2si(gpd, m);
    867     cc.cvtss2si(gpz, m);
    868     cc.cvttss2si(gpd, m);
    869     cc.cvttss2si(gpz, m);
    870     cc.divps(xmm_a, m);
    871     cc.divss(xmm_a, m);
    872     cc.maxps(xmm_a, m);
    873     cc.maxss(xmm_a, m);
    874     cc.minps(xmm_a, m);
    875     cc.minss(xmm_a, m);
    876     cc.movaps(xmm_a, m);
    877     cc.movaps(m, xmm_b);
    878     cc.movd(m, xmm_b);
    879     cc.movd(xmm_a, m);
    880     cc.movq(m, xmm_b);
    881     cc.movq(xmm_a, m);
    882     cc.movhps(xmm_a, m);
    883     cc.movhps(m, xmm_b);
    884     cc.movlps(xmm_a, m);
    885     cc.movlps(m, xmm_b);
    886     cc.movntps(m, xmm_b);
    887     cc.movss(xmm_a, m);
    888     cc.movss(m, xmm_b);
    889     cc.movups(xmm_a, m);
    890     cc.movups(m, xmm_b);
    891     cc.mulps(xmm_a, m);
    892     cc.mulss(xmm_a, m);
    893     cc.orps(xmm_a, m);
    894     cc.rcpps(xmm_a, m);
    895     cc.rcpss(xmm_a, m);
    896     cc.psadbw(xmm_a, m);
    897     cc.rsqrtps(xmm_a, m);
    898     cc.rsqrtss(xmm_a, m);
    899     cc.shufps(xmm_a, m, 0);
    900     cc.sqrtps(xmm_a, m);
    901     cc.sqrtss(xmm_a, m);
    902     cc.stmxcsr(m);
    903     cc.subps(xmm_a, m);
    904     cc.subss(xmm_a, m);
    905     cc.ucomiss(xmm_a, m);
    906     cc.unpckhps(xmm_a, m);
    907     cc.unpcklps(xmm_a, m);
    908     cc.xorps(xmm_a, m);
    909 
    910     // SSE2.
    911     cc.addpd(xmm_a, m);
    912     cc.addsd(xmm_a, m);
    913     cc.andnpd(xmm_a, m);
    914     cc.andpd(xmm_a, m);
    915     cc.cmppd(xmm_a, m, 0);
    916     cc.cmpsd(xmm_a, m, 0);
    917     cc.comisd(xmm_a, m);
    918     cc.cvtdq2pd(xmm_a, m);
    919     cc.cvtdq2ps(xmm_a, m);
    920     cc.cvtpd2dq(xmm_a, m);
    921     cc.cvtpd2ps(xmm_a, m);
    922     cc.cvtpi2pd(xmm_a, m);
    923     cc.cvtps2dq(xmm_a, m);
    924     cc.cvtps2pd(xmm_a, m);
    925     cc.cvtsd2si(gpd, m);
    926     cc.cvtsd2si(gpz, m);
    927     cc.cvtsd2ss(xmm_a, m);
    928     cc.cvtsi2sd(xmm_a, m);
    929     cc.cvtss2sd(xmm_a, m);
    930     cc.cvtss2si(gpd, m);
    931     cc.cvtss2si(gpz, m);
    932     cc.cvttpd2dq(xmm_a, m);
    933     cc.cvttps2dq(xmm_a, m);
    934     cc.cvttsd2si(gpd, m);
    935     cc.cvttsd2si(gpz, m);
    936     cc.divpd(xmm_a, m);
    937     cc.divsd(xmm_a, m);
    938     cc.maxpd(xmm_a, m);
    939     cc.maxsd(xmm_a, m);
    940     cc.minpd(xmm_a, m);
    941     cc.minsd(xmm_a, m);
    942     cc.movdqa(xmm_a, m);
    943     cc.movdqa(m, xmm_b);
    944     cc.movdqu(xmm_a, m);
    945     cc.movdqu(m, xmm_b);
    946     cc.movsd(xmm_a, m);
    947     cc.movsd(m, xmm_b);
    948     cc.movapd(xmm_a, m);
    949     cc.movapd(m, xmm_b);
    950     cc.movhpd(xmm_a, m);
    951     cc.movhpd(m, xmm_b);
    952     cc.movlpd(xmm_a, m);
    953     cc.movlpd(m, xmm_b);
    954     cc.movntdq(m, xmm_b);
    955     cc.movntpd(m, xmm_b);
    956     cc.movupd(xmm_a, m);
    957     cc.movupd(m, xmm_b);
    958     cc.mulpd(xmm_a, m);
    959     cc.mulsd(xmm_a, m);
    960     cc.orpd(xmm_a, m);
    961     cc.packsswb(xmm_a, m);
    962     cc.packssdw(xmm_a, m);
    963     cc.packuswb(xmm_a, m);
    964     cc.paddb(xmm_a, m);
    965     cc.paddw(xmm_a, m);
    966     cc.paddd(xmm_a, m);
    967     cc.paddq(xmm_a, m);
    968     cc.paddsb(xmm_a, m);
    969     cc.paddsw(xmm_a, m);
    970     cc.paddusb(xmm_a, m);
    971     cc.paddusw(xmm_a, m);
    972     cc.pand(xmm_a, m);
    973     cc.pandn(xmm_a, m);
    974     cc.pavgb(xmm_a, m);
    975     cc.pavgw(xmm_a, m);
    976     cc.pcmpeqb(xmm_a, m);
    977     cc.pcmpeqw(xmm_a, m);
    978     cc.pcmpeqd(xmm_a, m);
    979     cc.pcmpgtb(xmm_a, m);
    980     cc.pcmpgtw(xmm_a, m);
    981     cc.pcmpgtd(xmm_a, m);
    982     cc.pmaxsw(xmm_a, m);
    983     cc.pmaxub(xmm_a, m);
    984     cc.pminsw(xmm_a, m);
    985     cc.pminub(xmm_a, m);
    986     cc.pmulhw(xmm_a, m);
    987     cc.pmulhuw(xmm_a, m);
    988     cc.pmullw(xmm_a, m);
    989     cc.pmuludq(xmm_a, m);
    990     cc.por(xmm_a, m);
    991     cc.pslld(xmm_a, m);
    992     cc.psllq(xmm_a, m);
    993     cc.psllw(xmm_a, m);
    994     cc.psrad(xmm_a, m);
    995     cc.psraw(xmm_a, m);
    996     cc.psubb(xmm_a, m);
    997     cc.psubw(xmm_a, m);
    998     cc.psubd(xmm_a, m);
    999     cc.psubq(xmm_a, m);
   1000     cc.pmaddwd(xmm_a, m);
   1001     cc.pshufd(xmm_a, m, 0);
   1002     cc.pshufhw(xmm_a, m, 0);
   1003     cc.pshuflw(xmm_a, m, 0);
   1004     cc.psrld(xmm_a, m);
   1005     cc.psrlq(xmm_a, m);
   1006     cc.psrlw(xmm_a, m);
   1007     cc.psubsb(xmm_a, m);
   1008     cc.psubsw(xmm_a, m);
   1009     cc.psubusb(xmm_a, m);
   1010     cc.psubusw(xmm_a, m);
   1011     cc.punpckhbw(xmm_a, m);
   1012     cc.punpckhwd(xmm_a, m);
   1013     cc.punpckhdq(xmm_a, m);
   1014     cc.punpckhqdq(xmm_a, m);
   1015     cc.punpcklbw(xmm_a, m);
   1016     cc.punpcklwd(xmm_a, m);
   1017     cc.punpckldq(xmm_a, m);
   1018     cc.punpcklqdq(xmm_a, m);
   1019     cc.pxor(xmm_a, m);
   1020     cc.sqrtpd(xmm_a, m);
   1021     cc.sqrtsd(xmm_a, m);
   1022     cc.subpd(xmm_a, m);
   1023     cc.subsd(xmm_a, m);
   1024     cc.ucomisd(xmm_a, m);
   1025     cc.unpckhpd(xmm_a, m);
   1026     cc.unpcklpd(xmm_a, m);
   1027     cc.xorpd(xmm_a, m);
   1028 
   1029     // SSE3.
   1030     cc.addsubpd(xmm_a, m);
   1031     cc.addsubps(xmm_a, m);
   1032     cc.haddpd(xmm_a, m);
   1033     cc.haddps(xmm_a, m);
   1034     cc.hsubpd(xmm_a, m);
   1035     cc.hsubps(xmm_a, m);
   1036     cc.lddqu(xmm_a, m);
   1037     cc.movddup(xmm_a, m);
   1038     cc.movshdup(xmm_a, m);
   1039     cc.movsldup(xmm_a, m);
   1040 
   1041     // SSSE3.
   1042     cc.psignb(xmm_a, m);
   1043     cc.psignw(xmm_a, m);
   1044     cc.psignd(xmm_a, m);
   1045     cc.phaddw(xmm_a, m);
   1046     cc.phaddd(xmm_a, m);
   1047     cc.phaddsw(xmm_a, m);
   1048     cc.phsubw(xmm_a, m);
   1049     cc.phsubd(xmm_a, m);
   1050     cc.phsubsw(xmm_a, m);
   1051     cc.pmaddubsw(xmm_a, m);
   1052     cc.pabsb(xmm_a, m);
   1053     cc.pabsw(xmm_a, m);
   1054     cc.pabsd(xmm_a, m);
   1055     cc.pmulhrsw(xmm_a, m);
   1056     cc.pshufb(xmm_a, m);
   1057     cc.palignr(xmm_a, m, 0);
   1058 
   1059     // SSE4.1.
   1060     cc.blendpd(xmm_a, m, 0);
   1061     cc.blendps(xmm_a, m, 0);
   1062     cc.blendvpd(xmm_a, m, xmm_a);
   1063     cc.blendvps(xmm_a, m, xmm_a);
   1064 
   1065     cc.dppd(xmm_a, m, 0);
   1066     cc.dpps(xmm_a, m, 0);
   1067     cc.extractps(m, xmm_b, 0);
   1068     cc.insertps(xmm_a, m, 0);
   1069     cc.movntdqa(xmm_a, m);
   1070     cc.mpsadbw(xmm_a, m, 0);
   1071     cc.packusdw(xmm_a, m);
   1072     cc.pblendvb(xmm_a, m, xmm_a);
   1073     cc.pblendw(xmm_a, m, 0);
   1074     cc.pcmpeqq(xmm_a, m);
   1075     cc.pextrb(m, xmm_b, 0);
   1076     cc.pextrd(m, xmm_b, 0);
   1077     if (cc.is_64bit()) cc.pextrq(m, xmm_b, 0);
   1078     cc.pextrw(m, xmm_b, 0);
   1079     cc.phminposuw(xmm_a, m);
   1080     cc.pinsrb(xmm_a, m, 0);
   1081     cc.pinsrd(xmm_a, m, 0);
   1082     cc.pinsrw(xmm_a, m, 0);
   1083     cc.pmaxuw(xmm_a, m);
   1084     cc.pmaxsb(xmm_a, m);
   1085     cc.pmaxsd(xmm_a, m);
   1086     cc.pmaxud(xmm_a, m);
   1087     cc.pminsb(xmm_a, m);
   1088     cc.pminuw(xmm_a, m);
   1089     cc.pminud(xmm_a, m);
   1090     cc.pminsd(xmm_a, m);
   1091     cc.pmovsxbw(xmm_a, m);
   1092     cc.pmovsxbd(xmm_a, m);
   1093     cc.pmovsxbq(xmm_a, m);
   1094     cc.pmovsxwd(xmm_a, m);
   1095     cc.pmovsxwq(xmm_a, m);
   1096     cc.pmovsxdq(xmm_a, m);
   1097     cc.pmovzxbw(xmm_a, m);
   1098     cc.pmovzxbd(xmm_a, m);
   1099     cc.pmovzxbq(xmm_a, m);
   1100     cc.pmovzxwd(xmm_a, m);
   1101     cc.pmovzxwq(xmm_a, m);
   1102     cc.pmovzxdq(xmm_a, m);
   1103     cc.pmuldq(xmm_a, m);
   1104     cc.pmulld(xmm_a, m);
   1105     cc.ptest(xmm_a, m);
   1106     cc.roundps(xmm_a, m, 0);
   1107     cc.roundss(xmm_a, m, 0);
   1108     cc.roundpd(xmm_a, m, 0);
   1109     cc.roundsd(xmm_a, m, 0);
   1110 
   1111     // SSE4.2.
   1112     cc.pcmpgtq(xmm_a, m);
   1113   }
   1114 }
   1115 
   1116 static void generate_sse_sequence(BaseEmitter& emitter, InstForm form, bool emit_prolog_epilog) {
   1117   using namespace asmjit::x86;
   1118 
   1119 #ifndef ASMJIT_NO_COMPILER
   1120   if (emitter.is_compiler()) {
   1121     Compiler& cc = *emitter.as<Compiler>();
   1122 
   1123     Gp gp = cc.new_gpz("gp");
   1124     Vec a = cc.new_xmm("a");
   1125     Vec b = cc.new_xmm("b");
   1126     Vec c = cc.new_xmm("c");
   1127     Vec d = cc.new_xmm("d");
   1128 
   1129     cc.add_func(FuncSignature::build<void>());
   1130     generate_sse_sequenceInternal(cc, form, gp, a, b, c, d);
   1131     cc.end_func();
   1132 
   1133     return;
   1134   }
   1135 #endif
   1136 
   1137 #ifndef ASMJIT_NO_BUILDER
   1138   if (emitter.is_builder()) {
   1139     Builder& cc = *emitter.as<Builder>();
   1140 
   1141     if (emit_prolog_epilog) {
   1142       FuncDetail func;
   1143       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   1144 
   1145       FuncFrame frame;
   1146       frame.init(func);
   1147       frame.add_dirty_regs(eax, xmm0, xmm1, xmm2, xmm3);
   1148       frame.finalize();
   1149 
   1150       cc.emit_prolog(frame);
   1151       generate_sse_sequenceInternal(cc, form, eax, xmm0, xmm1, xmm2, xmm3);
   1152       cc.emit_epilog(frame);
   1153     }
   1154     else {
   1155       generate_sse_sequenceInternal(cc, form, eax, xmm0, xmm1, xmm2, xmm3);
   1156     }
   1157 
   1158     return;
   1159   }
   1160 #endif
   1161 
   1162   if (emitter.is_assembler()) {
   1163     Assembler& cc = *emitter.as<Assembler>();
   1164 
   1165     if (emit_prolog_epilog) {
   1166       FuncDetail func;
   1167       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   1168 
   1169       FuncFrame frame;
   1170       frame.init(func);
   1171       frame.add_dirty_regs(eax, xmm0, xmm1, xmm2, xmm3);
   1172       frame.finalize();
   1173 
   1174       cc.emit_prolog(frame);
   1175       generate_sse_sequenceInternal(cc, form, eax, xmm0, xmm1, xmm2, xmm3);
   1176       cc.emit_epilog(frame);
   1177     }
   1178     else {
   1179       generate_sse_sequenceInternal(cc, form, eax, xmm0, xmm1, xmm2, xmm3);
   1180     }
   1181 
   1182     return;
   1183   }
   1184 }
   1185 
   1186 // Generates a long sequence of AVX instructions.
   1187 template<typename Emitter>
   1188 static void generate_avx_sequenceInternalRegOnly(
   1189   Emitter& cc,
   1190   const x86::Gp& gp,
   1191   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   1192 
   1193   x86::Gp gpd = gp.r32();
   1194   x86::Gp gpq = gp.r64();
   1195   x86::Gp gpz = cc.is_32bit() ? gpd : gpq;
   1196 
   1197   x86::Vec xmm_a = vec_a.xmm();
   1198   x86::Vec xmm_b = vec_b.xmm();
   1199   x86::Vec xmm_c = vec_c.xmm();
   1200   x86::Vec xmm_d = vec_d.xmm();
   1201 
   1202   x86::Vec ymm_a = vec_a.ymm();
   1203   x86::Vec ymm_b = vec_b.ymm();
   1204   x86::Vec ymm_c = vec_c.ymm();
   1205 
   1206   cc.xor_(gpd, gpd);
   1207   cc.vxorps(xmm_a, xmm_a, xmm_a);
   1208   cc.vxorps(xmm_b, xmm_b, xmm_b);
   1209   cc.vxorps(xmm_c, xmm_c, xmm_c);
   1210   cc.vxorps(xmm_d, xmm_d, xmm_d);
   1211 
   1212   cc.vaddpd(xmm_a, xmm_b, xmm_c);
   1213   cc.vaddpd(ymm_a, ymm_b, ymm_c);
   1214   cc.vaddps(xmm_a, xmm_b, xmm_c);
   1215   cc.vaddps(ymm_a, ymm_b, ymm_c);
   1216   cc.vaddsd(xmm_a, xmm_b, xmm_c);
   1217   cc.vaddss(xmm_a, xmm_b, xmm_c);
   1218   cc.vaddsubpd(xmm_a, xmm_b, xmm_c);
   1219   cc.vaddsubpd(ymm_a, ymm_b, ymm_c);
   1220   cc.vaddsubps(xmm_a, xmm_b, xmm_c);
   1221   cc.vaddsubps(ymm_a, ymm_b, ymm_c);
   1222   cc.vandpd(xmm_a, xmm_b, xmm_c);
   1223   cc.vandpd(ymm_a, ymm_b, ymm_c);
   1224   cc.vandps(xmm_a, xmm_b, xmm_c);
   1225   cc.vandps(ymm_a, ymm_b, ymm_c);
   1226   cc.vandnpd(xmm_a, xmm_b, xmm_c);
   1227   cc.vandnpd(ymm_a, ymm_b, ymm_c);
   1228   cc.vandnps(xmm_a, xmm_b, xmm_c);
   1229   cc.vandnps(ymm_a, ymm_b, ymm_c);
   1230   cc.vblendpd(xmm_a, xmm_b, xmm_c, 0);
   1231   cc.vblendpd(ymm_a, ymm_b, ymm_c, 0);
   1232   cc.vblendps(xmm_a, xmm_b, xmm_c, 0);
   1233   cc.vblendps(ymm_a, ymm_b, ymm_c, 0);
   1234   cc.vblendvpd(xmm_a, xmm_b, xmm_c, xmm_a);
   1235   cc.vblendvpd(ymm_a, ymm_b, ymm_c, ymm_a);
   1236   cc.vcmppd(xmm_a, xmm_b, xmm_c, 0);
   1237   cc.vcmppd(ymm_a, ymm_b, ymm_c, 0);
   1238   cc.vcmpps(xmm_a, xmm_b, xmm_c, 0);
   1239   cc.vcmpps(ymm_a, ymm_b, ymm_c, 0);
   1240   cc.vcmpsd(xmm_a, xmm_b, xmm_c, 0);
   1241   cc.vcmpss(xmm_a, xmm_b, xmm_c, 0);
   1242   cc.vcomisd(xmm_a, xmm_b);
   1243   cc.vcomiss(xmm_a, xmm_b);
   1244   cc.vcvtdq2pd(xmm_a, xmm_b);
   1245   cc.vcvtdq2pd(ymm_a, xmm_b);
   1246   cc.vcvtdq2ps(xmm_a, xmm_b);
   1247   cc.vcvtdq2ps(ymm_a, ymm_b);
   1248   cc.vcvtpd2dq(xmm_a, xmm_b);
   1249   cc.vcvtpd2dq(xmm_a, ymm_b);
   1250   cc.vcvtpd2ps(xmm_a, xmm_b);
   1251   cc.vcvtpd2ps(xmm_a, ymm_b);
   1252   cc.vcvtps2dq(xmm_a, xmm_b);
   1253   cc.vcvtps2dq(ymm_a, ymm_b);
   1254   cc.vcvtps2pd(xmm_a, xmm_b);
   1255   cc.vcvtps2pd(ymm_a, xmm_b);
   1256   cc.vcvtsd2si(gpd, xmm_b);
   1257   cc.vcvtsd2si(gpz, xmm_b);
   1258   cc.vcvtsd2ss(xmm_a, xmm_b, xmm_c);
   1259   cc.vcvtsi2sd(xmm_a, xmm_b, gpd);
   1260   cc.vcvtsi2sd(xmm_a, xmm_b, gpz);
   1261   cc.vcvtsi2ss(xmm_a, xmm_b, gpd);
   1262   cc.vcvtsi2ss(xmm_a, xmm_b, gpz);
   1263   cc.vcvtss2sd(xmm_a, xmm_b, xmm_c);
   1264   cc.vcvtss2si(gpd, xmm_b);
   1265   cc.vcvttpd2dq(xmm_a, xmm_b);
   1266   cc.vcvttpd2dq(xmm_a, ymm_b);
   1267   cc.vcvttps2dq(xmm_a, xmm_b);
   1268   cc.vcvttps2dq(ymm_a, ymm_b);
   1269   cc.vcvttsd2si(gpd, xmm_b);
   1270   cc.vcvttss2si(gpz, xmm_b);
   1271   cc.vdivpd(xmm_a, xmm_b, xmm_c);
   1272   cc.vdivpd(ymm_a, ymm_b, ymm_c);
   1273   cc.vdivps(xmm_a, xmm_b, xmm_c);
   1274   cc.vdivps(ymm_a, ymm_b, ymm_c);
   1275   cc.vdivsd(xmm_a, xmm_b, xmm_c);
   1276   cc.vdivss(xmm_a, xmm_b, xmm_c);
   1277   cc.vdppd(xmm_a, xmm_b, xmm_c, 0);
   1278   cc.vdpps(xmm_a, xmm_b, xmm_c, 0);
   1279   cc.vdpps(ymm_a, ymm_b, ymm_c, 0);
   1280   cc.vextractf128(xmm_a, ymm_b, 0);
   1281   cc.vextractps(gpd, xmm_b, 0);
   1282   cc.vhaddpd(xmm_a, xmm_b, xmm_c);
   1283   cc.vhaddpd(ymm_a, ymm_b, ymm_c);
   1284   cc.vhaddps(xmm_a, xmm_b, xmm_c);
   1285   cc.vhaddps(ymm_a, ymm_b, ymm_c);
   1286   cc.vhsubpd(xmm_a, xmm_b, xmm_c);
   1287   cc.vhsubpd(ymm_a, ymm_b, ymm_c);
   1288   cc.vhsubps(xmm_a, xmm_b, xmm_c);
   1289   cc.vhsubps(ymm_a, ymm_b, ymm_c);
   1290   cc.vinsertf128(ymm_a, ymm_b, xmm_c, 0);
   1291   cc.vinsertps(xmm_a, xmm_b, xmm_c, 0);
   1292   cc.vmaxpd(xmm_a, xmm_b, xmm_c);
   1293   cc.vmaxpd(ymm_a, ymm_b, ymm_c);
   1294   cc.vmaxps(xmm_a, xmm_b, xmm_c);
   1295   cc.vmaxps(ymm_a, ymm_b, ymm_c);
   1296   cc.vmaxsd(xmm_a, xmm_b, xmm_c);
   1297   cc.vmaxss(xmm_a, xmm_b, xmm_c);
   1298   cc.vminpd(xmm_a, xmm_b, xmm_c);
   1299   cc.vminpd(ymm_a, ymm_b, ymm_c);
   1300   cc.vminps(xmm_a, xmm_b, xmm_c);
   1301   cc.vminps(ymm_a, ymm_b, ymm_c);
   1302   cc.vminsd(xmm_a, xmm_b, xmm_c);
   1303   cc.vminss(xmm_a, xmm_b, xmm_c);
   1304   cc.vmovapd(xmm_a, xmm_b);
   1305   cc.vmovapd(ymm_a, ymm_b);
   1306   cc.vmovaps(xmm_a, xmm_b);
   1307   cc.vmovaps(ymm_a, ymm_b);
   1308   cc.vmovd(xmm_a, gpd);
   1309   cc.vmovd(gpd, xmm_b);
   1310   cc.vmovddup(xmm_a, xmm_b);
   1311   cc.vmovddup(ymm_a, ymm_b);
   1312   cc.vmovdqa(xmm_a, xmm_b);
   1313   cc.vmovdqa(ymm_a, ymm_b);
   1314   cc.vmovdqu(xmm_a, xmm_b);
   1315   cc.vmovdqu(ymm_a, ymm_b);
   1316   cc.vmovhlps(xmm_a, xmm_b, xmm_c);
   1317   cc.vmovlhps(xmm_a, xmm_b, xmm_c);
   1318   cc.vmovmskpd(gpd, xmm_b);
   1319   cc.vmovmskpd(gpd, ymm_b);
   1320   cc.vmovmskps(gpd, xmm_b);
   1321   cc.vmovmskps(gpd, ymm_b);
   1322   cc.vmovsd(xmm_a, xmm_b, xmm_c);
   1323   cc.vmovshdup(xmm_a, xmm_b);
   1324   cc.vmovshdup(ymm_a, ymm_b);
   1325   cc.vmovsldup(xmm_a, xmm_b);
   1326   cc.vmovsldup(ymm_a, ymm_b);
   1327   cc.vmovss(xmm_a, xmm_b, xmm_c);
   1328   cc.vmovupd(xmm_a, xmm_b);
   1329   cc.vmovupd(ymm_a, ymm_b);
   1330   cc.vmovups(xmm_a, xmm_b);
   1331   cc.vmovups(ymm_a, ymm_b);
   1332   cc.vmpsadbw(xmm_a, xmm_b, xmm_c, 0);
   1333   cc.vmulpd(xmm_a, xmm_b, xmm_c);
   1334   cc.vmulpd(ymm_a, ymm_b, ymm_c);
   1335   cc.vmulps(xmm_a, xmm_b, xmm_c);
   1336   cc.vmulps(ymm_a, ymm_b, ymm_c);
   1337   cc.vmulsd(xmm_a, xmm_b, xmm_c);
   1338   cc.vmulss(xmm_a, xmm_b, xmm_c);
   1339   cc.vorpd(xmm_a, xmm_b, xmm_c);
   1340   cc.vorpd(ymm_a, ymm_b, ymm_c);
   1341   cc.vorps(xmm_a, xmm_b, xmm_c);
   1342   cc.vorps(ymm_a, ymm_b, ymm_c);
   1343   cc.vpabsb(xmm_a, xmm_b);
   1344   cc.vpabsd(xmm_a, xmm_b);
   1345   cc.vpabsw(xmm_a, xmm_b);
   1346   cc.vpackssdw(xmm_a, xmm_b, xmm_c);
   1347   cc.vpacksswb(xmm_a, xmm_b, xmm_c);
   1348   cc.vpackusdw(xmm_a, xmm_b, xmm_c);
   1349   cc.vpackuswb(xmm_a, xmm_b, xmm_c);
   1350   cc.vpaddb(xmm_a, xmm_b, xmm_c);
   1351   cc.vpaddd(xmm_a, xmm_b, xmm_c);
   1352   cc.vpaddq(xmm_a, xmm_b, xmm_c);
   1353   cc.vpaddw(xmm_a, xmm_b, xmm_c);
   1354   cc.vpaddsb(xmm_a, xmm_b, xmm_c);
   1355   cc.vpaddsw(xmm_a, xmm_b, xmm_c);
   1356   cc.vpaddusb(xmm_a, xmm_b, xmm_c);
   1357   cc.vpaddusw(xmm_a, xmm_b, xmm_c);
   1358   cc.vpalignr(xmm_a, xmm_b, xmm_c, 0);
   1359   cc.vpand(xmm_a, xmm_b, xmm_c);
   1360   cc.vpandn(xmm_a, xmm_b, xmm_c);
   1361   cc.vpavgb(xmm_a, xmm_b, xmm_c);
   1362   cc.vpavgw(xmm_a, xmm_b, xmm_c);
   1363   cc.vpblendvb(xmm_a, xmm_b, xmm_c, xmm_a);
   1364   cc.vpblendw(xmm_a, xmm_b, xmm_c, 0);
   1365   cc.vpcmpeqb(xmm_a, xmm_b, xmm_c);
   1366   cc.vpcmpeqd(xmm_a, xmm_b, xmm_c);
   1367   cc.vpcmpeqq(xmm_a, xmm_b, xmm_c);
   1368   cc.vpcmpeqw(xmm_a, xmm_b, xmm_c);
   1369   cc.vpcmpgtb(xmm_a, xmm_b, xmm_c);
   1370   cc.vpcmpgtd(xmm_a, xmm_b, xmm_c);
   1371   cc.vpcmpgtq(xmm_a, xmm_b, xmm_c);
   1372   cc.vpcmpgtw(xmm_a, xmm_b, xmm_c);
   1373   cc.vpermilpd(xmm_a, xmm_b, xmm_c);
   1374   cc.vpermilpd(ymm_a, ymm_b, ymm_c);
   1375   cc.vpermilpd(xmm_a, xmm_b, 0);
   1376   cc.vpermilpd(ymm_a, ymm_b, 0);
   1377   cc.vpermilps(xmm_a, xmm_b, xmm_c);
   1378   cc.vpermilps(ymm_a, ymm_b, ymm_c);
   1379   cc.vpermilps(xmm_a, xmm_b, 0);
   1380   cc.vpermilps(ymm_a, ymm_b, 0);
   1381   cc.vperm2f128(ymm_a, ymm_b, ymm_c, 0);
   1382   cc.vpextrb(gpd, xmm_b, 0);
   1383   cc.vpextrd(gpd, xmm_b, 0);
   1384   if (cc.is_64bit()) cc.vpextrq(gpq, xmm_b, 0);
   1385   cc.vpextrw(gpd, xmm_b, 0);
   1386   cc.vphaddd(xmm_a, xmm_b, xmm_c);
   1387   cc.vphaddsw(xmm_a, xmm_b, xmm_c);
   1388   cc.vphaddw(xmm_a, xmm_b, xmm_c);
   1389   cc.vphminposuw(xmm_a, xmm_b);
   1390   cc.vphsubd(xmm_a, xmm_b, xmm_c);
   1391   cc.vphsubsw(xmm_a, xmm_b, xmm_c);
   1392   cc.vphsubw(xmm_a, xmm_b, xmm_c);
   1393   cc.vpinsrb(xmm_a, xmm_b, gpd, 0);
   1394   cc.vpinsrd(xmm_a, xmm_b, gpd, 0);
   1395   cc.vpinsrw(xmm_a, xmm_b, gpd, 0);
   1396   cc.vpmaddubsw(xmm_a, xmm_b, xmm_c);
   1397   cc.vpmaddwd(xmm_a, xmm_b, xmm_c);
   1398   cc.vpmaxsb(xmm_a, xmm_b, xmm_c);
   1399   cc.vpmaxsd(xmm_a, xmm_b, xmm_c);
   1400   cc.vpmaxsw(xmm_a, xmm_b, xmm_c);
   1401   cc.vpmaxub(xmm_a, xmm_b, xmm_c);
   1402   cc.vpmaxud(xmm_a, xmm_b, xmm_c);
   1403   cc.vpmaxuw(xmm_a, xmm_b, xmm_c);
   1404   cc.vpminsb(xmm_a, xmm_b, xmm_c);
   1405   cc.vpminsd(xmm_a, xmm_b, xmm_c);
   1406   cc.vpminsw(xmm_a, xmm_b, xmm_c);
   1407   cc.vpminub(xmm_a, xmm_b, xmm_c);
   1408   cc.vpminud(xmm_a, xmm_b, xmm_c);
   1409   cc.vpminuw(xmm_a, xmm_b, xmm_c);
   1410   cc.vpmovmskb(gpd, xmm_b);
   1411   cc.vpmovsxbd(xmm_a, xmm_b);
   1412   cc.vpmovsxbq(xmm_a, xmm_b);
   1413   cc.vpmovsxbw(xmm_a, xmm_b);
   1414   cc.vpmovsxdq(xmm_a, xmm_b);
   1415   cc.vpmovsxwd(xmm_a, xmm_b);
   1416   cc.vpmovsxwq(xmm_a, xmm_b);
   1417   cc.vpmovzxbd(xmm_a, xmm_b);
   1418   cc.vpmovzxbq(xmm_a, xmm_b);
   1419   cc.vpmovzxbw(xmm_a, xmm_b);
   1420   cc.vpmovzxdq(xmm_a, xmm_b);
   1421   cc.vpmovzxwd(xmm_a, xmm_b);
   1422   cc.vpmovzxwq(xmm_a, xmm_b);
   1423   cc.vpmuldq(xmm_a, xmm_b, xmm_c);
   1424   cc.vpmulhrsw(xmm_a, xmm_b, xmm_c);
   1425   cc.vpmulhuw(xmm_a, xmm_b, xmm_c);
   1426   cc.vpmulhw(xmm_a, xmm_b, xmm_c);
   1427   cc.vpmulld(xmm_a, xmm_b, xmm_c);
   1428   cc.vpmullw(xmm_a, xmm_b, xmm_c);
   1429   cc.vpmuludq(xmm_a, xmm_b, xmm_c);
   1430   cc.vpor(xmm_a, xmm_b, xmm_c);
   1431   cc.vpsadbw(xmm_a, xmm_b, xmm_c);
   1432   cc.vpshufb(xmm_a, xmm_b, xmm_c);
   1433   cc.vpshufd(xmm_a, xmm_b, 0);
   1434   cc.vpshufhw(xmm_a, xmm_b, 0);
   1435   cc.vpshuflw(xmm_a, xmm_b, 0);
   1436   cc.vpsignb(xmm_a, xmm_b, xmm_c);
   1437   cc.vpsignd(xmm_a, xmm_b, xmm_c);
   1438   cc.vpsignw(xmm_a, xmm_b, xmm_c);
   1439   cc.vpslld(xmm_a, xmm_b, xmm_c);
   1440   cc.vpslld(xmm_a, xmm_b, 0);
   1441   cc.vpslldq(xmm_a, xmm_b, 0);
   1442   cc.vpsllq(xmm_a, xmm_b, xmm_c);
   1443   cc.vpsllq(xmm_a, xmm_b, 0);
   1444   cc.vpsllw(xmm_a, xmm_b, xmm_c);
   1445   cc.vpsllw(xmm_a, xmm_b, 0);
   1446   cc.vpsrad(xmm_a, xmm_b, xmm_c);
   1447   cc.vpsrad(xmm_a, xmm_b, 0);
   1448   cc.vpsraw(xmm_a, xmm_b, xmm_c);
   1449   cc.vpsraw(xmm_a, xmm_b, 0);
   1450   cc.vpsrld(xmm_a, xmm_b, xmm_c);
   1451   cc.vpsrld(xmm_a, xmm_b, 0);
   1452   cc.vpsrldq(xmm_a, xmm_b, 0);
   1453   cc.vpsrlq(xmm_a, xmm_b, xmm_c);
   1454   cc.vpsrlq(xmm_a, xmm_b, 0);
   1455   cc.vpsrlw(xmm_a, xmm_b, xmm_c);
   1456   cc.vpsrlw(xmm_a, xmm_b, 0);
   1457   cc.vpsubb(xmm_a, xmm_b, xmm_c);
   1458   cc.vpsubd(xmm_a, xmm_b, xmm_c);
   1459   cc.vpsubq(xmm_a, xmm_b, xmm_c);
   1460   cc.vpsubw(xmm_a, xmm_b, xmm_c);
   1461   cc.vpsubsb(xmm_a, xmm_b, xmm_c);
   1462   cc.vpsubsw(xmm_a, xmm_b, xmm_c);
   1463   cc.vpsubusb(xmm_a, xmm_b, xmm_c);
   1464   cc.vpsubusw(xmm_a, xmm_b, xmm_c);
   1465   cc.vptest(xmm_a, xmm_b);
   1466   cc.vptest(ymm_a, ymm_b);
   1467   cc.vpunpckhbw(xmm_a, xmm_b, xmm_c);
   1468   cc.vpunpckhdq(xmm_a, xmm_b, xmm_c);
   1469   cc.vpunpckhqdq(xmm_a, xmm_b, xmm_c);
   1470   cc.vpunpckhwd(xmm_a, xmm_b, xmm_c);
   1471   cc.vpunpcklbw(xmm_a, xmm_b, xmm_c);
   1472   cc.vpunpckldq(xmm_a, xmm_b, xmm_c);
   1473   cc.vpunpcklqdq(xmm_a, xmm_b, xmm_c);
   1474   cc.vpunpcklwd(xmm_a, xmm_b, xmm_c);
   1475   cc.vpxor(xmm_a, xmm_b, xmm_c);
   1476   cc.vrcpps(xmm_a, xmm_b);
   1477   cc.vrcpps(ymm_a, ymm_b);
   1478   cc.vrcpss(xmm_a, xmm_b, xmm_c);
   1479   cc.vrsqrtps(xmm_a, xmm_b);
   1480   cc.vrsqrtps(ymm_a, ymm_b);
   1481   cc.vrsqrtss(xmm_a, xmm_b, xmm_c);
   1482   cc.vroundpd(xmm_a, xmm_b, 0);
   1483   cc.vroundpd(ymm_a, ymm_b, 0);
   1484   cc.vroundps(xmm_a, xmm_b, 0);
   1485   cc.vroundps(ymm_a, ymm_b, 0);
   1486   cc.vroundsd(xmm_a, xmm_b, xmm_c, 0);
   1487   cc.vroundss(xmm_a, xmm_b, xmm_c, 0);
   1488   cc.vshufpd(xmm_a, xmm_b, xmm_c, 0);
   1489   cc.vshufpd(ymm_a, ymm_b, ymm_c, 0);
   1490   cc.vshufps(xmm_a, xmm_b, xmm_c, 0);
   1491   cc.vshufps(ymm_a, ymm_b, ymm_c, 0);
   1492   cc.vsqrtpd(xmm_a, xmm_b);
   1493   cc.vsqrtpd(ymm_a, ymm_b);
   1494   cc.vsqrtps(xmm_a, xmm_b);
   1495   cc.vsqrtps(ymm_a, ymm_b);
   1496   cc.vsqrtsd(xmm_a, xmm_b, xmm_c);
   1497   cc.vsqrtss(xmm_a, xmm_b, xmm_c);
   1498   cc.vsubpd(xmm_a, xmm_b, xmm_c);
   1499   cc.vsubpd(ymm_a, ymm_b, ymm_c);
   1500   cc.vsubps(xmm_a, xmm_b, xmm_c);
   1501   cc.vsubps(ymm_a, ymm_b, ymm_c);
   1502   cc.vsubsd(xmm_a, xmm_b, xmm_c);
   1503   cc.vsubss(xmm_a, xmm_b, xmm_c);
   1504   cc.vtestps(xmm_a, xmm_b);
   1505   cc.vtestps(ymm_a, ymm_b);
   1506   cc.vtestpd(xmm_a, xmm_b);
   1507   cc.vtestpd(ymm_a, ymm_b);
   1508   cc.vucomisd(xmm_a, xmm_b);
   1509   cc.vucomiss(xmm_a, xmm_b);
   1510   cc.vunpckhpd(xmm_a, xmm_b, xmm_c);
   1511   cc.vunpckhpd(ymm_a, ymm_b, ymm_c);
   1512   cc.vunpckhps(xmm_a, xmm_b, xmm_c);
   1513   cc.vunpckhps(ymm_a, ymm_b, ymm_c);
   1514   cc.vunpcklpd(xmm_a, xmm_b, xmm_c);
   1515   cc.vunpcklpd(ymm_a, ymm_b, ymm_c);
   1516   cc.vunpcklps(xmm_a, xmm_b, xmm_c);
   1517   cc.vunpcklps(ymm_a, ymm_b, ymm_c);
   1518   cc.vxorpd(xmm_a, xmm_b, xmm_c);
   1519   cc.vxorpd(ymm_a, ymm_b, ymm_c);
   1520   cc.vxorps(xmm_a, xmm_b, xmm_c);
   1521   cc.vxorps(ymm_a, ymm_b, ymm_c);
   1522 
   1523   // AVX+AESNI.
   1524   cc.vaesdec(xmm_a, xmm_b, xmm_c);
   1525   cc.vaesdeclast(xmm_a, xmm_b, xmm_c);
   1526   cc.vaesenc(xmm_a, xmm_b, xmm_c);
   1527   cc.vaesenclast(xmm_a, xmm_b, xmm_c);
   1528   cc.vaesimc(xmm_a, xmm_b);
   1529   cc.vaeskeygenassist(xmm_a, xmm_b, 0);
   1530 
   1531   // AVX+PCLMULQDQ.
   1532   cc.vpclmulqdq(xmm_a, xmm_b, xmm_c, 0);
   1533 
   1534   // AVX2.
   1535   cc.vbroadcastsd(ymm_a, xmm_b);
   1536   cc.vbroadcastss(xmm_a, xmm_b);
   1537   cc.vbroadcastss(ymm_a, xmm_b);
   1538   cc.vextracti128(xmm_a, ymm_b, 0);
   1539   cc.vinserti128(ymm_a, ymm_b, xmm_c, 0);
   1540   cc.vmpsadbw(ymm_a, ymm_b, ymm_c, 0);
   1541   cc.vpabsb(ymm_a, ymm_b);
   1542   cc.vpabsd(ymm_a, ymm_b);
   1543   cc.vpabsw(ymm_a, ymm_b);
   1544   cc.vpackssdw(ymm_a, ymm_b, ymm_c);
   1545   cc.vpacksswb(ymm_a, ymm_b, ymm_c);
   1546   cc.vpackusdw(ymm_a, ymm_b, ymm_c);
   1547   cc.vpackuswb(ymm_a, ymm_b, ymm_c);
   1548   cc.vpaddb(ymm_a, ymm_b, ymm_c);
   1549   cc.vpaddd(ymm_a, ymm_b, ymm_c);
   1550   cc.vpaddq(ymm_a, ymm_b, ymm_c);
   1551   cc.vpaddw(ymm_a, ymm_b, ymm_c);
   1552   cc.vpaddsb(ymm_a, ymm_b, ymm_c);
   1553   cc.vpaddsw(ymm_a, ymm_b, ymm_c);
   1554   cc.vpaddusb(ymm_a, ymm_b, ymm_c);
   1555   cc.vpaddusw(ymm_a, ymm_b, ymm_c);
   1556   cc.vpalignr(ymm_a, ymm_b, ymm_c, 0);
   1557   cc.vpand(ymm_a, ymm_b, ymm_c);
   1558   cc.vpandn(ymm_a, ymm_b, ymm_c);
   1559   cc.vpavgb(ymm_a, ymm_b, ymm_c);
   1560   cc.vpavgw(ymm_a, ymm_b, ymm_c);
   1561   cc.vpblendd(xmm_a, xmm_b, xmm_c, 0);
   1562   cc.vpblendd(ymm_a, ymm_b, ymm_c, 0);
   1563   cc.vpblendvb(ymm_a, ymm_b, ymm_c, ymm_a);
   1564   cc.vpblendw(ymm_a, ymm_b, ymm_c, 0);
   1565   cc.vpbroadcastb(xmm_a, xmm_b);
   1566   cc.vpbroadcastb(ymm_a, xmm_b);
   1567   cc.vpbroadcastd(xmm_a, xmm_b);
   1568   cc.vpbroadcastd(ymm_a, xmm_b);
   1569   cc.vpbroadcastq(xmm_a, xmm_b);
   1570   cc.vpbroadcastq(ymm_a, xmm_b);
   1571   cc.vpbroadcastw(xmm_a, xmm_b);
   1572   cc.vpbroadcastw(ymm_a, xmm_b);
   1573   cc.vpcmpeqb(ymm_a, ymm_b, ymm_c);
   1574   cc.vpcmpeqd(ymm_a, ymm_b, ymm_c);
   1575   cc.vpcmpeqq(ymm_a, ymm_b, ymm_c);
   1576   cc.vpcmpeqw(ymm_a, ymm_b, ymm_c);
   1577   cc.vpcmpgtb(ymm_a, ymm_b, ymm_c);
   1578   cc.vpcmpgtd(ymm_a, ymm_b, ymm_c);
   1579   cc.vpcmpgtq(ymm_a, ymm_b, ymm_c);
   1580   cc.vpcmpgtw(ymm_a, ymm_b, ymm_c);
   1581   cc.vperm2i128(ymm_a, ymm_b, ymm_c, 0);
   1582   cc.vpermd(ymm_a, ymm_b, ymm_c);
   1583   cc.vpermps(ymm_a, ymm_b, ymm_c);
   1584   cc.vpermpd(ymm_a, ymm_b, 0);
   1585   cc.vpermq(ymm_a, ymm_b, 0);
   1586   cc.vpmovmskb(gpd, ymm_b);
   1587   cc.vpmovsxbd(ymm_a, xmm_b);
   1588   cc.vpmovsxbq(ymm_a, xmm_b);
   1589   cc.vpmovsxbw(ymm_a, xmm_b);
   1590   cc.vpmovsxdq(ymm_a, xmm_b);
   1591   cc.vpmovsxwd(ymm_a, xmm_b);
   1592   cc.vpmovsxwq(ymm_a, xmm_b);
   1593   cc.vpmovzxbd(ymm_a, xmm_b);
   1594   cc.vpmovzxbq(ymm_a, xmm_b);
   1595   cc.vpmovzxbw(ymm_a, xmm_b);
   1596   cc.vpmovzxdq(ymm_a, xmm_b);
   1597   cc.vpmovzxwd(ymm_a, xmm_b);
   1598   cc.vpmovzxwq(ymm_a, xmm_b);
   1599   cc.vpshufd(ymm_a, ymm_b, 0);
   1600   cc.vpshufhw(ymm_a, ymm_b, 0);
   1601   cc.vpshuflw(ymm_a, ymm_b, 0);
   1602   cc.vpslld(ymm_a, ymm_b, 0);
   1603   cc.vpslldq(ymm_a, ymm_b, 0);
   1604   cc.vpsllq(ymm_a, ymm_b, 0);
   1605   cc.vpsllw(ymm_a, ymm_b, 0);
   1606   cc.vpsrad(ymm_a, ymm_b, 0);
   1607   cc.vpsraw(ymm_a, ymm_b, 0);
   1608   cc.vpsrld(ymm_a, ymm_b, 0);
   1609   cc.vpsrldq(ymm_a, ymm_b, 0);
   1610   cc.vpsrlq(ymm_a, ymm_b, 0);
   1611   cc.vpsrlw(ymm_a, ymm_b, 0);
   1612   cc.vphaddd(ymm_a, ymm_b, ymm_c);
   1613   cc.vphaddsw(ymm_a, ymm_b, ymm_c);
   1614   cc.vphaddw(ymm_a, ymm_b, ymm_c);
   1615   cc.vphsubd(ymm_a, ymm_b, ymm_c);
   1616   cc.vphsubsw(ymm_a, ymm_b, ymm_c);
   1617   cc.vphsubw(ymm_a, ymm_b, ymm_c);
   1618   cc.vpmaddubsw(ymm_a, ymm_b, ymm_c);
   1619   cc.vpmaddwd(ymm_a, ymm_b, ymm_c);
   1620   cc.vpmaxsb(ymm_a, ymm_b, ymm_c);
   1621   cc.vpmaxsd(ymm_a, ymm_b, ymm_c);
   1622   cc.vpmaxsw(ymm_a, ymm_b, ymm_c);
   1623   cc.vpmaxub(ymm_a, ymm_b, ymm_c);
   1624   cc.vpmaxud(ymm_a, ymm_b, ymm_c);
   1625   cc.vpmaxuw(ymm_a, ymm_b, ymm_c);
   1626   cc.vpminsb(ymm_a, ymm_b, ymm_c);
   1627   cc.vpminsd(ymm_a, ymm_b, ymm_c);
   1628   cc.vpminsw(ymm_a, ymm_b, ymm_c);
   1629   cc.vpminub(ymm_a, ymm_b, ymm_c);
   1630   cc.vpminud(ymm_a, ymm_b, ymm_c);
   1631   cc.vpminuw(ymm_a, ymm_b, ymm_c);
   1632   cc.vpmuldq(ymm_a, ymm_b, ymm_c);
   1633   cc.vpmulhrsw(ymm_a, ymm_b, ymm_c);
   1634   cc.vpmulhuw(ymm_a, ymm_b, ymm_c);
   1635   cc.vpmulhw(ymm_a, ymm_b, ymm_c);
   1636   cc.vpmulld(ymm_a, ymm_b, ymm_c);
   1637   cc.vpmullw(ymm_a, ymm_b, ymm_c);
   1638   cc.vpmuludq(ymm_a, ymm_b, ymm_c);
   1639   cc.vpor(ymm_a, ymm_b, ymm_c);
   1640   cc.vpsadbw(ymm_a, ymm_b, ymm_c);
   1641   cc.vpshufb(ymm_a, ymm_b, ymm_c);
   1642   cc.vpsignb(ymm_a, ymm_b, ymm_c);
   1643   cc.vpsignd(ymm_a, ymm_b, ymm_c);
   1644   cc.vpsignw(ymm_a, ymm_b, ymm_c);
   1645   cc.vpslld(ymm_a, ymm_b, xmm_c);
   1646   cc.vpsllq(ymm_a, ymm_b, xmm_c);
   1647   cc.vpsllvd(xmm_a, xmm_b, xmm_c);
   1648   cc.vpsllvd(ymm_a, ymm_b, ymm_c);
   1649   cc.vpsllvq(xmm_a, xmm_b, xmm_c);
   1650   cc.vpsllvq(ymm_a, ymm_b, ymm_c);
   1651   cc.vpsllw(ymm_a, ymm_b, xmm_c);
   1652   cc.vpsrad(ymm_a, ymm_b, xmm_c);
   1653   cc.vpsravd(xmm_a, xmm_b, xmm_c);
   1654   cc.vpsravd(ymm_a, ymm_b, ymm_c);
   1655   cc.vpsraw(ymm_a, ymm_b, xmm_c);
   1656   cc.vpsrld(ymm_a, ymm_b, xmm_c);
   1657   cc.vpsrlq(ymm_a, ymm_b, xmm_c);
   1658   cc.vpsrlvd(xmm_a, xmm_b, xmm_c);
   1659   cc.vpsrlvd(ymm_a, ymm_b, ymm_c);
   1660   cc.vpsrlvq(xmm_a, xmm_b, xmm_c);
   1661   cc.vpsrlvq(ymm_a, ymm_b, ymm_c);
   1662   cc.vpsrlw(ymm_a, ymm_b, xmm_c);
   1663   cc.vpsubb(ymm_a, ymm_b, ymm_c);
   1664   cc.vpsubd(ymm_a, ymm_b, ymm_c);
   1665   cc.vpsubq(ymm_a, ymm_b, ymm_c);
   1666   cc.vpsubsb(ymm_a, ymm_b, ymm_c);
   1667   cc.vpsubsw(ymm_a, ymm_b, ymm_c);
   1668   cc.vpsubusb(ymm_a, ymm_b, ymm_c);
   1669   cc.vpsubusw(ymm_a, ymm_b, ymm_c);
   1670   cc.vpsubw(ymm_a, ymm_b, ymm_c);
   1671   cc.vpunpckhbw(ymm_a, ymm_b, ymm_c);
   1672   cc.vpunpckhdq(ymm_a, ymm_b, ymm_c);
   1673   cc.vpunpckhqdq(ymm_a, ymm_b, ymm_c);
   1674   cc.vpunpckhwd(ymm_a, ymm_b, ymm_c);
   1675   cc.vpunpcklbw(ymm_a, ymm_b, ymm_c);
   1676   cc.vpunpckldq(ymm_a, ymm_b, ymm_c);
   1677   cc.vpunpcklqdq(ymm_a, ymm_b, ymm_c);
   1678   cc.vpunpcklwd(ymm_a, ymm_b, ymm_c);
   1679   cc.vpxor(ymm_a, ymm_b, ymm_c);
   1680 
   1681   // FMA.
   1682   cc.vfmadd132pd(xmm_a, xmm_b, xmm_c);
   1683   cc.vfmadd132pd(ymm_a, ymm_b, ymm_c);
   1684   cc.vfmadd132ps(xmm_a, xmm_b, xmm_c);
   1685   cc.vfmadd132ps(ymm_a, ymm_b, ymm_c);
   1686   cc.vfmadd132sd(xmm_a, xmm_b, xmm_c);
   1687   cc.vfmadd132ss(xmm_a, xmm_b, xmm_c);
   1688   cc.vfmadd213pd(xmm_a, xmm_b, xmm_c);
   1689   cc.vfmadd213pd(ymm_a, ymm_b, ymm_c);
   1690   cc.vfmadd213ps(xmm_a, xmm_b, xmm_c);
   1691   cc.vfmadd213ps(ymm_a, ymm_b, ymm_c);
   1692   cc.vfmadd213sd(xmm_a, xmm_b, xmm_c);
   1693   cc.vfmadd213ss(xmm_a, xmm_b, xmm_c);
   1694   cc.vfmadd231pd(xmm_a, xmm_b, xmm_c);
   1695   cc.vfmadd231pd(ymm_a, ymm_b, ymm_c);
   1696   cc.vfmadd231ps(xmm_a, xmm_b, xmm_c);
   1697   cc.vfmadd231ps(ymm_a, ymm_b, ymm_c);
   1698   cc.vfmadd231sd(xmm_a, xmm_b, xmm_c);
   1699   cc.vfmadd231ss(xmm_a, xmm_b, xmm_c);
   1700   cc.vfmaddsub132pd(xmm_a, xmm_b, xmm_c);
   1701   cc.vfmaddsub132pd(ymm_a, ymm_b, ymm_c);
   1702   cc.vfmaddsub132ps(xmm_a, xmm_b, xmm_c);
   1703   cc.vfmaddsub132ps(ymm_a, ymm_b, ymm_c);
   1704   cc.vfmaddsub213pd(xmm_a, xmm_b, xmm_c);
   1705   cc.vfmaddsub213pd(ymm_a, ymm_b, ymm_c);
   1706   cc.vfmaddsub213ps(xmm_a, xmm_b, xmm_c);
   1707   cc.vfmaddsub213ps(ymm_a, ymm_b, ymm_c);
   1708   cc.vfmaddsub231pd(xmm_a, xmm_b, xmm_c);
   1709   cc.vfmaddsub231pd(ymm_a, ymm_b, ymm_c);
   1710   cc.vfmaddsub231ps(xmm_a, xmm_b, xmm_c);
   1711   cc.vfmaddsub231ps(ymm_a, ymm_b, ymm_c);
   1712   cc.vfmsub132pd(xmm_a, xmm_b, xmm_c);
   1713   cc.vfmsub132pd(ymm_a, ymm_b, ymm_c);
   1714   cc.vfmsub132ps(xmm_a, xmm_b, xmm_c);
   1715   cc.vfmsub132ps(ymm_a, ymm_b, ymm_c);
   1716   cc.vfmsub132sd(xmm_a, xmm_b, xmm_c);
   1717   cc.vfmsub132ss(xmm_a, xmm_b, xmm_c);
   1718   cc.vfmsub213pd(xmm_a, xmm_b, xmm_c);
   1719   cc.vfmsub213pd(ymm_a, ymm_b, ymm_c);
   1720   cc.vfmsub213ps(xmm_a, xmm_b, xmm_c);
   1721   cc.vfmsub213ps(ymm_a, ymm_b, ymm_c);
   1722   cc.vfmsub213sd(xmm_a, xmm_b, xmm_c);
   1723   cc.vfmsub213ss(xmm_a, xmm_b, xmm_c);
   1724   cc.vfmsub231pd(xmm_a, xmm_b, xmm_c);
   1725   cc.vfmsub231pd(ymm_a, ymm_b, ymm_c);
   1726   cc.vfmsub231ps(xmm_a, xmm_b, xmm_c);
   1727   cc.vfmsub231ps(ymm_a, ymm_b, ymm_c);
   1728   cc.vfmsub231sd(xmm_a, xmm_b, xmm_c);
   1729   cc.vfmsub231ss(xmm_a, xmm_b, xmm_c);
   1730   cc.vfmsubadd132pd(xmm_a, xmm_b, xmm_c);
   1731   cc.vfmsubadd132pd(ymm_a, ymm_b, ymm_c);
   1732   cc.vfmsubadd132ps(xmm_a, xmm_b, xmm_c);
   1733   cc.vfmsubadd132ps(ymm_a, ymm_b, ymm_c);
   1734   cc.vfmsubadd213pd(xmm_a, xmm_b, xmm_c);
   1735   cc.vfmsubadd213pd(ymm_a, ymm_b, ymm_c);
   1736   cc.vfmsubadd213ps(xmm_a, xmm_b, xmm_c);
   1737   cc.vfmsubadd213ps(ymm_a, ymm_b, ymm_c);
   1738   cc.vfmsubadd231pd(xmm_a, xmm_b, xmm_c);
   1739   cc.vfmsubadd231pd(ymm_a, ymm_b, ymm_c);
   1740   cc.vfmsubadd231ps(xmm_a, xmm_b, xmm_c);
   1741   cc.vfmsubadd231ps(ymm_a, ymm_b, ymm_c);
   1742   cc.vfnmadd132pd(xmm_a, xmm_b, xmm_c);
   1743   cc.vfnmadd132pd(ymm_a, ymm_b, ymm_c);
   1744   cc.vfnmadd132ps(xmm_a, xmm_b, xmm_c);
   1745   cc.vfnmadd132ps(ymm_a, ymm_b, ymm_c);
   1746   cc.vfnmadd132sd(xmm_a, xmm_b, xmm_c);
   1747   cc.vfnmadd132ss(xmm_a, xmm_b, xmm_c);
   1748   cc.vfnmadd213pd(xmm_a, xmm_b, xmm_c);
   1749   cc.vfnmadd213pd(ymm_a, ymm_b, ymm_c);
   1750   cc.vfnmadd213ps(xmm_a, xmm_b, xmm_c);
   1751   cc.vfnmadd213ps(ymm_a, ymm_b, ymm_c);
   1752   cc.vfnmadd213sd(xmm_a, xmm_b, xmm_c);
   1753   cc.vfnmadd213ss(xmm_a, xmm_b, xmm_c);
   1754   cc.vfnmadd231pd(xmm_a, xmm_b, xmm_c);
   1755   cc.vfnmadd231pd(ymm_a, ymm_b, ymm_c);
   1756   cc.vfnmadd231ps(xmm_a, xmm_b, xmm_c);
   1757   cc.vfnmadd231ps(ymm_a, ymm_b, ymm_c);
   1758   cc.vfnmadd231sd(xmm_a, xmm_b, xmm_c);
   1759   cc.vfnmadd231ss(xmm_a, xmm_b, xmm_c);
   1760   cc.vfnmsub132pd(xmm_a, xmm_b, xmm_c);
   1761   cc.vfnmsub132pd(ymm_a, ymm_b, ymm_c);
   1762   cc.vfnmsub132ps(xmm_a, xmm_b, xmm_c);
   1763   cc.vfnmsub132ps(ymm_a, ymm_b, ymm_c);
   1764   cc.vfnmsub132sd(xmm_a, xmm_b, xmm_c);
   1765   cc.vfnmsub132ss(xmm_a, xmm_b, xmm_c);
   1766   cc.vfnmsub213pd(xmm_a, xmm_b, xmm_c);
   1767   cc.vfnmsub213pd(ymm_a, ymm_b, ymm_c);
   1768   cc.vfnmsub213ps(xmm_a, xmm_b, xmm_c);
   1769   cc.vfnmsub213ps(ymm_a, ymm_b, ymm_c);
   1770   cc.vfnmsub213sd(xmm_a, xmm_b, xmm_c);
   1771   cc.vfnmsub213ss(xmm_a, xmm_b, xmm_c);
   1772   cc.vfnmsub231pd(xmm_a, xmm_b, xmm_c);
   1773   cc.vfnmsub231pd(ymm_a, ymm_b, ymm_c);
   1774   cc.vfnmsub231ps(xmm_a, xmm_b, xmm_c);
   1775   cc.vfnmsub231ps(ymm_a, ymm_b, ymm_c);
   1776   cc.vfnmsub231sd(xmm_a, xmm_b, xmm_c);
   1777   cc.vfnmsub231ss(xmm_a, xmm_b, xmm_c);
   1778 }
   1779 
   1780 // Generates a long sequence of AVX instructions.
   1781 template<typename Emitter>
   1782 static void generate_avx_sequenceInternalRegMem(
   1783   Emitter& cc,
   1784   const x86::Gp& gp,
   1785   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   1786 
   1787   x86::Gp gpd = gp.r32();
   1788   x86::Gp gpq = gp.r64();
   1789   x86::Gp gpz = cc.is_32bit() ? gpd : gpq;
   1790 
   1791   x86::Vec xmm_a = vec_a.xmm();
   1792   x86::Vec xmm_b = vec_b.xmm();
   1793   x86::Vec xmm_c = vec_c.xmm();
   1794   x86::Vec xmm_d = vec_d.xmm();
   1795 
   1796   x86::Vec ymm_a = vec_a.ymm();
   1797   x86::Vec ymm_b = vec_b.ymm();
   1798   x86::Vec ymm_c = vec_c.ymm();
   1799   x86::Vec ymm_d = vec_d.ymm();
   1800 
   1801   x86::Mem m = x86::ptr(gpz);
   1802   x86::Mem m128 = x86::xmmword_ptr(gpz);
   1803   x86::Mem m256 = x86::xmmword_ptr(gpz);
   1804   x86::Mem vx_ptr = x86::ptr(gpz, xmm_d);
   1805   x86::Mem vy_ptr = x86::ptr(gpz, ymm_d);
   1806 
   1807   cc.xor_(gpd, gpd);
   1808   cc.vxorps(xmm_a, xmm_a, xmm_a);
   1809   cc.vxorps(xmm_b, xmm_b, xmm_b);
   1810   cc.vxorps(xmm_c, xmm_c, xmm_c);
   1811   cc.vxorps(xmm_d, xmm_d, xmm_d);
   1812 
   1813   cc.vaddpd(xmm_a, xmm_b, m);
   1814   cc.vaddpd(ymm_a, ymm_b, m);
   1815   cc.vaddps(xmm_a, xmm_b, m);
   1816   cc.vaddps(ymm_a, ymm_b, m);
   1817   cc.vaddsd(xmm_a, xmm_b, m);
   1818   cc.vaddss(xmm_a, xmm_b, m);
   1819   cc.vaddsubpd(xmm_a, xmm_b, m);
   1820   cc.vaddsubpd(ymm_a, ymm_b, m);
   1821   cc.vaddsubps(xmm_a, xmm_b, m);
   1822   cc.vaddsubps(ymm_a, ymm_b, m);
   1823   cc.vandpd(xmm_a, xmm_b, m);
   1824   cc.vandpd(ymm_a, ymm_b, m);
   1825   cc.vandps(xmm_a, xmm_b, m);
   1826   cc.vandps(ymm_a, ymm_b, m);
   1827   cc.vandnpd(xmm_a, xmm_b, m);
   1828   cc.vandnpd(ymm_a, ymm_b, m);
   1829   cc.vandnps(xmm_a, xmm_b, m);
   1830   cc.vandnps(ymm_a, ymm_b, m);
   1831   cc.vblendpd(xmm_a, xmm_b, m, 0);
   1832   cc.vblendpd(ymm_a, ymm_b, m, 0);
   1833   cc.vblendps(xmm_a, xmm_b, m, 0);
   1834   cc.vblendps(ymm_a, ymm_b, m, 0);
   1835   cc.vblendvpd(xmm_a, xmm_b, m, xmm_a);
   1836   cc.vblendvpd(ymm_a, ymm_b, m, ymm_a);
   1837   cc.vbroadcastf128(ymm_a, m);
   1838   cc.vbroadcastsd(ymm_a, m);
   1839   cc.vbroadcastss(xmm_a, m);
   1840   cc.vbroadcastss(ymm_a, m);
   1841   cc.vcmppd(xmm_a, xmm_b, m, 0);
   1842   cc.vcmppd(ymm_a, ymm_b, m, 0);
   1843   cc.vcmpps(xmm_a, xmm_b, m, 0);
   1844   cc.vcmpps(ymm_a, ymm_b, m, 0);
   1845   cc.vcmpsd(xmm_a, xmm_b, m, 0);
   1846   cc.vcmpss(xmm_a, xmm_b, m, 0);
   1847   cc.vcomisd(xmm_a, m);
   1848   cc.vcomiss(xmm_a, m);
   1849   cc.vcvtdq2pd(xmm_a, m);
   1850   cc.vcvtdq2pd(ymm_a, m);
   1851   cc.vcvtdq2ps(xmm_a, m);
   1852   cc.vcvtdq2ps(ymm_a, m);
   1853   cc.vcvtpd2dq(xmm_a, m128);
   1854   cc.vcvtpd2dq(xmm_a, m256);
   1855   cc.vcvtpd2ps(xmm_a, m128);
   1856   cc.vcvtpd2ps(xmm_a, m256);
   1857   cc.vcvtps2dq(xmm_a, m);
   1858   cc.vcvtps2dq(ymm_a, m);
   1859   cc.vcvtps2pd(xmm_a, m);
   1860   cc.vcvtps2pd(ymm_a, m);
   1861   cc.vcvtsd2si(gpd, m);
   1862   cc.vcvtsd2ss(xmm_a, xmm_b, m);
   1863   cc.vcvtsi2sd(xmm_a, xmm_b, m);
   1864   cc.vcvtsi2ss(xmm_a, xmm_b, m);
   1865   cc.vcvtss2sd(xmm_a, xmm_b, m);
   1866   cc.vcvtss2si(gpd, m);
   1867   cc.vcvttpd2dq(xmm_a, m128);
   1868   cc.vcvttpd2dq(xmm_a, m256);
   1869   cc.vcvttps2dq(xmm_a, m);
   1870   cc.vcvttps2dq(ymm_a, m);
   1871   cc.vcvttsd2si(gpd, m);
   1872   cc.vcvttss2si(gpd, m);
   1873   cc.vdivpd(xmm_a, xmm_b, m);
   1874   cc.vdivpd(ymm_a, ymm_b, m);
   1875   cc.vdivps(xmm_a, xmm_b, m);
   1876   cc.vdivps(ymm_a, ymm_b, m);
   1877   cc.vdivsd(xmm_a, xmm_b, m);
   1878   cc.vdivss(xmm_a, xmm_b, m);
   1879   cc.vdppd(xmm_a, xmm_b, m, 0);
   1880   cc.vdpps(xmm_a, xmm_b, m, 0);
   1881   cc.vdpps(ymm_a, ymm_b, m, 0);
   1882   cc.vextractf128(m, ymm_b, 0);
   1883   cc.vextractps(m, xmm_b, 0);
   1884   cc.vhaddpd(xmm_a, xmm_b, m);
   1885   cc.vhaddpd(ymm_a, ymm_b, m);
   1886   cc.vhaddps(xmm_a, xmm_b, m);
   1887   cc.vhaddps(ymm_a, ymm_b, m);
   1888   cc.vhsubpd(xmm_a, xmm_b, m);
   1889   cc.vhsubpd(ymm_a, ymm_b, m);
   1890   cc.vhsubps(xmm_a, xmm_b, m);
   1891   cc.vhsubps(ymm_a, ymm_b, m);
   1892   cc.vinsertf128(ymm_a, ymm_b, m, 0);
   1893   cc.vinsertps(xmm_a, xmm_b, m, 0);
   1894   cc.vlddqu(xmm_a, m);
   1895   cc.vlddqu(ymm_a, m);
   1896   cc.vmaskmovps(xmm_a, xmm_b, m);
   1897   cc.vmaskmovps(ymm_a, ymm_b, m);
   1898   cc.vmaskmovps(m, xmm_b, xmm_c);
   1899   cc.vmaskmovps(m, ymm_b, ymm_c);
   1900   cc.vmaskmovpd(xmm_a, xmm_b, m);
   1901   cc.vmaskmovpd(ymm_a, ymm_b, m);
   1902   cc.vmaskmovpd(m, xmm_b, xmm_c);
   1903   cc.vmaskmovpd(m, ymm_b, ymm_c);
   1904   cc.vmaxpd(xmm_a, xmm_b, m);
   1905   cc.vmaxpd(ymm_a, ymm_b, m);
   1906   cc.vmaxps(xmm_a, xmm_b, m);
   1907   cc.vmaxps(ymm_a, ymm_b, m);
   1908   cc.vmaxsd(xmm_a, xmm_b, m);
   1909   cc.vmaxss(xmm_a, xmm_b, m);
   1910   cc.vminpd(xmm_a, xmm_b, m);
   1911   cc.vminpd(ymm_a, ymm_b, m);
   1912   cc.vminps(xmm_a, xmm_b, m);
   1913   cc.vminps(ymm_a, ymm_b, m);
   1914   cc.vminsd(xmm_a, xmm_b, m);
   1915   cc.vminss(xmm_a, xmm_b, m);
   1916   cc.vmovapd(xmm_a, m);
   1917   cc.vmovapd(m, xmm_b);
   1918   cc.vmovapd(ymm_a, m);
   1919   cc.vmovapd(m, ymm_b);
   1920   cc.vmovaps(xmm_a, m);
   1921   cc.vmovaps(m, xmm_b);
   1922   cc.vmovaps(ymm_a, m);
   1923   cc.vmovaps(m, ymm_b);
   1924   cc.vmovd(xmm_a, m);
   1925   cc.vmovd(m, xmm_b);
   1926   cc.vmovddup(xmm_a, m);
   1927   cc.vmovddup(ymm_a, m);
   1928   cc.vmovdqa(xmm_a, m);
   1929   cc.vmovdqa(m, xmm_b);
   1930   cc.vmovdqa(ymm_a, m);
   1931   cc.vmovdqa(m, ymm_b);
   1932   cc.vmovdqu(xmm_a, m);
   1933   cc.vmovdqu(m, xmm_b);
   1934   cc.vmovdqu(ymm_a, m);
   1935   cc.vmovdqu(m, ymm_b);
   1936   cc.vmovhpd(xmm_a, xmm_b, m);
   1937   cc.vmovhps(xmm_a, xmm_b, m);
   1938   cc.vmovhps(m, xmm_b);
   1939   cc.vmovlpd(xmm_a, xmm_b, m);
   1940   cc.vmovlpd(m, xmm_b);
   1941   cc.vmovlps(xmm_a, xmm_b, m);
   1942   cc.vmovlps(m, xmm_b);
   1943   cc.vmovntdq(m, xmm_b);
   1944   cc.vmovntdq(m, ymm_b);
   1945   cc.vmovntdqa(xmm_a, m);
   1946   cc.vmovntpd(m, xmm_b);
   1947   cc.vmovntpd(m, ymm_b);
   1948   cc.vmovntps(m, xmm_b);
   1949   cc.vmovntps(m, ymm_b);
   1950   cc.vmovsd(xmm_a, m);
   1951   cc.vmovsd(m, xmm_b);
   1952   cc.vmovshdup(xmm_a, m);
   1953   cc.vmovshdup(ymm_a, m);
   1954   cc.vmovsldup(xmm_a, m);
   1955   cc.vmovsldup(ymm_a, m);
   1956   cc.vmovss(xmm_a, m);
   1957   cc.vmovss(m, xmm_b);
   1958   cc.vmovupd(xmm_a, m);
   1959   cc.vmovupd(m, xmm_b);
   1960   cc.vmovupd(ymm_a, m);
   1961   cc.vmovupd(m, ymm_b);
   1962   cc.vmovups(xmm_a, m);
   1963   cc.vmovups(m, xmm_b);
   1964   cc.vmovups(ymm_a, m);
   1965   cc.vmovups(m, ymm_b);
   1966   cc.vmpsadbw(xmm_a, xmm_b, m, 0);
   1967   cc.vmulpd(xmm_a, xmm_b, m);
   1968   cc.vmulpd(ymm_a, ymm_b, m);
   1969   cc.vmulps(xmm_a, xmm_b, m);
   1970   cc.vmulps(ymm_a, ymm_b, m);
   1971   cc.vmulsd(xmm_a, xmm_b, m);
   1972   cc.vmulss(xmm_a, xmm_b, m);
   1973   cc.vorpd(xmm_a, xmm_b, m);
   1974   cc.vorpd(ymm_a, ymm_b, m);
   1975   cc.vorps(xmm_a, xmm_b, m);
   1976   cc.vorps(ymm_a, ymm_b, m);
   1977   cc.vpabsb(xmm_a, m);
   1978   cc.vpabsd(xmm_a, m);
   1979   cc.vpabsw(xmm_a, m);
   1980   cc.vpackssdw(xmm_a, xmm_b, m);
   1981   cc.vpacksswb(xmm_a, xmm_b, m);
   1982   cc.vpackusdw(xmm_a, xmm_b, m);
   1983   cc.vpackuswb(xmm_a, xmm_b, m);
   1984   cc.vpaddb(xmm_a, xmm_b, m);
   1985   cc.vpaddd(xmm_a, xmm_b, m);
   1986   cc.vpaddq(xmm_a, xmm_b, m);
   1987   cc.vpaddw(xmm_a, xmm_b, m);
   1988   cc.vpaddsb(xmm_a, xmm_b, m);
   1989   cc.vpaddsw(xmm_a, xmm_b, m);
   1990   cc.vpaddusb(xmm_a, xmm_b, m);
   1991   cc.vpaddusw(xmm_a, xmm_b, m);
   1992   cc.vpalignr(xmm_a, xmm_b, m, 0);
   1993   cc.vpand(xmm_a, xmm_b, m);
   1994   cc.vpandn(xmm_a, xmm_b, m);
   1995   cc.vpavgb(xmm_a, xmm_b, m);
   1996   cc.vpavgw(xmm_a, xmm_b, m);
   1997   cc.vpblendvb(xmm_a, xmm_b, m, xmm_a);
   1998   cc.vpblendw(xmm_a, xmm_b, m, 0);
   1999   cc.vpcmpeqb(xmm_a, xmm_b, m);
   2000   cc.vpcmpeqd(xmm_a, xmm_b, m);
   2001   cc.vpcmpeqq(xmm_a, xmm_b, m);
   2002   cc.vpcmpeqw(xmm_a, xmm_b, m);
   2003   cc.vpcmpgtb(xmm_a, xmm_b, m);
   2004   cc.vpcmpgtd(xmm_a, xmm_b, m);
   2005   cc.vpcmpgtq(xmm_a, xmm_b, m);
   2006   cc.vpcmpgtw(xmm_a, xmm_b, m);
   2007   cc.vpermilpd(xmm_a, xmm_b, m);
   2008   cc.vpermilpd(ymm_a, ymm_b, m);
   2009   cc.vpermilpd(xmm_a, m, 0);
   2010   cc.vpermilpd(ymm_a, m, 0);
   2011   cc.vpermilps(xmm_a, xmm_b, m);
   2012   cc.vpermilps(ymm_a, ymm_b, m);
   2013   cc.vpermilps(xmm_a, m, 0);
   2014   cc.vpermilps(ymm_a, m, 0);
   2015   cc.vperm2f128(ymm_a, ymm_b, m, 0);
   2016   cc.vpextrb(m, xmm_b, 0);
   2017   cc.vpextrd(m, xmm_b, 0);
   2018   if (cc.is_64bit()) cc.vpextrq(m, xmm_b, 0);
   2019   cc.vpextrw(m, xmm_b, 0);
   2020   cc.vphaddd(xmm_a, xmm_b, m);
   2021   cc.vphaddsw(xmm_a, xmm_b, m);
   2022   cc.vphaddw(xmm_a, xmm_b, m);
   2023   cc.vphminposuw(xmm_a, m);
   2024   cc.vphsubd(xmm_a, xmm_b, m);
   2025   cc.vphsubsw(xmm_a, xmm_b, m);
   2026   cc.vphsubw(xmm_a, xmm_b, m);
   2027   cc.vpinsrb(xmm_a, xmm_b, m, 0);
   2028   cc.vpinsrd(xmm_a, xmm_b, m, 0);
   2029   cc.vpinsrw(xmm_a, xmm_b, m, 0);
   2030   cc.vpmaddubsw(xmm_a, xmm_b, m);
   2031   cc.vpmaddwd(xmm_a, xmm_b, m);
   2032   cc.vpmaxsb(xmm_a, xmm_b, m);
   2033   cc.vpmaxsd(xmm_a, xmm_b, m);
   2034   cc.vpmaxsw(xmm_a, xmm_b, m);
   2035   cc.vpmaxub(xmm_a, xmm_b, m);
   2036   cc.vpmaxud(xmm_a, xmm_b, m);
   2037   cc.vpmaxuw(xmm_a, xmm_b, m);
   2038   cc.vpminsb(xmm_a, xmm_b, m);
   2039   cc.vpminsd(xmm_a, xmm_b, m);
   2040   cc.vpminsw(xmm_a, xmm_b, m);
   2041   cc.vpminub(xmm_a, xmm_b, m);
   2042   cc.vpminud(xmm_a, xmm_b, m);
   2043   cc.vpminuw(xmm_a, xmm_b, m);
   2044   cc.vpmovsxbd(xmm_a, m);
   2045   cc.vpmovsxbq(xmm_a, m);
   2046   cc.vpmovsxbw(xmm_a, m);
   2047   cc.vpmovsxdq(xmm_a, m);
   2048   cc.vpmovsxwd(xmm_a, m);
   2049   cc.vpmovsxwq(xmm_a, m);
   2050   cc.vpmovzxbd(xmm_a, m);
   2051   cc.vpmovzxbq(xmm_a, m);
   2052   cc.vpmovzxbw(xmm_a, m);
   2053   cc.vpmovzxdq(xmm_a, m);
   2054   cc.vpmovzxwd(xmm_a, m);
   2055   cc.vpmovzxwq(xmm_a, m);
   2056   cc.vpmuldq(xmm_a, xmm_b, m);
   2057   cc.vpmulhrsw(xmm_a, xmm_b, m);
   2058   cc.vpmulhuw(xmm_a, xmm_b, m);
   2059   cc.vpmulhw(xmm_a, xmm_b, m);
   2060   cc.vpmulld(xmm_a, xmm_b, m);
   2061   cc.vpmullw(xmm_a, xmm_b, m);
   2062   cc.vpmuludq(xmm_a, xmm_b, m);
   2063   cc.vpor(xmm_a, xmm_b, m);
   2064   cc.vpsadbw(xmm_a, xmm_b, m);
   2065   cc.vpshufb(xmm_a, xmm_b, m);
   2066   cc.vpshufd(xmm_a, m, 0);
   2067   cc.vpshufhw(xmm_a, m, 0);
   2068   cc.vpshuflw(xmm_a, m, 0);
   2069   cc.vpsignb(xmm_a, xmm_b, m);
   2070   cc.vpsignd(xmm_a, xmm_b, m);
   2071   cc.vpsignw(xmm_a, xmm_b, m);
   2072   cc.vpslld(xmm_a, xmm_b, m);
   2073   cc.vpsllq(xmm_a, xmm_b, m);
   2074   cc.vpsllw(xmm_a, xmm_b, m);
   2075   cc.vpsrad(xmm_a, xmm_b, m);
   2076   cc.vpsraw(xmm_a, xmm_b, m);
   2077   cc.vpsrld(xmm_a, xmm_b, m);
   2078   cc.vpsrlq(xmm_a, xmm_b, m);
   2079   cc.vpsrlw(xmm_a, xmm_b, m);
   2080   cc.vpsubb(xmm_a, xmm_b, m);
   2081   cc.vpsubd(xmm_a, xmm_b, m);
   2082   cc.vpsubq(xmm_a, xmm_b, m);
   2083   cc.vpsubw(xmm_a, xmm_b, m);
   2084   cc.vpsubsb(xmm_a, xmm_b, m);
   2085   cc.vpsubsw(xmm_a, xmm_b, m);
   2086   cc.vpsubusb(xmm_a, xmm_b, m);
   2087   cc.vpsubusw(xmm_a, xmm_b, m);
   2088   cc.vptest(xmm_a, m);
   2089   cc.vptest(ymm_a, m);
   2090   cc.vpunpckhbw(xmm_a, xmm_b, m);
   2091   cc.vpunpckhdq(xmm_a, xmm_b, m);
   2092   cc.vpunpckhqdq(xmm_a, xmm_b, m);
   2093   cc.vpunpckhwd(xmm_a, xmm_b, m);
   2094   cc.vpunpcklbw(xmm_a, xmm_b, m);
   2095   cc.vpunpckldq(xmm_a, xmm_b, m);
   2096   cc.vpunpcklqdq(xmm_a, xmm_b, m);
   2097   cc.vpunpcklwd(xmm_a, xmm_b, m);
   2098   cc.vpxor(xmm_a, xmm_b, m);
   2099   cc.vrcpps(xmm_a, m);
   2100   cc.vrcpps(ymm_a, m);
   2101   cc.vrcpss(xmm_a, xmm_b, m);
   2102   cc.vrsqrtps(xmm_a, m);
   2103   cc.vrsqrtps(ymm_a, m);
   2104   cc.vrsqrtss(xmm_a, xmm_b, m);
   2105   cc.vroundpd(xmm_a, m, 0);
   2106   cc.vroundpd(ymm_a, m, 0);
   2107   cc.vroundps(xmm_a, m, 0);
   2108   cc.vroundps(ymm_a, m, 0);
   2109   cc.vroundsd(xmm_a, xmm_b, m, 0);
   2110   cc.vroundss(xmm_a, xmm_b, m, 0);
   2111   cc.vshufpd(xmm_a, xmm_b, m, 0);
   2112   cc.vshufpd(ymm_a, ymm_b, m, 0);
   2113   cc.vshufps(xmm_a, xmm_b, m, 0);
   2114   cc.vshufps(ymm_a, ymm_b, m, 0);
   2115   cc.vsqrtpd(xmm_a, m);
   2116   cc.vsqrtpd(ymm_a, m);
   2117   cc.vsqrtps(xmm_a, m);
   2118   cc.vsqrtps(ymm_a, m);
   2119   cc.vsqrtsd(xmm_a, xmm_b, m);
   2120   cc.vsqrtss(xmm_a, xmm_b, m);
   2121   cc.vsubpd(xmm_a, xmm_b, m);
   2122   cc.vsubpd(ymm_a, ymm_b, m);
   2123   cc.vsubps(xmm_a, xmm_b, m);
   2124   cc.vsubps(ymm_a, ymm_b, m);
   2125   cc.vsubsd(xmm_a, xmm_b, m);
   2126   cc.vsubss(xmm_a, xmm_b, m);
   2127   cc.vtestps(xmm_a, m);
   2128   cc.vtestps(ymm_a, m);
   2129   cc.vtestpd(xmm_a, m);
   2130   cc.vtestpd(ymm_a, m);
   2131   cc.vucomisd(xmm_a, m);
   2132   cc.vucomiss(xmm_a, m);
   2133   cc.vunpckhpd(xmm_a, xmm_b, m);
   2134   cc.vunpckhpd(ymm_a, ymm_b, m);
   2135   cc.vunpckhps(xmm_a, xmm_b, m);
   2136   cc.vunpckhps(ymm_a, ymm_b, m);
   2137   cc.vunpcklpd(xmm_a, xmm_b, m);
   2138   cc.vunpcklpd(ymm_a, ymm_b, m);
   2139   cc.vunpcklps(xmm_a, xmm_b, m);
   2140   cc.vunpcklps(ymm_a, ymm_b, m);
   2141   cc.vxorpd(xmm_a, xmm_b, m);
   2142   cc.vxorpd(ymm_a, ymm_b, m);
   2143   cc.vxorps(xmm_a, xmm_b, m);
   2144   cc.vxorps(ymm_a, ymm_b, m);
   2145 
   2146   // AVX+AESNI.
   2147   cc.vaesdec(xmm_a, xmm_b, m);
   2148   cc.vaesdeclast(xmm_a, xmm_b, m);
   2149   cc.vaesenc(xmm_a, xmm_b, m);
   2150   cc.vaesenclast(xmm_a, xmm_b, m);
   2151   cc.vaesimc(xmm_a, m);
   2152   cc.vaeskeygenassist(xmm_a, m, 0);
   2153 
   2154   // AVX+PCLMULQDQ.
   2155   cc.vpclmulqdq(xmm_a, xmm_b, m, 0);
   2156 
   2157   // AVX2.
   2158   cc.vbroadcasti128(ymm_a, m);
   2159   cc.vextracti128(m, ymm_b, 0);
   2160   cc.vgatherdpd(xmm_a, vx_ptr, xmm_c);
   2161   cc.vgatherdpd(ymm_a, vx_ptr, ymm_c);
   2162   cc.vgatherdps(xmm_a, vx_ptr, xmm_c);
   2163   cc.vgatherdps(ymm_a, vy_ptr, ymm_c);
   2164   cc.vgatherqpd(xmm_a, vx_ptr, xmm_c);
   2165   cc.vgatherqpd(ymm_a, vy_ptr, ymm_c);
   2166   cc.vgatherqps(xmm_a, vx_ptr, xmm_c);
   2167   cc.vgatherqps(xmm_a, vy_ptr, xmm_c);
   2168   cc.vinserti128(ymm_a, ymm_b, m, 0);
   2169   cc.vmovntdqa(ymm_a, m);
   2170   cc.vmpsadbw(ymm_a, ymm_b, m, 0);
   2171   cc.vpabsb(ymm_a, m);
   2172   cc.vpabsd(ymm_a, m);
   2173   cc.vpabsw(ymm_a, m);
   2174   cc.vpackssdw(ymm_a, ymm_b, m);
   2175   cc.vpacksswb(ymm_a, ymm_b, m);
   2176   cc.vpackusdw(ymm_a, ymm_b, m);
   2177   cc.vpackuswb(ymm_a, ymm_b, m);
   2178   cc.vpaddb(ymm_a, ymm_b, m);
   2179   cc.vpaddd(ymm_a, ymm_b, m);
   2180   cc.vpaddq(ymm_a, ymm_b, m);
   2181   cc.vpaddw(ymm_a, ymm_b, m);
   2182   cc.vpaddsb(ymm_a, ymm_b, m);
   2183   cc.vpaddsw(ymm_a, ymm_b, m);
   2184   cc.vpaddusb(ymm_a, ymm_b, m);
   2185   cc.vpaddusw(ymm_a, ymm_b, m);
   2186   cc.vpalignr(ymm_a, ymm_b, m, 0);
   2187   cc.vpand(ymm_a, ymm_b, m);
   2188   cc.vpandn(ymm_a, ymm_b, m);
   2189   cc.vpavgb(ymm_a, ymm_b, m);
   2190   cc.vpavgw(ymm_a, ymm_b, m);
   2191   cc.vpblendd(xmm_a, xmm_b, m, 0);
   2192   cc.vpblendd(ymm_a, ymm_b, m, 0);
   2193   cc.vpblendvb(ymm_a, ymm_b, m, ymm_a);
   2194   cc.vpblendw(ymm_a, ymm_b, m, 0);
   2195   cc.vpbroadcastb(xmm_a, m);
   2196   cc.vpbroadcastb(ymm_a, m);
   2197   cc.vpbroadcastd(xmm_a, m);
   2198   cc.vpbroadcastd(ymm_a, m);
   2199   cc.vpbroadcastq(xmm_a, m);
   2200   cc.vpbroadcastq(ymm_a, m);
   2201   cc.vpbroadcastw(xmm_a, m);
   2202   cc.vpbroadcastw(ymm_a, m);
   2203   cc.vpcmpeqb(ymm_a, ymm_b, m);
   2204   cc.vpcmpeqd(ymm_a, ymm_b, m);
   2205   cc.vpcmpeqq(ymm_a, ymm_b, m);
   2206   cc.vpcmpeqw(ymm_a, ymm_b, m);
   2207   cc.vpcmpgtb(ymm_a, ymm_b, m);
   2208   cc.vpcmpgtd(ymm_a, ymm_b, m);
   2209   cc.vpcmpgtq(ymm_a, ymm_b, m);
   2210   cc.vpcmpgtw(ymm_a, ymm_b, m);
   2211   cc.vperm2i128(ymm_a, ymm_b, m, 0);
   2212   cc.vpermd(ymm_a, ymm_b, m);
   2213   cc.vpermps(ymm_a, ymm_b, m);
   2214   cc.vpermpd(ymm_a, m, 0);
   2215   cc.vpermq(ymm_a, m, 0);
   2216   cc.vpgatherdd(xmm_a, vx_ptr, xmm_c);
   2217   cc.vpgatherdd(ymm_a, vy_ptr, ymm_c);
   2218   cc.vpgatherdq(xmm_a, vx_ptr, xmm_c);
   2219   cc.vpgatherdq(ymm_a, vx_ptr, ymm_c);
   2220   cc.vpgatherqd(xmm_a, vx_ptr, xmm_c);
   2221   cc.vpgatherqd(xmm_a, vy_ptr, xmm_c);
   2222   cc.vpgatherqq(xmm_a, vx_ptr, xmm_c);
   2223   cc.vpgatherqq(ymm_a, vy_ptr, ymm_c);
   2224   cc.vpmovsxbd(ymm_a, m);
   2225   cc.vpmovsxbq(ymm_a, m);
   2226   cc.vpmovsxbw(ymm_a, m);
   2227   cc.vpmovsxdq(ymm_a, m);
   2228   cc.vpmovsxwd(ymm_a, m);
   2229   cc.vpmovsxwq(ymm_a, m);
   2230   cc.vpmovzxbd(ymm_a, m);
   2231   cc.vpmovzxbq(ymm_a, m);
   2232   cc.vpmovzxbw(ymm_a, m);
   2233   cc.vpmovzxdq(ymm_a, m);
   2234   cc.vpmovzxwd(ymm_a, m);
   2235   cc.vpmovzxwq(ymm_a, m);
   2236   cc.vpshufd(ymm_a, m, 0);
   2237   cc.vpshufhw(ymm_a, m, 0);
   2238   cc.vpshuflw(ymm_a, m, 0);
   2239   cc.vphaddd(ymm_a, ymm_b, m);
   2240   cc.vphaddsw(ymm_a, ymm_b, m);
   2241   cc.vphaddw(ymm_a, ymm_b, m);
   2242   cc.vphsubd(ymm_a, ymm_b, m);
   2243   cc.vphsubsw(ymm_a, ymm_b, m);
   2244   cc.vphsubw(ymm_a, ymm_b, m);
   2245   cc.vpmaddubsw(ymm_a, ymm_b, m);
   2246   cc.vpmaddwd(ymm_a, ymm_b, m);
   2247   cc.vpmaskmovd(m, xmm_b, xmm_c);
   2248   cc.vpmaskmovd(m, ymm_b, ymm_c);
   2249   cc.vpmaskmovd(xmm_a, xmm_b, m);
   2250   cc.vpmaskmovd(ymm_a, ymm_b, m);
   2251   cc.vpmaskmovq(m, xmm_b, xmm_c);
   2252   cc.vpmaskmovq(m, ymm_b, ymm_c);
   2253   cc.vpmaskmovq(xmm_a, xmm_b, m);
   2254   cc.vpmaskmovq(ymm_a, ymm_b, m);
   2255   cc.vpmaxsb(ymm_a, ymm_b, m);
   2256   cc.vpmaxsd(ymm_a, ymm_b, m);
   2257   cc.vpmaxsw(ymm_a, ymm_b, m);
   2258   cc.vpmaxub(ymm_a, ymm_b, m);
   2259   cc.vpmaxud(ymm_a, ymm_b, m);
   2260   cc.vpmaxuw(ymm_a, ymm_b, m);
   2261   cc.vpminsb(ymm_a, ymm_b, m);
   2262   cc.vpminsd(ymm_a, ymm_b, m);
   2263   cc.vpminsw(ymm_a, ymm_b, m);
   2264   cc.vpminub(ymm_a, ymm_b, m);
   2265   cc.vpminud(ymm_a, ymm_b, m);
   2266   cc.vpminuw(ymm_a, ymm_b, m);
   2267   cc.vpmuldq(ymm_a, ymm_b, m);
   2268   cc.vpmulhrsw(ymm_a, ymm_b, m);
   2269   cc.vpmulhuw(ymm_a, ymm_b, m);
   2270   cc.vpmulhw(ymm_a, ymm_b, m);
   2271   cc.vpmulld(ymm_a, ymm_b, m);
   2272   cc.vpmullw(ymm_a, ymm_b, m);
   2273   cc.vpmuludq(ymm_a, ymm_b, m);
   2274   cc.vpor(ymm_a, ymm_b, m);
   2275   cc.vpsadbw(ymm_a, ymm_b, m);
   2276   cc.vpshufb(ymm_a, ymm_b, m);
   2277   cc.vpsignb(ymm_a, ymm_b, m);
   2278   cc.vpsignd(ymm_a, ymm_b, m);
   2279   cc.vpsignw(ymm_a, ymm_b, m);
   2280   cc.vpslld(ymm_a, ymm_b, m);
   2281   cc.vpsllq(ymm_a, ymm_b, m);
   2282   cc.vpsllvd(xmm_a, xmm_b, m);
   2283   cc.vpsllvd(ymm_a, ymm_b, m);
   2284   cc.vpsllvq(xmm_a, xmm_b, m);
   2285   cc.vpsllvq(ymm_a, ymm_b, m);
   2286   cc.vpsllw(ymm_a, ymm_b, m);
   2287   cc.vpsrad(ymm_a, ymm_b, m);
   2288   cc.vpsravd(xmm_a, xmm_b, m);
   2289   cc.vpsravd(ymm_a, ymm_b, m);
   2290   cc.vpsraw(ymm_a, ymm_b, m);
   2291   cc.vpsrld(ymm_a, ymm_b, m);
   2292   cc.vpsrlq(ymm_a, ymm_b, m);
   2293   cc.vpsrlvd(xmm_a, xmm_b, m);
   2294   cc.vpsrlvd(ymm_a, ymm_b, m);
   2295   cc.vpsrlvq(xmm_a, xmm_b, m);
   2296   cc.vpsrlvq(ymm_a, ymm_b, m);
   2297   cc.vpsrlw(ymm_a, ymm_b, m);
   2298   cc.vpsubb(ymm_a, ymm_b, m);
   2299   cc.vpsubd(ymm_a, ymm_b, m);
   2300   cc.vpsubq(ymm_a, ymm_b, m);
   2301   cc.vpsubsb(ymm_a, ymm_b, m);
   2302   cc.vpsubsw(ymm_a, ymm_b, m);
   2303   cc.vpsubusb(ymm_a, ymm_b, m);
   2304   cc.vpsubusw(ymm_a, ymm_b, m);
   2305   cc.vpsubw(ymm_a, ymm_b, m);
   2306   cc.vpunpckhbw(ymm_a, ymm_b, m);
   2307   cc.vpunpckhdq(ymm_a, ymm_b, m);
   2308   cc.vpunpckhqdq(ymm_a, ymm_b, m);
   2309   cc.vpunpckhwd(ymm_a, ymm_b, m);
   2310   cc.vpunpcklbw(ymm_a, ymm_b, m);
   2311   cc.vpunpckldq(ymm_a, ymm_b, m);
   2312   cc.vpunpcklqdq(ymm_a, ymm_b, m);
   2313   cc.vpunpcklwd(ymm_a, ymm_b, m);
   2314   cc.vpxor(ymm_a, ymm_b, m);
   2315 }
   2316 
   2317 // Generates a long sequence of AVX instructions.
   2318 template<typename Emitter>
   2319 static void generate_avx_sequenceInternal(
   2320   Emitter& cc,
   2321   InstForm form,
   2322   const x86::Gp& gp,
   2323   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   2324 
   2325   if (form == InstForm::kReg)
   2326     generate_avx_sequenceInternalRegOnly(cc, gp, vec_a, vec_b, vec_c, vec_d);
   2327   else
   2328     generate_avx_sequenceInternalRegMem(cc, gp, vec_a, vec_b, vec_c, vec_d);
   2329 }
   2330 
   2331 static void generate_avx_sequence(BaseEmitter& emitter, InstForm form, bool emit_prolog_epilog) {
   2332   using namespace asmjit::x86;
   2333 
   2334 #ifndef ASMJIT_NO_COMPILER
   2335   if (emitter.is_compiler()) {
   2336     Compiler& cc = *emitter.as<Compiler>();
   2337 
   2338     Gp gp = cc.new_gpz("gp");
   2339     x86::Vec a = cc.new_ymm("a");
   2340     x86::Vec b = cc.new_ymm("b");
   2341     x86::Vec c = cc.new_ymm("c");
   2342     x86::Vec d = cc.new_ymm("d");
   2343 
   2344     cc.add_func(FuncSignature::build<void>());
   2345     generate_avx_sequenceInternal(cc, form, gp, a, b, c, d);
   2346     cc.end_func();
   2347 
   2348     return;
   2349   }
   2350 #endif
   2351 
   2352 #ifndef ASMJIT_NO_BUILDER
   2353   if (emitter.is_builder()) {
   2354     Builder& cc = *emitter.as<Builder>();
   2355 
   2356     if (emit_prolog_epilog) {
   2357       FuncDetail func;
   2358       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   2359 
   2360       FuncFrame frame;
   2361       frame.init(func);
   2362       frame.add_dirty_regs(eax, ymm0, ymm1, ymm2, ymm3);
   2363       frame.finalize();
   2364 
   2365       cc.emit_prolog(frame);
   2366       generate_avx_sequenceInternal(cc, form, eax, ymm0, ymm1, ymm2, ymm3);
   2367       cc.emit_epilog(frame);
   2368     }
   2369     else {
   2370       generate_avx_sequenceInternal(cc, form, eax, ymm0, ymm1, ymm2, ymm3);
   2371     }
   2372 
   2373     return;
   2374   }
   2375 #endif
   2376 
   2377   if (emitter.is_assembler()) {
   2378     Assembler& cc = *emitter.as<Assembler>();
   2379 
   2380     if (emit_prolog_epilog) {
   2381       FuncDetail func;
   2382       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   2383 
   2384       FuncFrame frame;
   2385       frame.init(func);
   2386       frame.add_dirty_regs(eax, ymm0, ymm1, ymm2, ymm3);
   2387       frame.finalize();
   2388 
   2389       cc.emit_prolog(frame);
   2390       generate_avx_sequenceInternal(cc, form, eax, ymm0, ymm1, ymm2, ymm3);
   2391       cc.emit_epilog(frame);
   2392     }
   2393     else {
   2394       generate_avx_sequenceInternal(cc, form, eax, ymm0, ymm1, ymm2, ymm3);
   2395     }
   2396 
   2397     return;
   2398   }
   2399 }
   2400 
   2401 // Generates a long sequence of AVX512 instructions.
   2402 template<typename Emitter>
   2403 static void generate_avx512_sequence_internal_reg_only(
   2404   Emitter& cc,
   2405   const x86::Gp& gp,
   2406   const x86::KReg& kA, const x86::KReg& kB, const x86::KReg& kC,
   2407   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   2408 
   2409   x86::Gp gpd = gp.r32();
   2410   x86::Gp gpq = gp.r64();
   2411   x86::Gp gpz = cc.is_32bit() ? gpd : gpq;
   2412 
   2413   x86::Vec xmm_a = vec_a.xmm();
   2414   x86::Vec xmm_b = vec_b.xmm();
   2415   x86::Vec xmm_c = vec_c.xmm();
   2416   x86::Vec xmm_d = vec_d.xmm();
   2417 
   2418   x86::Vec ymm_a = vec_a.ymm();
   2419   x86::Vec ymm_b = vec_b.ymm();
   2420   x86::Vec ymm_c = vec_c.ymm();
   2421 
   2422   x86::Vec zmm_a = vec_a.zmm();
   2423   x86::Vec zmm_b = vec_b.zmm();
   2424   x86::Vec zmm_c = vec_c.zmm();
   2425 
   2426   cc.xor_(gpd, gpd);
   2427   cc.vxorps(xmm_a, xmm_a, xmm_a);
   2428   cc.vxorps(xmm_b, xmm_b, xmm_b);
   2429   cc.vxorps(xmm_c, xmm_c, xmm_c);
   2430   cc.vxorps(xmm_d, xmm_d, xmm_d);
   2431 
   2432   cc.kaddb(kA, kB, kC);
   2433   cc.kaddd(kA, kB, kC);
   2434   cc.kaddq(kA, kB, kC);
   2435   cc.kaddw(kA, kB, kC);
   2436   cc.kandb(kA, kB, kC);
   2437   cc.kandd(kA, kB, kC);
   2438   cc.kandnb(kA, kB, kC);
   2439   cc.kandnd(kA, kB, kC);
   2440   cc.kandnq(kA, kB, kC);
   2441   cc.kandnw(kA, kB, kC);
   2442   cc.kandq(kA, kB, kC);
   2443   cc.kandw(kA, kB, kC);
   2444   cc.kmovb(kA, kB);
   2445   cc.kmovb(kA, gpd);
   2446   cc.kmovb(gpd, kB);
   2447   cc.kmovd(kA, kB);
   2448   cc.kmovd(kA, gpd);
   2449   cc.kmovd(gpd, kB);
   2450   cc.kmovq(kA, kB);
   2451   if (cc.is_64bit()) cc.kmovq(kA, gpq);
   2452   if (cc.is_64bit()) cc.kmovq(gpq, kB);
   2453   cc.kmovw(kA, kB);
   2454   cc.kmovw(kA, gpd);
   2455   cc.kmovw(gpd, kB);
   2456   cc.knotb(kA, kB);
   2457   cc.knotd(kA, kB);
   2458   cc.knotq(kA, kB);
   2459   cc.knotw(kA, kB);
   2460   cc.korb(kA, kB, kC);
   2461   cc.kord(kA, kB, kC);
   2462   cc.korq(kA, kB, kC);
   2463   cc.kortestb(kA, kB);
   2464   cc.kortestd(kA, kB);
   2465   cc.kortestq(kA, kB);
   2466   cc.kortestw(kA, kB);
   2467   cc.korw(kA, kB, kC);
   2468   cc.kshiftlb(kA, kB, 0);
   2469   cc.kshiftld(kA, kB, 0);
   2470   cc.kshiftlq(kA, kB, 0);
   2471   cc.kshiftlw(kA, kB, 0);
   2472   cc.kshiftrb(kA, kB, 0);
   2473   cc.kshiftrd(kA, kB, 0);
   2474   cc.kshiftrq(kA, kB, 0);
   2475   cc.kshiftrw(kA, kB, 0);
   2476   cc.ktestb(kA, kB);
   2477   cc.ktestd(kA, kB);
   2478   cc.ktestq(kA, kB);
   2479   cc.ktestw(kA, kB);
   2480   cc.kunpckbw(kA, kB, kC);
   2481   cc.kunpckdq(kA, kB, kC);
   2482   cc.kunpckwd(kA, kB, kC);
   2483   cc.kxnorb(kA, kB, kC);
   2484   cc.kxnord(kA, kB, kC);
   2485   cc.kxnorq(kA, kB, kC);
   2486   cc.kxnorw(kA, kB, kC);
   2487   cc.kxorb(kA, kB, kC);
   2488   cc.kxord(kA, kB, kC);
   2489   cc.kxorq(kA, kB, kC);
   2490   cc.kxorw(kA, kB, kC);
   2491   cc.nop();
   2492 
   2493   cc.evex().vaddpd(xmm_a, xmm_b, xmm_c);
   2494   cc.evex().vaddpd(ymm_a, ymm_b, ymm_c);
   2495   cc.evex().vaddpd(zmm_a, zmm_b, zmm_c);
   2496   cc.evex().vaddps(xmm_a, xmm_b, xmm_c);
   2497   cc.evex().vaddps(ymm_a, ymm_b, ymm_c);
   2498   cc.evex().vaddps(zmm_a, zmm_b, zmm_c);
   2499   cc.evex().vaddsd(xmm_a, xmm_b, xmm_c);
   2500   cc.evex().vaddss(xmm_a, xmm_b, xmm_c);
   2501   cc.evex().valignd(xmm_a, xmm_b, xmm_c, 0);
   2502   cc.evex().valignd(ymm_a, ymm_b, ymm_c, 0);
   2503   cc.evex().valignd(zmm_a, zmm_b, zmm_c, 0);
   2504   cc.evex().valignq(xmm_a, xmm_b, xmm_c, 0);
   2505   cc.evex().valignq(ymm_a, ymm_b, ymm_c, 0);
   2506   cc.evex().valignq(zmm_a, zmm_b, zmm_c, 0);
   2507   cc.evex().vandnpd(xmm_a, xmm_b, xmm_c);
   2508   cc.evex().vandnpd(ymm_a, ymm_b, ymm_c);
   2509   cc.evex().vandnpd(zmm_a, zmm_b, zmm_c);
   2510   cc.evex().vandnps(xmm_a, xmm_b, xmm_c);
   2511   cc.evex().vandnps(ymm_a, ymm_b, ymm_c);
   2512   cc.evex().vandnps(zmm_a, zmm_b, zmm_c);
   2513   cc.evex().vandpd(xmm_a, xmm_b, xmm_c);
   2514   cc.evex().vandpd(ymm_a, ymm_b, ymm_c);
   2515   cc.evex().vandpd(zmm_a, zmm_b, zmm_c);
   2516   cc.evex().vandps(xmm_a, xmm_b, xmm_c);
   2517   cc.evex().vandps(ymm_a, ymm_b, ymm_c);
   2518   cc.evex().vandps(zmm_a, zmm_b, zmm_c);
   2519   cc.evex().vblendmpd(xmm_a, xmm_b, xmm_c);
   2520   cc.evex().vblendmpd(ymm_a, ymm_b, ymm_c);
   2521   cc.evex().vblendmpd(zmm_a, zmm_b, zmm_c);
   2522   cc.evex().vblendmps(xmm_a, xmm_b, xmm_c);
   2523   cc.evex().vblendmps(ymm_a, ymm_b, ymm_c);
   2524   cc.evex().vblendmps(zmm_a, zmm_b, zmm_c);
   2525   cc.evex().vbroadcastf32x2(ymm_a, xmm_b);
   2526   cc.evex().vbroadcastf32x2(zmm_a, xmm_b);
   2527   cc.evex().vbroadcasti32x2(xmm_a, xmm_b);
   2528   cc.evex().vbroadcasti32x2(ymm_a, xmm_b);
   2529   cc.evex().vbroadcasti32x2(zmm_a, xmm_b);
   2530   cc.evex().vbroadcastsd(ymm_a, xmm_b);
   2531   cc.evex().vbroadcastsd(zmm_a, xmm_b);
   2532   cc.evex().vbroadcastss(xmm_a, xmm_b);
   2533   cc.evex().vbroadcastss(ymm_a, xmm_b);
   2534   cc.evex().vbroadcastss(zmm_a, xmm_b);
   2535   cc.evex().vcmppd(kA, xmm_b, xmm_c, 0);
   2536   cc.evex().vcmppd(kA, ymm_b, ymm_c, 0);
   2537   cc.evex().vcmppd(kA, zmm_b, zmm_c, 0);
   2538   cc.evex().vcmpps(kA, xmm_b, xmm_c, 0);
   2539   cc.evex().vcmpps(kA, ymm_b, ymm_c, 0);
   2540   cc.evex().vcmpps(kA, zmm_b, zmm_c, 0);
   2541   cc.evex().vcmpsd(kA, xmm_b, xmm_c, 0);
   2542   cc.evex().vcmpss(kA, xmm_b, xmm_c, 0);
   2543   cc.evex().vcomisd(xmm_a, xmm_b);
   2544   cc.evex().vcomiss(xmm_a, xmm_b);
   2545   cc.evex().vcompresspd(xmm_a, xmm_b);
   2546   cc.evex().vcompresspd(ymm_a, ymm_b);
   2547   cc.evex().vcompresspd(zmm_a, zmm_b);
   2548   cc.evex().vcompressps(xmm_a, xmm_b);
   2549   cc.evex().vcompressps(ymm_a, ymm_b);
   2550   cc.evex().vcompressps(zmm_a, zmm_b);
   2551   cc.evex().vcvtdq2pd(xmm_a, xmm_b);
   2552   cc.evex().vcvtdq2pd(ymm_a, xmm_b);
   2553   cc.evex().vcvtdq2pd(zmm_a, ymm_b);
   2554   cc.evex().vcvtdq2ps(xmm_a, xmm_b);
   2555   cc.evex().vcvtdq2ps(ymm_a, ymm_b);
   2556   cc.evex().vcvtdq2ps(zmm_a, zmm_b);
   2557   cc.evex().vcvtpd2dq(xmm_a, xmm_b);
   2558   cc.evex().vcvtpd2dq(xmm_a, ymm_b);
   2559   cc.evex().vcvtpd2dq(ymm_a, zmm_b);
   2560   cc.evex().vcvtpd2qq(xmm_a, xmm_b);
   2561   cc.evex().vcvtpd2qq(ymm_a, ymm_b);
   2562   cc.evex().vcvtpd2qq(zmm_a, zmm_b);
   2563   cc.evex().vcvtpd2udq(xmm_a, xmm_b);
   2564   cc.evex().vcvtpd2udq(xmm_a, ymm_b);
   2565   cc.evex().vcvtpd2udq(ymm_a, zmm_b);
   2566   cc.evex().vcvtpd2uqq(xmm_a, xmm_b);
   2567   cc.evex().vcvtpd2uqq(ymm_a, ymm_b);
   2568   cc.evex().vcvtpd2uqq(zmm_a, zmm_b);
   2569   cc.evex().vcvtph2ps(xmm_a, xmm_b);
   2570   cc.evex().vcvtph2ps(ymm_a, xmm_b);
   2571   cc.evex().vcvtph2ps(zmm_a, ymm_b);
   2572   cc.evex().vcvtps2dq(xmm_a, xmm_b);
   2573   cc.evex().vcvtps2dq(ymm_a, ymm_b);
   2574   cc.evex().vcvtps2dq(zmm_a, zmm_b);
   2575   cc.evex().vcvtps2pd(xmm_a, xmm_b);
   2576   cc.evex().vcvtps2pd(ymm_a, xmm_b);
   2577   cc.evex().vcvtps2pd(zmm_a, ymm_b);
   2578   cc.evex().vcvtps2ph(xmm_a, xmm_b, 0);
   2579   cc.evex().vcvtps2ph(xmm_a, ymm_b, 0);
   2580   cc.evex().vcvtps2ph(ymm_a, zmm_b, 0);
   2581   cc.evex().vcvtps2qq(xmm_a, xmm_b);
   2582   cc.evex().vcvtps2qq(ymm_a, xmm_b);
   2583   cc.evex().vcvtps2qq(zmm_a, ymm_b);
   2584   cc.evex().vcvtps2udq(xmm_a, xmm_b);
   2585   cc.evex().vcvtps2udq(ymm_a, ymm_b);
   2586   cc.evex().vcvtps2udq(zmm_a, zmm_b);
   2587   cc.evex().vcvtps2uqq(xmm_a, xmm_b);
   2588   cc.evex().vcvtps2uqq(ymm_a, xmm_b);
   2589   cc.evex().vcvtps2uqq(zmm_a, ymm_b);
   2590   cc.evex().vcvtqq2pd(xmm_a, xmm_b);
   2591   cc.evex().vcvtqq2pd(ymm_a, ymm_b);
   2592   cc.evex().vcvtqq2pd(zmm_a, zmm_b);
   2593   cc.evex().vcvtqq2ps(xmm_a, xmm_b);
   2594   cc.evex().vcvtqq2ps(xmm_a, ymm_b);
   2595   cc.evex().vcvtqq2ps(ymm_a, zmm_b);
   2596   cc.evex().vcvtsd2si(gpd, xmm_b);
   2597   cc.evex().vcvtsd2si(gpz, xmm_b);
   2598   cc.evex().vcvtsd2ss(xmm_a, xmm_b, xmm_c);
   2599   cc.evex().vcvtsd2usi(gpd, xmm_b);
   2600   cc.evex().vcvtsd2usi(gpz, xmm_b);
   2601   cc.evex().vcvtsi2sd(xmm_a, xmm_b, gpd);
   2602   cc.evex().vcvtsi2sd(xmm_a, xmm_b, gpz);
   2603   cc.evex().vcvtsi2ss(xmm_a, xmm_b, gpd);
   2604   cc.evex().vcvtsi2ss(xmm_a, xmm_b, gpz);
   2605   cc.evex().vcvtss2sd(xmm_a, xmm_b, xmm_c);
   2606   cc.evex().vcvtss2si(gpd, xmm_b);
   2607   cc.evex().vcvtss2si(gpz, xmm_b);
   2608   cc.evex().vcvtss2usi(gpd, xmm_b);
   2609   cc.evex().vcvtss2usi(gpz, xmm_b);
   2610   cc.evex().vcvttpd2dq(xmm_a, xmm_b);
   2611   cc.evex().vcvttpd2dq(xmm_a, ymm_b);
   2612   cc.evex().vcvttpd2dq(ymm_a, zmm_b);
   2613   cc.evex().vcvttpd2qq(xmm_a, xmm_b);
   2614   cc.evex().vcvttpd2qq(ymm_a, ymm_b);
   2615   cc.evex().vcvttpd2qq(zmm_a, zmm_b);
   2616   cc.evex().vcvttpd2udq(xmm_a, xmm_b);
   2617   cc.evex().vcvttpd2udq(xmm_a, ymm_b);
   2618   cc.evex().vcvttpd2udq(ymm_a, zmm_b);
   2619   cc.evex().vcvttpd2uqq(xmm_a, xmm_b);
   2620   cc.evex().vcvttpd2uqq(ymm_a, ymm_b);
   2621   cc.evex().vcvttpd2uqq(zmm_a, zmm_b);
   2622   cc.evex().vcvttps2dq(xmm_a, xmm_b);
   2623   cc.evex().vcvttps2dq(ymm_a, ymm_b);
   2624   cc.evex().vcvttps2dq(zmm_a, zmm_b);
   2625   cc.evex().vcvttps2qq(xmm_a, xmm_b);
   2626   cc.evex().vcvttps2qq(ymm_a, xmm_b);
   2627   cc.evex().vcvttps2qq(zmm_a, ymm_b);
   2628   cc.evex().vcvttps2udq(xmm_a, xmm_b);
   2629   cc.evex().vcvttps2udq(ymm_a, ymm_b);
   2630   cc.evex().vcvttps2udq(zmm_a, zmm_b);
   2631   cc.evex().vcvttps2uqq(xmm_a, xmm_b);
   2632   cc.evex().vcvttps2uqq(ymm_a, xmm_b);
   2633   cc.evex().vcvttps2uqq(zmm_a, ymm_b);
   2634   cc.evex().vcvttsd2si(gpd, xmm_b);
   2635   cc.evex().vcvttsd2si(gpz, xmm_b);
   2636   cc.evex().vcvttsd2usi(gpd, xmm_b);
   2637   cc.evex().vcvttsd2usi(gpz, xmm_b);
   2638   cc.evex().vcvttss2si(gpd, xmm_b);
   2639   cc.evex().vcvttss2si(gpz, xmm_b);
   2640   cc.evex().vcvttss2usi(gpd, xmm_b);
   2641   cc.evex().vcvttss2usi(gpz, xmm_b);
   2642   cc.evex().vcvtudq2pd(xmm_a, xmm_b);
   2643   cc.evex().vcvtudq2pd(ymm_a, xmm_b);
   2644   cc.evex().vcvtudq2pd(zmm_a, ymm_b);
   2645   cc.evex().vcvtudq2ps(xmm_a, xmm_b);
   2646   cc.evex().vcvtudq2ps(ymm_a, ymm_b);
   2647   cc.evex().vcvtudq2ps(zmm_a, zmm_b);
   2648   cc.evex().vcvtuqq2pd(xmm_a, xmm_b);
   2649   cc.evex().vcvtuqq2pd(ymm_a, ymm_b);
   2650   cc.evex().vcvtuqq2pd(zmm_a, zmm_b);
   2651   cc.evex().vcvtuqq2ps(xmm_a, xmm_b);
   2652   cc.evex().vcvtuqq2ps(xmm_a, ymm_b);
   2653   cc.evex().vcvtuqq2ps(ymm_a, zmm_b);
   2654   cc.evex().vcvtusi2sd(xmm_a, xmm_b, gpd);
   2655   cc.evex().vcvtusi2sd(xmm_a, xmm_b, gpz);
   2656   cc.evex().vcvtusi2ss(xmm_a, xmm_b, gpd);
   2657   cc.evex().vcvtusi2ss(xmm_a, xmm_b, gpz);
   2658   cc.evex().vdbpsadbw(xmm_a, xmm_b, xmm_c, 0);
   2659   cc.evex().vdbpsadbw(ymm_a, ymm_b, ymm_c, 0);
   2660   cc.evex().vdbpsadbw(zmm_a, zmm_b, zmm_c, 0);
   2661   cc.evex().vdivpd(xmm_a, xmm_b, xmm_c);
   2662   cc.evex().vdivpd(ymm_a, ymm_b, ymm_c);
   2663   cc.evex().vdivpd(zmm_a, zmm_b, zmm_c);
   2664   cc.evex().vdivps(xmm_a, xmm_b, xmm_c);
   2665   cc.evex().vdivps(ymm_a, ymm_b, ymm_c);
   2666   cc.evex().vdivps(zmm_a, zmm_b, zmm_c);
   2667   cc.evex().vdivsd(xmm_a, xmm_b, xmm_c);
   2668   cc.evex().vdivss(xmm_a, xmm_b, xmm_c);
   2669   cc.evex().vexpandpd(xmm_a, xmm_b);
   2670   cc.evex().vexpandpd(ymm_a, ymm_b);
   2671   cc.evex().vexpandpd(zmm_a, zmm_b);
   2672   cc.evex().vexpandps(xmm_a, xmm_b);
   2673   cc.evex().vexpandps(ymm_a, ymm_b);
   2674   cc.evex().vexpandps(zmm_a, zmm_b);
   2675   cc.evex().vextractf32x4(xmm_a, ymm_b, 0);
   2676   cc.evex().vextractf32x4(xmm_a, zmm_b, 0);
   2677   cc.evex().vextractf32x8(ymm_a, zmm_b, 0);
   2678   cc.evex().vextractf64x2(xmm_a, ymm_b, 0);
   2679   cc.evex().vextractf64x2(xmm_a, zmm_b, 0);
   2680   cc.evex().vextractf64x4(ymm_a, zmm_b, 0);
   2681   cc.evex().vextracti32x4(xmm_a, ymm_b, 0);
   2682   cc.evex().vextracti32x4(xmm_a, zmm_b, 0);
   2683   cc.evex().vextracti32x8(ymm_a, zmm_b, 0);
   2684   cc.evex().vextracti64x2(xmm_a, ymm_b, 0);
   2685   cc.evex().vextracti64x2(xmm_a, zmm_b, 0);
   2686   cc.evex().vextracti64x4(ymm_a, zmm_b, 0);
   2687   cc.evex().vextractps(gpd, xmm_b, 0);
   2688   cc.evex().vfixupimmpd(xmm_a, xmm_b, xmm_c, 0);
   2689   cc.evex().vfixupimmpd(ymm_a, ymm_b, ymm_c, 0);
   2690   cc.evex().vfixupimmpd(zmm_a, zmm_b, zmm_c, 0);
   2691   cc.evex().vfixupimmps(xmm_a, xmm_b, xmm_c, 0);
   2692   cc.evex().vfixupimmps(ymm_a, ymm_b, ymm_c, 0);
   2693   cc.evex().vfixupimmps(zmm_a, zmm_b, zmm_c, 0);
   2694   cc.evex().vfixupimmsd(xmm_a, xmm_b, xmm_c, 0);
   2695   cc.evex().vfixupimmss(xmm_a, xmm_b, xmm_c, 0);
   2696   cc.evex().vfmadd132pd(xmm_a, xmm_b, xmm_c);
   2697   cc.evex().vfmadd132pd(ymm_a, ymm_b, ymm_c);
   2698   cc.evex().vfmadd132pd(zmm_a, zmm_b, zmm_c);
   2699   cc.evex().vfmadd132ps(xmm_a, xmm_b, xmm_c);
   2700   cc.evex().vfmadd132ps(ymm_a, ymm_b, ymm_c);
   2701   cc.evex().vfmadd132ps(zmm_a, zmm_b, zmm_c);
   2702   cc.evex().vfmadd132sd(xmm_a, xmm_b, xmm_c);
   2703   cc.evex().vfmadd132ss(xmm_a, xmm_b, xmm_c);
   2704   cc.evex().vfmadd213pd(xmm_a, xmm_b, xmm_c);
   2705   cc.evex().vfmadd213pd(ymm_a, ymm_b, ymm_c);
   2706   cc.evex().vfmadd213pd(zmm_a, zmm_b, zmm_c);
   2707   cc.evex().vfmadd213ps(xmm_a, xmm_b, xmm_c);
   2708   cc.evex().vfmadd213ps(ymm_a, ymm_b, ymm_c);
   2709   cc.evex().vfmadd213ps(zmm_a, zmm_b, zmm_c);
   2710   cc.evex().vfmadd213sd(xmm_a, xmm_b, xmm_c);
   2711   cc.evex().vfmadd213ss(xmm_a, xmm_b, xmm_c);
   2712   cc.evex().vfmadd231pd(xmm_a, xmm_b, xmm_c);
   2713   cc.evex().vfmadd231pd(ymm_a, ymm_b, ymm_c);
   2714   cc.evex().vfmadd231pd(zmm_a, zmm_b, zmm_c);
   2715   cc.evex().vfmadd231ps(xmm_a, xmm_b, xmm_c);
   2716   cc.evex().vfmadd231ps(ymm_a, ymm_b, ymm_c);
   2717   cc.evex().vfmadd231ps(zmm_a, zmm_b, zmm_c);
   2718   cc.evex().vfmadd231sd(xmm_a, xmm_b, xmm_c);
   2719   cc.evex().vfmadd231ss(xmm_a, xmm_b, xmm_c);
   2720   cc.evex().vfmaddsub132pd(xmm_a, xmm_b, xmm_c);
   2721   cc.evex().vfmaddsub132pd(ymm_a, ymm_b, ymm_c);
   2722   cc.evex().vfmaddsub132pd(zmm_a, zmm_b, zmm_c);
   2723   cc.evex().vfmaddsub132ps(xmm_a, xmm_b, xmm_c);
   2724   cc.evex().vfmaddsub132ps(ymm_a, ymm_b, ymm_c);
   2725   cc.evex().vfmaddsub132ps(zmm_a, zmm_b, zmm_c);
   2726   cc.evex().vfmaddsub213pd(xmm_a, xmm_b, xmm_c);
   2727   cc.evex().vfmaddsub213pd(ymm_a, ymm_b, ymm_c);
   2728   cc.evex().vfmaddsub213pd(zmm_a, zmm_b, zmm_c);
   2729   cc.evex().vfmaddsub213ps(xmm_a, xmm_b, xmm_c);
   2730   cc.evex().vfmaddsub213ps(ymm_a, ymm_b, ymm_c);
   2731   cc.evex().vfmaddsub213ps(zmm_a, zmm_b, zmm_c);
   2732   cc.evex().vfmaddsub231pd(xmm_a, xmm_b, xmm_c);
   2733   cc.evex().vfmaddsub231pd(ymm_a, ymm_b, ymm_c);
   2734   cc.evex().vfmaddsub231pd(zmm_a, zmm_b, zmm_c);
   2735   cc.evex().vfmaddsub231ps(xmm_a, xmm_b, xmm_c);
   2736   cc.evex().vfmaddsub231ps(ymm_a, ymm_b, ymm_c);
   2737   cc.evex().vfmaddsub231ps(zmm_a, zmm_b, zmm_c);
   2738   cc.evex().vfmsub132pd(xmm_a, xmm_b, xmm_c);
   2739   cc.evex().vfmsub132pd(ymm_a, ymm_b, ymm_c);
   2740   cc.evex().vfmsub132pd(zmm_a, zmm_b, zmm_c);
   2741   cc.evex().vfmsub132ps(xmm_a, xmm_b, xmm_c);
   2742   cc.evex().vfmsub132ps(ymm_a, ymm_b, ymm_c);
   2743   cc.evex().vfmsub132ps(zmm_a, zmm_b, zmm_c);
   2744   cc.evex().vfmsub132sd(xmm_a, xmm_b, xmm_c);
   2745   cc.evex().vfmsub132ss(xmm_a, xmm_b, xmm_c);
   2746   cc.evex().vfmsub213pd(xmm_a, xmm_b, xmm_c);
   2747   cc.evex().vfmsub213pd(ymm_a, ymm_b, ymm_c);
   2748   cc.evex().vfmsub213pd(zmm_a, zmm_b, zmm_c);
   2749   cc.evex().vfmsub213ps(xmm_a, xmm_b, xmm_c);
   2750   cc.evex().vfmsub213ps(ymm_a, ymm_b, ymm_c);
   2751   cc.evex().vfmsub213ps(zmm_a, zmm_b, zmm_c);
   2752   cc.evex().vfmsub213sd(xmm_a, xmm_b, xmm_c);
   2753   cc.evex().vfmsub213ss(xmm_a, xmm_b, xmm_c);
   2754   cc.evex().vfmsub231pd(xmm_a, xmm_b, xmm_c);
   2755   cc.evex().vfmsub231pd(ymm_a, ymm_b, ymm_c);
   2756   cc.evex().vfmsub231pd(zmm_a, zmm_b, zmm_c);
   2757   cc.evex().vfmsub231ps(xmm_a, xmm_b, xmm_c);
   2758   cc.evex().vfmsub231ps(ymm_a, ymm_b, ymm_c);
   2759   cc.evex().vfmsub231ps(zmm_a, zmm_b, zmm_c);
   2760   cc.evex().vfmsub231sd(xmm_a, xmm_b, xmm_c);
   2761   cc.evex().vfmsub231ss(xmm_a, xmm_b, xmm_c);
   2762   cc.evex().vfmsubadd132pd(xmm_a, xmm_b, xmm_c);
   2763   cc.evex().vfmsubadd132pd(ymm_a, ymm_b, ymm_c);
   2764   cc.evex().vfmsubadd132pd(zmm_a, zmm_b, zmm_c);
   2765   cc.evex().vfmsubadd132ps(xmm_a, xmm_b, xmm_c);
   2766   cc.evex().vfmsubadd132ps(ymm_a, ymm_b, ymm_c);
   2767   cc.evex().vfmsubadd132ps(zmm_a, zmm_b, zmm_c);
   2768   cc.evex().vfmsubadd213pd(xmm_a, xmm_b, xmm_c);
   2769   cc.evex().vfmsubadd213pd(ymm_a, ymm_b, ymm_c);
   2770   cc.evex().vfmsubadd213pd(zmm_a, zmm_b, zmm_c);
   2771   cc.evex().vfmsubadd213ps(xmm_a, xmm_b, xmm_c);
   2772   cc.evex().vfmsubadd213ps(ymm_a, ymm_b, ymm_c);
   2773   cc.evex().vfmsubadd213ps(zmm_a, zmm_b, zmm_c);
   2774   cc.evex().vfmsubadd231pd(xmm_a, xmm_b, xmm_c);
   2775   cc.evex().vfmsubadd231pd(ymm_a, ymm_b, ymm_c);
   2776   cc.evex().vfmsubadd231pd(zmm_a, zmm_b, zmm_c);
   2777   cc.evex().vfmsubadd231ps(xmm_a, xmm_b, xmm_c);
   2778   cc.evex().vfmsubadd231ps(ymm_a, ymm_b, ymm_c);
   2779   cc.evex().vfmsubadd231ps(zmm_a, zmm_b, zmm_c);
   2780   cc.evex().vfnmadd132pd(xmm_a, xmm_b, xmm_c);
   2781   cc.evex().vfnmadd132pd(ymm_a, ymm_b, ymm_c);
   2782   cc.evex().vfnmadd132pd(zmm_a, zmm_b, zmm_c);
   2783   cc.evex().vfnmadd132ps(xmm_a, xmm_b, xmm_c);
   2784   cc.evex().vfnmadd132ps(ymm_a, ymm_b, ymm_c);
   2785   cc.evex().vfnmadd132ps(zmm_a, zmm_b, zmm_c);
   2786   cc.evex().vfnmadd132sd(xmm_a, xmm_b, xmm_c);
   2787   cc.evex().vfnmadd132ss(xmm_a, xmm_b, xmm_c);
   2788   cc.evex().vfnmadd213pd(xmm_a, xmm_b, xmm_c);
   2789   cc.evex().vfnmadd213pd(ymm_a, ymm_b, ymm_c);
   2790   cc.evex().vfnmadd213pd(zmm_a, zmm_b, zmm_c);
   2791   cc.evex().vfnmadd213ps(xmm_a, xmm_b, xmm_c);
   2792   cc.evex().vfnmadd213ps(ymm_a, ymm_b, ymm_c);
   2793   cc.evex().vfnmadd213ps(zmm_a, zmm_b, zmm_c);
   2794   cc.evex().vfnmadd213sd(xmm_a, xmm_b, xmm_c);
   2795   cc.evex().vfnmadd213ss(xmm_a, xmm_b, xmm_c);
   2796   cc.evex().vfnmadd231pd(xmm_a, xmm_b, xmm_c);
   2797   cc.evex().vfnmadd231pd(ymm_a, ymm_b, ymm_c);
   2798   cc.evex().vfnmadd231pd(zmm_a, zmm_b, zmm_c);
   2799   cc.evex().vfnmadd231ps(xmm_a, xmm_b, xmm_c);
   2800   cc.evex().vfnmadd231ps(ymm_a, ymm_b, ymm_c);
   2801   cc.evex().vfnmadd231ps(zmm_a, zmm_b, zmm_c);
   2802   cc.evex().vfnmadd231sd(xmm_a, xmm_b, xmm_c);
   2803   cc.evex().vfnmadd231ss(xmm_a, xmm_b, xmm_c);
   2804   cc.evex().vfnmsub132pd(xmm_a, xmm_b, xmm_c);
   2805   cc.evex().vfnmsub132pd(ymm_a, ymm_b, ymm_c);
   2806   cc.evex().vfnmsub132pd(zmm_a, zmm_b, zmm_c);
   2807   cc.evex().vfnmsub132ps(xmm_a, xmm_b, xmm_c);
   2808   cc.evex().vfnmsub132ps(ymm_a, ymm_b, ymm_c);
   2809   cc.evex().vfnmsub132ps(zmm_a, zmm_b, zmm_c);
   2810   cc.evex().vfnmsub132sd(xmm_a, xmm_b, xmm_c);
   2811   cc.evex().vfnmsub132ss(xmm_a, xmm_b, xmm_c);
   2812   cc.evex().vfnmsub213pd(xmm_a, xmm_b, xmm_c);
   2813   cc.evex().vfnmsub213pd(ymm_a, ymm_b, ymm_c);
   2814   cc.evex().vfnmsub213pd(zmm_a, zmm_b, zmm_c);
   2815   cc.evex().vfnmsub213ps(xmm_a, xmm_b, xmm_c);
   2816   cc.evex().vfnmsub213ps(ymm_a, ymm_b, ymm_c);
   2817   cc.evex().vfnmsub213ps(zmm_a, zmm_b, zmm_c);
   2818   cc.evex().vfnmsub213sd(xmm_a, xmm_b, xmm_c);
   2819   cc.evex().vfnmsub213ss(xmm_a, xmm_b, xmm_c);
   2820   cc.evex().vfnmsub231pd(xmm_a, xmm_b, xmm_c);
   2821   cc.evex().vfnmsub231pd(ymm_a, ymm_b, ymm_c);
   2822   cc.evex().vfnmsub231pd(zmm_a, zmm_b, zmm_c);
   2823   cc.evex().vfnmsub231ps(xmm_a, xmm_b, xmm_c);
   2824   cc.evex().vfnmsub231ps(ymm_a, ymm_b, ymm_c);
   2825   cc.evex().vfnmsub231ps(zmm_a, zmm_b, zmm_c);
   2826   cc.evex().vfnmsub231sd(xmm_a, xmm_b, xmm_c);
   2827   cc.evex().vfnmsub231ss(xmm_a, xmm_b, xmm_c);
   2828   cc.evex().vfpclasspd(kA, xmm_b, 0);
   2829   cc.evex().vfpclasspd(kA, ymm_b, 0);
   2830   cc.evex().vfpclasspd(kA, zmm_b, 0);
   2831   cc.evex().vfpclassps(kA, xmm_b, 0);
   2832   cc.evex().vfpclassps(kA, ymm_b, 0);
   2833   cc.evex().vfpclassps(kA, zmm_b, 0);
   2834   cc.evex().vfpclasssd(kA, xmm_b, 0);
   2835   cc.evex().vfpclassss(kA, xmm_b, 0);
   2836   cc.evex().vgetexppd(xmm_a, xmm_b);
   2837   cc.evex().vgetexppd(ymm_a, ymm_b);
   2838   cc.evex().vgetexppd(zmm_a, zmm_b);
   2839   cc.evex().vgetexpps(xmm_a, xmm_b);
   2840   cc.evex().vgetexpps(ymm_a, ymm_b);
   2841   cc.evex().vgetexpps(zmm_a, zmm_b);
   2842   cc.evex().vgetexpsd(xmm_a, xmm_b, xmm_c);
   2843   cc.evex().vgetexpss(xmm_a, xmm_b, xmm_c);
   2844   cc.evex().vgetmantpd(xmm_a, xmm_b, 0);
   2845   cc.evex().vgetmantpd(ymm_a, ymm_b, 0);
   2846   cc.evex().vgetmantpd(zmm_a, zmm_b, 0);
   2847   cc.evex().vgetmantps(xmm_a, xmm_b, 0);
   2848   cc.evex().vgetmantps(ymm_a, ymm_b, 0);
   2849   cc.evex().vgetmantps(zmm_a, zmm_b, 0);
   2850   cc.evex().vgetmantsd(xmm_a, xmm_b, xmm_c, 0);
   2851   cc.evex().vgetmantss(xmm_a, xmm_b, xmm_c, 0);
   2852   cc.evex().vinsertf32x4(ymm_a, ymm_b, xmm_c, 0);
   2853   cc.evex().vinsertf32x4(zmm_a, zmm_b, xmm_c, 0);
   2854   cc.evex().vinsertf32x8(zmm_a, zmm_b, ymm_c, 0);
   2855   cc.evex().vinsertf64x2(ymm_a, ymm_b, xmm_c, 0);
   2856   cc.evex().vinsertf64x2(zmm_a, zmm_b, xmm_c, 0);
   2857   cc.evex().vinsertf64x4(zmm_a, zmm_b, ymm_c, 0);
   2858   cc.evex().vinserti32x4(ymm_a, ymm_b, xmm_c, 0);
   2859   cc.evex().vinserti32x4(zmm_a, zmm_b, xmm_c, 0);
   2860   cc.evex().vinserti32x8(zmm_a, zmm_b, ymm_c, 0);
   2861   cc.evex().vinserti64x2(ymm_a, ymm_b, xmm_c, 0);
   2862   cc.evex().vinserti64x2(zmm_a, zmm_b, xmm_c, 0);
   2863   cc.evex().vinserti64x4(zmm_a, zmm_b, ymm_c, 0);
   2864   cc.evex().vinsertps(xmm_a, xmm_b, xmm_c, 0);
   2865   cc.evex().vmaxpd(xmm_a, xmm_b, xmm_c);
   2866   cc.evex().vmaxpd(ymm_a, ymm_b, ymm_c);
   2867   cc.evex().vmaxpd(zmm_a, zmm_b, zmm_c);
   2868   cc.evex().vmaxps(xmm_a, xmm_b, xmm_c);
   2869   cc.evex().vmaxps(ymm_a, ymm_b, ymm_c);
   2870   cc.evex().vmaxps(zmm_a, zmm_b, zmm_c);
   2871   cc.evex().vmaxsd(xmm_a, xmm_b, xmm_c);
   2872   cc.evex().vmaxss(xmm_a, xmm_b, xmm_c);
   2873   cc.evex().vminpd(xmm_a, xmm_b, xmm_c);
   2874   cc.evex().vminpd(ymm_a, ymm_b, ymm_c);
   2875   cc.evex().vminpd(zmm_a, zmm_b, zmm_c);
   2876   cc.evex().vminps(xmm_a, xmm_b, xmm_c);
   2877   cc.evex().vminps(ymm_a, ymm_b, ymm_c);
   2878   cc.evex().vminps(zmm_a, zmm_b, zmm_c);
   2879   cc.evex().vminsd(xmm_a, xmm_b, xmm_c);
   2880   cc.evex().vminss(xmm_a, xmm_b, xmm_c);
   2881   cc.evex().vmovapd(xmm_a, xmm_b);
   2882   cc.evex().vmovapd(xmm_a, xmm_b);
   2883   cc.evex().vmovapd(ymm_a, ymm_b);
   2884   cc.evex().vmovapd(ymm_a, ymm_b);
   2885   cc.evex().vmovapd(zmm_a, zmm_b);
   2886   cc.evex().vmovapd(zmm_a, zmm_b);
   2887   cc.evex().vmovaps(xmm_a, xmm_b);
   2888   cc.evex().vmovaps(xmm_a, xmm_b);
   2889   cc.evex().vmovaps(ymm_a, ymm_b);
   2890   cc.evex().vmovaps(ymm_a, ymm_b);
   2891   cc.evex().vmovaps(zmm_a, zmm_b);
   2892   cc.evex().vmovaps(zmm_a, zmm_b);
   2893   cc.evex().vmovd(gpd, xmm_b);
   2894   cc.evex().vmovd(xmm_a, gpd);
   2895   cc.evex().vmovddup(xmm_a, xmm_b);
   2896   cc.evex().vmovddup(ymm_a, ymm_b);
   2897   cc.evex().vmovddup(zmm_a, zmm_b);
   2898   cc.evex().vmovdqa32(xmm_a, xmm_b);
   2899   cc.evex().vmovdqa32(xmm_a, xmm_b);
   2900   cc.evex().vmovdqa32(ymm_a, ymm_b);
   2901   cc.evex().vmovdqa32(ymm_a, ymm_b);
   2902   cc.evex().vmovdqa32(zmm_a, zmm_b);
   2903   cc.evex().vmovdqa32(zmm_a, zmm_b);
   2904   cc.evex().vmovdqa64(xmm_a, xmm_b);
   2905   cc.evex().vmovdqa64(xmm_a, xmm_b);
   2906   cc.evex().vmovdqa64(ymm_a, ymm_b);
   2907   cc.evex().vmovdqa64(ymm_a, ymm_b);
   2908   cc.evex().vmovdqa64(zmm_a, zmm_b);
   2909   cc.evex().vmovdqa64(zmm_a, zmm_b);
   2910   cc.evex().vmovdqu16(xmm_a, xmm_b);
   2911   cc.evex().vmovdqu16(xmm_a, xmm_b);
   2912   cc.evex().vmovdqu16(ymm_a, ymm_b);
   2913   cc.evex().vmovdqu16(ymm_a, ymm_b);
   2914   cc.evex().vmovdqu16(zmm_a, zmm_b);
   2915   cc.evex().vmovdqu16(zmm_a, zmm_b);
   2916   cc.evex().vmovdqu32(xmm_a, xmm_b);
   2917   cc.evex().vmovdqu32(xmm_a, xmm_b);
   2918   cc.evex().vmovdqu32(ymm_a, ymm_b);
   2919   cc.evex().vmovdqu32(ymm_a, ymm_b);
   2920   cc.evex().vmovdqu32(zmm_a, zmm_b);
   2921   cc.evex().vmovdqu32(zmm_a, zmm_b);
   2922   cc.evex().vmovdqu64(xmm_a, xmm_b);
   2923   cc.evex().vmovdqu64(xmm_a, xmm_b);
   2924   cc.evex().vmovdqu64(ymm_a, ymm_b);
   2925   cc.evex().vmovdqu64(ymm_a, ymm_b);
   2926   cc.evex().vmovdqu64(zmm_a, zmm_b);
   2927   cc.evex().vmovdqu64(zmm_a, zmm_b);
   2928   cc.evex().vmovdqu8(xmm_a, xmm_b);
   2929   cc.evex().vmovdqu8(xmm_a, xmm_b);
   2930   cc.evex().vmovdqu8(ymm_a, ymm_b);
   2931   cc.evex().vmovdqu8(ymm_a, ymm_b);
   2932   cc.evex().vmovdqu8(zmm_a, zmm_b);
   2933   cc.evex().vmovdqu8(zmm_a, zmm_b);
   2934   cc.evex().vmovhlps(xmm_a, xmm_b, xmm_c);
   2935   if (cc.is_64bit()) cc.evex().vmovq(gpq, xmm_b);
   2936   if (cc.is_64bit()) cc.evex().vmovq(xmm_a, gpq);
   2937   cc.evex().vmovq(xmm_a, xmm_b);
   2938   cc.evex().vmovsd(xmm_a, xmm_b, xmm_c);
   2939   cc.evex().vmovshdup(xmm_a, xmm_b);
   2940   cc.evex().vmovshdup(ymm_a, ymm_b);
   2941   cc.evex().vmovshdup(zmm_a, zmm_b);
   2942   cc.evex().vmovsldup(xmm_a, xmm_b);
   2943   cc.evex().vmovsldup(ymm_a, ymm_b);
   2944   cc.evex().vmovsldup(zmm_a, zmm_b);
   2945   cc.evex().vmovss(xmm_a, xmm_b, xmm_c);
   2946   cc.evex().vmovupd(xmm_a, xmm_b);
   2947   cc.evex().vmovupd(xmm_a, xmm_b);
   2948   cc.evex().vmovupd(ymm_a, ymm_b);
   2949   cc.evex().vmovupd(ymm_a, ymm_b);
   2950   cc.evex().vmovupd(zmm_a, zmm_b);
   2951   cc.evex().vmovupd(zmm_a, zmm_b);
   2952   cc.evex().vmovups(xmm_a, xmm_b);
   2953   cc.evex().vmovups(xmm_a, xmm_b);
   2954   cc.evex().vmovups(ymm_a, ymm_b);
   2955   cc.evex().vmovups(ymm_a, ymm_b);
   2956   cc.evex().vmovups(zmm_a, zmm_b);
   2957   cc.evex().vmovups(zmm_a, zmm_b);
   2958   cc.evex().vmulpd(xmm_a, xmm_b, xmm_c);
   2959   cc.evex().vmulpd(ymm_a, ymm_b, ymm_c);
   2960   cc.evex().vmulpd(zmm_a, zmm_b, zmm_c);
   2961   cc.evex().vmulps(xmm_a, xmm_b, xmm_c);
   2962   cc.evex().vmulps(ymm_a, ymm_b, ymm_c);
   2963   cc.evex().vmulps(zmm_a, zmm_b, zmm_c);
   2964   cc.evex().vmulsd(xmm_a, xmm_b, xmm_c);
   2965   cc.evex().vmulss(xmm_a, xmm_b, xmm_c);
   2966   cc.evex().vorpd(xmm_a, xmm_b, xmm_c);
   2967   cc.evex().vorpd(ymm_a, ymm_b, ymm_c);
   2968   cc.evex().vorpd(zmm_a, zmm_b, zmm_c);
   2969   cc.evex().vorps(xmm_a, xmm_b, xmm_c);
   2970   cc.evex().vorps(ymm_a, ymm_b, ymm_c);
   2971   cc.evex().vorps(zmm_a, zmm_b, zmm_c);
   2972   cc.evex().vpabsb(xmm_a, xmm_b);
   2973   cc.evex().vpabsb(ymm_a, ymm_b);
   2974   cc.evex().vpabsb(zmm_a, zmm_b);
   2975   cc.evex().vpabsd(xmm_a, xmm_b);
   2976   cc.evex().vpabsd(ymm_a, ymm_b);
   2977   cc.evex().vpabsd(zmm_a, zmm_b);
   2978   cc.evex().vpabsq(xmm_a, xmm_b);
   2979   cc.evex().vpabsq(ymm_a, ymm_b);
   2980   cc.evex().vpabsq(zmm_a, zmm_b);
   2981   cc.evex().vpabsw(xmm_a, xmm_b);
   2982   cc.evex().vpabsw(ymm_a, ymm_b);
   2983   cc.evex().vpabsw(zmm_a, zmm_b);
   2984   cc.evex().vpackssdw(xmm_a, xmm_b, xmm_c);
   2985   cc.evex().vpackssdw(ymm_a, ymm_b, ymm_c);
   2986   cc.evex().vpackssdw(zmm_a, zmm_b, zmm_c);
   2987   cc.evex().vpacksswb(xmm_a, xmm_b, xmm_c);
   2988   cc.evex().vpacksswb(ymm_a, ymm_b, ymm_c);
   2989   cc.evex().vpacksswb(zmm_a, zmm_b, zmm_c);
   2990   cc.evex().vpackusdw(xmm_a, xmm_b, xmm_c);
   2991   cc.evex().vpackusdw(ymm_a, ymm_b, ymm_c);
   2992   cc.evex().vpackusdw(zmm_a, zmm_b, zmm_c);
   2993   cc.evex().vpackuswb(xmm_a, xmm_b, xmm_c);
   2994   cc.evex().vpackuswb(ymm_a, ymm_b, ymm_c);
   2995   cc.evex().vpackuswb(zmm_a, zmm_b, zmm_c);
   2996   cc.evex().vpaddb(xmm_a, xmm_b, xmm_c);
   2997   cc.evex().vpaddb(ymm_a, ymm_b, ymm_c);
   2998   cc.evex().vpaddb(zmm_a, zmm_b, zmm_c);
   2999   cc.evex().vpaddd(xmm_a, xmm_b, xmm_c);
   3000   cc.evex().vpaddd(ymm_a, ymm_b, ymm_c);
   3001   cc.evex().vpaddd(zmm_a, zmm_b, zmm_c);
   3002   cc.evex().vpaddq(xmm_a, xmm_b, xmm_c);
   3003   cc.evex().vpaddq(ymm_a, ymm_b, ymm_c);
   3004   cc.evex().vpaddq(zmm_a, zmm_b, zmm_c);
   3005   cc.evex().vpaddsb(xmm_a, xmm_b, xmm_c);
   3006   cc.evex().vpaddsb(ymm_a, ymm_b, ymm_c);
   3007   cc.evex().vpaddsb(zmm_a, zmm_b, zmm_c);
   3008   cc.evex().vpaddsw(xmm_a, xmm_b, xmm_c);
   3009   cc.evex().vpaddsw(ymm_a, ymm_b, ymm_c);
   3010   cc.evex().vpaddsw(zmm_a, zmm_b, zmm_c);
   3011   cc.evex().vpaddusb(xmm_a, xmm_b, xmm_c);
   3012   cc.evex().vpaddusb(ymm_a, ymm_b, ymm_c);
   3013   cc.evex().vpaddusb(zmm_a, zmm_b, zmm_c);
   3014   cc.evex().vpaddusw(xmm_a, xmm_b, xmm_c);
   3015   cc.evex().vpaddusw(ymm_a, ymm_b, ymm_c);
   3016   cc.evex().vpaddusw(zmm_a, zmm_b, zmm_c);
   3017   cc.evex().vpaddw(xmm_a, xmm_b, xmm_c);
   3018   cc.evex().vpaddw(ymm_a, ymm_b, ymm_c);
   3019   cc.evex().vpaddw(zmm_a, zmm_b, zmm_c);
   3020   cc.evex().vpalignr(xmm_a, xmm_b, xmm_c, 0);
   3021   cc.evex().vpalignr(ymm_a, ymm_b, ymm_c, 0);
   3022   cc.evex().vpalignr(zmm_a, zmm_b, zmm_c, 0);
   3023   cc.evex().vpandd(xmm_a, xmm_b, xmm_c);
   3024   cc.evex().vpandd(ymm_a, ymm_b, ymm_c);
   3025   cc.evex().vpandd(zmm_a, zmm_b, zmm_c);
   3026   cc.evex().vpandnd(xmm_a, xmm_b, xmm_c);
   3027   cc.evex().vpandnd(ymm_a, ymm_b, ymm_c);
   3028   cc.evex().vpandnd(zmm_a, zmm_b, zmm_c);
   3029   cc.evex().vpandnq(xmm_a, xmm_b, xmm_c);
   3030   cc.evex().vpandnq(ymm_a, ymm_b, ymm_c);
   3031   cc.evex().vpandnq(zmm_a, zmm_b, zmm_c);
   3032   cc.evex().vpandq(xmm_a, xmm_b, xmm_c);
   3033   cc.evex().vpandq(ymm_a, ymm_b, ymm_c);
   3034   cc.evex().vpandq(zmm_a, zmm_b, zmm_c);
   3035   cc.evex().vpavgb(xmm_a, xmm_b, xmm_c);
   3036   cc.evex().vpavgb(ymm_a, ymm_b, ymm_c);
   3037   cc.evex().vpavgb(zmm_a, zmm_b, zmm_c);
   3038   cc.evex().vpavgw(xmm_a, xmm_b, xmm_c);
   3039   cc.evex().vpavgw(ymm_a, ymm_b, ymm_c);
   3040   cc.evex().vpavgw(zmm_a, zmm_b, zmm_c);
   3041   cc.evex().vpblendmb(xmm_a, xmm_b, xmm_c);
   3042   cc.evex().vpblendmb(ymm_a, ymm_b, ymm_c);
   3043   cc.evex().vpblendmb(zmm_a, zmm_b, zmm_c);
   3044   cc.evex().vpblendmd(xmm_a, xmm_b, xmm_c);
   3045   cc.evex().vpblendmd(ymm_a, ymm_b, ymm_c);
   3046   cc.evex().vpblendmd(zmm_a, zmm_b, zmm_c);
   3047   cc.evex().vpblendmq(xmm_a, xmm_b, xmm_c);
   3048   cc.evex().vpblendmq(ymm_a, ymm_b, ymm_c);
   3049   cc.evex().vpblendmq(zmm_a, zmm_b, zmm_c);
   3050   cc.evex().vpblendmw(xmm_a, xmm_b, xmm_c);
   3051   cc.evex().vpblendmw(ymm_a, ymm_b, ymm_c);
   3052   cc.evex().vpblendmw(zmm_a, zmm_b, zmm_c);
   3053   cc.evex().vpbroadcastb(xmm_a, gpd);
   3054   cc.evex().vpbroadcastb(xmm_a, xmm_b);
   3055   cc.evex().vpbroadcastb(ymm_a, gpd);
   3056   cc.evex().vpbroadcastb(ymm_a, xmm_b);
   3057   cc.evex().vpbroadcastb(zmm_a, gpd);
   3058   cc.evex().vpbroadcastb(zmm_a, xmm_b);
   3059   cc.evex().vpbroadcastd(xmm_a, gpd);
   3060   cc.evex().vpbroadcastd(xmm_a, xmm_b);
   3061   cc.evex().vpbroadcastd(ymm_a, gpd);
   3062   cc.evex().vpbroadcastd(ymm_a, xmm_b);
   3063   cc.evex().vpbroadcastd(zmm_a, gpd);
   3064   cc.evex().vpbroadcastd(zmm_a, xmm_b);
   3065   cc.evex().vpbroadcastmb2q(xmm_a, kB);
   3066   cc.evex().vpbroadcastmb2q(ymm_a, kB);
   3067   cc.evex().vpbroadcastmb2q(zmm_a, kB);
   3068   cc.evex().vpbroadcastmw2d(xmm_a, kB);
   3069   cc.evex().vpbroadcastmw2d(ymm_a, kB);
   3070   cc.evex().vpbroadcastmw2d(zmm_a, kB);
   3071   if (cc.is_64bit()) cc.evex().vpbroadcastq(xmm_a, gpq);
   3072   cc.evex().vpbroadcastq(xmm_a, xmm_b);
   3073   if (cc.is_64bit()) cc.evex().vpbroadcastq(ymm_a, gpq);
   3074   cc.evex().vpbroadcastq(ymm_a, xmm_b);
   3075   if (cc.is_64bit()) cc.evex().vpbroadcastq(zmm_a, gpq);
   3076   cc.evex().vpbroadcastq(zmm_a, xmm_b);
   3077   cc.evex().vpbroadcastw(xmm_a, gpd);
   3078   cc.evex().vpbroadcastw(xmm_a, xmm_b);
   3079   cc.evex().vpbroadcastw(ymm_a, gpd);
   3080   cc.evex().vpbroadcastw(ymm_a, xmm_b);
   3081   cc.evex().vpbroadcastw(zmm_a, gpd);
   3082   cc.evex().vpbroadcastw(zmm_a, xmm_b);
   3083   cc.evex().vpcmpb(kA, xmm_b, xmm_c, 0);
   3084   cc.evex().vpcmpb(kA, ymm_b, ymm_c, 0);
   3085   cc.evex().vpcmpb(kA, zmm_b, zmm_c, 0);
   3086   cc.evex().vpcmpd(kA, xmm_b, xmm_c, 0);
   3087   cc.evex().vpcmpd(kA, ymm_b, ymm_c, 0);
   3088   cc.evex().vpcmpd(kA, zmm_b, zmm_c, 0);
   3089   cc.evex().vpcmpeqb(kA, xmm_b, xmm_c);
   3090   cc.evex().vpcmpeqb(kA, ymm_b, ymm_c);
   3091   cc.evex().vpcmpeqb(kA, zmm_b, zmm_c);
   3092   cc.evex().vpcmpeqd(kA, xmm_b, xmm_c);
   3093   cc.evex().vpcmpeqd(kA, ymm_b, ymm_c);
   3094   cc.evex().vpcmpeqd(kA, zmm_b, zmm_c);
   3095   cc.evex().vpcmpeqq(kA, xmm_b, xmm_c);
   3096   cc.evex().vpcmpeqq(kA, ymm_b, ymm_c);
   3097   cc.evex().vpcmpeqq(kA, zmm_b, zmm_c);
   3098   cc.evex().vpcmpeqw(kA, xmm_b, xmm_c);
   3099   cc.evex().vpcmpeqw(kA, ymm_b, ymm_c);
   3100   cc.evex().vpcmpeqw(kA, zmm_b, zmm_c);
   3101   cc.evex().vpcmpgtb(kA, xmm_b, xmm_c);
   3102   cc.evex().vpcmpgtb(kA, ymm_b, ymm_c);
   3103   cc.evex().vpcmpgtb(kA, zmm_b, zmm_c);
   3104   cc.evex().vpcmpgtd(kA, xmm_b, xmm_c);
   3105   cc.evex().vpcmpgtd(kA, ymm_b, ymm_c);
   3106   cc.evex().vpcmpgtd(kA, zmm_b, zmm_c);
   3107   cc.evex().vpcmpgtq(kA, xmm_b, xmm_c);
   3108   cc.evex().vpcmpgtq(kA, ymm_b, ymm_c);
   3109   cc.evex().vpcmpgtq(kA, zmm_b, zmm_c);
   3110   cc.evex().vpcmpgtw(kA, xmm_b, xmm_c);
   3111   cc.evex().vpcmpgtw(kA, ymm_b, ymm_c);
   3112   cc.evex().vpcmpgtw(kA, zmm_b, zmm_c);
   3113   cc.evex().vpcmpq(kA, xmm_b, xmm_c, 0);
   3114   cc.evex().vpcmpq(kA, ymm_b, ymm_c, 0);
   3115   cc.evex().vpcmpq(kA, zmm_b, zmm_c, 0);
   3116   cc.evex().vpcmpub(kA, xmm_b, xmm_c, 0);
   3117   cc.evex().vpcmpub(kA, ymm_b, ymm_c, 0);
   3118   cc.evex().vpcmpub(kA, zmm_b, zmm_c, 0);
   3119   cc.evex().vpcmpud(kA, xmm_b, xmm_c, 0);
   3120   cc.evex().vpcmpud(kA, ymm_b, ymm_c, 0);
   3121   cc.evex().vpcmpud(kA, zmm_b, zmm_c, 0);
   3122   cc.evex().vpcmpuq(kA, xmm_b, xmm_c, 0);
   3123   cc.evex().vpcmpuq(kA, ymm_b, ymm_c, 0);
   3124   cc.evex().vpcmpuq(kA, zmm_b, zmm_c, 0);
   3125   cc.evex().vpcmpuw(kA, xmm_b, xmm_c, 0);
   3126   cc.evex().vpcmpuw(kA, ymm_b, ymm_c, 0);
   3127   cc.evex().vpcmpuw(kA, zmm_b, zmm_c, 0);
   3128   cc.evex().vpcmpw(kA, xmm_b, xmm_c, 0);
   3129   cc.evex().vpcmpw(kA, ymm_b, ymm_c, 0);
   3130   cc.evex().vpcmpw(kA, zmm_b, zmm_c, 0);
   3131   cc.evex().vpcompressd(xmm_a, xmm_b);
   3132   cc.evex().vpcompressd(ymm_a, ymm_b);
   3133   cc.evex().vpcompressd(zmm_a, zmm_b);
   3134   cc.evex().vpcompressq(xmm_a, xmm_b);
   3135   cc.evex().vpcompressq(ymm_a, ymm_b);
   3136   cc.evex().vpcompressq(zmm_a, zmm_b);
   3137   cc.evex().vpconflictd(xmm_a, xmm_b);
   3138   cc.evex().vpconflictd(ymm_a, ymm_b);
   3139   cc.evex().vpconflictd(zmm_a, zmm_b);
   3140   cc.evex().vpconflictq(xmm_a, xmm_b);
   3141   cc.evex().vpconflictq(ymm_a, ymm_b);
   3142   cc.evex().vpconflictq(zmm_a, zmm_b);
   3143   cc.evex().vpermb(xmm_a, xmm_b, xmm_c);
   3144   cc.evex().vpermb(ymm_a, ymm_b, ymm_c);
   3145   cc.evex().vpermb(zmm_a, zmm_b, zmm_c);
   3146   cc.evex().vpermd(ymm_a, ymm_b, ymm_c);
   3147   cc.evex().vpermd(zmm_a, zmm_b, zmm_c);
   3148   cc.evex().vpermi2b(xmm_a, xmm_b, xmm_c);
   3149   cc.evex().vpermi2b(ymm_a, ymm_b, ymm_c);
   3150   cc.evex().vpermi2b(zmm_a, zmm_b, zmm_c);
   3151   cc.evex().vpermi2d(xmm_a, xmm_b, xmm_c);
   3152   cc.evex().vpermi2d(ymm_a, ymm_b, ymm_c);
   3153   cc.evex().vpermi2d(zmm_a, zmm_b, zmm_c);
   3154   cc.evex().vpermi2pd(xmm_a, xmm_b, xmm_c);
   3155   cc.evex().vpermi2pd(ymm_a, ymm_b, ymm_c);
   3156   cc.evex().vpermi2pd(zmm_a, zmm_b, zmm_c);
   3157   cc.evex().vpermi2ps(xmm_a, xmm_b, xmm_c);
   3158   cc.evex().vpermi2ps(ymm_a, ymm_b, ymm_c);
   3159   cc.evex().vpermi2ps(zmm_a, zmm_b, zmm_c);
   3160   cc.evex().vpermi2q(xmm_a, xmm_b, xmm_c);
   3161   cc.evex().vpermi2q(ymm_a, ymm_b, ymm_c);
   3162   cc.evex().vpermi2q(zmm_a, zmm_b, zmm_c);
   3163   cc.evex().vpermi2w(xmm_a, xmm_b, xmm_c);
   3164   cc.evex().vpermi2w(ymm_a, ymm_b, ymm_c);
   3165   cc.evex().vpermi2w(zmm_a, zmm_b, zmm_c);
   3166   cc.evex().vpermilpd(xmm_a, xmm_b, xmm_c);
   3167   cc.evex().vpermilpd(ymm_a, ymm_b, ymm_c);
   3168   cc.evex().vpermilpd(zmm_a, zmm_b, zmm_c);
   3169   cc.evex().vpermilpd(xmm_a, xmm_b, 0);
   3170   cc.evex().vpermilpd(ymm_a, ymm_b, 0);
   3171   cc.evex().vpermilpd(zmm_a, zmm_b, 0);
   3172   cc.evex().vpermilps(xmm_a, xmm_b, xmm_c);
   3173   cc.evex().vpermilps(ymm_a, ymm_b, ymm_c);
   3174   cc.evex().vpermilps(zmm_a, zmm_b, zmm_c);
   3175   cc.evex().vpermilps(xmm_a, xmm_b, 0);
   3176   cc.evex().vpermilps(ymm_a, ymm_b, 0);
   3177   cc.evex().vpermilps(zmm_a, zmm_b, 0);
   3178   cc.evex().vpermq(ymm_a, ymm_b, ymm_c);
   3179   cc.evex().vpermq(zmm_a, zmm_b, zmm_c);
   3180   cc.evex().vpermq(ymm_a, ymm_b, 0);
   3181   cc.evex().vpermq(zmm_a, zmm_b, 0);
   3182   cc.evex().vpermt2b(xmm_a, xmm_b, xmm_c);
   3183   cc.evex().vpermt2b(ymm_a, ymm_b, ymm_c);
   3184   cc.evex().vpermt2b(zmm_a, zmm_b, zmm_c);
   3185   cc.evex().vpermt2d(xmm_a, xmm_b, xmm_c);
   3186   cc.evex().vpermt2d(ymm_a, ymm_b, ymm_c);
   3187   cc.evex().vpermt2d(zmm_a, zmm_b, zmm_c);
   3188   cc.evex().vpermt2pd(xmm_a, xmm_b, xmm_c);
   3189   cc.evex().vpermt2pd(ymm_a, ymm_b, ymm_c);
   3190   cc.evex().vpermt2pd(zmm_a, zmm_b, zmm_c);
   3191   cc.evex().vpermt2ps(xmm_a, xmm_b, xmm_c);
   3192   cc.evex().vpermt2ps(ymm_a, ymm_b, ymm_c);
   3193   cc.evex().vpermt2ps(zmm_a, zmm_b, zmm_c);
   3194   cc.evex().vpermt2q(xmm_a, xmm_b, xmm_c);
   3195   cc.evex().vpermt2q(ymm_a, ymm_b, ymm_c);
   3196   cc.evex().vpermt2q(zmm_a, zmm_b, zmm_c);
   3197   cc.evex().vpermt2w(xmm_a, xmm_b, xmm_c);
   3198   cc.evex().vpermt2w(ymm_a, ymm_b, ymm_c);
   3199   cc.evex().vpermt2w(zmm_a, zmm_b, zmm_c);
   3200   cc.evex().vpermw(xmm_a, xmm_b, xmm_c);
   3201   cc.evex().vpermw(ymm_a, ymm_b, ymm_c);
   3202   cc.evex().vpermw(zmm_a, zmm_b, zmm_c);
   3203   cc.evex().vpexpandd(xmm_a, xmm_b);
   3204   cc.evex().vpexpandd(ymm_a, ymm_b);
   3205   cc.evex().vpexpandd(zmm_a, zmm_b);
   3206   cc.evex().vpexpandq(xmm_a, xmm_b);
   3207   cc.evex().vpexpandq(ymm_a, ymm_b);
   3208   cc.evex().vpexpandq(zmm_a, zmm_b);
   3209   cc.evex().vpextrb(gpd, xmm_b, 0);
   3210   cc.evex().vpextrd(gpd, xmm_b, 0);
   3211   if (cc.is_64bit()) cc.evex().vpextrq(gpq, xmm_b, 0);
   3212   cc.evex().vpextrw(gpd, xmm_b, 0);
   3213   cc.evex().vpinsrb(xmm_a, xmm_b, gpd, 0);
   3214   cc.evex().vpinsrd(xmm_a, xmm_b, gpd, 0);
   3215   if (cc.is_64bit()) cc.evex().vpinsrq(xmm_a, xmm_b, gpq, 0);
   3216   cc.evex().vpinsrw(xmm_a, xmm_b, gpd, 0);
   3217   cc.evex().vplzcntd(xmm_a, xmm_b);
   3218   cc.evex().vplzcntd(ymm_a, ymm_b);
   3219   cc.evex().vplzcntd(zmm_a, zmm_b);
   3220   cc.evex().vplzcntq(xmm_a, xmm_b);
   3221   cc.evex().vplzcntq(ymm_a, ymm_b);
   3222   cc.evex().vplzcntq(zmm_a, zmm_b);
   3223   cc.evex().vpmadd52huq(xmm_a, xmm_b, xmm_c);
   3224   cc.evex().vpmadd52huq(ymm_a, ymm_b, ymm_c);
   3225   cc.evex().vpmadd52huq(zmm_a, zmm_b, zmm_c);
   3226   cc.evex().vpmadd52luq(xmm_a, xmm_b, xmm_c);
   3227   cc.evex().vpmadd52luq(ymm_a, ymm_b, ymm_c);
   3228   cc.evex().vpmadd52luq(zmm_a, zmm_b, zmm_c);
   3229   cc.evex().vpmaddubsw(xmm_a, xmm_b, xmm_c);
   3230   cc.evex().vpmaddubsw(ymm_a, ymm_b, ymm_c);
   3231   cc.evex().vpmaddubsw(zmm_a, zmm_b, zmm_c);
   3232   cc.evex().vpmaddwd(xmm_a, xmm_b, xmm_c);
   3233   cc.evex().vpmaddwd(ymm_a, ymm_b, ymm_c);
   3234   cc.evex().vpmaddwd(zmm_a, zmm_b, zmm_c);
   3235   cc.evex().vpmaxsb(xmm_a, xmm_b, xmm_c);
   3236   cc.evex().vpmaxsb(ymm_a, ymm_b, ymm_c);
   3237   cc.evex().vpmaxsb(zmm_a, zmm_b, zmm_c);
   3238   cc.evex().vpmaxsd(xmm_a, xmm_b, xmm_c);
   3239   cc.evex().vpmaxsd(ymm_a, ymm_b, ymm_c);
   3240   cc.evex().vpmaxsd(zmm_a, zmm_b, zmm_c);
   3241   cc.evex().vpmaxsq(xmm_a, xmm_b, xmm_c);
   3242   cc.evex().vpmaxsq(ymm_a, ymm_b, ymm_c);
   3243   cc.evex().vpmaxsq(zmm_a, zmm_b, zmm_c);
   3244   cc.evex().vpmaxsw(xmm_a, xmm_b, xmm_c);
   3245   cc.evex().vpmaxsw(ymm_a, ymm_b, ymm_c);
   3246   cc.evex().vpmaxsw(zmm_a, zmm_b, zmm_c);
   3247   cc.evex().vpmaxub(xmm_a, xmm_b, xmm_c);
   3248   cc.evex().vpmaxub(ymm_a, ymm_b, ymm_c);
   3249   cc.evex().vpmaxub(zmm_a, zmm_b, zmm_c);
   3250   cc.evex().vpmaxud(xmm_a, xmm_b, xmm_c);
   3251   cc.evex().vpmaxud(ymm_a, ymm_b, ymm_c);
   3252   cc.evex().vpmaxud(zmm_a, zmm_b, zmm_c);
   3253   cc.evex().vpmaxuq(xmm_a, xmm_b, xmm_c);
   3254   cc.evex().vpmaxuq(ymm_a, ymm_b, ymm_c);
   3255   cc.evex().vpmaxuq(zmm_a, zmm_b, zmm_c);
   3256   cc.evex().vpmaxuw(xmm_a, xmm_b, xmm_c);
   3257   cc.evex().vpmaxuw(ymm_a, ymm_b, ymm_c);
   3258   cc.evex().vpmaxuw(zmm_a, zmm_b, zmm_c);
   3259   cc.evex().vpminsb(xmm_a, xmm_b, xmm_c);
   3260   cc.evex().vpminsb(ymm_a, ymm_b, ymm_c);
   3261   cc.evex().vpminsb(zmm_a, zmm_b, zmm_c);
   3262   cc.evex().vpminsd(xmm_a, xmm_b, xmm_c);
   3263   cc.evex().vpminsd(ymm_a, ymm_b, ymm_c);
   3264   cc.evex().vpminsd(zmm_a, zmm_b, zmm_c);
   3265   cc.evex().vpminsq(xmm_a, xmm_b, xmm_c);
   3266   cc.evex().vpminsq(ymm_a, ymm_b, ymm_c);
   3267   cc.evex().vpminsq(zmm_a, zmm_b, zmm_c);
   3268   cc.evex().vpminsw(xmm_a, xmm_b, xmm_c);
   3269   cc.evex().vpminsw(ymm_a, ymm_b, ymm_c);
   3270   cc.evex().vpminsw(zmm_a, zmm_b, zmm_c);
   3271   cc.evex().vpminub(xmm_a, xmm_b, xmm_c);
   3272   cc.evex().vpminub(ymm_a, ymm_b, ymm_c);
   3273   cc.evex().vpminub(zmm_a, zmm_b, zmm_c);
   3274   cc.evex().vpminud(xmm_a, xmm_b, xmm_c);
   3275   cc.evex().vpminud(ymm_a, ymm_b, ymm_c);
   3276   cc.evex().vpminud(zmm_a, zmm_b, zmm_c);
   3277   cc.evex().vpminuq(xmm_a, xmm_b, xmm_c);
   3278   cc.evex().vpminuq(ymm_a, ymm_b, ymm_c);
   3279   cc.evex().vpminuq(zmm_a, zmm_b, zmm_c);
   3280   cc.evex().vpminuw(xmm_a, xmm_b, xmm_c);
   3281   cc.evex().vpminuw(ymm_a, ymm_b, ymm_c);
   3282   cc.evex().vpminuw(zmm_a, zmm_b, zmm_c);
   3283   cc.evex().vpmovb2m(kA, xmm_b);
   3284   cc.evex().vpmovb2m(kA, ymm_b);
   3285   cc.evex().vpmovb2m(kA, zmm_b);
   3286   cc.evex().vpmovd2m(kA, xmm_b);
   3287   cc.evex().vpmovd2m(kA, ymm_b);
   3288   cc.evex().vpmovd2m(kA, zmm_b);
   3289   cc.evex().vpmovdb(xmm_a, xmm_b);
   3290   cc.evex().vpmovdb(xmm_a, ymm_b);
   3291   cc.evex().vpmovdb(xmm_a, zmm_b);
   3292   cc.evex().vpmovdw(xmm_a, xmm_b);
   3293   cc.evex().vpmovdw(xmm_a, ymm_b);
   3294   cc.evex().vpmovdw(ymm_a, zmm_b);
   3295   cc.evex().vpmovm2b(xmm_a, kB);
   3296   cc.evex().vpmovm2b(ymm_a, kB);
   3297   cc.evex().vpmovm2b(zmm_a, kB);
   3298   cc.evex().vpmovm2d(xmm_a, kB);
   3299   cc.evex().vpmovm2d(ymm_a, kB);
   3300   cc.evex().vpmovm2d(zmm_a, kB);
   3301   cc.evex().vpmovm2q(xmm_a, kB);
   3302   cc.evex().vpmovm2q(ymm_a, kB);
   3303   cc.evex().vpmovm2q(zmm_a, kB);
   3304   cc.evex().vpmovm2w(xmm_a, kB);
   3305   cc.evex().vpmovm2w(ymm_a, kB);
   3306   cc.evex().vpmovm2w(zmm_a, kB);
   3307   cc.evex().vpmovq2m(kA, xmm_b);
   3308   cc.evex().vpmovq2m(kA, ymm_b);
   3309   cc.evex().vpmovq2m(kA, zmm_b);
   3310   cc.evex().vpmovqb(xmm_a, xmm_b);
   3311   cc.evex().vpmovqb(xmm_a, ymm_b);
   3312   cc.evex().vpmovqb(xmm_a, zmm_b);
   3313   cc.evex().vpmovqd(xmm_a, xmm_b);
   3314   cc.evex().vpmovqd(xmm_a, ymm_b);
   3315   cc.evex().vpmovqd(ymm_a, zmm_b);
   3316   cc.evex().vpmovqw(xmm_a, xmm_b);
   3317   cc.evex().vpmovqw(xmm_a, ymm_b);
   3318   cc.evex().vpmovqw(xmm_a, zmm_b);
   3319   cc.evex().vpmovsdb(xmm_a, xmm_b);
   3320   cc.evex().vpmovsdb(xmm_a, ymm_b);
   3321   cc.evex().vpmovsdb(xmm_a, zmm_b);
   3322   cc.evex().vpmovsdw(xmm_a, xmm_b);
   3323   cc.evex().vpmovsdw(xmm_a, ymm_b);
   3324   cc.evex().vpmovsdw(ymm_a, zmm_b);
   3325   cc.evex().vpmovsqb(xmm_a, xmm_b);
   3326   cc.evex().vpmovsqb(xmm_a, ymm_b);
   3327   cc.evex().vpmovsqb(xmm_a, zmm_b);
   3328   cc.evex().vpmovsqd(xmm_a, xmm_b);
   3329   cc.evex().vpmovsqd(xmm_a, ymm_b);
   3330   cc.evex().vpmovsqd(ymm_a, zmm_b);
   3331   cc.evex().vpmovsqw(xmm_a, xmm_b);
   3332   cc.evex().vpmovsqw(xmm_a, ymm_b);
   3333   cc.evex().vpmovsqw(xmm_a, zmm_b);
   3334   cc.evex().vpmovswb(xmm_a, xmm_b);
   3335   cc.evex().vpmovswb(xmm_a, ymm_b);
   3336   cc.evex().vpmovswb(ymm_a, zmm_b);
   3337   cc.evex().vpmovsxbd(xmm_a, xmm_b);
   3338   cc.evex().vpmovsxbd(ymm_a, xmm_b);
   3339   cc.evex().vpmovsxbd(zmm_a, xmm_b);
   3340   cc.evex().vpmovsxbq(xmm_a, xmm_b);
   3341   cc.evex().vpmovsxbq(ymm_a, xmm_b);
   3342   cc.evex().vpmovsxbq(zmm_a, xmm_b);
   3343   cc.evex().vpmovsxbw(xmm_a, xmm_b);
   3344   cc.evex().vpmovsxbw(ymm_a, xmm_b);
   3345   cc.evex().vpmovsxbw(zmm_a, ymm_b);
   3346   cc.evex().vpmovsxdq(xmm_a, xmm_b);
   3347   cc.evex().vpmovsxdq(ymm_a, xmm_b);
   3348   cc.evex().vpmovsxdq(zmm_a, ymm_b);
   3349   cc.evex().vpmovsxwd(xmm_a, xmm_b);
   3350   cc.evex().vpmovsxwd(ymm_a, xmm_b);
   3351   cc.evex().vpmovsxwd(zmm_a, ymm_b);
   3352   cc.evex().vpmovsxwq(xmm_a, xmm_b);
   3353   cc.evex().vpmovsxwq(ymm_a, xmm_b);
   3354   cc.evex().vpmovsxwq(zmm_a, xmm_b);
   3355   cc.evex().vpmovusdb(xmm_a, xmm_b);
   3356   cc.evex().vpmovusdb(xmm_a, ymm_b);
   3357   cc.evex().vpmovusdb(xmm_a, zmm_b);
   3358   cc.evex().vpmovusdw(xmm_a, xmm_b);
   3359   cc.evex().vpmovusdw(xmm_a, ymm_b);
   3360   cc.evex().vpmovusdw(ymm_a, zmm_b);
   3361   cc.evex().vpmovusqb(xmm_a, xmm_b);
   3362   cc.evex().vpmovusqb(xmm_a, ymm_b);
   3363   cc.evex().vpmovusqb(xmm_a, zmm_b);
   3364   cc.evex().vpmovusqd(xmm_a, xmm_b);
   3365   cc.evex().vpmovusqd(xmm_a, ymm_b);
   3366   cc.evex().vpmovusqd(ymm_a, zmm_b);
   3367   cc.evex().vpmovusqw(xmm_a, xmm_b);
   3368   cc.evex().vpmovusqw(xmm_a, ymm_b);
   3369   cc.evex().vpmovusqw(xmm_a, zmm_b);
   3370   cc.evex().vpmovuswb(xmm_a, xmm_b);
   3371   cc.evex().vpmovuswb(xmm_a, ymm_b);
   3372   cc.evex().vpmovuswb(ymm_a, zmm_b);
   3373   cc.evex().vpmovw2m(kA, xmm_b);
   3374   cc.evex().vpmovw2m(kA, ymm_b);
   3375   cc.evex().vpmovw2m(kA, zmm_b);
   3376   cc.evex().vpmovwb(xmm_a, xmm_b);
   3377   cc.evex().vpmovwb(xmm_a, ymm_b);
   3378   cc.evex().vpmovwb(ymm_a, zmm_b);
   3379   cc.evex().vpmovzxbd(xmm_a, xmm_b);
   3380   cc.evex().vpmovzxbd(ymm_a, xmm_b);
   3381   cc.evex().vpmovzxbd(zmm_a, xmm_b);
   3382   cc.evex().vpmovzxbq(xmm_a, xmm_b);
   3383   cc.evex().vpmovzxbq(ymm_a, xmm_b);
   3384   cc.evex().vpmovzxbq(zmm_a, xmm_b);
   3385   cc.evex().vpmovzxbw(xmm_a, xmm_b);
   3386   cc.evex().vpmovzxbw(ymm_a, xmm_b);
   3387   cc.evex().vpmovzxbw(zmm_a, ymm_b);
   3388   cc.evex().vpmovzxdq(xmm_a, xmm_b);
   3389   cc.evex().vpmovzxdq(ymm_a, xmm_b);
   3390   cc.evex().vpmovzxdq(zmm_a, ymm_b);
   3391   cc.evex().vpmovzxwd(xmm_a, xmm_b);
   3392   cc.evex().vpmovzxwd(ymm_a, xmm_b);
   3393   cc.evex().vpmovzxwd(zmm_a, ymm_b);
   3394   cc.evex().vpmovzxwq(xmm_a, xmm_b);
   3395   cc.evex().vpmovzxwq(ymm_a, xmm_b);
   3396   cc.evex().vpmovzxwq(zmm_a, xmm_b);
   3397   cc.evex().vpmuldq(xmm_a, xmm_b, xmm_c);
   3398   cc.evex().vpmuldq(ymm_a, ymm_b, ymm_c);
   3399   cc.evex().vpmuldq(zmm_a, zmm_b, zmm_c);
   3400   cc.evex().vpmulhrsw(xmm_a, xmm_b, xmm_c);
   3401   cc.evex().vpmulhrsw(ymm_a, ymm_b, ymm_c);
   3402   cc.evex().vpmulhrsw(zmm_a, zmm_b, zmm_c);
   3403   cc.evex().vpmulhuw(xmm_a, xmm_b, xmm_c);
   3404   cc.evex().vpmulhuw(ymm_a, ymm_b, ymm_c);
   3405   cc.evex().vpmulhuw(zmm_a, zmm_b, zmm_c);
   3406   cc.evex().vpmulhw(xmm_a, xmm_b, xmm_c);
   3407   cc.evex().vpmulhw(ymm_a, ymm_b, ymm_c);
   3408   cc.evex().vpmulhw(zmm_a, zmm_b, zmm_c);
   3409   cc.evex().vpmulld(xmm_a, xmm_b, xmm_c);
   3410   cc.evex().vpmulld(ymm_a, ymm_b, ymm_c);
   3411   cc.evex().vpmulld(zmm_a, zmm_b, zmm_c);
   3412   cc.evex().vpmullq(xmm_a, xmm_b, xmm_c);
   3413   cc.evex().vpmullq(ymm_a, ymm_b, ymm_c);
   3414   cc.evex().vpmullq(zmm_a, zmm_b, zmm_c);
   3415   cc.evex().vpmullw(xmm_a, xmm_b, xmm_c);
   3416   cc.evex().vpmullw(ymm_a, ymm_b, ymm_c);
   3417   cc.evex().vpmullw(zmm_a, zmm_b, zmm_c);
   3418   cc.evex().vpmultishiftqb(xmm_a, xmm_b, xmm_c);
   3419   cc.evex().vpmultishiftqb(ymm_a, ymm_b, ymm_c);
   3420   cc.evex().vpmultishiftqb(zmm_a, zmm_b, zmm_c);
   3421   cc.evex().vpmuludq(xmm_a, xmm_b, xmm_c);
   3422   cc.evex().vpmuludq(ymm_a, ymm_b, ymm_c);
   3423   cc.evex().vpmuludq(zmm_a, zmm_b, zmm_c);
   3424   cc.evex().vpopcntd(zmm_a, zmm_b);
   3425   cc.evex().vpopcntq(zmm_a, zmm_b);
   3426   cc.evex().vpord(xmm_a, xmm_b, xmm_c);
   3427   cc.evex().vpord(ymm_a, ymm_b, ymm_c);
   3428   cc.evex().vpord(zmm_a, zmm_b, zmm_c);
   3429   cc.evex().vporq(xmm_a, xmm_b, xmm_c);
   3430   cc.evex().vporq(ymm_a, ymm_b, ymm_c);
   3431   cc.evex().vporq(zmm_a, zmm_b, zmm_c);
   3432   cc.evex().vprold(xmm_a, xmm_b, 0);
   3433   cc.evex().vprold(ymm_a, ymm_b, 0);
   3434   cc.evex().vprold(zmm_a, zmm_b, 0);
   3435   cc.evex().vprolq(xmm_a, xmm_b, 0);
   3436   cc.evex().vprolq(ymm_a, ymm_b, 0);
   3437   cc.evex().vprolq(zmm_a, zmm_b, 0);
   3438   cc.evex().vprolvd(xmm_a, xmm_b, xmm_c);
   3439   cc.evex().vprolvd(ymm_a, ymm_b, ymm_c);
   3440   cc.evex().vprolvd(zmm_a, zmm_b, zmm_c);
   3441   cc.evex().vprolvq(xmm_a, xmm_b, xmm_c);
   3442   cc.evex().vprolvq(ymm_a, ymm_b, ymm_c);
   3443   cc.evex().vprolvq(zmm_a, zmm_b, zmm_c);
   3444   cc.evex().vprord(xmm_a, xmm_b, 0);
   3445   cc.evex().vprord(ymm_a, ymm_b, 0);
   3446   cc.evex().vprord(zmm_a, zmm_b, 0);
   3447   cc.evex().vprorq(xmm_a, xmm_b, 0);
   3448   cc.evex().vprorq(ymm_a, ymm_b, 0);
   3449   cc.evex().vprorq(zmm_a, zmm_b, 0);
   3450   cc.evex().vprorvd(xmm_a, xmm_b, xmm_c);
   3451   cc.evex().vprorvd(ymm_a, ymm_b, ymm_c);
   3452   cc.evex().vprorvd(zmm_a, zmm_b, zmm_c);
   3453   cc.evex().vprorvq(xmm_a, xmm_b, xmm_c);
   3454   cc.evex().vprorvq(ymm_a, ymm_b, ymm_c);
   3455   cc.evex().vprorvq(zmm_a, zmm_b, zmm_c);
   3456   cc.evex().vpsadbw(xmm_a, xmm_b, xmm_c);
   3457   cc.evex().vpsadbw(ymm_a, ymm_b, ymm_c);
   3458   cc.evex().vpsadbw(zmm_a, zmm_b, zmm_c);
   3459   cc.evex().vpshufb(xmm_a, xmm_b, xmm_c);
   3460   cc.evex().vpshufb(ymm_a, ymm_b, ymm_c);
   3461   cc.evex().vpshufb(zmm_a, zmm_b, zmm_c);
   3462   cc.evex().vpshufd(xmm_a, xmm_b, 0);
   3463   cc.evex().vpshufd(ymm_a, ymm_b, 0);
   3464   cc.evex().vpshufd(zmm_a, zmm_b, 0);
   3465   cc.evex().vpshufhw(xmm_a, xmm_b, 0);
   3466   cc.evex().vpshufhw(ymm_a, ymm_b, 0);
   3467   cc.evex().vpshufhw(zmm_a, zmm_b, 0);
   3468   cc.evex().vpshuflw(xmm_a, xmm_b, 0);
   3469   cc.evex().vpshuflw(ymm_a, ymm_b, 0);
   3470   cc.evex().vpshuflw(zmm_a, zmm_b, 0);
   3471   cc.evex().vpslld(xmm_a, xmm_b, xmm_c);
   3472   cc.evex().vpslld(xmm_a, xmm_b, 0);
   3473   cc.evex().vpslld(ymm_a, ymm_b, xmm_c);
   3474   cc.evex().vpslld(ymm_a, ymm_b, 0);
   3475   cc.evex().vpslld(zmm_a, zmm_b, xmm_c);
   3476   cc.evex().vpslld(zmm_a, zmm_b, 0);
   3477   cc.evex().vpslldq(xmm_a, xmm_b, 0);
   3478   cc.evex().vpslldq(ymm_a, ymm_b, 0);
   3479   cc.evex().vpslldq(zmm_a, zmm_b, 0);
   3480   cc.evex().vpsllq(xmm_a, xmm_b, xmm_c);
   3481   cc.evex().vpsllq(xmm_a, xmm_b, 0);
   3482   cc.evex().vpsllq(ymm_a, ymm_b, xmm_c);
   3483   cc.evex().vpsllq(ymm_a, ymm_b, 0);
   3484   cc.evex().vpsllq(zmm_a, zmm_b, xmm_c);
   3485   cc.evex().vpsllq(zmm_a, zmm_b, 0);
   3486   cc.evex().vpsllvd(xmm_a, xmm_b, xmm_c);
   3487   cc.evex().vpsllvd(ymm_a, ymm_b, ymm_c);
   3488   cc.evex().vpsllvd(zmm_a, zmm_b, zmm_c);
   3489   cc.evex().vpsllvq(xmm_a, xmm_b, xmm_c);
   3490   cc.evex().vpsllvq(ymm_a, ymm_b, ymm_c);
   3491   cc.evex().vpsllvq(zmm_a, zmm_b, zmm_c);
   3492   cc.evex().vpsllvw(xmm_a, xmm_b, xmm_c);
   3493   cc.evex().vpsllvw(ymm_a, ymm_b, ymm_c);
   3494   cc.evex().vpsllvw(zmm_a, zmm_b, zmm_c);
   3495   cc.evex().vpsllw(xmm_a, xmm_b, xmm_c);
   3496   cc.evex().vpsllw(xmm_a, xmm_b, 0);
   3497   cc.evex().vpsllw(ymm_a, ymm_b, xmm_c);
   3498   cc.evex().vpsllw(ymm_a, ymm_b, 0);
   3499   cc.evex().vpsllw(zmm_a, zmm_b, xmm_c);
   3500   cc.evex().vpsllw(zmm_a, zmm_b, 0);
   3501   cc.evex().vpsrad(xmm_a, xmm_b, xmm_c);
   3502   cc.evex().vpsrad(xmm_a, xmm_b, 0);
   3503   cc.evex().vpsrad(ymm_a, ymm_b, xmm_c);
   3504   cc.evex().vpsrad(ymm_a, ymm_b, 0);
   3505   cc.evex().vpsrad(zmm_a, zmm_b, xmm_c);
   3506   cc.evex().vpsrad(zmm_a, zmm_b, 0);
   3507   cc.evex().vpsraq(xmm_a, xmm_b, xmm_c);
   3508   cc.evex().vpsraq(xmm_a, xmm_b, 0);
   3509   cc.evex().vpsraq(ymm_a, ymm_b, xmm_c);
   3510   cc.evex().vpsraq(ymm_a, ymm_b, 0);
   3511   cc.evex().vpsraq(zmm_a, zmm_b, xmm_c);
   3512   cc.evex().vpsraq(zmm_a, zmm_b, 0);
   3513   cc.evex().vpsravd(xmm_a, xmm_b, xmm_c);
   3514   cc.evex().vpsravd(ymm_a, ymm_b, ymm_c);
   3515   cc.evex().vpsravd(zmm_a, zmm_b, zmm_c);
   3516   cc.evex().vpsravq(xmm_a, xmm_b, xmm_c);
   3517   cc.evex().vpsravq(ymm_a, ymm_b, ymm_c);
   3518   cc.evex().vpsravq(zmm_a, zmm_b, zmm_c);
   3519   cc.evex().vpsravw(xmm_a, xmm_b, xmm_c);
   3520   cc.evex().vpsravw(ymm_a, ymm_b, ymm_c);
   3521   cc.evex().vpsravw(zmm_a, zmm_b, zmm_c);
   3522   cc.evex().vpsraw(xmm_a, xmm_b, xmm_c);
   3523   cc.evex().vpsraw(xmm_a, xmm_b, 0);
   3524   cc.evex().vpsraw(ymm_a, ymm_b, xmm_c);
   3525   cc.evex().vpsraw(ymm_a, ymm_b, 0);
   3526   cc.evex().vpsraw(zmm_a, zmm_b, xmm_c);
   3527   cc.evex().vpsraw(zmm_a, zmm_b, 0);
   3528   cc.evex().vpsrld(xmm_a, xmm_b, xmm_c);
   3529   cc.evex().vpsrld(xmm_a, xmm_b, 0);
   3530   cc.evex().vpsrld(ymm_a, ymm_b, xmm_c);
   3531   cc.evex().vpsrld(ymm_a, ymm_b, 0);
   3532   cc.evex().vpsrld(zmm_a, zmm_b, xmm_c);
   3533   cc.evex().vpsrld(zmm_a, zmm_b, 0);
   3534   cc.evex().vpsrldq(xmm_a, xmm_b, 0);
   3535   cc.evex().vpsrldq(ymm_a, ymm_b, 0);
   3536   cc.evex().vpsrldq(zmm_a, zmm_b, 0);
   3537   cc.evex().vpsrlq(xmm_a, xmm_b, xmm_c);
   3538   cc.evex().vpsrlq(xmm_a, xmm_b, 0);
   3539   cc.evex().vpsrlq(ymm_a, ymm_b, xmm_c);
   3540   cc.evex().vpsrlq(ymm_a, ymm_b, 0);
   3541   cc.evex().vpsrlq(zmm_a, zmm_b, xmm_c);
   3542   cc.evex().vpsrlq(zmm_a, zmm_b, 0);
   3543   cc.evex().vpsrlvd(xmm_a, xmm_b, xmm_c);
   3544   cc.evex().vpsrlvd(ymm_a, ymm_b, ymm_c);
   3545   cc.evex().vpsrlvd(zmm_a, zmm_b, zmm_c);
   3546   cc.evex().vpsrlvq(xmm_a, xmm_b, xmm_c);
   3547   cc.evex().vpsrlvq(ymm_a, ymm_b, ymm_c);
   3548   cc.evex().vpsrlvq(zmm_a, zmm_b, zmm_c);
   3549   cc.evex().vpsrlvw(xmm_a, xmm_b, xmm_c);
   3550   cc.evex().vpsrlvw(ymm_a, ymm_b, ymm_c);
   3551   cc.evex().vpsrlvw(zmm_a, zmm_b, zmm_c);
   3552   cc.evex().vpsrlw(xmm_a, xmm_b, xmm_c);
   3553   cc.evex().vpsrlw(xmm_a, xmm_b, 0);
   3554   cc.evex().vpsrlw(ymm_a, ymm_b, xmm_c);
   3555   cc.evex().vpsrlw(ymm_a, ymm_b, 0);
   3556   cc.evex().vpsrlw(zmm_a, zmm_b, xmm_c);
   3557   cc.evex().vpsrlw(zmm_a, zmm_b, 0);
   3558   cc.evex().vpsubb(xmm_a, xmm_b, xmm_c);
   3559   cc.evex().vpsubb(ymm_a, ymm_b, ymm_c);
   3560   cc.evex().vpsubb(zmm_a, zmm_b, zmm_c);
   3561   cc.evex().vpsubd(xmm_a, xmm_b, xmm_c);
   3562   cc.evex().vpsubd(ymm_a, ymm_b, ymm_c);
   3563   cc.evex().vpsubd(zmm_a, zmm_b, zmm_c);
   3564   cc.evex().vpsubq(xmm_a, xmm_b, xmm_c);
   3565   cc.evex().vpsubq(ymm_a, ymm_b, ymm_c);
   3566   cc.evex().vpsubq(zmm_a, zmm_b, zmm_c);
   3567   cc.evex().vpsubsb(xmm_a, xmm_b, xmm_c);
   3568   cc.evex().vpsubsb(ymm_a, ymm_b, ymm_c);
   3569   cc.evex().vpsubsb(zmm_a, zmm_b, zmm_c);
   3570   cc.evex().vpsubsw(xmm_a, xmm_b, xmm_c);
   3571   cc.evex().vpsubsw(ymm_a, ymm_b, ymm_c);
   3572   cc.evex().vpsubsw(zmm_a, zmm_b, zmm_c);
   3573   cc.evex().vpsubusb(xmm_a, xmm_b, xmm_c);
   3574   cc.evex().vpsubusb(ymm_a, ymm_b, ymm_c);
   3575   cc.evex().vpsubusb(zmm_a, zmm_b, zmm_c);
   3576   cc.evex().vpsubusw(xmm_a, xmm_b, xmm_c);
   3577   cc.evex().vpsubusw(ymm_a, ymm_b, ymm_c);
   3578   cc.evex().vpsubusw(zmm_a, zmm_b, zmm_c);
   3579   cc.evex().vpsubw(xmm_a, xmm_b, xmm_c);
   3580   cc.evex().vpsubw(ymm_a, ymm_b, ymm_c);
   3581   cc.evex().vpsubw(zmm_a, zmm_b, zmm_c);
   3582   cc.evex().vpternlogd(xmm_a, xmm_b, xmm_c, 0);
   3583   cc.evex().vpternlogd(ymm_a, ymm_b, ymm_c, 0);
   3584   cc.evex().vpternlogd(zmm_a, zmm_b, zmm_c, 0);
   3585   cc.evex().vpternlogq(xmm_a, xmm_b, xmm_c, 0);
   3586   cc.evex().vpternlogq(ymm_a, ymm_b, ymm_c, 0);
   3587   cc.evex().vpternlogq(zmm_a, zmm_b, zmm_c, 0);
   3588   cc.evex().vptestmb(kA, xmm_b, xmm_c);
   3589   cc.evex().vptestmb(kA, ymm_b, ymm_c);
   3590   cc.evex().vptestmb(kA, zmm_b, zmm_c);
   3591   cc.evex().vptestmd(kA, xmm_b, xmm_c);
   3592   cc.evex().vptestmd(kA, ymm_b, ymm_c);
   3593   cc.evex().vptestmd(kA, zmm_b, zmm_c);
   3594   cc.evex().vptestmq(kA, xmm_b, xmm_c);
   3595   cc.evex().vptestmq(kA, ymm_b, ymm_c);
   3596   cc.evex().vptestmq(kA, zmm_b, zmm_c);
   3597   cc.evex().vptestmw(kA, xmm_b, xmm_c);
   3598   cc.evex().vptestmw(kA, ymm_b, ymm_c);
   3599   cc.evex().vptestmw(kA, zmm_b, zmm_c);
   3600   cc.evex().vptestnmb(kA, xmm_b, xmm_c);
   3601   cc.evex().vptestnmb(kA, ymm_b, ymm_c);
   3602   cc.evex().vptestnmb(kA, zmm_b, zmm_c);
   3603   cc.evex().vptestnmd(kA, xmm_b, xmm_c);
   3604   cc.evex().vptestnmd(kA, ymm_b, ymm_c);
   3605   cc.evex().vptestnmd(kA, zmm_b, zmm_c);
   3606   cc.evex().vptestnmq(kA, xmm_b, xmm_c);
   3607   cc.evex().vptestnmq(kA, ymm_b, ymm_c);
   3608   cc.evex().vptestnmq(kA, zmm_b, zmm_c);
   3609   cc.evex().vptestnmw(kA, xmm_b, xmm_c);
   3610   cc.evex().vptestnmw(kA, ymm_b, ymm_c);
   3611   cc.evex().vptestnmw(kA, zmm_b, zmm_c);
   3612   cc.evex().vpunpckhbw(xmm_a, xmm_b, xmm_c);
   3613   cc.evex().vpunpckhbw(ymm_a, ymm_b, ymm_c);
   3614   cc.evex().vpunpckhbw(zmm_a, zmm_b, zmm_c);
   3615   cc.evex().vpunpckhdq(xmm_a, xmm_b, xmm_c);
   3616   cc.evex().vpunpckhdq(ymm_a, ymm_b, ymm_c);
   3617   cc.evex().vpunpckhdq(zmm_a, zmm_b, zmm_c);
   3618   cc.evex().vpunpckhqdq(xmm_a, xmm_b, xmm_c);
   3619   cc.evex().vpunpckhqdq(ymm_a, ymm_b, ymm_c);
   3620   cc.evex().vpunpckhqdq(zmm_a, zmm_b, zmm_c);
   3621   cc.evex().vpunpckhwd(xmm_a, xmm_b, xmm_c);
   3622   cc.evex().vpunpckhwd(ymm_a, ymm_b, ymm_c);
   3623   cc.evex().vpunpckhwd(zmm_a, zmm_b, zmm_c);
   3624   cc.evex().vpunpcklbw(xmm_a, xmm_b, xmm_c);
   3625   cc.evex().vpunpcklbw(ymm_a, ymm_b, ymm_c);
   3626   cc.evex().vpunpcklbw(zmm_a, zmm_b, zmm_c);
   3627   cc.evex().vpunpckldq(xmm_a, xmm_b, xmm_c);
   3628   cc.evex().vpunpckldq(ymm_a, ymm_b, ymm_c);
   3629   cc.evex().vpunpckldq(zmm_a, zmm_b, zmm_c);
   3630   cc.evex().vpunpcklqdq(xmm_a, xmm_b, xmm_c);
   3631   cc.evex().vpunpcklqdq(ymm_a, ymm_b, ymm_c);
   3632   cc.evex().vpunpcklqdq(zmm_a, zmm_b, zmm_c);
   3633   cc.evex().vpunpcklwd(xmm_a, xmm_b, xmm_c);
   3634   cc.evex().vpunpcklwd(ymm_a, ymm_b, ymm_c);
   3635   cc.evex().vpunpcklwd(zmm_a, zmm_b, zmm_c);
   3636   cc.evex().vpxord(xmm_a, xmm_b, xmm_c);
   3637   cc.evex().vpxord(ymm_a, ymm_b, ymm_c);
   3638   cc.evex().vpxord(zmm_a, zmm_b, zmm_c);
   3639   cc.evex().vpxorq(xmm_a, xmm_b, xmm_c);
   3640   cc.evex().vpxorq(ymm_a, ymm_b, ymm_c);
   3641   cc.evex().vpxorq(zmm_a, zmm_b, zmm_c);
   3642   cc.evex().vrangepd(xmm_a, xmm_b, xmm_c, 0);
   3643   cc.evex().vrangepd(ymm_a, ymm_b, ymm_c, 0);
   3644   cc.evex().vrangepd(zmm_a, zmm_b, zmm_c, 0);
   3645   cc.evex().vrangeps(xmm_a, xmm_b, xmm_c, 0);
   3646   cc.evex().vrangeps(ymm_a, ymm_b, ymm_c, 0);
   3647   cc.evex().vrangeps(zmm_a, zmm_b, zmm_c, 0);
   3648   cc.evex().vrangesd(xmm_a, xmm_b, xmm_c, 0);
   3649   cc.evex().vrangess(xmm_a, xmm_b, xmm_c, 0);
   3650   cc.evex().vrcp14pd(xmm_a, xmm_b);
   3651   cc.evex().vrcp14pd(ymm_a, ymm_b);
   3652   cc.evex().vrcp14pd(zmm_a, zmm_b);
   3653   cc.evex().vrcp14ps(xmm_a, xmm_b);
   3654   cc.evex().vrcp14ps(ymm_a, ymm_b);
   3655   cc.evex().vrcp14ps(zmm_a, zmm_b);
   3656   cc.evex().vrcp14sd(xmm_a, xmm_b, xmm_c);
   3657   cc.evex().vrcp14ss(xmm_a, xmm_b, xmm_c);
   3658   cc.evex().vreducepd(xmm_a, xmm_b, 0);
   3659   cc.evex().vreducepd(ymm_a, ymm_b, 0);
   3660   cc.evex().vreducepd(zmm_a, zmm_b, 0);
   3661   cc.evex().vreduceps(xmm_a, xmm_b, 0);
   3662   cc.evex().vreduceps(ymm_a, ymm_b, 0);
   3663   cc.evex().vreduceps(zmm_a, zmm_b, 0);
   3664   cc.evex().vreducesd(xmm_a, xmm_b, xmm_c, 0);
   3665   cc.evex().vreducess(xmm_a, xmm_b, xmm_c, 0);
   3666   cc.evex().vrndscalepd(xmm_a, xmm_b, 0);
   3667   cc.evex().vrndscalepd(ymm_a, ymm_b, 0);
   3668   cc.evex().vrndscalepd(zmm_a, zmm_b, 0);
   3669   cc.evex().vrndscaleps(xmm_a, xmm_b, 0);
   3670   cc.evex().vrndscaleps(ymm_a, ymm_b, 0);
   3671   cc.evex().vrndscaleps(zmm_a, zmm_b, 0);
   3672   cc.evex().vrndscalesd(xmm_a, xmm_b, xmm_c, 0);
   3673   cc.evex().vrndscaless(xmm_a, xmm_b, xmm_c, 0);
   3674   cc.evex().vrsqrt14pd(xmm_a, xmm_b);
   3675   cc.evex().vrsqrt14pd(ymm_a, ymm_b);
   3676   cc.evex().vrsqrt14pd(zmm_a, zmm_b);
   3677   cc.evex().vrsqrt14ps(xmm_a, xmm_b);
   3678   cc.evex().vrsqrt14ps(ymm_a, ymm_b);
   3679   cc.evex().vrsqrt14ps(zmm_a, zmm_b);
   3680   cc.evex().vrsqrt14sd(xmm_a, xmm_b, xmm_c);
   3681   cc.evex().vrsqrt14ss(xmm_a, xmm_b, xmm_c);
   3682   cc.evex().vscalefpd(xmm_a, xmm_b, xmm_c);
   3683   cc.evex().vscalefpd(ymm_a, ymm_b, ymm_c);
   3684   cc.evex().vscalefpd(zmm_a, zmm_b, zmm_c);
   3685   cc.evex().vscalefps(xmm_a, xmm_b, xmm_c);
   3686   cc.evex().vscalefps(ymm_a, ymm_b, ymm_c);
   3687   cc.evex().vscalefps(zmm_a, zmm_b, zmm_c);
   3688   cc.evex().vscalefsd(xmm_a, xmm_b, xmm_c);
   3689   cc.evex().vscalefss(xmm_a, xmm_b, xmm_c);
   3690   cc.evex().vshuff32x4(ymm_a, ymm_b, ymm_c, 0);
   3691   cc.evex().vshuff32x4(zmm_a, zmm_b, zmm_c, 0);
   3692   cc.evex().vshuff64x2(ymm_a, ymm_b, ymm_c, 0);
   3693   cc.evex().vshuff64x2(zmm_a, zmm_b, zmm_c, 0);
   3694   cc.evex().vshufi32x4(ymm_a, ymm_b, ymm_c, 0);
   3695   cc.evex().vshufi32x4(zmm_a, zmm_b, zmm_c, 0);
   3696   cc.evex().vshufi64x2(ymm_a, ymm_b, ymm_c, 0);
   3697   cc.evex().vshufi64x2(zmm_a, zmm_b, zmm_c, 0);
   3698   cc.evex().vshufpd(xmm_a, xmm_b, xmm_c, 0);
   3699   cc.evex().vshufpd(ymm_a, ymm_b, ymm_c, 0);
   3700   cc.evex().vshufpd(zmm_a, zmm_b, zmm_c, 0);
   3701   cc.evex().vshufps(xmm_a, xmm_b, xmm_c, 0);
   3702   cc.evex().vshufps(ymm_a, ymm_b, ymm_c, 0);
   3703   cc.evex().vshufps(zmm_a, zmm_b, zmm_c, 0);
   3704   cc.evex().vsqrtpd(xmm_a, xmm_b);
   3705   cc.evex().vsqrtpd(ymm_a, ymm_b);
   3706   cc.evex().vsqrtpd(zmm_a, zmm_b);
   3707   cc.evex().vsqrtps(xmm_a, xmm_b);
   3708   cc.evex().vsqrtps(ymm_a, ymm_b);
   3709   cc.evex().vsqrtps(zmm_a, zmm_b);
   3710   cc.evex().vsqrtsd(xmm_a, xmm_b, xmm_c);
   3711   cc.evex().vsqrtss(xmm_a, xmm_b, xmm_c);
   3712   cc.evex().vsubpd(xmm_a, xmm_b, xmm_c);
   3713   cc.evex().vsubpd(ymm_a, ymm_b, ymm_c);
   3714   cc.evex().vsubpd(zmm_a, zmm_b, zmm_c);
   3715   cc.evex().vsubps(xmm_a, xmm_b, xmm_c);
   3716   cc.evex().vsubps(ymm_a, ymm_b, ymm_c);
   3717   cc.evex().vsubps(zmm_a, zmm_b, zmm_c);
   3718   cc.evex().vsubsd(xmm_a, xmm_b, xmm_c);
   3719   cc.evex().vsubss(xmm_a, xmm_b, xmm_c);
   3720   cc.evex().vucomisd(xmm_a, xmm_b);
   3721   cc.evex().vucomiss(xmm_a, xmm_b);
   3722   cc.evex().vunpckhpd(xmm_a, xmm_b, xmm_c);
   3723   cc.evex().vunpckhpd(ymm_a, ymm_b, ymm_c);
   3724   cc.evex().vunpckhpd(zmm_a, zmm_b, zmm_c);
   3725   cc.evex().vunpckhps(xmm_a, xmm_b, xmm_c);
   3726   cc.evex().vunpckhps(ymm_a, ymm_b, ymm_c);
   3727   cc.evex().vunpckhps(zmm_a, zmm_b, zmm_c);
   3728   cc.evex().vunpcklpd(xmm_a, xmm_b, xmm_c);
   3729   cc.evex().vunpcklpd(ymm_a, ymm_b, ymm_c);
   3730   cc.evex().vunpcklpd(zmm_a, zmm_b, zmm_c);
   3731   cc.evex().vunpcklps(xmm_a, xmm_b, xmm_c);
   3732   cc.evex().vunpcklps(ymm_a, ymm_b, ymm_c);
   3733   cc.evex().vunpcklps(zmm_a, zmm_b, zmm_c);
   3734   cc.evex().vxorpd(xmm_a, xmm_b, xmm_c);
   3735   cc.evex().vxorpd(ymm_a, ymm_b, ymm_c);
   3736   cc.evex().vxorpd(zmm_a, zmm_b, zmm_c);
   3737   cc.evex().vxorps(xmm_a, xmm_b, xmm_c);
   3738   cc.evex().vxorps(ymm_a, ymm_b, ymm_c);
   3739   cc.evex().vxorps(zmm_a, zmm_b, zmm_c);
   3740 }
   3741 
   3742 template<typename Emitter>
   3743 static void generate_avx512_sequence_internal_reg_mem(
   3744   Emitter& cc,
   3745   const x86::Gp& gp,
   3746   const x86::KReg& kA, const x86::KReg& kB, const x86::KReg& kC,
   3747   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   3748 
   3749   Support::maybe_unused(kC);
   3750 
   3751   x86::Gp gpd = gp.r32();
   3752   x86::Gp gpq = gp.r64();
   3753   x86::Gp gpz = cc.is_32bit() ? gpd : gpq;
   3754 
   3755   x86::Vec xmm_a = vec_a.xmm();
   3756   x86::Vec xmm_b = vec_b.xmm();
   3757   x86::Vec xmm_c = vec_c.xmm();
   3758   x86::Vec xmm_d = vec_d.xmm();
   3759 
   3760   x86::Vec ymm_a = vec_a.ymm();
   3761   x86::Vec ymm_b = vec_b.ymm();
   3762   x86::Vec ymm_d = vec_d.ymm();
   3763 
   3764   x86::Vec zmm_a = vec_a.zmm();
   3765   x86::Vec zmm_b = vec_b.zmm();
   3766   x86::Vec zmm_d = vec_d.zmm();
   3767 
   3768   x86::Mem m = x86::ptr(gpz);
   3769   x86::Mem m32 = x86::dword_ptr(gpz);
   3770   x86::Mem m64 = x86::qword_ptr(gpz);
   3771   x86::Mem m128 = x86::xmmword_ptr(gpz);
   3772   x86::Mem m256 = x86::ymmword_ptr(gpz);
   3773   x86::Mem m512 = x86::zmmword_ptr(gpz);
   3774   x86::Mem vx_ptr = x86::ptr(gpz, xmm_d);
   3775   x86::Mem vy_ptr = x86::ptr(gpz, ymm_d);
   3776   x86::Mem vz_ptr = x86::ptr(gpz, zmm_d);
   3777 
   3778   cc.xor_(gpd, gpd);
   3779   cc.vxorps(xmm_a, xmm_a, xmm_a);
   3780   cc.vxorps(xmm_b, xmm_b, xmm_b);
   3781   cc.vxorps(xmm_c, xmm_c, xmm_c);
   3782   cc.vxorps(xmm_d, xmm_d, xmm_d);
   3783 
   3784   cc.kmovb(kA, m);
   3785   cc.kmovb(m, kB);
   3786   cc.kmovd(kA, m);
   3787   cc.kmovd(m, kB);
   3788   cc.kmovq(kA, m);
   3789   cc.kmovq(m, kB);
   3790   cc.kmovw(kA, m);
   3791   cc.kmovw(m, kB);
   3792 
   3793   cc.evex().vaddpd(xmm_a, xmm_b, m);
   3794   cc.evex().vaddpd(ymm_a, ymm_b, m);
   3795   cc.evex().vaddpd(zmm_a, zmm_b, m);
   3796   cc.evex().vaddps(xmm_a, xmm_b, m);
   3797   cc.evex().vaddps(ymm_a, ymm_b, m);
   3798   cc.evex().vaddps(zmm_a, zmm_b, m);
   3799   cc.evex().vaddsd(xmm_a, xmm_b, m);
   3800   cc.evex().vaddss(xmm_a, xmm_b, m);
   3801   cc.evex().valignd(xmm_a, xmm_b, m, 0);
   3802   cc.evex().valignd(ymm_a, ymm_b, m, 0);
   3803   cc.evex().valignd(zmm_a, zmm_b, m, 0);
   3804   cc.evex().valignq(xmm_a, xmm_b, m, 0);
   3805   cc.evex().valignq(ymm_a, ymm_b, m, 0);
   3806   cc.evex().valignq(zmm_a, zmm_b, m, 0);
   3807   cc.evex().vandnpd(xmm_a, xmm_b, m);
   3808   cc.evex().vandnpd(ymm_a, ymm_b, m);
   3809   cc.evex().vandnpd(zmm_a, zmm_b, m);
   3810   cc.evex().vandnps(xmm_a, xmm_b, m);
   3811   cc.evex().vandnps(ymm_a, ymm_b, m);
   3812   cc.evex().vandnps(zmm_a, zmm_b, m);
   3813   cc.evex().vandpd(xmm_a, xmm_b, m);
   3814   cc.evex().vandpd(ymm_a, ymm_b, m);
   3815   cc.evex().vandpd(zmm_a, zmm_b, m);
   3816   cc.evex().vandps(xmm_a, xmm_b, m);
   3817   cc.evex().vandps(ymm_a, ymm_b, m);
   3818   cc.evex().vandps(zmm_a, zmm_b, m);
   3819   cc.evex().vblendmpd(xmm_a, xmm_b, m);
   3820   cc.evex().vblendmpd(ymm_a, ymm_b, m);
   3821   cc.evex().vblendmpd(zmm_a, zmm_b, m);
   3822   cc.evex().vblendmps(xmm_a, xmm_b, m);
   3823   cc.evex().vblendmps(ymm_a, ymm_b, m);
   3824   cc.evex().vblendmps(zmm_a, zmm_b, m);
   3825   cc.evex().vbroadcastf32x2(ymm_a, m);
   3826   cc.evex().vbroadcastf32x2(zmm_a, m);
   3827   cc.evex().vbroadcastf32x4(ymm_a, m);
   3828   cc.evex().vbroadcastf32x4(zmm_a, m);
   3829   cc.evex().vbroadcastf32x8(zmm_a, m);
   3830   cc.evex().vbroadcastf64x2(ymm_a, m);
   3831   cc.evex().vbroadcastf64x2(zmm_a, m);
   3832   cc.evex().vbroadcastf64x4(zmm_a, m);
   3833   cc.evex().vbroadcasti32x2(xmm_a, m);
   3834   cc.evex().vbroadcasti32x2(ymm_a, m);
   3835   cc.evex().vbroadcasti32x2(zmm_a, m);
   3836   cc.evex().vbroadcasti32x4(ymm_a, m);
   3837   cc.evex().vbroadcasti32x4(zmm_a, m);
   3838   cc.evex().vbroadcasti32x8(zmm_a, m);
   3839   cc.evex().vbroadcasti64x2(ymm_a, m);
   3840   cc.evex().vbroadcasti64x2(zmm_a, m);
   3841   cc.evex().vbroadcasti64x4(zmm_a, m);
   3842   cc.evex().vbroadcastsd(ymm_a, m);
   3843   cc.evex().vbroadcastsd(zmm_a, m);
   3844   cc.evex().vbroadcastss(xmm_a, m);
   3845   cc.evex().vbroadcastss(ymm_a, m);
   3846   cc.evex().vbroadcastss(zmm_a, m);
   3847   cc.evex().vcmppd(kA, xmm_b, m, 0);
   3848   cc.evex().vcmppd(kA, ymm_b, m, 0);
   3849   cc.evex().vcmppd(kA, zmm_b, m, 0);
   3850   cc.evex().vcmpps(kA, xmm_b, m, 0);
   3851   cc.evex().vcmpps(kA, ymm_b, m, 0);
   3852   cc.evex().vcmpps(kA, zmm_b, m, 0);
   3853   cc.evex().vcmpsd(kA, xmm_b, m, 0);
   3854   cc.evex().vcmpss(kA, xmm_b, m, 0);
   3855   cc.evex().vcomisd(xmm_a, m);
   3856   cc.evex().vcomiss(xmm_a, m);
   3857   cc.evex().vcompresspd(m, xmm_b);
   3858   cc.evex().vcompresspd(m, ymm_b);
   3859   cc.evex().vcompresspd(m, zmm_b);
   3860   cc.evex().vcompressps(m, xmm_b);
   3861   cc.evex().vcompressps(m, ymm_b);
   3862   cc.evex().vcompressps(m, zmm_b);
   3863   cc.evex().vcvtdq2pd(xmm_a, m);
   3864   cc.evex().vcvtdq2pd(ymm_a, m);
   3865   cc.evex().vcvtdq2pd(zmm_a, m);
   3866   cc.evex().vcvtdq2ps(xmm_a, m);
   3867   cc.evex().vcvtdq2ps(ymm_a, m);
   3868   cc.evex().vcvtdq2ps(zmm_a, m);
   3869   cc.evex().vcvtpd2dq(xmm_a, m128);
   3870   cc.evex().vcvtpd2dq(xmm_a, m256);
   3871   cc.evex().vcvtpd2dq(ymm_a, m512);
   3872   cc.evex().vcvtpd2qq(xmm_a, m);
   3873   cc.evex().vcvtpd2qq(ymm_a, m);
   3874   cc.evex().vcvtpd2qq(zmm_a, m);
   3875   cc.evex().vcvtpd2udq(xmm_a, m128);
   3876   cc.evex().vcvtpd2udq(xmm_a, m256);
   3877   cc.evex().vcvtpd2udq(ymm_a, m512);
   3878   cc.evex().vcvtpd2uqq(xmm_a, m);
   3879   cc.evex().vcvtpd2uqq(ymm_a, m);
   3880   cc.evex().vcvtpd2uqq(zmm_a, m);
   3881   cc.evex().vcvtph2ps(xmm_a, m);
   3882   cc.evex().vcvtph2ps(ymm_a, m);
   3883   cc.evex().vcvtph2ps(zmm_a, m);
   3884   cc.evex().vcvtps2dq(xmm_a, m);
   3885   cc.evex().vcvtps2dq(ymm_a, m);
   3886   cc.evex().vcvtps2dq(zmm_a, m);
   3887   cc.evex().vcvtps2pd(xmm_a, m);
   3888   cc.evex().vcvtps2pd(ymm_a, m);
   3889   cc.evex().vcvtps2pd(zmm_a, m);
   3890   cc.evex().vcvtps2ph(m, xmm_b, 0);
   3891   cc.evex().vcvtps2ph(m, ymm_b, 0);
   3892   cc.evex().vcvtps2ph(m, zmm_b, 0);
   3893   cc.evex().vcvtps2qq(xmm_a, m);
   3894   cc.evex().vcvtps2qq(ymm_a, m);
   3895   cc.evex().vcvtps2qq(zmm_a, m);
   3896   cc.evex().vcvtps2udq(xmm_a, m);
   3897   cc.evex().vcvtps2udq(ymm_a, m);
   3898   cc.evex().vcvtps2udq(zmm_a, m);
   3899   cc.evex().vcvtps2uqq(xmm_a, m);
   3900   cc.evex().vcvtps2uqq(ymm_a, m);
   3901   cc.evex().vcvtps2uqq(zmm_a, m);
   3902   cc.evex().vcvtqq2pd(xmm_a, m);
   3903   cc.evex().vcvtqq2pd(ymm_a, m);
   3904   cc.evex().vcvtqq2pd(zmm_a, m);
   3905   cc.evex().vcvtqq2ps(xmm_a, m128);
   3906   cc.evex().vcvtqq2ps(xmm_a, m256);
   3907   cc.evex().vcvtqq2ps(ymm_a, m512);
   3908   cc.evex().vcvtsd2si(gpd, m);
   3909   cc.evex().vcvtsd2si(gpz, m);
   3910   cc.evex().vcvtsd2ss(xmm_a, xmm_b, m);
   3911   cc.evex().vcvtsd2usi(gpd, m);
   3912   cc.evex().vcvtsd2usi(gpz, m);
   3913   cc.evex().vcvtsi2sd(xmm_a, xmm_b, m32);
   3914   if (cc.is_64bit()) cc.evex().vcvtsi2sd(xmm_a, xmm_b, m64);
   3915   cc.evex().vcvtsi2ss(xmm_a, xmm_b, m32);
   3916   if (cc.is_64bit()) cc.evex().vcvtsi2ss(xmm_a, xmm_b, m64);
   3917   cc.evex().vcvtss2sd(xmm_a, xmm_b, m);
   3918   cc.evex().vcvtss2si(gpd, m);
   3919   cc.evex().vcvtss2si(gpz, m);
   3920   cc.evex().vcvtss2usi(gpd, m);
   3921   cc.evex().vcvtss2usi(gpz, m);
   3922   cc.evex().vcvttpd2dq(xmm_a, m128);
   3923   cc.evex().vcvttpd2dq(xmm_a, m256);
   3924   cc.evex().vcvttpd2dq(ymm_a, m512);
   3925   cc.evex().vcvttpd2qq(xmm_a, m);
   3926   cc.evex().vcvttpd2qq(ymm_a, m);
   3927   cc.evex().vcvttpd2qq(zmm_a, m);
   3928   cc.evex().vcvttpd2udq(xmm_a, m128);
   3929   cc.evex().vcvttpd2udq(xmm_a, m256);
   3930   cc.evex().vcvttpd2udq(ymm_a, m512);
   3931   cc.evex().vcvttpd2uqq(xmm_a, m);
   3932   cc.evex().vcvttpd2uqq(ymm_a, m);
   3933   cc.evex().vcvttpd2uqq(zmm_a, m);
   3934   cc.evex().vcvttps2dq(xmm_a, m);
   3935   cc.evex().vcvttps2dq(ymm_a, m);
   3936   cc.evex().vcvttps2dq(zmm_a, m);
   3937   cc.evex().vcvttps2qq(xmm_a, m);
   3938   cc.evex().vcvttps2qq(ymm_a, m);
   3939   cc.evex().vcvttps2qq(zmm_a, m);
   3940   cc.evex().vcvttps2udq(xmm_a, m);
   3941   cc.evex().vcvttps2udq(ymm_a, m);
   3942   cc.evex().vcvttps2udq(zmm_a, m);
   3943   cc.evex().vcvttps2uqq(xmm_a, m);
   3944   cc.evex().vcvttps2uqq(ymm_a, m);
   3945   cc.evex().vcvttps2uqq(zmm_a, m);
   3946   cc.evex().vcvttsd2si(gpd, m);
   3947   cc.evex().vcvttsd2si(gpz, m);
   3948   cc.evex().vcvttsd2usi(gpd, m);
   3949   cc.evex().vcvttsd2usi(gpz, m);
   3950   cc.evex().vcvttss2si(gpd, m);
   3951   cc.evex().vcvttss2si(gpz, m);
   3952   cc.evex().vcvttss2usi(gpd, m);
   3953   cc.evex().vcvttss2usi(gpz, m);
   3954   cc.evex().vcvtudq2pd(xmm_a, m);
   3955   cc.evex().vcvtudq2pd(ymm_a, m);
   3956   cc.evex().vcvtudq2pd(zmm_a, m);
   3957   cc.evex().vcvtudq2ps(xmm_a, m);
   3958   cc.evex().vcvtudq2ps(ymm_a, m);
   3959   cc.evex().vcvtudq2ps(zmm_a, m);
   3960   cc.evex().vcvtuqq2pd(xmm_a, m);
   3961   cc.evex().vcvtuqq2pd(ymm_a, m);
   3962   cc.evex().vcvtuqq2pd(zmm_a, m);
   3963   cc.evex().vcvtuqq2ps(xmm_a, m128);
   3964   cc.evex().vcvtuqq2ps(xmm_a, m256);
   3965   cc.evex().vcvtuqq2ps(ymm_a, m512);
   3966   cc.evex().vcvtusi2sd(xmm_a, xmm_b, m32);
   3967   if (cc.is_64bit()) cc.evex().vcvtusi2sd(xmm_a, xmm_b, m64);
   3968   cc.evex().vcvtusi2ss(xmm_a, xmm_b, m32);
   3969   if (cc.is_64bit()) cc.evex().vcvtusi2ss(xmm_a, xmm_b, m64);
   3970   cc.evex().vdbpsadbw(xmm_a, xmm_b, m, 0);
   3971   cc.evex().vdbpsadbw(ymm_a, ymm_b, m, 0);
   3972   cc.evex().vdbpsadbw(zmm_a, zmm_b, m, 0);
   3973   cc.evex().vdivpd(xmm_a, xmm_b, m);
   3974   cc.evex().vdivpd(ymm_a, ymm_b, m);
   3975   cc.evex().vdivpd(zmm_a, zmm_b, m);
   3976   cc.evex().vdivps(xmm_a, xmm_b, m);
   3977   cc.evex().vdivps(ymm_a, ymm_b, m);
   3978   cc.evex().vdivps(zmm_a, zmm_b, m);
   3979   cc.evex().vdivsd(xmm_a, xmm_b, m);
   3980   cc.evex().vdivss(xmm_a, xmm_b, m);
   3981   cc.evex().vexpandpd(xmm_a, m);
   3982   cc.evex().vexpandpd(ymm_a, m);
   3983   cc.evex().vexpandpd(zmm_a, m);
   3984   cc.evex().vexpandps(xmm_a, m);
   3985   cc.evex().vexpandps(ymm_a, m);
   3986   cc.evex().vexpandps(zmm_a, m);
   3987   cc.evex().vextractf32x4(m, ymm_b, 0);
   3988   cc.evex().vextractf32x4(m, zmm_b, 0);
   3989   cc.evex().vextractf32x8(m, zmm_b, 0);
   3990   cc.evex().vextractf64x2(m, ymm_b, 0);
   3991   cc.evex().vextractf64x2(m, zmm_b, 0);
   3992   cc.evex().vextractf64x4(m, zmm_b, 0);
   3993   cc.evex().vextracti32x4(m, ymm_b, 0);
   3994   cc.evex().vextracti32x4(m, zmm_b, 0);
   3995   cc.evex().vextracti32x8(m, zmm_b, 0);
   3996   cc.evex().vextracti64x2(m, ymm_b, 0);
   3997   cc.evex().vextracti64x2(m, zmm_b, 0);
   3998   cc.evex().vextracti64x4(m, zmm_b, 0);
   3999   cc.evex().vextractps(m, xmm_b, 0);
   4000   cc.evex().vfixupimmpd(xmm_a, xmm_b, m, 0);
   4001   cc.evex().vfixupimmpd(ymm_a, ymm_b, m, 0);
   4002   cc.evex().vfixupimmpd(zmm_a, zmm_b, m, 0);
   4003   cc.evex().vfixupimmps(xmm_a, xmm_b, m, 0);
   4004   cc.evex().vfixupimmps(ymm_a, ymm_b, m, 0);
   4005   cc.evex().vfixupimmps(zmm_a, zmm_b, m, 0);
   4006   cc.evex().vfixupimmsd(xmm_a, xmm_b, m, 0);
   4007   cc.evex().vfixupimmss(xmm_a, xmm_b, m, 0);
   4008   cc.evex().vfmadd132pd(xmm_a, xmm_b, m);
   4009   cc.evex().vfmadd132pd(ymm_a, ymm_b, m);
   4010   cc.evex().vfmadd132pd(zmm_a, zmm_b, m);
   4011   cc.evex().vfmadd132ps(xmm_a, xmm_b, m);
   4012   cc.evex().vfmadd132ps(ymm_a, ymm_b, m);
   4013   cc.evex().vfmadd132ps(zmm_a, zmm_b, m);
   4014   cc.evex().vfmadd132sd(xmm_a, xmm_b, m);
   4015   cc.evex().vfmadd132ss(xmm_a, xmm_b, m);
   4016   cc.evex().vfmadd213pd(xmm_a, xmm_b, m);
   4017   cc.evex().vfmadd213pd(ymm_a, ymm_b, m);
   4018   cc.evex().vfmadd213pd(zmm_a, zmm_b, m);
   4019   cc.evex().vfmadd213ps(xmm_a, xmm_b, m);
   4020   cc.evex().vfmadd213ps(ymm_a, ymm_b, m);
   4021   cc.evex().vfmadd213ps(zmm_a, zmm_b, m);
   4022   cc.evex().vfmadd213sd(xmm_a, xmm_b, m);
   4023   cc.evex().vfmadd213ss(xmm_a, xmm_b, m);
   4024   cc.evex().vfmadd231pd(xmm_a, xmm_b, m);
   4025   cc.evex().vfmadd231pd(ymm_a, ymm_b, m);
   4026   cc.evex().vfmadd231pd(zmm_a, zmm_b, m);
   4027   cc.evex().vfmadd231ps(xmm_a, xmm_b, m);
   4028   cc.evex().vfmadd231ps(ymm_a, ymm_b, m);
   4029   cc.evex().vfmadd231ps(zmm_a, zmm_b, m);
   4030   cc.evex().vfmadd231sd(xmm_a, xmm_b, m);
   4031   cc.evex().vfmadd231ss(xmm_a, xmm_b, m);
   4032   cc.evex().vfmaddsub132pd(xmm_a, xmm_b, m);
   4033   cc.evex().vfmaddsub132pd(ymm_a, ymm_b, m);
   4034   cc.evex().vfmaddsub132pd(zmm_a, zmm_b, m);
   4035   cc.evex().vfmaddsub132ps(xmm_a, xmm_b, m);
   4036   cc.evex().vfmaddsub132ps(ymm_a, ymm_b, m);
   4037   cc.evex().vfmaddsub132ps(zmm_a, zmm_b, m);
   4038   cc.evex().vfmaddsub213pd(xmm_a, xmm_b, m);
   4039   cc.evex().vfmaddsub213pd(ymm_a, ymm_b, m);
   4040   cc.evex().vfmaddsub213pd(zmm_a, zmm_b, m);
   4041   cc.evex().vfmaddsub213ps(xmm_a, xmm_b, m);
   4042   cc.evex().vfmaddsub213ps(ymm_a, ymm_b, m);
   4043   cc.evex().vfmaddsub213ps(zmm_a, zmm_b, m);
   4044   cc.evex().vfmaddsub231pd(xmm_a, xmm_b, m);
   4045   cc.evex().vfmaddsub231pd(ymm_a, ymm_b, m);
   4046   cc.evex().vfmaddsub231pd(zmm_a, zmm_b, m);
   4047   cc.evex().vfmaddsub231ps(xmm_a, xmm_b, m);
   4048   cc.evex().vfmaddsub231ps(ymm_a, ymm_b, m);
   4049   cc.evex().vfmaddsub231ps(zmm_a, zmm_b, m);
   4050   cc.evex().vfmsub132pd(xmm_a, xmm_b, m);
   4051   cc.evex().vfmsub132pd(ymm_a, ymm_b, m);
   4052   cc.evex().vfmsub132pd(zmm_a, zmm_b, m);
   4053   cc.evex().vfmsub132ps(xmm_a, xmm_b, m);
   4054   cc.evex().vfmsub132ps(ymm_a, ymm_b, m);
   4055   cc.evex().vfmsub132ps(zmm_a, zmm_b, m);
   4056   cc.evex().vfmsub132sd(xmm_a, xmm_b, m);
   4057   cc.evex().vfmsub132ss(xmm_a, xmm_b, m);
   4058   cc.evex().vfmsub213pd(xmm_a, xmm_b, m);
   4059   cc.evex().vfmsub213pd(ymm_a, ymm_b, m);
   4060   cc.evex().vfmsub213pd(zmm_a, zmm_b, m);
   4061   cc.evex().vfmsub213ps(xmm_a, xmm_b, m);
   4062   cc.evex().vfmsub213ps(ymm_a, ymm_b, m);
   4063   cc.evex().vfmsub213ps(zmm_a, zmm_b, m);
   4064   cc.evex().vfmsub213sd(xmm_a, xmm_b, m);
   4065   cc.evex().vfmsub213ss(xmm_a, xmm_b, m);
   4066   cc.evex().vfmsub231pd(xmm_a, xmm_b, m);
   4067   cc.evex().vfmsub231pd(ymm_a, ymm_b, m);
   4068   cc.evex().vfmsub231pd(zmm_a, zmm_b, m);
   4069   cc.evex().vfmsub231ps(xmm_a, xmm_b, m);
   4070   cc.evex().vfmsub231ps(ymm_a, ymm_b, m);
   4071   cc.evex().vfmsub231ps(zmm_a, zmm_b, m);
   4072   cc.evex().vfmsub231sd(xmm_a, xmm_b, m);
   4073   cc.evex().vfmsub231ss(xmm_a, xmm_b, m);
   4074   cc.evex().vfmsubadd132pd(xmm_a, xmm_b, m);
   4075   cc.evex().vfmsubadd132pd(ymm_a, ymm_b, m);
   4076   cc.evex().vfmsubadd132pd(zmm_a, zmm_b, m);
   4077   cc.evex().vfmsubadd132ps(xmm_a, xmm_b, m);
   4078   cc.evex().vfmsubadd132ps(ymm_a, ymm_b, m);
   4079   cc.evex().vfmsubadd132ps(zmm_a, zmm_b, m);
   4080   cc.evex().vfmsubadd213pd(xmm_a, xmm_b, m);
   4081   cc.evex().vfmsubadd213pd(ymm_a, ymm_b, m);
   4082   cc.evex().vfmsubadd213pd(zmm_a, zmm_b, m);
   4083   cc.evex().vfmsubadd213ps(xmm_a, xmm_b, m);
   4084   cc.evex().vfmsubadd213ps(ymm_a, ymm_b, m);
   4085   cc.evex().vfmsubadd213ps(zmm_a, zmm_b, m);
   4086   cc.evex().vfmsubadd231pd(xmm_a, xmm_b, m);
   4087   cc.evex().vfmsubadd231pd(ymm_a, ymm_b, m);
   4088   cc.evex().vfmsubadd231pd(zmm_a, zmm_b, m);
   4089   cc.evex().vfmsubadd231ps(xmm_a, xmm_b, m);
   4090   cc.evex().vfmsubadd231ps(ymm_a, ymm_b, m);
   4091   cc.evex().vfmsubadd231ps(zmm_a, zmm_b, m);
   4092   cc.evex().vfnmadd132pd(xmm_a, xmm_b, m);
   4093   cc.evex().vfnmadd132pd(ymm_a, ymm_b, m);
   4094   cc.evex().vfnmadd132pd(zmm_a, zmm_b, m);
   4095   cc.evex().vfnmadd132ps(xmm_a, xmm_b, m);
   4096   cc.evex().vfnmadd132ps(ymm_a, ymm_b, m);
   4097   cc.evex().vfnmadd132ps(zmm_a, zmm_b, m);
   4098   cc.evex().vfnmadd132sd(xmm_a, xmm_b, m);
   4099   cc.evex().vfnmadd132ss(xmm_a, xmm_b, m);
   4100   cc.evex().vfnmadd213pd(xmm_a, xmm_b, m);
   4101   cc.evex().vfnmadd213pd(ymm_a, ymm_b, m);
   4102   cc.evex().vfnmadd213pd(zmm_a, zmm_b, m);
   4103   cc.evex().vfnmadd213ps(xmm_a, xmm_b, m);
   4104   cc.evex().vfnmadd213ps(ymm_a, ymm_b, m);
   4105   cc.evex().vfnmadd213ps(zmm_a, zmm_b, m);
   4106   cc.evex().vfnmadd213sd(xmm_a, xmm_b, m);
   4107   cc.evex().vfnmadd213ss(xmm_a, xmm_b, m);
   4108   cc.evex().vfnmadd231pd(xmm_a, xmm_b, m);
   4109   cc.evex().vfnmadd231pd(ymm_a, ymm_b, m);
   4110   cc.evex().vfnmadd231pd(zmm_a, zmm_b, m);
   4111   cc.evex().vfnmadd231ps(xmm_a, xmm_b, m);
   4112   cc.evex().vfnmadd231ps(ymm_a, ymm_b, m);
   4113   cc.evex().vfnmadd231ps(zmm_a, zmm_b, m);
   4114   cc.evex().vfnmadd231sd(xmm_a, xmm_b, m);
   4115   cc.evex().vfnmadd231ss(xmm_a, xmm_b, m);
   4116   cc.evex().vfnmsub132pd(xmm_a, xmm_b, m);
   4117   cc.evex().vfnmsub132pd(ymm_a, ymm_b, m);
   4118   cc.evex().vfnmsub132pd(zmm_a, zmm_b, m);
   4119   cc.evex().vfnmsub132ps(xmm_a, xmm_b, m);
   4120   cc.evex().vfnmsub132ps(ymm_a, ymm_b, m);
   4121   cc.evex().vfnmsub132ps(zmm_a, zmm_b, m);
   4122   cc.evex().vfnmsub132sd(xmm_a, xmm_b, m);
   4123   cc.evex().vfnmsub132ss(xmm_a, xmm_b, m);
   4124   cc.evex().vfnmsub213pd(xmm_a, xmm_b, m);
   4125   cc.evex().vfnmsub213pd(ymm_a, ymm_b, m);
   4126   cc.evex().vfnmsub213pd(zmm_a, zmm_b, m);
   4127   cc.evex().vfnmsub213ps(xmm_a, xmm_b, m);
   4128   cc.evex().vfnmsub213ps(ymm_a, ymm_b, m);
   4129   cc.evex().vfnmsub213ps(zmm_a, zmm_b, m);
   4130   cc.evex().vfnmsub213sd(xmm_a, xmm_b, m);
   4131   cc.evex().vfnmsub213ss(xmm_a, xmm_b, m);
   4132   cc.evex().vfnmsub231pd(xmm_a, xmm_b, m);
   4133   cc.evex().vfnmsub231pd(ymm_a, ymm_b, m);
   4134   cc.evex().vfnmsub231pd(zmm_a, zmm_b, m);
   4135   cc.evex().vfnmsub231ps(xmm_a, xmm_b, m);
   4136   cc.evex().vfnmsub231ps(ymm_a, ymm_b, m);
   4137   cc.evex().vfnmsub231ps(zmm_a, zmm_b, m);
   4138   cc.evex().vfnmsub231sd(xmm_a, xmm_b, m);
   4139   cc.evex().vfnmsub231ss(xmm_a, xmm_b, m);
   4140   cc.evex().vfpclasspd(kA, m128, 0);
   4141   cc.evex().vfpclasspd(kA, m256, 0);
   4142   cc.evex().vfpclasspd(kA, m512, 0);
   4143   cc.evex().vfpclassps(kA, m128, 0);
   4144   cc.evex().vfpclassps(kA, m256, 0);
   4145   cc.evex().vfpclassps(kA, m512, 0);
   4146   cc.evex().vfpclasssd(kA, m, 0);
   4147   cc.evex().vfpclassss(kA, m, 0);
   4148   cc.evex().k(kA).vgatherdpd(xmm_a, vx_ptr);
   4149   cc.evex().k(kA).vgatherdpd(ymm_a, vx_ptr);
   4150   cc.evex().k(kA).vgatherdpd(zmm_a, vy_ptr);
   4151   cc.evex().k(kA).vgatherdps(xmm_a, vx_ptr);
   4152   cc.evex().k(kA).vgatherdps(ymm_a, vy_ptr);
   4153   cc.evex().k(kA).vgatherdps(zmm_a, vz_ptr);
   4154   cc.evex().k(kA).vgatherqpd(xmm_a, vx_ptr);
   4155   cc.evex().k(kA).vgatherqpd(ymm_a, vy_ptr);
   4156   cc.evex().k(kA).vgatherqpd(zmm_a, vz_ptr);
   4157   cc.evex().k(kA).vgatherqps(xmm_a, vx_ptr);
   4158   cc.evex().k(kA).vgatherqps(xmm_a, vy_ptr);
   4159   cc.evex().k(kA).vgatherqps(ymm_a, vz_ptr);
   4160   cc.evex().vgetexppd(xmm_a, m);
   4161   cc.evex().vgetexppd(ymm_a, m);
   4162   cc.evex().vgetexppd(zmm_a, m);
   4163   cc.evex().vgetexpps(xmm_a, m);
   4164   cc.evex().vgetexpps(ymm_a, m);
   4165   cc.evex().vgetexpps(zmm_a, m);
   4166   cc.evex().vgetexpsd(xmm_a, xmm_b, m);
   4167   cc.evex().vgetexpss(xmm_a, xmm_b, m);
   4168   cc.evex().vgetmantpd(xmm_a, m, 0);
   4169   cc.evex().vgetmantpd(ymm_a, m, 0);
   4170   cc.evex().vgetmantpd(zmm_a, m, 0);
   4171   cc.evex().vgetmantps(xmm_a, m, 0);
   4172   cc.evex().vgetmantps(ymm_a, m, 0);
   4173   cc.evex().vgetmantps(zmm_a, m, 0);
   4174   cc.evex().vgetmantsd(xmm_a, xmm_b, m, 0);
   4175   cc.evex().vgetmantss(xmm_a, xmm_b, m, 0);
   4176   cc.evex().vinsertf32x4(ymm_a, ymm_b, m, 0);
   4177   cc.evex().vinsertf32x4(zmm_a, zmm_b, m, 0);
   4178   cc.evex().vinsertf32x8(zmm_a, zmm_b, m, 0);
   4179   cc.evex().vinsertf64x2(ymm_a, ymm_b, m, 0);
   4180   cc.evex().vinsertf64x2(zmm_a, zmm_b, m, 0);
   4181   cc.evex().vinsertf64x4(zmm_a, zmm_b, m, 0);
   4182   cc.evex().vinserti32x4(ymm_a, ymm_b, m, 0);
   4183   cc.evex().vinserti32x4(zmm_a, zmm_b, m, 0);
   4184   cc.evex().vinserti32x8(zmm_a, zmm_b, m, 0);
   4185   cc.evex().vinserti64x2(ymm_a, ymm_b, m, 0);
   4186   cc.evex().vinserti64x2(zmm_a, zmm_b, m, 0);
   4187   cc.evex().vinserti64x4(zmm_a, zmm_b, m, 0);
   4188   cc.evex().vinsertps(xmm_a, xmm_b, m, 0);
   4189   cc.evex().vmaxpd(xmm_a, xmm_b, m);
   4190   cc.evex().vmaxpd(ymm_a, ymm_b, m);
   4191   cc.evex().vmaxpd(zmm_a, zmm_b, m);
   4192   cc.evex().vmaxps(xmm_a, xmm_b, m);
   4193   cc.evex().vmaxps(ymm_a, ymm_b, m);
   4194   cc.evex().vmaxps(zmm_a, zmm_b, m);
   4195   cc.evex().vmaxsd(xmm_a, xmm_b, m);
   4196   cc.evex().vmaxss(xmm_a, xmm_b, m);
   4197   cc.evex().vminpd(xmm_a, xmm_b, m);
   4198   cc.evex().vminpd(ymm_a, ymm_b, m);
   4199   cc.evex().vminpd(zmm_a, zmm_b, m);
   4200   cc.evex().vminps(xmm_a, xmm_b, m);
   4201   cc.evex().vminps(ymm_a, ymm_b, m);
   4202   cc.evex().vminps(zmm_a, zmm_b, m);
   4203   cc.evex().vminsd(xmm_a, xmm_b, m);
   4204   cc.evex().vminss(xmm_a, xmm_b, m);
   4205   cc.evex().vmovapd(xmm_a, m);
   4206   cc.evex().vmovapd(m, xmm_b);
   4207   cc.evex().vmovapd(ymm_a, m);
   4208   cc.evex().vmovapd(m, ymm_b);
   4209   cc.evex().vmovapd(zmm_a, m);
   4210   cc.evex().vmovapd(m, zmm_b);
   4211   cc.evex().vmovaps(xmm_a, m);
   4212   cc.evex().vmovaps(m, xmm_b);
   4213   cc.evex().vmovaps(ymm_a, m);
   4214   cc.evex().vmovaps(m, ymm_b);
   4215   cc.evex().vmovaps(zmm_a, m);
   4216   cc.evex().vmovaps(m, zmm_b);
   4217   cc.evex().vmovd(m, xmm_b);
   4218   cc.evex().vmovd(xmm_a, m);
   4219   cc.evex().vmovddup(xmm_a, m);
   4220   cc.evex().vmovddup(ymm_a, m);
   4221   cc.evex().vmovddup(zmm_a, m);
   4222   cc.evex().vmovdqa32(xmm_a, m);
   4223   cc.evex().vmovdqa32(m, xmm_b);
   4224   cc.evex().vmovdqa32(ymm_a, m);
   4225   cc.evex().vmovdqa32(m, ymm_b);
   4226   cc.evex().vmovdqa32(zmm_a, m);
   4227   cc.evex().vmovdqa32(m, zmm_b);
   4228   cc.evex().vmovdqa64(xmm_a, m);
   4229   cc.evex().vmovdqa64(m, xmm_b);
   4230   cc.evex().vmovdqa64(ymm_a, m);
   4231   cc.evex().vmovdqa64(m, ymm_b);
   4232   cc.evex().vmovdqa64(zmm_a, m);
   4233   cc.evex().vmovdqa64(m, zmm_b);
   4234   cc.evex().vmovdqu16(xmm_a, m);
   4235   cc.evex().vmovdqu16(m, xmm_b);
   4236   cc.evex().vmovdqu16(ymm_a, m);
   4237   cc.evex().vmovdqu16(m, ymm_b);
   4238   cc.evex().vmovdqu16(zmm_a, m);
   4239   cc.evex().vmovdqu16(m, zmm_b);
   4240   cc.evex().vmovdqu32(xmm_a, m);
   4241   cc.evex().vmovdqu32(m, xmm_b);
   4242   cc.evex().vmovdqu32(ymm_a, m);
   4243   cc.evex().vmovdqu32(m, ymm_b);
   4244   cc.evex().vmovdqu32(zmm_a, m);
   4245   cc.evex().vmovdqu32(m, zmm_b);
   4246   cc.evex().vmovdqu64(xmm_a, m);
   4247   cc.evex().vmovdqu64(m, xmm_b);
   4248   cc.evex().vmovdqu64(ymm_a, m);
   4249   cc.evex().vmovdqu64(m, ymm_b);
   4250   cc.evex().vmovdqu64(zmm_a, m);
   4251   cc.evex().vmovdqu64(m, zmm_b);
   4252   cc.evex().vmovdqu8(xmm_a, m);
   4253   cc.evex().vmovdqu8(m, xmm_b);
   4254   cc.evex().vmovdqu8(ymm_a, m);
   4255   cc.evex().vmovdqu8(m, ymm_b);
   4256   cc.evex().vmovdqu8(zmm_a, m);
   4257   cc.evex().vmovdqu8(m, zmm_b);
   4258   cc.evex().vmovhpd(m, xmm_b);
   4259   cc.evex().vmovhpd(xmm_a, xmm_b, m);
   4260   cc.evex().vmovhps(m, xmm_b);
   4261   cc.evex().vmovhps(xmm_a, xmm_b, m);
   4262   cc.evex().vmovlpd(m, xmm_b);
   4263   cc.evex().vmovlpd(xmm_a, xmm_b, m);
   4264   cc.evex().vmovlps(m, xmm_b);
   4265   cc.evex().vmovlps(xmm_a, xmm_b, m);
   4266   cc.evex().vmovntdq(m, xmm_b);
   4267   cc.evex().vmovntdq(m, ymm_b);
   4268   cc.evex().vmovntdq(m, zmm_b);
   4269   cc.evex().vmovntdqa(xmm_a, m);
   4270   cc.evex().vmovntdqa(ymm_a, m);
   4271   cc.evex().vmovntdqa(zmm_a, m);
   4272   cc.evex().vmovntpd(m, xmm_b);
   4273   cc.evex().vmovntpd(m, ymm_b);
   4274   cc.evex().vmovntpd(m, zmm_b);
   4275   cc.evex().vmovntps(m, xmm_b);
   4276   cc.evex().vmovntps(m, ymm_b);
   4277   cc.evex().vmovntps(m, zmm_b);
   4278   cc.evex().vmovq(m, xmm_b);
   4279   cc.evex().vmovq(xmm_a, m);
   4280   cc.evex().vmovq(xmm_a, m);
   4281   cc.evex().vmovq(m, xmm_b);
   4282   cc.evex().vmovsd(m, xmm_b);
   4283   cc.evex().vmovsd(xmm_a, m);
   4284   cc.evex().vmovshdup(xmm_a, m);
   4285   cc.evex().vmovshdup(ymm_a, m);
   4286   cc.evex().vmovshdup(zmm_a, m);
   4287   cc.evex().vmovsldup(xmm_a, m);
   4288   cc.evex().vmovsldup(ymm_a, m);
   4289   cc.evex().vmovsldup(zmm_a, m);
   4290   cc.evex().vmovss(m, xmm_b);
   4291   cc.evex().vmovss(xmm_a, m);
   4292   cc.evex().vmovupd(xmm_a, m);
   4293   cc.evex().vmovupd(m, xmm_b);
   4294   cc.evex().vmovupd(ymm_a, m);
   4295   cc.evex().vmovupd(m, ymm_b);
   4296   cc.evex().vmovupd(zmm_a, m);
   4297   cc.evex().vmovupd(m, zmm_b);
   4298   cc.evex().vmovups(xmm_a, m);
   4299   cc.evex().vmovups(m, xmm_b);
   4300   cc.evex().vmovups(ymm_a, m);
   4301   cc.evex().vmovups(m, ymm_b);
   4302   cc.evex().vmovups(zmm_a, m);
   4303   cc.evex().vmovups(m, zmm_b);
   4304   cc.evex().vmulpd(xmm_a, xmm_b, m);
   4305   cc.evex().vmulpd(ymm_a, ymm_b, m);
   4306   cc.evex().vmulpd(zmm_a, zmm_b, m);
   4307   cc.evex().vmulps(xmm_a, xmm_b, m);
   4308   cc.evex().vmulps(ymm_a, ymm_b, m);
   4309   cc.evex().vmulps(zmm_a, zmm_b, m);
   4310   cc.evex().vmulsd(xmm_a, xmm_b, m);
   4311   cc.evex().vmulss(xmm_a, xmm_b, m);
   4312   cc.evex().vorpd(xmm_a, xmm_b, m);
   4313   cc.evex().vorpd(ymm_a, ymm_b, m);
   4314   cc.evex().vorpd(zmm_a, zmm_b, m);
   4315   cc.evex().vorps(xmm_a, xmm_b, m);
   4316   cc.evex().vorps(ymm_a, ymm_b, m);
   4317   cc.evex().vorps(zmm_a, zmm_b, m);
   4318   cc.evex().vpabsb(xmm_a, m);
   4319   cc.evex().vpabsb(ymm_a, m);
   4320   cc.evex().vpabsb(zmm_a, m);
   4321   cc.evex().vpabsd(xmm_a, m);
   4322   cc.evex().vpabsd(ymm_a, m);
   4323   cc.evex().vpabsd(zmm_a, m);
   4324   cc.evex().vpabsq(xmm_a, m);
   4325   cc.evex().vpabsq(ymm_a, m);
   4326   cc.evex().vpabsq(zmm_a, m);
   4327   cc.evex().vpabsw(xmm_a, m);
   4328   cc.evex().vpabsw(ymm_a, m);
   4329   cc.evex().vpabsw(zmm_a, m);
   4330   cc.evex().vpackssdw(xmm_a, xmm_b, m);
   4331   cc.evex().vpackssdw(ymm_a, ymm_b, m);
   4332   cc.evex().vpackssdw(zmm_a, zmm_b, m);
   4333   cc.evex().vpacksswb(xmm_a, xmm_b, m);
   4334   cc.evex().vpacksswb(ymm_a, ymm_b, m);
   4335   cc.evex().vpacksswb(zmm_a, zmm_b, m);
   4336   cc.evex().vpackusdw(xmm_a, xmm_b, m);
   4337   cc.evex().vpackusdw(ymm_a, ymm_b, m);
   4338   cc.evex().vpackusdw(zmm_a, zmm_b, m);
   4339   cc.evex().vpackuswb(xmm_a, xmm_b, m);
   4340   cc.evex().vpackuswb(ymm_a, ymm_b, m);
   4341   cc.evex().vpackuswb(zmm_a, zmm_b, m);
   4342   cc.evex().vpaddb(xmm_a, xmm_b, m);
   4343   cc.evex().vpaddb(ymm_a, ymm_b, m);
   4344   cc.evex().vpaddb(zmm_a, zmm_b, m);
   4345   cc.evex().vpaddd(xmm_a, xmm_b, m);
   4346   cc.evex().vpaddd(ymm_a, ymm_b, m);
   4347   cc.evex().vpaddd(zmm_a, zmm_b, m);
   4348   cc.evex().vpaddq(xmm_a, xmm_b, m);
   4349   cc.evex().vpaddq(ymm_a, ymm_b, m);
   4350   cc.evex().vpaddq(zmm_a, zmm_b, m);
   4351   cc.evex().vpaddsb(xmm_a, xmm_b, m);
   4352   cc.evex().vpaddsb(ymm_a, ymm_b, m);
   4353   cc.evex().vpaddsb(zmm_a, zmm_b, m);
   4354   cc.evex().vpaddsw(xmm_a, xmm_b, m);
   4355   cc.evex().vpaddsw(ymm_a, ymm_b, m);
   4356   cc.evex().vpaddsw(zmm_a, zmm_b, m);
   4357   cc.evex().vpaddusb(xmm_a, xmm_b, m);
   4358   cc.evex().vpaddusb(ymm_a, ymm_b, m);
   4359   cc.evex().vpaddusb(zmm_a, zmm_b, m);
   4360   cc.evex().vpaddusw(xmm_a, xmm_b, m);
   4361   cc.evex().vpaddusw(ymm_a, ymm_b, m);
   4362   cc.evex().vpaddusw(zmm_a, zmm_b, m);
   4363   cc.evex().vpaddw(xmm_a, xmm_b, m);
   4364   cc.evex().vpaddw(ymm_a, ymm_b, m);
   4365   cc.evex().vpaddw(zmm_a, zmm_b, m);
   4366   cc.evex().vpalignr(xmm_a, xmm_b, m, 0);
   4367   cc.evex().vpalignr(ymm_a, ymm_b, m, 0);
   4368   cc.evex().vpalignr(zmm_a, zmm_b, m, 0);
   4369   cc.evex().vpandd(xmm_a, xmm_b, m);
   4370   cc.evex().vpandd(ymm_a, ymm_b, m);
   4371   cc.evex().vpandd(zmm_a, zmm_b, m);
   4372   cc.evex().vpandnd(xmm_a, xmm_b, m);
   4373   cc.evex().vpandnd(ymm_a, ymm_b, m);
   4374   cc.evex().vpandnd(zmm_a, zmm_b, m);
   4375   cc.evex().vpandnq(xmm_a, xmm_b, m);
   4376   cc.evex().vpandnq(ymm_a, ymm_b, m);
   4377   cc.evex().vpandnq(zmm_a, zmm_b, m);
   4378   cc.evex().vpandq(xmm_a, xmm_b, m);
   4379   cc.evex().vpandq(ymm_a, ymm_b, m);
   4380   cc.evex().vpandq(zmm_a, zmm_b, m);
   4381   cc.evex().vpavgb(xmm_a, xmm_b, m);
   4382   cc.evex().vpavgb(ymm_a, ymm_b, m);
   4383   cc.evex().vpavgb(zmm_a, zmm_b, m);
   4384   cc.evex().vpavgw(xmm_a, xmm_b, m);
   4385   cc.evex().vpavgw(ymm_a, ymm_b, m);
   4386   cc.evex().vpavgw(zmm_a, zmm_b, m);
   4387   cc.evex().vpblendmb(xmm_a, xmm_b, m);
   4388   cc.evex().vpblendmb(ymm_a, ymm_b, m);
   4389   cc.evex().vpblendmb(zmm_a, zmm_b, m);
   4390   cc.evex().vpblendmd(xmm_a, xmm_b, m);
   4391   cc.evex().vpblendmd(ymm_a, ymm_b, m);
   4392   cc.evex().vpblendmd(zmm_a, zmm_b, m);
   4393   cc.evex().vpblendmq(xmm_a, xmm_b, m);
   4394   cc.evex().vpblendmq(ymm_a, ymm_b, m);
   4395   cc.evex().vpblendmq(zmm_a, zmm_b, m);
   4396   cc.evex().vpblendmw(xmm_a, xmm_b, m);
   4397   cc.evex().vpblendmw(ymm_a, ymm_b, m);
   4398   cc.evex().vpblendmw(zmm_a, zmm_b, m);
   4399   cc.evex().vpbroadcastb(xmm_a, m);
   4400   cc.evex().vpbroadcastb(ymm_a, m);
   4401   cc.evex().vpbroadcastb(zmm_a, m);
   4402   cc.evex().vpbroadcastd(xmm_a, m);
   4403   cc.evex().vpbroadcastd(ymm_a, m);
   4404   cc.evex().vpbroadcastd(zmm_a, m);
   4405   cc.evex().vpbroadcastq(xmm_a, m);
   4406   cc.evex().vpbroadcastq(ymm_a, m);
   4407   cc.evex().vpbroadcastq(zmm_a, m);
   4408   cc.evex().vpbroadcastw(xmm_a, m);
   4409   cc.evex().vpbroadcastw(ymm_a, m);
   4410   cc.evex().vpbroadcastw(zmm_a, m);
   4411   cc.evex().vpcmpb(kA, xmm_b, m, 0);
   4412   cc.evex().vpcmpb(kA, ymm_b, m, 0);
   4413   cc.evex().vpcmpb(kA, zmm_b, m, 0);
   4414   cc.evex().vpcmpd(kA, xmm_b, m, 0);
   4415   cc.evex().vpcmpd(kA, ymm_b, m, 0);
   4416   cc.evex().vpcmpd(kA, zmm_b, m, 0);
   4417   cc.evex().vpcmpeqb(kA, xmm_b, m);
   4418   cc.evex().vpcmpeqb(kA, ymm_b, m);
   4419   cc.evex().vpcmpeqb(kA, zmm_b, m);
   4420   cc.evex().vpcmpeqd(kA, xmm_b, m);
   4421   cc.evex().vpcmpeqd(kA, ymm_b, m);
   4422   cc.evex().vpcmpeqd(kA, zmm_b, m);
   4423   cc.evex().vpcmpeqq(kA, xmm_b, m);
   4424   cc.evex().vpcmpeqq(kA, ymm_b, m);
   4425   cc.evex().vpcmpeqq(kA, zmm_b, m);
   4426   cc.evex().vpcmpeqw(kA, xmm_b, m);
   4427   cc.evex().vpcmpeqw(kA, ymm_b, m);
   4428   cc.evex().vpcmpeqw(kA, zmm_b, m);
   4429   cc.evex().vpcmpgtb(kA, xmm_b, m);
   4430   cc.evex().vpcmpgtb(kA, ymm_b, m);
   4431   cc.evex().vpcmpgtb(kA, zmm_b, m);
   4432   cc.evex().vpcmpgtd(kA, xmm_b, m);
   4433   cc.evex().vpcmpgtd(kA, ymm_b, m);
   4434   cc.evex().vpcmpgtd(kA, zmm_b, m);
   4435   cc.evex().vpcmpgtq(kA, xmm_b, m);
   4436   cc.evex().vpcmpgtq(kA, ymm_b, m);
   4437   cc.evex().vpcmpgtq(kA, zmm_b, m);
   4438   cc.evex().vpcmpgtw(kA, xmm_b, m);
   4439   cc.evex().vpcmpgtw(kA, ymm_b, m);
   4440   cc.evex().vpcmpgtw(kA, zmm_b, m);
   4441   cc.evex().vpcmpq(kA, xmm_b, m, 0);
   4442   cc.evex().vpcmpq(kA, ymm_b, m, 0);
   4443   cc.evex().vpcmpq(kA, zmm_b, m, 0);
   4444   cc.evex().vpcmpub(kA, xmm_b, m, 0);
   4445   cc.evex().vpcmpub(kA, ymm_b, m, 0);
   4446   cc.evex().vpcmpub(kA, zmm_b, m, 0);
   4447   cc.evex().vpcmpud(kA, xmm_b, m, 0);
   4448   cc.evex().vpcmpud(kA, ymm_b, m, 0);
   4449   cc.evex().vpcmpud(kA, zmm_b, m, 0);
   4450   cc.evex().vpcmpuq(kA, xmm_b, m, 0);
   4451   cc.evex().vpcmpuq(kA, ymm_b, m, 0);
   4452   cc.evex().vpcmpuq(kA, zmm_b, m, 0);
   4453   cc.evex().vpcmpuw(kA, xmm_b, m, 0);
   4454   cc.evex().vpcmpuw(kA, ymm_b, m, 0);
   4455   cc.evex().vpcmpuw(kA, zmm_b, m, 0);
   4456   cc.evex().vpcmpw(kA, xmm_b, m, 0);
   4457   cc.evex().vpcmpw(kA, ymm_b, m, 0);
   4458   cc.evex().vpcmpw(kA, zmm_b, m, 0);
   4459   cc.evex().vpcompressd(m, xmm_b);
   4460   cc.evex().vpcompressd(m, ymm_b);
   4461   cc.evex().vpcompressd(m, zmm_b);
   4462   cc.evex().vpcompressq(m, xmm_b);
   4463   cc.evex().vpcompressq(m, ymm_b);
   4464   cc.evex().vpcompressq(m, zmm_b);
   4465   cc.evex().vpconflictd(xmm_a, m);
   4466   cc.evex().vpconflictd(ymm_a, m);
   4467   cc.evex().vpconflictd(zmm_a, m);
   4468   cc.evex().vpconflictq(xmm_a, m);
   4469   cc.evex().vpconflictq(ymm_a, m);
   4470   cc.evex().vpconflictq(zmm_a, m);
   4471   cc.evex().vpermb(xmm_a, xmm_b, m);
   4472   cc.evex().vpermb(ymm_a, ymm_b, m);
   4473   cc.evex().vpermb(zmm_a, zmm_b, m);
   4474   cc.evex().vpermd(ymm_a, ymm_b, m);
   4475   cc.evex().vpermd(zmm_a, zmm_b, m);
   4476   cc.evex().vpermi2b(xmm_a, xmm_b, m);
   4477   cc.evex().vpermi2b(ymm_a, ymm_b, m);
   4478   cc.evex().vpermi2b(zmm_a, zmm_b, m);
   4479   cc.evex().vpermi2d(xmm_a, xmm_b, m);
   4480   cc.evex().vpermi2d(ymm_a, ymm_b, m);
   4481   cc.evex().vpermi2d(zmm_a, zmm_b, m);
   4482   cc.evex().vpermi2pd(xmm_a, xmm_b, m);
   4483   cc.evex().vpermi2pd(ymm_a, ymm_b, m);
   4484   cc.evex().vpermi2pd(zmm_a, zmm_b, m);
   4485   cc.evex().vpermi2ps(xmm_a, xmm_b, m);
   4486   cc.evex().vpermi2ps(ymm_a, ymm_b, m);
   4487   cc.evex().vpermi2ps(zmm_a, zmm_b, m);
   4488   cc.evex().vpermi2q(xmm_a, xmm_b, m);
   4489   cc.evex().vpermi2q(ymm_a, ymm_b, m);
   4490   cc.evex().vpermi2q(zmm_a, zmm_b, m);
   4491   cc.evex().vpermi2w(xmm_a, xmm_b, m);
   4492   cc.evex().vpermi2w(ymm_a, ymm_b, m);
   4493   cc.evex().vpermi2w(zmm_a, zmm_b, m);
   4494   cc.evex().vpermilpd(xmm_a, xmm_b, m);
   4495   cc.evex().vpermilpd(ymm_a, ymm_b, m);
   4496   cc.evex().vpermilpd(zmm_a, zmm_b, m);
   4497   cc.evex().vpermilpd(xmm_a, m, 0);
   4498   cc.evex().vpermilpd(ymm_a, m, 0);
   4499   cc.evex().vpermilpd(zmm_a, m, 0);
   4500   cc.evex().vpermilps(xmm_a, xmm_b, m);
   4501   cc.evex().vpermilps(ymm_a, ymm_b, m);
   4502   cc.evex().vpermilps(zmm_a, zmm_b, m);
   4503   cc.evex().vpermilps(xmm_a, m, 0);
   4504   cc.evex().vpermilps(ymm_a, m, 0);
   4505   cc.evex().vpermilps(zmm_a, m, 0);
   4506   cc.evex().vpermq(ymm_a, ymm_b, m);
   4507   cc.evex().vpermq(zmm_a, zmm_b, m);
   4508   cc.evex().vpermq(ymm_a, m, 0);
   4509   cc.evex().vpermq(zmm_a, m, 0);
   4510   cc.evex().vpermt2b(xmm_a, xmm_b, m);
   4511   cc.evex().vpermt2b(ymm_a, ymm_b, m);
   4512   cc.evex().vpermt2b(zmm_a, zmm_b, m);
   4513   cc.evex().vpermt2d(xmm_a, xmm_b, m);
   4514   cc.evex().vpermt2d(ymm_a, ymm_b, m);
   4515   cc.evex().vpermt2d(zmm_a, zmm_b, m);
   4516   cc.evex().vpermt2pd(xmm_a, xmm_b, m);
   4517   cc.evex().vpermt2pd(ymm_a, ymm_b, m);
   4518   cc.evex().vpermt2pd(zmm_a, zmm_b, m);
   4519   cc.evex().vpermt2ps(xmm_a, xmm_b, m);
   4520   cc.evex().vpermt2ps(ymm_a, ymm_b, m);
   4521   cc.evex().vpermt2ps(zmm_a, zmm_b, m);
   4522   cc.evex().vpermt2q(xmm_a, xmm_b, m);
   4523   cc.evex().vpermt2q(ymm_a, ymm_b, m);
   4524   cc.evex().vpermt2q(zmm_a, zmm_b, m);
   4525   cc.evex().vpermt2w(xmm_a, xmm_b, m);
   4526   cc.evex().vpermt2w(ymm_a, ymm_b, m);
   4527   cc.evex().vpermt2w(zmm_a, zmm_b, m);
   4528   cc.evex().vpermw(xmm_a, xmm_b, m);
   4529   cc.evex().vpermw(ymm_a, ymm_b, m);
   4530   cc.evex().vpermw(zmm_a, zmm_b, m);
   4531   cc.evex().vpexpandd(xmm_a, m);
   4532   cc.evex().vpexpandd(ymm_a, m);
   4533   cc.evex().vpexpandd(zmm_a, m);
   4534   cc.evex().vpexpandq(xmm_a, m);
   4535   cc.evex().vpexpandq(ymm_a, m);
   4536   cc.evex().vpexpandq(zmm_a, m);
   4537   cc.evex().vpextrb(m, xmm_b, 0);
   4538   cc.evex().vpextrd(m, xmm_b, 0);
   4539   if (cc.is_64bit()) cc.evex().vpextrq(m, xmm_b, 0);
   4540   cc.evex().vpextrw(m, xmm_b, 0);
   4541   cc.evex().k(kA).vpgatherdd(xmm_a, vx_ptr);
   4542   cc.evex().k(kA).vpgatherdd(ymm_a, vy_ptr);
   4543   cc.evex().k(kA).vpgatherdd(zmm_a, vz_ptr);
   4544   cc.evex().k(kA).vpgatherdq(xmm_a, vx_ptr);
   4545   cc.evex().k(kA).vpgatherdq(ymm_a, vx_ptr);
   4546   cc.evex().k(kA).vpgatherdq(zmm_a, vy_ptr);
   4547   cc.evex().k(kA).vpgatherqd(xmm_a, vx_ptr);
   4548   cc.evex().k(kA).vpgatherqd(xmm_a, vy_ptr);
   4549   cc.evex().k(kA).vpgatherqd(ymm_a, vz_ptr);
   4550   cc.evex().k(kA).vpgatherqq(xmm_a, vx_ptr);
   4551   cc.evex().k(kA).vpgatherqq(ymm_a, vy_ptr);
   4552   cc.evex().k(kA).vpgatherqq(zmm_a, vz_ptr);
   4553   cc.evex().vpinsrb(xmm_a, xmm_b, m, 0);
   4554   cc.evex().vpinsrd(xmm_a, xmm_b, m, 0);
   4555   if (cc.is_64bit()) cc.evex().vpinsrq(xmm_a, xmm_b, m, 0);
   4556   cc.evex().vpinsrw(xmm_a, xmm_b, m, 0);
   4557   cc.evex().vplzcntd(xmm_a, m);
   4558   cc.evex().vplzcntd(ymm_a, m);
   4559   cc.evex().vplzcntd(zmm_a, m);
   4560   cc.evex().vplzcntq(xmm_a, m);
   4561   cc.evex().vplzcntq(ymm_a, m);
   4562   cc.evex().vplzcntq(zmm_a, m);
   4563   cc.evex().vpmadd52huq(xmm_a, xmm_b, m);
   4564   cc.evex().vpmadd52huq(ymm_a, ymm_b, m);
   4565   cc.evex().vpmadd52huq(zmm_a, zmm_b, m);
   4566   cc.evex().vpmadd52luq(xmm_a, xmm_b, m);
   4567   cc.evex().vpmadd52luq(ymm_a, ymm_b, m);
   4568   cc.evex().vpmadd52luq(zmm_a, zmm_b, m);
   4569   cc.evex().vpmaddubsw(xmm_a, xmm_b, m);
   4570   cc.evex().vpmaddubsw(ymm_a, ymm_b, m);
   4571   cc.evex().vpmaddubsw(zmm_a, zmm_b, m);
   4572   cc.evex().vpmaddwd(xmm_a, xmm_b, m);
   4573   cc.evex().vpmaddwd(ymm_a, ymm_b, m);
   4574   cc.evex().vpmaddwd(zmm_a, zmm_b, m);
   4575   cc.evex().vpmaxsb(xmm_a, xmm_b, m);
   4576   cc.evex().vpmaxsb(ymm_a, ymm_b, m);
   4577   cc.evex().vpmaxsb(zmm_a, zmm_b, m);
   4578   cc.evex().vpmaxsd(xmm_a, xmm_b, m);
   4579   cc.evex().vpmaxsd(ymm_a, ymm_b, m);
   4580   cc.evex().vpmaxsd(zmm_a, zmm_b, m);
   4581   cc.evex().vpmaxsq(xmm_a, xmm_b, m);
   4582   cc.evex().vpmaxsq(ymm_a, ymm_b, m);
   4583   cc.evex().vpmaxsq(zmm_a, zmm_b, m);
   4584   cc.evex().vpmaxsw(xmm_a, xmm_b, m);
   4585   cc.evex().vpmaxsw(ymm_a, ymm_b, m);
   4586   cc.evex().vpmaxsw(zmm_a, zmm_b, m);
   4587   cc.evex().vpmaxub(xmm_a, xmm_b, m);
   4588   cc.evex().vpmaxub(ymm_a, ymm_b, m);
   4589   cc.evex().vpmaxub(zmm_a, zmm_b, m);
   4590   cc.evex().vpmaxud(xmm_a, xmm_b, m);
   4591   cc.evex().vpmaxud(ymm_a, ymm_b, m);
   4592   cc.evex().vpmaxud(zmm_a, zmm_b, m);
   4593   cc.evex().vpmaxuq(xmm_a, xmm_b, m);
   4594   cc.evex().vpmaxuq(ymm_a, ymm_b, m);
   4595   cc.evex().vpmaxuq(zmm_a, zmm_b, m);
   4596   cc.evex().vpmaxuw(xmm_a, xmm_b, m);
   4597   cc.evex().vpmaxuw(ymm_a, ymm_b, m);
   4598   cc.evex().vpmaxuw(zmm_a, zmm_b, m);
   4599   cc.evex().vpminsb(xmm_a, xmm_b, m);
   4600   cc.evex().vpminsb(ymm_a, ymm_b, m);
   4601   cc.evex().vpminsb(zmm_a, zmm_b, m);
   4602   cc.evex().vpminsd(xmm_a, xmm_b, m);
   4603   cc.evex().vpminsd(ymm_a, ymm_b, m);
   4604   cc.evex().vpminsd(zmm_a, zmm_b, m);
   4605   cc.evex().vpminsq(xmm_a, xmm_b, m);
   4606   cc.evex().vpminsq(ymm_a, ymm_b, m);
   4607   cc.evex().vpminsq(zmm_a, zmm_b, m);
   4608   cc.evex().vpminsw(xmm_a, xmm_b, m);
   4609   cc.evex().vpminsw(ymm_a, ymm_b, m);
   4610   cc.evex().vpminsw(zmm_a, zmm_b, m);
   4611   cc.evex().vpminub(xmm_a, xmm_b, m);
   4612   cc.evex().vpminub(ymm_a, ymm_b, m);
   4613   cc.evex().vpminub(zmm_a, zmm_b, m);
   4614   cc.evex().vpminud(xmm_a, xmm_b, m);
   4615   cc.evex().vpminud(ymm_a, ymm_b, m);
   4616   cc.evex().vpminud(zmm_a, zmm_b, m);
   4617   cc.evex().vpminuq(xmm_a, xmm_b, m);
   4618   cc.evex().vpminuq(ymm_a, ymm_b, m);
   4619   cc.evex().vpminuq(zmm_a, zmm_b, m);
   4620   cc.evex().vpminuw(xmm_a, xmm_b, m);
   4621   cc.evex().vpminuw(ymm_a, ymm_b, m);
   4622   cc.evex().vpminuw(zmm_a, zmm_b, m);
   4623   cc.evex().vpmovdb(m, xmm_b);
   4624   cc.evex().vpmovdb(m, ymm_b);
   4625   cc.evex().vpmovdb(m, zmm_b);
   4626   cc.evex().vpmovdw(m, xmm_b);
   4627   cc.evex().vpmovdw(m, ymm_b);
   4628   cc.evex().vpmovdw(m, zmm_b);
   4629   cc.evex().vpmovqb(m, xmm_b);
   4630   cc.evex().vpmovqb(m, ymm_b);
   4631   cc.evex().vpmovqb(m, zmm_b);
   4632   cc.evex().vpmovqd(m, xmm_b);
   4633   cc.evex().vpmovqd(m, ymm_b);
   4634   cc.evex().vpmovqd(m, zmm_b);
   4635   cc.evex().vpmovqw(m, xmm_b);
   4636   cc.evex().vpmovqw(m, ymm_b);
   4637   cc.evex().vpmovqw(m, zmm_b);
   4638   cc.evex().vpmovsdb(m, xmm_b);
   4639   cc.evex().vpmovsdb(m, ymm_b);
   4640   cc.evex().vpmovsdb(m, zmm_b);
   4641   cc.evex().vpmovsdw(m, xmm_b);
   4642   cc.evex().vpmovsdw(m, ymm_b);
   4643   cc.evex().vpmovsdw(m, zmm_b);
   4644   cc.evex().vpmovsqb(m, xmm_b);
   4645   cc.evex().vpmovsqb(m, ymm_b);
   4646   cc.evex().vpmovsqb(m, zmm_b);
   4647   cc.evex().vpmovsqd(m, xmm_b);
   4648   cc.evex().vpmovsqd(m, ymm_b);
   4649   cc.evex().vpmovsqd(m, zmm_b);
   4650   cc.evex().vpmovsqw(m, xmm_b);
   4651   cc.evex().vpmovsqw(m, ymm_b);
   4652   cc.evex().vpmovsqw(m, zmm_b);
   4653   cc.evex().vpmovswb(m, xmm_b);
   4654   cc.evex().vpmovswb(m, ymm_b);
   4655   cc.evex().vpmovswb(m, zmm_b);
   4656   cc.evex().vpmovsxbd(xmm_a, m);
   4657   cc.evex().vpmovsxbd(ymm_a, m);
   4658   cc.evex().vpmovsxbd(zmm_a, m);
   4659   cc.evex().vpmovsxbq(xmm_a, m);
   4660   cc.evex().vpmovsxbq(ymm_a, m);
   4661   cc.evex().vpmovsxbq(zmm_a, m);
   4662   cc.evex().vpmovsxbw(xmm_a, m);
   4663   cc.evex().vpmovsxbw(ymm_a, m);
   4664   cc.evex().vpmovsxbw(zmm_a, m);
   4665   cc.evex().vpmovsxdq(xmm_a, m);
   4666   cc.evex().vpmovsxdq(ymm_a, m);
   4667   cc.evex().vpmovsxdq(zmm_a, m);
   4668   cc.evex().vpmovsxwd(xmm_a, m);
   4669   cc.evex().vpmovsxwd(ymm_a, m);
   4670   cc.evex().vpmovsxwd(zmm_a, m);
   4671   cc.evex().vpmovsxwq(xmm_a, m);
   4672   cc.evex().vpmovsxwq(ymm_a, m);
   4673   cc.evex().vpmovsxwq(zmm_a, m);
   4674   cc.evex().vpmovusdb(m, xmm_b);
   4675   cc.evex().vpmovusdb(m, ymm_b);
   4676   cc.evex().vpmovusdb(m, zmm_b);
   4677   cc.evex().vpmovusdw(m, xmm_b);
   4678   cc.evex().vpmovusdw(m, ymm_b);
   4679   cc.evex().vpmovusdw(m, zmm_b);
   4680   cc.evex().vpmovusqb(m, xmm_b);
   4681   cc.evex().vpmovusqb(m, ymm_b);
   4682   cc.evex().vpmovusqb(m, zmm_b);
   4683   cc.evex().vpmovusqd(m, xmm_b);
   4684   cc.evex().vpmovusqd(m, ymm_b);
   4685   cc.evex().vpmovusqd(m, zmm_b);
   4686   cc.evex().vpmovusqw(m, xmm_b);
   4687   cc.evex().vpmovusqw(m, ymm_b);
   4688   cc.evex().vpmovusqw(m, zmm_b);
   4689   cc.evex().vpmovuswb(m, xmm_b);
   4690   cc.evex().vpmovuswb(m, ymm_b);
   4691   cc.evex().vpmovuswb(m, zmm_b);
   4692   cc.evex().vpmovwb(m, xmm_b);
   4693   cc.evex().vpmovwb(m, ymm_b);
   4694   cc.evex().vpmovwb(m, zmm_b);
   4695   cc.evex().vpmovzxbd(xmm_a, m);
   4696   cc.evex().vpmovzxbd(ymm_a, m);
   4697   cc.evex().vpmovzxbd(zmm_a, m);
   4698   cc.evex().vpmovzxbq(xmm_a, m);
   4699   cc.evex().vpmovzxbq(ymm_a, m);
   4700   cc.evex().vpmovzxbq(zmm_a, m);
   4701   cc.evex().vpmovzxbw(xmm_a, m);
   4702   cc.evex().vpmovzxbw(ymm_a, m);
   4703   cc.evex().vpmovzxbw(zmm_a, m);
   4704   cc.evex().vpmovzxdq(xmm_a, m);
   4705   cc.evex().vpmovzxdq(ymm_a, m);
   4706   cc.evex().vpmovzxdq(zmm_a, m);
   4707   cc.evex().vpmovzxwd(xmm_a, m);
   4708   cc.evex().vpmovzxwd(ymm_a, m);
   4709   cc.evex().vpmovzxwd(zmm_a, m);
   4710   cc.evex().vpmovzxwq(xmm_a, m);
   4711   cc.evex().vpmovzxwq(ymm_a, m);
   4712   cc.evex().vpmovzxwq(zmm_a, m);
   4713   cc.evex().vpmuldq(xmm_a, xmm_b, m);
   4714   cc.evex().vpmuldq(ymm_a, ymm_b, m);
   4715   cc.evex().vpmuldq(zmm_a, zmm_b, m);
   4716   cc.evex().vpmulhrsw(xmm_a, xmm_b, m);
   4717   cc.evex().vpmulhrsw(ymm_a, ymm_b, m);
   4718   cc.evex().vpmulhrsw(zmm_a, zmm_b, m);
   4719   cc.evex().vpmulhuw(xmm_a, xmm_b, m);
   4720   cc.evex().vpmulhuw(ymm_a, ymm_b, m);
   4721   cc.evex().vpmulhuw(zmm_a, zmm_b, m);
   4722   cc.evex().vpmulhw(xmm_a, xmm_b, m);
   4723   cc.evex().vpmulhw(ymm_a, ymm_b, m);
   4724   cc.evex().vpmulhw(zmm_a, zmm_b, m);
   4725   cc.evex().vpmulld(xmm_a, xmm_b, m);
   4726   cc.evex().vpmulld(ymm_a, ymm_b, m);
   4727   cc.evex().vpmulld(zmm_a, zmm_b, m);
   4728   cc.evex().vpmullq(xmm_a, xmm_b, m);
   4729   cc.evex().vpmullq(ymm_a, ymm_b, m);
   4730   cc.evex().vpmullq(zmm_a, zmm_b, m);
   4731   cc.evex().vpmullw(xmm_a, xmm_b, m);
   4732   cc.evex().vpmullw(ymm_a, ymm_b, m);
   4733   cc.evex().vpmullw(zmm_a, zmm_b, m);
   4734   cc.evex().vpmultishiftqb(xmm_a, xmm_b, m);
   4735   cc.evex().vpmultishiftqb(ymm_a, ymm_b, m);
   4736   cc.evex().vpmultishiftqb(zmm_a, zmm_b, m);
   4737   cc.evex().vpmuludq(xmm_a, xmm_b, m);
   4738   cc.evex().vpmuludq(ymm_a, ymm_b, m);
   4739   cc.evex().vpmuludq(zmm_a, zmm_b, m);
   4740   cc.evex().vpopcntd(zmm_a, m);
   4741   cc.evex().vpopcntq(zmm_a, m);
   4742   cc.evex().vpord(xmm_a, xmm_b, m);
   4743   cc.evex().vpord(ymm_a, ymm_b, m);
   4744   cc.evex().vpord(zmm_a, zmm_b, m);
   4745   cc.evex().vporq(xmm_a, xmm_b, m);
   4746   cc.evex().vporq(ymm_a, ymm_b, m);
   4747   cc.evex().vporq(zmm_a, zmm_b, m);
   4748   cc.evex().vprold(xmm_a, m, 0);
   4749   cc.evex().vprold(ymm_a, m, 0);
   4750   cc.evex().vprold(zmm_a, m, 0);
   4751   cc.evex().vprolq(xmm_a, m, 0);
   4752   cc.evex().vprolq(ymm_a, m, 0);
   4753   cc.evex().vprolq(zmm_a, m, 0);
   4754   cc.evex().vprolvd(xmm_a, xmm_b, m);
   4755   cc.evex().vprolvd(ymm_a, ymm_b, m);
   4756   cc.evex().vprolvd(zmm_a, zmm_b, m);
   4757   cc.evex().vprolvq(xmm_a, xmm_b, m);
   4758   cc.evex().vprolvq(ymm_a, ymm_b, m);
   4759   cc.evex().vprolvq(zmm_a, zmm_b, m);
   4760   cc.evex().vprord(xmm_a, m, 0);
   4761   cc.evex().vprord(ymm_a, m, 0);
   4762   cc.evex().vprord(zmm_a, m, 0);
   4763   cc.evex().vprorq(xmm_a, m, 0);
   4764   cc.evex().vprorq(ymm_a, m, 0);
   4765   cc.evex().vprorq(zmm_a, m, 0);
   4766   cc.evex().vprorvd(xmm_a, xmm_b, m);
   4767   cc.evex().vprorvd(ymm_a, ymm_b, m);
   4768   cc.evex().vprorvd(zmm_a, zmm_b, m);
   4769   cc.evex().vprorvq(xmm_a, xmm_b, m);
   4770   cc.evex().vprorvq(ymm_a, ymm_b, m);
   4771   cc.evex().vprorvq(zmm_a, zmm_b, m);
   4772   cc.evex().vpsadbw(xmm_a, xmm_b, m);
   4773   cc.evex().vpsadbw(ymm_a, ymm_b, m);
   4774   cc.evex().vpsadbw(zmm_a, zmm_b, m);
   4775   cc.evex().k(kA).vpscatterdd(vx_ptr, xmm_b);
   4776   cc.evex().k(kA).vpscatterdd(vy_ptr, ymm_b);
   4777   cc.evex().k(kA).vpscatterdd(vz_ptr, zmm_b);
   4778   cc.evex().k(kA).vpscatterdq(vx_ptr, xmm_b);
   4779   cc.evex().k(kA).vpscatterdq(vx_ptr, ymm_b);
   4780   cc.evex().k(kA).vpscatterdq(vy_ptr, zmm_b);
   4781   cc.evex().k(kA).vpscatterqd(vx_ptr, xmm_b);
   4782   cc.evex().k(kA).vpscatterqd(vy_ptr, xmm_b);
   4783   cc.evex().k(kA).vpscatterqd(vz_ptr, ymm_b);
   4784   cc.evex().k(kA).vpscatterqq(vx_ptr, xmm_b);
   4785   cc.evex().k(kA).vpscatterqq(vy_ptr, ymm_b);
   4786   cc.evex().k(kA).vpscatterqq(vz_ptr, zmm_b);
   4787   cc.evex().vpshufb(xmm_a, xmm_b, m);
   4788   cc.evex().vpshufb(ymm_a, ymm_b, m);
   4789   cc.evex().vpshufb(zmm_a, zmm_b, m);
   4790   cc.evex().vpshufd(xmm_a, m, 0);
   4791   cc.evex().vpshufd(ymm_a, m, 0);
   4792   cc.evex().vpshufd(zmm_a, m, 0);
   4793   cc.evex().vpshufhw(xmm_a, m, 0);
   4794   cc.evex().vpshufhw(ymm_a, m, 0);
   4795   cc.evex().vpshufhw(zmm_a, m, 0);
   4796   cc.evex().vpshuflw(xmm_a, m, 0);
   4797   cc.evex().vpshuflw(ymm_a, m, 0);
   4798   cc.evex().vpshuflw(zmm_a, m, 0);
   4799   cc.evex().vpslld(xmm_a, xmm_b, m);
   4800   cc.evex().vpslld(xmm_a, m, 0);
   4801   cc.evex().vpslld(ymm_a, ymm_b, m);
   4802   cc.evex().vpslld(ymm_a, m, 0);
   4803   cc.evex().vpslld(zmm_a, zmm_b, m);
   4804   cc.evex().vpslld(zmm_a, m, 0);
   4805   cc.evex().vpslldq(xmm_a, m, 0);
   4806   cc.evex().vpslldq(ymm_a, m, 0);
   4807   cc.evex().vpslldq(zmm_a, m, 0);
   4808   cc.evex().vpsllq(xmm_a, xmm_b, m);
   4809   cc.evex().vpsllq(xmm_a, m, 0);
   4810   cc.evex().vpsllq(ymm_a, ymm_b, m);
   4811   cc.evex().vpsllq(ymm_a, m, 0);
   4812   cc.evex().vpsllq(zmm_a, zmm_b, m);
   4813   cc.evex().vpsllq(zmm_a, m, 0);
   4814   cc.evex().vpsllvd(xmm_a, xmm_b, m);
   4815   cc.evex().vpsllvd(ymm_a, ymm_b, m);
   4816   cc.evex().vpsllvd(zmm_a, zmm_b, m);
   4817   cc.evex().vpsllvq(xmm_a, xmm_b, m);
   4818   cc.evex().vpsllvq(ymm_a, ymm_b, m);
   4819   cc.evex().vpsllvq(zmm_a, zmm_b, m);
   4820   cc.evex().vpsllvw(xmm_a, xmm_b, m);
   4821   cc.evex().vpsllvw(ymm_a, ymm_b, m);
   4822   cc.evex().vpsllvw(zmm_a, zmm_b, m);
   4823   cc.evex().vpsllw(xmm_a, xmm_b, m);
   4824   cc.evex().vpsllw(xmm_a, m, 0);
   4825   cc.evex().vpsllw(ymm_a, ymm_b, m);
   4826   cc.evex().vpsllw(ymm_a, m, 0);
   4827   cc.evex().vpsllw(zmm_a, zmm_b, m);
   4828   cc.evex().vpsllw(zmm_a, m, 0);
   4829   cc.evex().vpsrad(xmm_a, xmm_b, m);
   4830   cc.evex().vpsrad(xmm_a, m, 0);
   4831   cc.evex().vpsrad(ymm_a, ymm_b, m);
   4832   cc.evex().vpsrad(ymm_a, m, 0);
   4833   cc.evex().vpsrad(zmm_a, zmm_b, m);
   4834   cc.evex().vpsrad(zmm_a, m, 0);
   4835   cc.evex().vpsraq(xmm_a, xmm_b, m);
   4836   cc.evex().vpsraq(xmm_a, m, 0);
   4837   cc.evex().vpsraq(ymm_a, ymm_b, m);
   4838   cc.evex().vpsraq(ymm_a, m, 0);
   4839   cc.evex().vpsraq(zmm_a, zmm_b, m);
   4840   cc.evex().vpsraq(zmm_a, m, 0);
   4841   cc.evex().vpsravd(xmm_a, xmm_b, m);
   4842   cc.evex().vpsravd(ymm_a, ymm_b, m);
   4843   cc.evex().vpsravd(zmm_a, zmm_b, m);
   4844   cc.evex().vpsravq(xmm_a, xmm_b, m);
   4845   cc.evex().vpsravq(ymm_a, ymm_b, m);
   4846   cc.evex().vpsravq(zmm_a, zmm_b, m);
   4847   cc.evex().vpsravw(xmm_a, xmm_b, m);
   4848   cc.evex().vpsravw(ymm_a, ymm_b, m);
   4849   cc.evex().vpsravw(zmm_a, zmm_b, m);
   4850   cc.evex().vpsraw(xmm_a, xmm_b, m);
   4851   cc.evex().vpsraw(xmm_a, m, 0);
   4852   cc.evex().vpsraw(ymm_a, ymm_b, m);
   4853   cc.evex().vpsraw(ymm_a, m, 0);
   4854   cc.evex().vpsraw(zmm_a, zmm_b, m);
   4855   cc.evex().vpsraw(zmm_a, m, 0);
   4856   cc.evex().vpsrld(xmm_a, xmm_b, m);
   4857   cc.evex().vpsrld(xmm_a, m, 0);
   4858   cc.evex().vpsrld(ymm_a, ymm_b, m);
   4859   cc.evex().vpsrld(ymm_a, m, 0);
   4860   cc.evex().vpsrld(zmm_a, zmm_b, m);
   4861   cc.evex().vpsrld(zmm_a, m, 0);
   4862   cc.evex().vpsrldq(xmm_a, m, 0);
   4863   cc.evex().vpsrldq(ymm_a, m, 0);
   4864   cc.evex().vpsrldq(zmm_a, m, 0);
   4865   cc.evex().vpsrlq(xmm_a, xmm_b, m);
   4866   cc.evex().vpsrlq(xmm_a, m, 0);
   4867   cc.evex().vpsrlq(ymm_a, ymm_b, m);
   4868   cc.evex().vpsrlq(ymm_a, m, 0);
   4869   cc.evex().vpsrlq(zmm_a, zmm_b, m);
   4870   cc.evex().vpsrlq(zmm_a, m, 0);
   4871   cc.evex().vpsrlvd(xmm_a, xmm_b, m);
   4872   cc.evex().vpsrlvd(ymm_a, ymm_b, m);
   4873   cc.evex().vpsrlvd(zmm_a, zmm_b, m);
   4874   cc.evex().vpsrlvq(xmm_a, xmm_b, m);
   4875   cc.evex().vpsrlvq(ymm_a, ymm_b, m);
   4876   cc.evex().vpsrlvq(zmm_a, zmm_b, m);
   4877   cc.evex().vpsrlvw(xmm_a, xmm_b, m);
   4878   cc.evex().vpsrlvw(ymm_a, ymm_b, m);
   4879   cc.evex().vpsrlvw(zmm_a, zmm_b, m);
   4880   cc.evex().vpsrlw(xmm_a, xmm_b, m);
   4881   cc.evex().vpsrlw(xmm_a, m, 0);
   4882   cc.evex().vpsrlw(ymm_a, ymm_b, m);
   4883   cc.evex().vpsrlw(ymm_a, m, 0);
   4884   cc.evex().vpsrlw(zmm_a, zmm_b, m);
   4885   cc.evex().vpsrlw(zmm_a, m, 0);
   4886   cc.evex().vpsubb(xmm_a, xmm_b, m);
   4887   cc.evex().vpsubb(ymm_a, ymm_b, m);
   4888   cc.evex().vpsubb(zmm_a, zmm_b, m);
   4889   cc.evex().vpsubd(xmm_a, xmm_b, m);
   4890   cc.evex().vpsubd(ymm_a, ymm_b, m);
   4891   cc.evex().vpsubd(zmm_a, zmm_b, m);
   4892   cc.evex().vpsubq(xmm_a, xmm_b, m);
   4893   cc.evex().vpsubq(ymm_a, ymm_b, m);
   4894   cc.evex().vpsubq(zmm_a, zmm_b, m);
   4895   cc.evex().vpsubsb(xmm_a, xmm_b, m);
   4896   cc.evex().vpsubsb(ymm_a, ymm_b, m);
   4897   cc.evex().vpsubsb(zmm_a, zmm_b, m);
   4898   cc.evex().vpsubsw(xmm_a, xmm_b, m);
   4899   cc.evex().vpsubsw(ymm_a, ymm_b, m);
   4900   cc.evex().vpsubsw(zmm_a, zmm_b, m);
   4901   cc.evex().vpsubusb(xmm_a, xmm_b, m);
   4902   cc.evex().vpsubusb(ymm_a, ymm_b, m);
   4903   cc.evex().vpsubusb(zmm_a, zmm_b, m);
   4904   cc.evex().vpsubusw(xmm_a, xmm_b, m);
   4905   cc.evex().vpsubusw(ymm_a, ymm_b, m);
   4906   cc.evex().vpsubusw(zmm_a, zmm_b, m);
   4907   cc.evex().vpsubw(xmm_a, xmm_b, m);
   4908   cc.evex().vpsubw(ymm_a, ymm_b, m);
   4909   cc.evex().vpsubw(zmm_a, zmm_b, m);
   4910   cc.evex().vpternlogd(xmm_a, xmm_b, m, 0);
   4911   cc.evex().vpternlogd(ymm_a, ymm_b, m, 0);
   4912   cc.evex().vpternlogd(zmm_a, zmm_b, m, 0);
   4913   cc.evex().vpternlogq(xmm_a, xmm_b, m, 0);
   4914   cc.evex().vpternlogq(ymm_a, ymm_b, m, 0);
   4915   cc.evex().vpternlogq(zmm_a, zmm_b, m, 0);
   4916   cc.evex().vptestmb(kA, xmm_b, m);
   4917   cc.evex().vptestmb(kA, ymm_b, m);
   4918   cc.evex().vptestmb(kA, zmm_b, m);
   4919   cc.evex().vptestmd(kA, xmm_b, m);
   4920   cc.evex().vptestmd(kA, ymm_b, m);
   4921   cc.evex().vptestmd(kA, zmm_b, m);
   4922   cc.evex().vptestmq(kA, xmm_b, m);
   4923   cc.evex().vptestmq(kA, ymm_b, m);
   4924   cc.evex().vptestmq(kA, zmm_b, m);
   4925   cc.evex().vptestmw(kA, xmm_b, m);
   4926   cc.evex().vptestmw(kA, ymm_b, m);
   4927   cc.evex().vptestmw(kA, zmm_b, m);
   4928   cc.evex().vptestnmb(kA, xmm_b, m);
   4929   cc.evex().vptestnmb(kA, ymm_b, m);
   4930   cc.evex().vptestnmb(kA, zmm_b, m);
   4931   cc.evex().vptestnmd(kA, xmm_b, m);
   4932   cc.evex().vptestnmd(kA, ymm_b, m);
   4933   cc.evex().vptestnmd(kA, zmm_b, m);
   4934   cc.evex().vptestnmq(kA, xmm_b, m);
   4935   cc.evex().vptestnmq(kA, ymm_b, m);
   4936   cc.evex().vptestnmq(kA, zmm_b, m);
   4937   cc.evex().vptestnmw(kA, xmm_b, m);
   4938   cc.evex().vptestnmw(kA, ymm_b, m);
   4939   cc.evex().vptestnmw(kA, zmm_b, m);
   4940   cc.evex().vpunpckhbw(xmm_a, xmm_b, m);
   4941   cc.evex().vpunpckhbw(ymm_a, ymm_b, m);
   4942   cc.evex().vpunpckhbw(zmm_a, zmm_b, m);
   4943   cc.evex().vpunpckhdq(xmm_a, xmm_b, m);
   4944   cc.evex().vpunpckhdq(ymm_a, ymm_b, m);
   4945   cc.evex().vpunpckhdq(zmm_a, zmm_b, m);
   4946   cc.evex().vpunpckhqdq(xmm_a, xmm_b, m);
   4947   cc.evex().vpunpckhqdq(ymm_a, ymm_b, m);
   4948   cc.evex().vpunpckhqdq(zmm_a, zmm_b, m);
   4949   cc.evex().vpunpckhwd(xmm_a, xmm_b, m);
   4950   cc.evex().vpunpckhwd(ymm_a, ymm_b, m);
   4951   cc.evex().vpunpckhwd(zmm_a, zmm_b, m);
   4952   cc.evex().vpunpcklbw(xmm_a, xmm_b, m);
   4953   cc.evex().vpunpcklbw(ymm_a, ymm_b, m);
   4954   cc.evex().vpunpcklbw(zmm_a, zmm_b, m);
   4955   cc.evex().vpunpckldq(xmm_a, xmm_b, m);
   4956   cc.evex().vpunpckldq(ymm_a, ymm_b, m);
   4957   cc.evex().vpunpckldq(zmm_a, zmm_b, m);
   4958   cc.evex().vpunpcklqdq(xmm_a, xmm_b, m);
   4959   cc.evex().vpunpcklqdq(ymm_a, ymm_b, m);
   4960   cc.evex().vpunpcklqdq(zmm_a, zmm_b, m);
   4961   cc.evex().vpunpcklwd(xmm_a, xmm_b, m);
   4962   cc.evex().vpunpcklwd(ymm_a, ymm_b, m);
   4963   cc.evex().vpunpcklwd(zmm_a, zmm_b, m);
   4964   cc.evex().vpxord(xmm_a, xmm_b, m);
   4965   cc.evex().vpxord(ymm_a, ymm_b, m);
   4966   cc.evex().vpxord(zmm_a, zmm_b, m);
   4967   cc.evex().vpxorq(xmm_a, xmm_b, m);
   4968   cc.evex().vpxorq(ymm_a, ymm_b, m);
   4969   cc.evex().vpxorq(zmm_a, zmm_b, m);
   4970   cc.evex().vrangepd(xmm_a, xmm_b, m, 0);
   4971   cc.evex().vrangepd(ymm_a, ymm_b, m, 0);
   4972   cc.evex().vrangepd(zmm_a, zmm_b, m, 0);
   4973   cc.evex().vrangeps(xmm_a, xmm_b, m, 0);
   4974   cc.evex().vrangeps(ymm_a, ymm_b, m, 0);
   4975   cc.evex().vrangeps(zmm_a, zmm_b, m, 0);
   4976   cc.evex().vrangesd(xmm_a, xmm_b, m, 0);
   4977   cc.evex().vrangess(xmm_a, xmm_b, m, 0);
   4978   cc.evex().vrcp14pd(xmm_a, m);
   4979   cc.evex().vrcp14pd(ymm_a, m);
   4980   cc.evex().vrcp14pd(zmm_a, m);
   4981   cc.evex().vrcp14ps(xmm_a, m);
   4982   cc.evex().vrcp14ps(ymm_a, m);
   4983   cc.evex().vrcp14ps(zmm_a, m);
   4984   cc.evex().vrcp14sd(xmm_a, xmm_b, m);
   4985   cc.evex().vrcp14ss(xmm_a, xmm_b, m);
   4986   cc.evex().vreducepd(xmm_a, m, 0);
   4987   cc.evex().vreducepd(ymm_a, m, 0);
   4988   cc.evex().vreducepd(zmm_a, m, 0);
   4989   cc.evex().vreduceps(xmm_a, m, 0);
   4990   cc.evex().vreduceps(ymm_a, m, 0);
   4991   cc.evex().vreduceps(zmm_a, m, 0);
   4992   cc.evex().vreducesd(xmm_a, xmm_b, m, 0);
   4993   cc.evex().vreducess(xmm_a, xmm_b, m, 0);
   4994   cc.evex().vrndscalepd(xmm_a, m, 0);
   4995   cc.evex().vrndscalepd(ymm_a, m, 0);
   4996   cc.evex().vrndscalepd(zmm_a, m, 0);
   4997   cc.evex().vrndscaleps(xmm_a, m, 0);
   4998   cc.evex().vrndscaleps(ymm_a, m, 0);
   4999   cc.evex().vrndscaleps(zmm_a, m, 0);
   5000   cc.evex().vrndscalesd(xmm_a, xmm_b, m, 0);
   5001   cc.evex().vrndscaless(xmm_a, xmm_b, m, 0);
   5002   cc.evex().vrsqrt14pd(xmm_a, m);
   5003   cc.evex().vrsqrt14pd(ymm_a, m);
   5004   cc.evex().vrsqrt14pd(zmm_a, m);
   5005   cc.evex().vrsqrt14ps(xmm_a, m);
   5006   cc.evex().vrsqrt14ps(ymm_a, m);
   5007   cc.evex().vrsqrt14ps(zmm_a, m);
   5008   cc.evex().vrsqrt14sd(xmm_a, xmm_b, m);
   5009   cc.evex().vrsqrt14ss(xmm_a, xmm_b, m);
   5010   cc.evex().vscalefpd(xmm_a, xmm_b, m);
   5011   cc.evex().vscalefpd(ymm_a, ymm_b, m);
   5012   cc.evex().vscalefpd(zmm_a, zmm_b, m);
   5013   cc.evex().vscalefps(xmm_a, xmm_b, m);
   5014   cc.evex().vscalefps(ymm_a, ymm_b, m);
   5015   cc.evex().vscalefps(zmm_a, zmm_b, m);
   5016   cc.evex().vscalefsd(xmm_a, xmm_b, m);
   5017   cc.evex().vscalefss(xmm_a, xmm_b, m);
   5018   cc.evex().k(kA).vscatterdpd(vx_ptr, xmm_b);
   5019   cc.evex().k(kA).vscatterdpd(vx_ptr, ymm_b);
   5020   cc.evex().k(kA).vscatterdpd(vy_ptr, zmm_b);
   5021   cc.evex().k(kA).vscatterdps(vx_ptr, xmm_b);
   5022   cc.evex().k(kA).vscatterdps(vy_ptr, ymm_b);
   5023   cc.evex().k(kA).vscatterdps(vz_ptr, zmm_b);
   5024   cc.evex().k(kA).vscatterqpd(vx_ptr, xmm_b);
   5025   cc.evex().k(kA).vscatterqpd(vy_ptr, ymm_b);
   5026   cc.evex().k(kA).vscatterqpd(vz_ptr, zmm_b);
   5027   cc.evex().k(kA).vscatterqps(vx_ptr, xmm_b);
   5028   cc.evex().k(kA).vscatterqps(vy_ptr, xmm_b);
   5029   cc.evex().k(kA).vscatterqps(vz_ptr, ymm_b);
   5030   cc.evex().vshuff32x4(ymm_a, ymm_b, m, 0);
   5031   cc.evex().vshuff32x4(zmm_a, zmm_b, m, 0);
   5032   cc.evex().vshuff64x2(ymm_a, ymm_b, m, 0);
   5033   cc.evex().vshuff64x2(zmm_a, zmm_b, m, 0);
   5034   cc.evex().vshufi32x4(ymm_a, ymm_b, m, 0);
   5035   cc.evex().vshufi32x4(zmm_a, zmm_b, m, 0);
   5036   cc.evex().vshufi64x2(ymm_a, ymm_b, m, 0);
   5037   cc.evex().vshufi64x2(zmm_a, zmm_b, m, 0);
   5038   cc.evex().vshufpd(xmm_a, xmm_b, m, 0);
   5039   cc.evex().vshufpd(ymm_a, ymm_b, m, 0);
   5040   cc.evex().vshufpd(zmm_a, zmm_b, m, 0);
   5041   cc.evex().vshufps(xmm_a, xmm_b, m, 0);
   5042   cc.evex().vshufps(ymm_a, ymm_b, m, 0);
   5043   cc.evex().vshufps(zmm_a, zmm_b, m, 0);
   5044   cc.evex().vsqrtpd(xmm_a, m);
   5045   cc.evex().vsqrtpd(ymm_a, m);
   5046   cc.evex().vsqrtpd(zmm_a, m);
   5047   cc.evex().vsqrtps(xmm_a, m);
   5048   cc.evex().vsqrtps(ymm_a, m);
   5049   cc.evex().vsqrtps(zmm_a, m);
   5050   cc.evex().vsqrtsd(xmm_a, xmm_b, m);
   5051   cc.evex().vsqrtss(xmm_a, xmm_b, m);
   5052   cc.evex().vsubpd(xmm_a, xmm_b, m);
   5053   cc.evex().vsubpd(ymm_a, ymm_b, m);
   5054   cc.evex().vsubpd(zmm_a, zmm_b, m);
   5055   cc.evex().vsubps(xmm_a, xmm_b, m);
   5056   cc.evex().vsubps(ymm_a, ymm_b, m);
   5057   cc.evex().vsubps(zmm_a, zmm_b, m);
   5058   cc.evex().vsubsd(xmm_a, xmm_b, m);
   5059   cc.evex().vsubss(xmm_a, xmm_b, m);
   5060   cc.evex().vucomisd(xmm_a, m);
   5061   cc.evex().vucomiss(xmm_a, m);
   5062   cc.evex().vunpckhpd(xmm_a, xmm_b, m);
   5063   cc.evex().vunpckhpd(ymm_a, ymm_b, m);
   5064   cc.evex().vunpckhpd(zmm_a, zmm_b, m);
   5065   cc.evex().vunpckhps(xmm_a, xmm_b, m);
   5066   cc.evex().vunpckhps(ymm_a, ymm_b, m);
   5067   cc.evex().vunpckhps(zmm_a, zmm_b, m);
   5068   cc.evex().vunpcklpd(xmm_a, xmm_b, m);
   5069   cc.evex().vunpcklpd(ymm_a, ymm_b, m);
   5070   cc.evex().vunpcklpd(zmm_a, zmm_b, m);
   5071   cc.evex().vunpcklps(xmm_a, xmm_b, m);
   5072   cc.evex().vunpcklps(ymm_a, ymm_b, m);
   5073   cc.evex().vunpcklps(zmm_a, zmm_b, m);
   5074   cc.evex().vxorpd(xmm_a, xmm_b, m);
   5075   cc.evex().vxorpd(ymm_a, ymm_b, m);
   5076   cc.evex().vxorpd(zmm_a, zmm_b, m);
   5077   cc.evex().vxorps(xmm_a, xmm_b, m);
   5078   cc.evex().vxorps(ymm_a, ymm_b, m);
   5079   cc.evex().vxorps(zmm_a, zmm_b, m);
   5080 }
   5081 
   5082 // Generates a long sequence of AVX512 instructions.
   5083 template<typename Emitter>
   5084 static void generate_avx512_sequence_internal(
   5085   Emitter& cc,
   5086   InstForm form,
   5087   const x86::Gp& gp,
   5088   const x86::KReg& kA, const x86::KReg& kB, const x86::KReg& kC,
   5089   const x86::Vec& vec_a, const x86::Vec& vec_b, const x86::Vec& vec_c, const x86::Vec& vec_d) {
   5090 
   5091   if (form == InstForm::kReg)
   5092     generate_avx512_sequence_internal_reg_only(cc, gp, kA, kB, kC, vec_a, vec_b, vec_c, vec_d);
   5093   else
   5094     generate_avx512_sequence_internal_reg_mem(cc, gp, kA, kB, kC, vec_a, vec_b, vec_c, vec_d);
   5095 }
   5096 
   5097 static void generate_avx512_sequence(BaseEmitter& emitter, InstForm form, bool emit_prolog_epilog) {
   5098   using namespace asmjit::x86;
   5099 
   5100 #ifndef ASMJIT_NO_COMPILER
   5101   if (emitter.is_compiler()) {
   5102     Compiler& cc = *emitter.as<Compiler>();
   5103 
   5104     Gp gp = cc.new_gpz("gp");
   5105     Vec vec_a = cc.new_zmm("vec_a");
   5106     Vec vec_b = cc.new_zmm("vec_b");
   5107     Vec vec_c = cc.new_zmm("vec_c");
   5108     Vec vec_d = cc.new_zmm("vec_d");
   5109 
   5110     KReg kA = cc.new_kq("kA");
   5111     KReg kB = cc.new_kq("kB");
   5112     KReg kC = cc.new_kq("kC");
   5113 
   5114     cc.add_func(FuncSignature::build<void>());
   5115     generate_avx512_sequence_internal(cc, form, gp, kA, kB, kC, vec_a, vec_b, vec_c, vec_d);
   5116     cc.end_func();
   5117 
   5118     return;
   5119   }
   5120 #endif
   5121 
   5122 #ifndef ASMJIT_NO_BUILDER
   5123   if (emitter.is_builder()) {
   5124     Builder& cc = *emitter.as<Builder>();
   5125 
   5126     if (emit_prolog_epilog) {
   5127       FuncDetail func;
   5128       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   5129 
   5130       FuncFrame frame;
   5131       frame.init(func);
   5132       frame.add_dirty_regs(eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5133       frame.finalize();
   5134 
   5135       cc.emit_prolog(frame);
   5136       generate_avx512_sequence_internal(cc, form, eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5137       cc.emit_epilog(frame);
   5138     }
   5139     else {
   5140       generate_avx512_sequence_internal(cc, form, eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5141     }
   5142 
   5143     return;
   5144   }
   5145 #endif
   5146 
   5147   if (emitter.is_assembler()) {
   5148     Assembler& cc = *emitter.as<Assembler>();
   5149 
   5150     if (emit_prolog_epilog) {
   5151       FuncDetail func;
   5152       func.init(FuncSignature::build<void, void*, const void*, size_t>(), cc.environment());
   5153 
   5154       FuncFrame frame;
   5155       frame.init(func);
   5156       frame.add_dirty_regs(eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5157       frame.finalize();
   5158 
   5159       cc.emit_prolog(frame);
   5160       generate_avx512_sequence_internal(cc, form, eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5161       cc.emit_epilog(frame);
   5162     }
   5163     else {
   5164       generate_avx512_sequence_internal(cc, form, eax, k1, k2, k3, zmm0, zmm1, zmm2, zmm3);
   5165     }
   5166 
   5167     return;
   5168   }
   5169 }
   5170 
   5171 template<typename EmitterFn>
   5172 static void benchmark_x86_function(Arch arch, uint32_t num_iterations, const char* description, const EmitterFn& emitter_fn) noexcept {
   5173   CodeHolder code;
   5174   printf("%s:\n", description);
   5175 
   5176   uint32_t instruction_count = 0;
   5177 
   5178 #ifndef ASMJIT_NO_BUILDER
   5179   instruction_count = asmjit_perf_utils::calculate_instruction_count<x86::Builder>(code, arch, [&](x86::Builder& cc) {
   5180     emitter_fn(cc, false);
   5181   });
   5182 #endif
   5183 
   5184   asmjit_perf_utils::bench<x86::Assembler>(code, arch, num_iterations, "[raw]", instruction_count, [&](x86::Assembler& cc) {
   5185     emitter_fn(cc, false);
   5186   });
   5187 
   5188   asmjit_perf_utils::bench<x86::Assembler>(code, arch, num_iterations, "[validated]", instruction_count, [&](x86::Assembler& cc) {
   5189     cc.add_diagnostic_options(DiagnosticOptions::kValidateAssembler);
   5190     emitter_fn(cc, false);
   5191   });
   5192 
   5193   asmjit_perf_utils::bench<x86::Assembler>(code, arch, num_iterations, "[prolog/epilog]", instruction_count, [&](x86::Assembler& cc) {
   5194     emitter_fn(cc, true);
   5195   });
   5196 
   5197 #ifndef ASMJIT_NO_BUILDER
   5198   asmjit_perf_utils::bench<x86::Builder>(code, arch, num_iterations, "[no-asm]", instruction_count, [&](x86::Builder& cc) {
   5199     emitter_fn(cc, false);
   5200   });
   5201 
   5202   asmjit_perf_utils::bench<x86::Builder>(code, arch, num_iterations, "[finalized]", instruction_count, [&](x86::Builder& cc) {
   5203     emitter_fn(cc, false);
   5204     cc.finalize();
   5205   });
   5206 
   5207   asmjit_perf_utils::bench<x86::Builder>(code, arch, num_iterations, "[prolog/epilog]", instruction_count, [&](x86::Builder& cc) {
   5208     emitter_fn(cc, true);
   5209     cc.finalize();
   5210   });
   5211 #endif
   5212 
   5213 #ifndef ASMJIT_NO_COMPILER
   5214 
   5215   asmjit_perf_utils::bench<x86::Compiler>(code, arch, num_iterations, "[no-asm]", instruction_count, [&](x86::Compiler& cc) {
   5216     emitter_fn(cc, true);
   5217   });
   5218 
   5219   asmjit_perf_utils::bench<x86::Compiler>(code, arch, num_iterations, "[finalized]", instruction_count, [&](x86::Compiler& cc) {
   5220     emitter_fn(cc, true);
   5221     cc.finalize();
   5222   });
   5223 #endif
   5224 
   5225   printf("\n");
   5226 }
   5227 
   5228 void benchmark_x86_emitters(uint32_t num_iterations, bool test_x86, bool test_x64) {
   5229   uint32_t i = 0;
   5230   uint32_t n = 0;
   5231 
   5232   Arch archs[2] {};
   5233 
   5234   if (test_x86) archs[n++] = Arch::kX86;
   5235   if (test_x64) archs[n++] = Arch::kX64;
   5236 
   5237   for (i = 0; i < n; i++) {
   5238     static const char description[] = "Empty function (mov + return from function)";
   5239     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5240       generate_empty_function(emitter, emit_prolog_epilog);
   5241     });
   5242   }
   5243 
   5244   for (i = 0; i < n; i++) {
   5245     static const char description[] = "4-Ops sequence (4 ops + return from function)";
   5246     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5247       generate_n_ops_sequence(emitter, 4, emit_prolog_epilog);
   5248     });
   5249   }
   5250 
   5251   for (i = 0; i < n; i++) {
   5252     static const char description[] = "16-Ops sequence (16 ops + return from function)";
   5253     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5254       generate_n_ops_sequence(emitter, 16, emit_prolog_epilog);
   5255     });
   5256   }
   5257 
   5258   for (i = 0; i < n; i++) {
   5259     static const char description[] = "32-Ops sequence (32 ops + return from function)";
   5260     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5261       generate_n_ops_sequence(emitter, 32, emit_prolog_epilog);
   5262     });
   5263   }
   5264 
   5265   for (i = 0; i < n; i++) {
   5266     static const char description[] = "64-Ops sequence (64 ops + return from function)";
   5267     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5268       generate_n_ops_sequence(emitter, 64, emit_prolog_epilog);
   5269     });
   5270   }
   5271 
   5272   for (i = 0; i < n; i++) {
   5273     static const char description[] = "GpSequence<Reg> (Sequence of GP instructions - reg-only)";
   5274     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5275       generate_gp_sequence(emitter, InstForm::kReg, emit_prolog_epilog);
   5276     });
   5277   }
   5278 
   5279   for (i = 0; i < n; i++) {
   5280     static const char description[] = "GpSequence<Mem> (Sequence of GP instructions - reg/mem)";
   5281     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5282       generate_gp_sequence(emitter, InstForm::kMem, emit_prolog_epilog);
   5283     });
   5284   }
   5285 
   5286   for (i = 0; i < n; i++) {
   5287     static const char description[] = "SseSequence<Reg> (sequence of SSE+ instructions - reg-only)";
   5288     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5289       generate_sse_sequence(emitter, InstForm::kReg, emit_prolog_epilog);
   5290     });
   5291   }
   5292 
   5293   for (i = 0; i < n; i++) {
   5294     static const char description[] = "SseSequence<Mem> (sequence of SSE+ instructions - reg/mem)";
   5295     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5296       generate_sse_sequence(emitter, InstForm::kMem, emit_prolog_epilog);
   5297     });
   5298   }
   5299 
   5300   for (i = 0; i < n; i++) {
   5301     static const char description[] = "AvxSequence<Reg> (sequence of AVX+ instructions - reg-only)";
   5302     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5303       generate_avx_sequence(emitter, InstForm::kReg, emit_prolog_epilog);
   5304     });
   5305   }
   5306 
   5307   for (i = 0; i < n; i++) {
   5308     static const char description[] = "AvxSequence<Mem> (sequence of AVX+ instructions - reg/mem)";
   5309     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5310       generate_avx_sequence(emitter, InstForm::kMem, emit_prolog_epilog);
   5311     });
   5312   }
   5313 
   5314   for (i = 0; i < n; i++) {
   5315     static const char description[] = "Avx512Sequence<Reg> (sequence of AVX512+ instructions - reg-only)";
   5316     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5317       generate_avx512_sequence(emitter, InstForm::kReg, emit_prolog_epilog);
   5318     });
   5319   }
   5320 
   5321   for (i = 0; i < n; i++) {
   5322     static const char description[] = "Avx512Sequence<Mem> (sequence of AVX512+ instructions - reg/mem)";
   5323     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5324       generate_avx512_sequence(emitter, InstForm::kMem, emit_prolog_epilog);
   5325     });
   5326   }
   5327 
   5328   for (i = 0; i < n; i++) {
   5329     static const char description[] = "SseAlphaBlend (alpha-blend function with labels and jumps)";
   5330     benchmark_x86_function(archs[i], num_iterations, description, [](BaseEmitter& emitter, bool emit_prolog_epilog) {
   5331       asmtest::generate_sse_alpha_blend(emitter, emit_prolog_epilog);
   5332     });
   5333   }
   5334 }
   5335 
   5336 #endif // !ASMJIT_NO_X86