comparison src/cpu/x86/vm/assembler_x86.hpp @ 6614:006050192a5a

6340864: Implement vectorization optimizations in hotspot-server Summary: Added asm encoding and mach nodes for vector arithmetic instructions on x86. Reviewed-by: roland
author kvn
date Mon, 20 Aug 2012 09:07:21 -0700
parents 1d7922586cf6
children da91efe96a93
comparison
equal deleted inserted replaced
6594:d5ec46c7da5c 6614:006050192a5a
615 615
616 void simd_prefix(XMMRegister dst, Address src, 616 void simd_prefix(XMMRegister dst, Address src,
617 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) { 617 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) {
618 simd_prefix(dst, xnoreg, src, pre, opc); 618 simd_prefix(dst, xnoreg, src, pre, opc);
619 } 619 }
620
620 void simd_prefix(Address dst, XMMRegister src, VexSimdPrefix pre) { 621 void simd_prefix(Address dst, XMMRegister src, VexSimdPrefix pre) {
621 simd_prefix(src, dst, pre); 622 simd_prefix(src, dst, pre);
622 } 623 }
623 void simd_prefix_q(XMMRegister dst, XMMRegister nds, Address src, 624 void simd_prefix_q(XMMRegister dst, XMMRegister nds, Address src,
624 VexSimdPrefix pre) { 625 VexSimdPrefix pre) {
625 bool rex_w = true; 626 bool rex_w = true;
626 simd_prefix(dst, nds, src, pre, VEX_OPCODE_0F, rex_w); 627 simd_prefix(dst, nds, src, pre, VEX_OPCODE_0F, rex_w);
627 } 628 }
628 629
629
630 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, 630 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src,
631 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F, 631 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F,
632 bool rex_w = false, bool vector256 = false); 632 bool rex_w = false, bool vector256 = false);
633
634 int simd_prefix_and_encode(XMMRegister dst, XMMRegister src,
635 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) {
636 return simd_prefix_and_encode(dst, xnoreg, src, pre, opc);
637 }
638 633
639 // Move/convert 32-bit integer value. 634 // Move/convert 32-bit integer value.
640 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, Register src, 635 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, Register src,
641 VexSimdPrefix pre) { 636 VexSimdPrefix pre) {
642 // It is OK to cast from Register to XMMRegister to pass argument here 637 // It is OK to cast from Register to XMMRegister to pass argument here
675 void emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32); 670 void emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32);
676 // only 32bit?? 671 // only 32bit??
677 void emit_arith(int op1, int op2, Register dst, jobject obj); 672 void emit_arith(int op1, int op2, Register dst, jobject obj);
678 void emit_arith(int op1, int op2, Register dst, Register src); 673 void emit_arith(int op1, int op2, Register dst, Register src);
679 674
675 void emit_simd_arith(int opcode, XMMRegister dst, Address src, VexSimdPrefix pre);
676 void emit_simd_arith(int opcode, XMMRegister dst, XMMRegister src, VexSimdPrefix pre);
677 void emit_simd_arith_nonds(int opcode, XMMRegister dst, Address src, VexSimdPrefix pre);
678 void emit_simd_arith_nonds(int opcode, XMMRegister dst, XMMRegister src, VexSimdPrefix pre);
679 void emit_vex_arith(int opcode, XMMRegister dst, XMMRegister nds,
680 Address src, VexSimdPrefix pre, bool vector256);
681 void emit_vex_arith(int opcode, XMMRegister dst, XMMRegister nds,
682 XMMRegister src, VexSimdPrefix pre, bool vector256);
683
680 void emit_operand(Register reg, 684 void emit_operand(Register reg,
681 Register base, Register index, Address::ScaleFactor scale, 685 Register base, Register index, Address::ScaleFactor scale,
682 int disp, 686 int disp,
683 RelocationHolder const& rspec, 687 RelocationHolder const& rspec,
684 int rip_relative_correction = 0); 688 int rip_relative_correction = 0);
888 892
889 void andq(Address dst, int32_t imm32); 893 void andq(Address dst, int32_t imm32);
890 void andq(Register dst, int32_t imm32); 894 void andq(Register dst, int32_t imm32);
891 void andq(Register dst, Address src); 895 void andq(Register dst, Address src);
892 void andq(Register dst, Register src); 896 void andq(Register dst, Register src);
893
894 // Bitwise Logical AND of Packed Double-Precision Floating-Point Values
895 void andpd(XMMRegister dst, XMMRegister src);
896
897 // Bitwise Logical AND of Packed Single-Precision Floating-Point Values
898 void andps(XMMRegister dst, XMMRegister src);
899 897
900 void bsfl(Register dst, Register src); 898 void bsfl(Register dst, Register src);
901 void bsrl(Register dst, Register src); 899 void bsrl(Register dst, Register src);
902 900
903 #ifdef _LP64 901 #ifdef _LP64
1434 void prefetcht0(Address src); 1432 void prefetcht0(Address src);
1435 void prefetcht1(Address src); 1433 void prefetcht1(Address src);
1436 void prefetcht2(Address src); 1434 void prefetcht2(Address src);
1437 void prefetchw(Address src); 1435 void prefetchw(Address src);
1438 1436
1439 // POR - Bitwise logical OR
1440 void por(XMMRegister dst, XMMRegister src);
1441 void por(XMMRegister dst, Address src);
1442
1443 // Shuffle Packed Doublewords 1437 // Shuffle Packed Doublewords
1444 void pshufd(XMMRegister dst, XMMRegister src, int mode); 1438 void pshufd(XMMRegister dst, XMMRegister src, int mode);
1445 void pshufd(XMMRegister dst, Address src, int mode); 1439 void pshufd(XMMRegister dst, Address src, int mode);
1446 1440
1447 // Shuffle Packed Low Words 1441 // Shuffle Packed Low Words
1448 void pshuflw(XMMRegister dst, XMMRegister src, int mode); 1442 void pshuflw(XMMRegister dst, XMMRegister src, int mode);
1449 void pshuflw(XMMRegister dst, Address src, int mode); 1443 void pshuflw(XMMRegister dst, Address src, int mode);
1450 1444
1451 // Shift Right by bits Logical Quadword Immediate
1452 void psrlq(XMMRegister dst, int shift);
1453
1454 // Shift Right by bytes Logical DoubleQuadword Immediate 1445 // Shift Right by bytes Logical DoubleQuadword Immediate
1455 void psrldq(XMMRegister dst, int shift); 1446 void psrldq(XMMRegister dst, int shift);
1456 1447
1457 // Logical Compare Double Quadword 1448 // Logical Compare Double Quadword
1458 void ptest(XMMRegister dst, XMMRegister src); 1449 void ptest(XMMRegister dst, XMMRegister src);
1472 #ifndef _LP64 // no 32bit push/pop on amd64 1463 #ifndef _LP64 // no 32bit push/pop on amd64
1473 void pushl(Address src); 1464 void pushl(Address src);
1474 #endif 1465 #endif
1475 1466
1476 void pushq(Address src); 1467 void pushq(Address src);
1477
1478 // Xor Packed Byte Integer Values
1479 void pxor(XMMRegister dst, Address src);
1480 void pxor(XMMRegister dst, XMMRegister src);
1481 1468
1482 void rcll(Register dst, int imm8); 1469 void rcll(Register dst, int imm8);
1483 1470
1484 void rclq(Register dst, int imm8); 1471 void rclq(Register dst, int imm8);
1485 1472
1599 void xorl(Register dst, Register src); 1586 void xorl(Register dst, Register src);
1600 1587
1601 void xorq(Register dst, Address src); 1588 void xorq(Register dst, Address src);
1602 void xorq(Register dst, Register src); 1589 void xorq(Register dst, Register src);
1603 1590
1604 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values
1605 void xorpd(XMMRegister dst, XMMRegister src);
1606
1607 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values
1608 void xorps(XMMRegister dst, XMMRegister src);
1609
1610 void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 1591 void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0
1611 1592
1612 // AVX 3-operands scalar instructions (encoded with VEX prefix) 1593 // AVX 3-operands scalar instructions (encoded with VEX prefix)
1594
1613 void vaddsd(XMMRegister dst, XMMRegister nds, Address src); 1595 void vaddsd(XMMRegister dst, XMMRegister nds, Address src);
1614 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src); 1596 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1615 void vaddss(XMMRegister dst, XMMRegister nds, Address src); 1597 void vaddss(XMMRegister dst, XMMRegister nds, Address src);
1616 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src); 1598 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1617 void vdivsd(XMMRegister dst, XMMRegister nds, Address src); 1599 void vdivsd(XMMRegister dst, XMMRegister nds, Address src);
1625 void vsubsd(XMMRegister dst, XMMRegister nds, Address src); 1607 void vsubsd(XMMRegister dst, XMMRegister nds, Address src);
1626 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src); 1608 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1627 void vsubss(XMMRegister dst, XMMRegister nds, Address src); 1609 void vsubss(XMMRegister dst, XMMRegister nds, Address src);
1628 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src); 1610 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1629 1611
1630 // AVX Vector instrucitons. 1612
1631 void vandpd(XMMRegister dst, XMMRegister nds, Address src); 1613 //====================VECTOR ARITHMETIC=====================================
1632 void vandps(XMMRegister dst, XMMRegister nds, Address src); 1614
1633 void vxorpd(XMMRegister dst, XMMRegister nds, Address src); 1615 // Add Packed Floating-Point Values
1634 void vxorps(XMMRegister dst, XMMRegister nds, Address src); 1616 void addpd(XMMRegister dst, XMMRegister src);
1617 void addps(XMMRegister dst, XMMRegister src);
1618 void vaddpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1619 void vaddps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1620 void vaddpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1621 void vaddps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1622
1623 // Subtract Packed Floating-Point Values
1624 void subpd(XMMRegister dst, XMMRegister src);
1625 void subps(XMMRegister dst, XMMRegister src);
1626 void vsubpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1627 void vsubps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1628 void vsubpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1629 void vsubps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1630
1631 // Multiply Packed Floating-Point Values
1632 void mulpd(XMMRegister dst, XMMRegister src);
1633 void mulps(XMMRegister dst, XMMRegister src);
1634 void vmulpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1635 void vmulps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1636 void vmulpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1637 void vmulps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1638
1639 // Divide Packed Floating-Point Values
1640 void divpd(XMMRegister dst, XMMRegister src);
1641 void divps(XMMRegister dst, XMMRegister src);
1642 void vdivpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1643 void vdivps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1644 void vdivpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1645 void vdivps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1646
1647 // Bitwise Logical AND of Packed Floating-Point Values
1648 void andpd(XMMRegister dst, XMMRegister src);
1649 void andps(XMMRegister dst, XMMRegister src);
1650 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1651 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1652 void vandpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1653 void vandps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1654
1655 // Bitwise Logical XOR of Packed Floating-Point Values
1656 void xorpd(XMMRegister dst, XMMRegister src);
1657 void xorps(XMMRegister dst, XMMRegister src);
1635 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); 1658 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1636 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); 1659 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1660 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1661 void vxorps(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1662
1663 // Add packed integers
1664 void paddb(XMMRegister dst, XMMRegister src);
1665 void paddw(XMMRegister dst, XMMRegister src);
1666 void paddd(XMMRegister dst, XMMRegister src);
1667 void paddq(XMMRegister dst, XMMRegister src);
1668 void vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1669 void vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1670 void vpaddd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1671 void vpaddq(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1672 void vpaddb(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1673 void vpaddw(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1674 void vpaddd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1675 void vpaddq(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1676
1677 // Sub packed integers
1678 void psubb(XMMRegister dst, XMMRegister src);
1679 void psubw(XMMRegister dst, XMMRegister src);
1680 void psubd(XMMRegister dst, XMMRegister src);
1681 void psubq(XMMRegister dst, XMMRegister src);
1682 void vpsubb(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1683 void vpsubw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1684 void vpsubd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1685 void vpsubq(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1686 void vpsubb(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1687 void vpsubw(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1688 void vpsubd(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1689 void vpsubq(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1690
1691 // Multiply packed integers (only shorts and ints)
1692 void pmullw(XMMRegister dst, XMMRegister src);
1693 void pmulld(XMMRegister dst, XMMRegister src);
1694 void vpmullw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1695 void vpmulld(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1696 void vpmullw(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1697 void vpmulld(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1698
1699 // Shift left packed integers
1700 void psllw(XMMRegister dst, int shift);
1701 void pslld(XMMRegister dst, int shift);
1702 void psllq(XMMRegister dst, int shift);
1703 void psllw(XMMRegister dst, XMMRegister shift);
1704 void pslld(XMMRegister dst, XMMRegister shift);
1705 void psllq(XMMRegister dst, XMMRegister shift);
1706 void vpsllw(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1707 void vpslld(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1708 void vpsllq(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1709 void vpsllw(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1710 void vpslld(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1711 void vpsllq(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1712
1713 // Logical shift right packed integers
1714 void psrlw(XMMRegister dst, int shift);
1715 void psrld(XMMRegister dst, int shift);
1716 void psrlq(XMMRegister dst, int shift);
1717 void psrlw(XMMRegister dst, XMMRegister shift);
1718 void psrld(XMMRegister dst, XMMRegister shift);
1719 void psrlq(XMMRegister dst, XMMRegister shift);
1720 void vpsrlw(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1721 void vpsrld(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1722 void vpsrlq(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1723 void vpsrlw(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1724 void vpsrld(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1725 void vpsrlq(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1726
1727 // Arithmetic shift right packed integers (only shorts and ints, no instructions for longs)
1728 void psraw(XMMRegister dst, int shift);
1729 void psrad(XMMRegister dst, int shift);
1730 void psraw(XMMRegister dst, XMMRegister shift);
1731 void psrad(XMMRegister dst, XMMRegister shift);
1732 void vpsraw(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1733 void vpsrad(XMMRegister dst, XMMRegister src, int shift, bool vector256);
1734 void vpsraw(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1735 void vpsrad(XMMRegister dst, XMMRegister src, XMMRegister shift, bool vector256);
1736
1737 // And packed integers
1738 void pand(XMMRegister dst, XMMRegister src);
1739 void vpand(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1740 void vpand(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1741
1742 // Or packed integers
1743 void por(XMMRegister dst, XMMRegister src);
1744 void vpor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1745 void vpor(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1746
1747 // Xor packed integers
1748 void pxor(XMMRegister dst, XMMRegister src);
1637 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); 1749 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256);
1750 void vpxor(XMMRegister dst, XMMRegister nds, Address src, bool vector256);
1751
1752 // Copy low 128bit into high 128bit of YMM registers.
1638 void vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src); 1753 void vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src);
1639 void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src); 1754 void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src);
1640 1755
1641 // AVX instruction which is used to clear upper 128 bits of YMM registers and 1756 // AVX instruction which is used to clear upper 128 bits of YMM registers and
1642 // to avoid transaction penalty between AVX and SSE states. There is no 1757 // to avoid transaction penalty between AVX and SSE states. There is no
2530 2645
2531 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); } 2646 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); }
2532 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); } 2647 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); }
2533 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2648 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
2534 2649
2535 void vandpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vandpd(dst, nds, src); } 2650 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vandpd(dst, nds, src, vector256); }
2536 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2651 void vandpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vandpd(dst, nds, src, vector256); }
2537 2652 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
2538 void vandps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vandps(dst, nds, src); } 2653
2539 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2654 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vandps(dst, nds, src, vector256); }
2655 void vandps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vandps(dst, nds, src, vector256); }
2656 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
2540 2657
2541 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); } 2658 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); }
2542 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); } 2659 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); }
2543 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2660 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
2544 2661
2563 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2680 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
2564 2681
2565 // AVX Vector instructions 2682 // AVX Vector instructions
2566 2683
2567 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); } 2684 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); }
2568 void vxorpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorpd(dst, nds, src); } 2685 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); }
2569 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2686 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
2570 2687
2571 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); } 2688 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); }
2572 void vxorps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorps(dst, nds, src); } 2689 void vxorps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); }
2573 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src); 2690 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
2574 2691
2575 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { 2692 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
2693 if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2
2694 Assembler::vpxor(dst, nds, src, vector256);
2695 else
2696 Assembler::vxorpd(dst, nds, src, vector256);
2697 }
2698 void vpxor(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
2576 if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2 2699 if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2
2577 Assembler::vpxor(dst, nds, src, vector256); 2700 Assembler::vpxor(dst, nds, src, vector256);
2578 else 2701 else
2579 Assembler::vxorpd(dst, nds, src, vector256); 2702 Assembler::vxorpd(dst, nds, src, vector256);
2580 } 2703 }