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) { |