1007
1008 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values
1009 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); }
1010 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); }
1011 void xorps(XMMRegister dst, AddressLiteral src);
1012
1013 // Shuffle Bytes
1014 void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); }
1015 void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); }
1016 void pshufb(XMMRegister dst, AddressLiteral src);
1017 // AVX 3-operands instructions
1018
1019 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); }
1020 void vaddsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddsd(dst, nds, src); }
1021 void vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1022
1023 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); }
1024 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); }
1025 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1026
1027 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vandpd(dst, nds, src, vector256); }
1028 void vandpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vandpd(dst, nds, src, vector256); }
1029 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
1030
1031 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vandps(dst, nds, src, vector256); }
1032 void vandps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vandps(dst, nds, src, vector256); }
1033 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
1034
1035 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); }
1036 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); }
1037 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1038
1039 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivss(dst, nds, src); }
1040 void vdivss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivss(dst, nds, src); }
1041 void vdivss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1042
1043 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulsd(dst, nds, src); }
1044 void vmulsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulsd(dst, nds, src); }
1045 void vmulsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1046
1047 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulss(dst, nds, src); }
1048 void vmulss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulss(dst, nds, src); }
1049 void vmulss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1050
1051 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubsd(dst, nds, src); }
1052 void vsubsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubsd(dst, nds, src); }
1053 void vsubsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1054
1055 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubss(dst, nds, src); }
1056 void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); }
1057 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1058
1059 // AVX Vector instructions
1060
1061 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); }
1062 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); }
1063 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
1064
1065 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); }
1066 void vxorps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); }
1067 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src, bool vector256);
1068
1069 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
1070 if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2
1071 Assembler::vpxor(dst, nds, src, vector256);
1072 else
1073 Assembler::vxorpd(dst, nds, src, vector256);
1074 }
1075 void vpxor(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
1076 if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2
1077 Assembler::vpxor(dst, nds, src, vector256);
1078 else
1079 Assembler::vxorpd(dst, nds, src, vector256);
1080 }
1081
1082 // Simple version for AVX2 256bit vectors
1083 void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); }
1084 void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); }
1085
1086 // Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector.
1087 void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1088 if (UseAVX > 1) // vinserti128h is available only in AVX2
1089 Assembler::vinserti128h(dst, nds, src);
1090 else
1091 Assembler::vinsertf128h(dst, nds, src);
1092 }
1093
1094 // Carry-Less Multiplication Quadword
1095 void vpclmulldq(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1096 // 0x00 - multiply lower 64 bits [0:63]
1097 Assembler::vpclmulqdq(dst, nds, src, 0x00);
1098 }
1099 void vpclmulhdq(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
1007
1008 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values
1009 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); }
1010 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); }
1011 void xorps(XMMRegister dst, AddressLiteral src);
1012
1013 // Shuffle Bytes
1014 void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); }
1015 void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); }
1016 void pshufb(XMMRegister dst, AddressLiteral src);
1017 // AVX 3-operands instructions
1018
1019 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); }
1020 void vaddsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddsd(dst, nds, src); }
1021 void vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1022
1023 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); }
1024 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); }
1025 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1026
1027 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); }
1028 void vandpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); }
1029 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len);
1030
1031 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); }
1032 void vandps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); }
1033 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len);
1034
1035 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); }
1036 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); }
1037 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1038
1039 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivss(dst, nds, src); }
1040 void vdivss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivss(dst, nds, src); }
1041 void vdivss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1042
1043 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulsd(dst, nds, src); }
1044 void vmulsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulsd(dst, nds, src); }
1045 void vmulsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1046
1047 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulss(dst, nds, src); }
1048 void vmulss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulss(dst, nds, src); }
1049 void vmulss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1050
1051 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubsd(dst, nds, src); }
1052 void vsubsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubsd(dst, nds, src); }
1053 void vsubsd(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1054
1055 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubss(dst, nds, src); }
1056 void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); }
1057 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src);
1058
1059 // AVX Vector instructions
1060
1061 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); }
1062 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); }
1063 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len);
1064
1065 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); }
1066 void vxorps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); }
1067 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len);
1068
1069 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
1070 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2
1071 Assembler::vpxor(dst, nds, src, vector_len);
1072 else
1073 Assembler::vxorpd(dst, nds, src, vector_len);
1074 }
1075 void vpxor(XMMRegister dst, XMMRegister nds, Address src, int vector_len) {
1076 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2
1077 Assembler::vpxor(dst, nds, src, vector_len);
1078 else
1079 Assembler::vxorpd(dst, nds, src, vector_len);
1080 }
1081
1082 // Simple version for AVX2 256bit vectors
1083 void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); }
1084 void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); }
1085
1086 // Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector.
1087 void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1088 if (UseAVX > 1) // vinserti128h is available only in AVX2
1089 Assembler::vinserti128h(dst, nds, src);
1090 else
1091 Assembler::vinsertf128h(dst, nds, src);
1092 }
1093
1094 // Carry-Less Multiplication Quadword
1095 void vpclmulldq(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1096 // 0x00 - multiply lower 64 bits [0:63]
1097 Assembler::vpclmulqdq(dst, nds, src, 0x00);
1098 }
1099 void vpclmulhdq(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|