1077 void crc32(Register crc, Address adr, int8_t sizeInBytes);
1078
1079 // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value
1080 void cvtsd2ss(XMMRegister dst, XMMRegister src);
1081 void cvtsd2ss(XMMRegister dst, Address src);
1082
1083 // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value
1084 void cvtsi2sdl(XMMRegister dst, Register src);
1085 void cvtsi2sdl(XMMRegister dst, Address src);
1086 void cvtsi2sdq(XMMRegister dst, Register src);
1087 void cvtsi2sdq(XMMRegister dst, Address src);
1088
1089 // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value
1090 void cvtsi2ssl(XMMRegister dst, Register src);
1091 void cvtsi2ssl(XMMRegister dst, Address src);
1092 void cvtsi2ssq(XMMRegister dst, Register src);
1093 void cvtsi2ssq(XMMRegister dst, Address src);
1094
1095 // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value
1096 void cvtdq2pd(XMMRegister dst, XMMRegister src);
1097
1098 // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value
1099 void cvtdq2ps(XMMRegister dst, XMMRegister src);
1100
1101 // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value
1102 void cvtss2sd(XMMRegister dst, XMMRegister src);
1103 void cvtss2sd(XMMRegister dst, Address src);
1104
1105 // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer
1106 void cvttsd2sil(Register dst, Address src);
1107 void cvttsd2sil(Register dst, XMMRegister src);
1108 void cvttsd2siq(Register dst, XMMRegister src);
1109
1110 // Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer
1111 void cvttss2sil(Register dst, XMMRegister src);
1112 void cvttss2siq(Register dst, XMMRegister src);
1113
1114 void cvttpd2dq(XMMRegister dst, XMMRegister src);
1115
1116 // Convert vector float and double
1117 void vcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1118 void evcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1119
1120 //Abs of packed Integer values
1121 void pabsb(XMMRegister dst, XMMRegister src);
1122 void pabsw(XMMRegister dst, XMMRegister src);
1123 void pabsd(XMMRegister dst, XMMRegister src);
1124 void vpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1125 void vpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1126 void vpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1127 void evpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1128 void evpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1129 void evpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1130 void evpabsq(XMMRegister dst, XMMRegister src, int vector_len);
1131
1132 // Divide Scalar Double-Precision Floating-Point Values
1133 void divsd(XMMRegister dst, Address src);
1134 void divsd(XMMRegister dst, XMMRegister src);
1135
1136 // Divide Scalar Single-Precision Floating-Point Values
1137 void divss(XMMRegister dst, Address src);
1138 void divss(XMMRegister dst, XMMRegister src);
1604 void orl(Address dst, Register src);
1605
1606 void orq(Address dst, int32_t imm32);
1607 void orq(Register dst, int32_t imm32);
1608 void orq(Register dst, Address src);
1609 void orq(Register dst, Register src);
1610
1611 // Pack with unsigned saturation
1612 void packuswb(XMMRegister dst, XMMRegister src);
1613 void packuswb(XMMRegister dst, Address src);
1614 void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1615 void vpackusdw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1616
1617 // Permutations
1618 void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1619 void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1620 void vpermd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1621 void vpermd(XMMRegister dst, XMMRegister nds, Address src);
1622 void vperm2i128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);
1623 void vperm2f128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);
1624
1625 void pause();
1626
1627 // Undefined Instruction
1628 void ud2();
1629
1630 // SSE4.2 string instructions
1631 void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1632 void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1633
1634 void pcmpeqb(XMMRegister dst, XMMRegister src);
1635 void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1636 void evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len);
1637 void evpcmpeqb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1638 void evpcmpeqb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1639
1640 void vpcmpgtb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1641 void evpcmpgtb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1642 void evpcmpgtb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1643
1689 void pinsrw(XMMRegister dst, Register src, int imm8);
1690 void pinsrw(XMMRegister dst, Address src, int imm8);
1691
1692 // Zero extend moves
1693 void pmovzxbw(XMMRegister dst, XMMRegister src);
1694 void pmovzxbw(XMMRegister dst, Address src);
1695 void vpmovzxbw( XMMRegister dst, Address src, int vector_len);
1696 void pmovzxdq(XMMRegister dst, XMMRegister src);
1697 void vpmovzxdq(XMMRegister dst, XMMRegister src, int vector_len);
1698 void vpmovzxbd(XMMRegister dst, XMMRegister src, int vector_len);
1699 void vpmovzxbq(XMMRegister dst, XMMRegister src, int vector_len);
1700 void evpmovzxbw(XMMRegister dst, KRegister mask, Address src, int vector_len);
1701
1702 // Sign extend moves
1703 void pmovsxbw(XMMRegister dst, XMMRegister src);
1704 void pmovsxbd(XMMRegister dst, XMMRegister src);
1705 void pmovsxbq(XMMRegister dst, XMMRegister src);
1706 void vpmovsxbd(XMMRegister dst, XMMRegister src, int vector_len);
1707 void vpmovsxbq(XMMRegister dst, XMMRegister src, int vector_len);
1708 void vpmovsxbw(XMMRegister dst, XMMRegister src, int vector_len);
1709
1710 void evpmovwb(Address dst, XMMRegister src, int vector_len);
1711 void evpmovwb(Address dst, KRegister mask, XMMRegister src, int vector_len);
1712
1713 #ifndef _LP64 // no 32bit push/pop on amd64
1714 void popl(Address dst);
1715 #endif
1716
1717 #ifdef _LP64
1718 void popq(Address dst);
1719 #endif
1720
1721 void popcntl(Register dst, Address src);
1722 void popcntl(Register dst, Register src);
1723
1724 void vpopcntd(XMMRegister dst, XMMRegister src, int vector_len);
1725
1726 #ifdef _LP64
1727 void popcntq(Register dst, Address src);
1728 void popcntq(Register dst, Register src);
|
1077 void crc32(Register crc, Address adr, int8_t sizeInBytes);
1078
1079 // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value
1080 void cvtsd2ss(XMMRegister dst, XMMRegister src);
1081 void cvtsd2ss(XMMRegister dst, Address src);
1082
1083 // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value
1084 void cvtsi2sdl(XMMRegister dst, Register src);
1085 void cvtsi2sdl(XMMRegister dst, Address src);
1086 void cvtsi2sdq(XMMRegister dst, Register src);
1087 void cvtsi2sdq(XMMRegister dst, Address src);
1088
1089 // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value
1090 void cvtsi2ssl(XMMRegister dst, Register src);
1091 void cvtsi2ssl(XMMRegister dst, Address src);
1092 void cvtsi2ssq(XMMRegister dst, Register src);
1093 void cvtsi2ssq(XMMRegister dst, Address src);
1094
1095 // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value
1096 void cvtdq2pd(XMMRegister dst, XMMRegister src);
1097 void vcvtdq2pd(XMMRegister dst, XMMRegister src, int vector_len);
1098
1099 // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value
1100 void cvtdq2ps(XMMRegister dst, XMMRegister src);
1101 void vcvtdq2ps(XMMRegister dst, XMMRegister src, int vector_len);
1102
1103 // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value
1104 void cvtss2sd(XMMRegister dst, XMMRegister src);
1105 void cvtss2sd(XMMRegister dst, Address src);
1106
1107 // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer
1108 void cvttsd2sil(Register dst, Address src);
1109 void cvttsd2sil(Register dst, XMMRegister src);
1110 void cvttsd2siq(Register dst, XMMRegister src);
1111
1112 // Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer
1113 void cvttss2sil(Register dst, XMMRegister src);
1114 void cvttss2siq(Register dst, XMMRegister src);
1115
1116 // Convert vector double to int
1117 void cvttpd2dq(XMMRegister dst, XMMRegister src);
1118
1119 // Convert vector float and double
1120 void vcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1121 void evcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1122 void vcvtpd2ps(XMMRegister dst, XMMRegister src, int vector_len);
1123 void evcvtpd2ps(XMMRegister dst, XMMRegister src, int vector_len);
1124
1125 // Convert vector long to vector FP
1126 void evcvtqq2ps(XMMRegister dst, XMMRegister src, int vector_len);
1127 void evcvtqq2pd(XMMRegister dst, XMMRegister src, int vector_len);
1128
1129 // Evex casts with truncation
1130 void evpmovwb(XMMRegister dst, XMMRegister src, int vector_len);
1131 void evpmovdw(XMMRegister dst, XMMRegister src, int vector_len);
1132 void evpmovdb(XMMRegister dst, XMMRegister src, int vector_len);
1133 void evpmovqd(XMMRegister dst, XMMRegister src, int vector_len);
1134 void evpmovqb(XMMRegister dst, XMMRegister src, int vector_len);
1135 void evpmovqw(XMMRegister dst, XMMRegister src, int vector_len);
1136
1137 //Abs of packed Integer values
1138 void pabsb(XMMRegister dst, XMMRegister src);
1139 void pabsw(XMMRegister dst, XMMRegister src);
1140 void pabsd(XMMRegister dst, XMMRegister src);
1141 void vpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1142 void vpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1143 void vpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1144 void evpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1145 void evpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1146 void evpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1147 void evpabsq(XMMRegister dst, XMMRegister src, int vector_len);
1148
1149 // Divide Scalar Double-Precision Floating-Point Values
1150 void divsd(XMMRegister dst, Address src);
1151 void divsd(XMMRegister dst, XMMRegister src);
1152
1153 // Divide Scalar Single-Precision Floating-Point Values
1154 void divss(XMMRegister dst, Address src);
1155 void divss(XMMRegister dst, XMMRegister src);
1621 void orl(Address dst, Register src);
1622
1623 void orq(Address dst, int32_t imm32);
1624 void orq(Register dst, int32_t imm32);
1625 void orq(Register dst, Address src);
1626 void orq(Register dst, Register src);
1627
1628 // Pack with unsigned saturation
1629 void packuswb(XMMRegister dst, XMMRegister src);
1630 void packuswb(XMMRegister dst, Address src);
1631 void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1632 void vpackusdw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1633
1634 // Permutations
1635 void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1636 void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1637 void vpermd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1638 void vpermd(XMMRegister dst, XMMRegister nds, Address src);
1639 void vperm2i128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);
1640 void vperm2f128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);
1641 void vpermilps(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1642 void vpermpd(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1643
1644 void pause();
1645
1646 // Undefined Instruction
1647 void ud2();
1648
1649 // SSE4.2 string instructions
1650 void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1651 void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1652
1653 void pcmpeqb(XMMRegister dst, XMMRegister src);
1654 void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1655 void evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len);
1656 void evpcmpeqb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1657 void evpcmpeqb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1658
1659 void vpcmpgtb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1660 void evpcmpgtb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1661 void evpcmpgtb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1662
1708 void pinsrw(XMMRegister dst, Register src, int imm8);
1709 void pinsrw(XMMRegister dst, Address src, int imm8);
1710
1711 // Zero extend moves
1712 void pmovzxbw(XMMRegister dst, XMMRegister src);
1713 void pmovzxbw(XMMRegister dst, Address src);
1714 void vpmovzxbw( XMMRegister dst, Address src, int vector_len);
1715 void pmovzxdq(XMMRegister dst, XMMRegister src);
1716 void vpmovzxdq(XMMRegister dst, XMMRegister src, int vector_len);
1717 void vpmovzxbd(XMMRegister dst, XMMRegister src, int vector_len);
1718 void vpmovzxbq(XMMRegister dst, XMMRegister src, int vector_len);
1719 void evpmovzxbw(XMMRegister dst, KRegister mask, Address src, int vector_len);
1720
1721 // Sign extend moves
1722 void pmovsxbw(XMMRegister dst, XMMRegister src);
1723 void pmovsxbd(XMMRegister dst, XMMRegister src);
1724 void pmovsxbq(XMMRegister dst, XMMRegister src);
1725 void vpmovsxbd(XMMRegister dst, XMMRegister src, int vector_len);
1726 void vpmovsxbq(XMMRegister dst, XMMRegister src, int vector_len);
1727 void vpmovsxbw(XMMRegister dst, XMMRegister src, int vector_len);
1728 void vpmovsxwd(XMMRegister dst, XMMRegister src, int vector_len);
1729 void vpmovsxwq(XMMRegister dst, XMMRegister src, int vector_len);
1730 void vpmovsxdq(XMMRegister dst, XMMRegister src, int vector_len);
1731
1732 void evpmovwb(Address dst, XMMRegister src, int vector_len);
1733 void evpmovwb(Address dst, KRegister mask, XMMRegister src, int vector_len);
1734
1735 #ifndef _LP64 // no 32bit push/pop on amd64
1736 void popl(Address dst);
1737 #endif
1738
1739 #ifdef _LP64
1740 void popq(Address dst);
1741 #endif
1742
1743 void popcntl(Register dst, Address src);
1744 void popcntl(Register dst, Register src);
1745
1746 void vpopcntd(XMMRegister dst, XMMRegister src, int vector_len);
1747
1748 #ifdef _LP64
1749 void popcntq(Register dst, Address src);
1750 void popcntq(Register dst, Register src);
|