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