860 861 // Emit the CompiledIC call idiom 862 void ic_call(address entry, jint method_index = 0); 863 864 // Jumps 865 866 // NOTE: these jumps tranfer to the effective address of dst NOT 867 // the address contained by dst. This is because this is more natural 868 // for jumps/calls. 869 void jump(AddressLiteral dst); 870 void jump_cc(Condition cc, AddressLiteral dst); 871 872 // 32bit can do a case table jump in one instruction but we no longer allow the base 873 // to be installed in the Address class. This jump will tranfers to the address 874 // contained in the location described by entry (not the address of entry) 875 void jump(ArrayAddress entry); 876 877 // Floating 878 879 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } 880 void andpd(XMMRegister dst, AddressLiteral src); 881 void andpd(XMMRegister dst, XMMRegister src) { Assembler::andpd(dst, src); } 882 883 void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); } 884 void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); } 885 void andps(XMMRegister dst, AddressLiteral src); 886 887 void comiss(XMMRegister dst, XMMRegister src) { Assembler::comiss(dst, src); } 888 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } 889 void comiss(XMMRegister dst, AddressLiteral src); 890 891 void comisd(XMMRegister dst, XMMRegister src) { Assembler::comisd(dst, src); } 892 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } 893 void comisd(XMMRegister dst, AddressLiteral src); 894 895 void fadd_s(Address src) { Assembler::fadd_s(src); } 896 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } 897 898 void fldcw(Address src) { Assembler::fldcw(src); } 899 void fldcw(AddressLiteral src); 900 901 void fld_s(int index) { Assembler::fld_s(index); } 902 void fld_s(Address src) { Assembler::fld_s(src); } 903 void fld_s(AddressLiteral src); 904 905 void fld_d(Address src) { Assembler::fld_d(src); } 1049 1050 void libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, 1051 Register esi, Register edi, Register ebp, Register esp); 1052 1053 void libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, 1054 Register edx, Register ebx, Register esi, Register edi, 1055 Register ebp, Register esp); 1056 1057 void fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 1058 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 1059 Register rax, Register rcx, Register rdx, Register tmp); 1060 #endif 1061 1062 void increase_precision(); 1063 void restore_precision(); 1064 1065 private: 1066 1067 // these are private because users should be doing movflt/movdbl 1068 1069 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } 1070 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } 1071 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } 1072 void movss(XMMRegister dst, AddressLiteral src); 1073 1074 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } 1075 void movlpd(XMMRegister dst, AddressLiteral src); 1076 1077 public: 1078 1079 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } 1080 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } 1081 void addsd(XMMRegister dst, AddressLiteral src); 1082 1083 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } 1084 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } 1085 void addss(XMMRegister dst, AddressLiteral src); 1086 1087 void addpd(XMMRegister dst, XMMRegister src) { Assembler::addpd(dst, src); } 1088 void addpd(XMMRegister dst, Address src) { Assembler::addpd(dst, src); } 1089 void addpd(XMMRegister dst, AddressLiteral src); 1090 1091 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } 1092 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } 1093 void divsd(XMMRegister dst, AddressLiteral src); 1094 1095 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } 1096 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } 1097 void divss(XMMRegister dst, AddressLiteral src); 1098 1099 // Move Unaligned Double Quadword 1100 void movdqu(Address dst, XMMRegister src); 1101 void movdqu(XMMRegister dst, Address src); 1102 void movdqu(XMMRegister dst, XMMRegister src); 1103 void movdqu(XMMRegister dst, AddressLiteral src, Register scratchReg = rscratch1); 1104 // AVX Unaligned forms 1105 void vmovdqu(Address dst, XMMRegister src); 1106 void vmovdqu(XMMRegister dst, Address src); 1107 void vmovdqu(XMMRegister dst, XMMRegister src); 1108 void vmovdqu(XMMRegister dst, AddressLiteral src); 1109 void evmovdquq(XMMRegister dst, Address src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1110 void evmovdquq(XMMRegister dst, XMMRegister src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1111 void evmovdquq(Address dst, XMMRegister src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1112 void evmovdquq(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch); 1113 1114 // Move Aligned Double Quadword 1115 void movdqa(XMMRegister dst, Address src) { Assembler::movdqa(dst, src); } 1116 void movdqa(XMMRegister dst, XMMRegister src) { Assembler::movdqa(dst, src); } 1117 void movdqa(XMMRegister dst, AddressLiteral src); 1118 1119 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } 1120 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } 1121 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } 1122 void movsd(XMMRegister dst, AddressLiteral src); 1123 1124 void mulpd(XMMRegister dst, XMMRegister src) { Assembler::mulpd(dst, src); } 1125 void mulpd(XMMRegister dst, Address src) { Assembler::mulpd(dst, src); } 1126 void mulpd(XMMRegister dst, AddressLiteral src); 1127 1128 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } 1166 1167 void subsd(XMMRegister dst, XMMRegister src) { Assembler::subsd(dst, src); } 1168 void subsd(XMMRegister dst, Address src) { Assembler::subsd(dst, src); } 1169 void subsd(XMMRegister dst, AddressLiteral src); 1170 1171 void subss(XMMRegister dst, XMMRegister src) { Assembler::subss(dst, src); } 1172 void subss(XMMRegister dst, Address src) { Assembler::subss(dst, src); } 1173 void subss(XMMRegister dst, AddressLiteral src); 1174 1175 void ucomiss(XMMRegister dst, XMMRegister src) { Assembler::ucomiss(dst, src); } 1176 void ucomiss(XMMRegister dst, Address src) { Assembler::ucomiss(dst, src); } 1177 void ucomiss(XMMRegister dst, AddressLiteral src); 1178 1179 void ucomisd(XMMRegister dst, XMMRegister src) { Assembler::ucomisd(dst, src); } 1180 void ucomisd(XMMRegister dst, Address src) { Assembler::ucomisd(dst, src); } 1181 void ucomisd(XMMRegister dst, AddressLiteral src); 1182 1183 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values 1184 void xorpd(XMMRegister dst, XMMRegister src); 1185 void xorpd(XMMRegister dst, Address src) { Assembler::xorpd(dst, src); } 1186 void xorpd(XMMRegister dst, AddressLiteral src); 1187 1188 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values 1189 void xorps(XMMRegister dst, XMMRegister src); 1190 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } 1191 void xorps(XMMRegister dst, AddressLiteral src); 1192 1193 // Shuffle Bytes 1194 void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); } 1195 void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); } 1196 void pshufb(XMMRegister dst, AddressLiteral src); 1197 // AVX 3-operands instructions 1198 1199 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); } 1200 void vaddsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddsd(dst, nds, src); } 1201 void vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1202 1203 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); } 1204 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); } 1205 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1206 1207 void vabsss(XMMRegister dst, XMMRegister nds, XMMRegister src, AddressLiteral negate_field, int vector_len); 1208 void vabssd(XMMRegister dst, XMMRegister nds, XMMRegister src, AddressLiteral negate_field, int vector_len); 1209 1210 void vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1211 void vpaddb(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1212 1213 void vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1214 void vpaddw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1215 1216 void vpand(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vpand(dst, nds, src, vector_len); } 1217 void vpand(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vpand(dst, nds, src, vector_len); } 1218 void vpand(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len); 1219 1220 void vpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len); 1221 void vpbroadcastw(XMMRegister dst, Address src, int vector_len) { Assembler::vpbroadcastw(dst, src, vector_len); } 1222 1223 void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1224 1225 void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1226 1227 void vpmovzxbw(XMMRegister dst, Address src, int vector_len); 1228 void vpmovzxbw(XMMRegister dst, XMMRegister src, int vector_len) { Assembler::vpmovzxbw(dst, src, vector_len); } 1229 1230 void vpmovmskb(Register dst, XMMRegister src); 1231 1232 void vpmullw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1233 void vpmullw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1234 1235 void vpsubb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1236 void vpsubb(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1237 1238 void vpsubw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1239 void vpsubw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1240 1241 void vpsraw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1242 void vpsraw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1243 1244 void vpsrlw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1245 void vpsrlw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1246 1247 void vpsllw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1248 void vpsllw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1249 1250 void vptest(XMMRegister dst, XMMRegister src); 1251 1252 void punpcklbw(XMMRegister dst, XMMRegister src); 1253 void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); } 1254 1255 void pshufd(XMMRegister dst, Address src, int mode); 1256 void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); } 1257 1258 void pshuflw(XMMRegister dst, XMMRegister src, int mode); 1259 void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); } 1260 1261 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); } 1262 void vandpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); } 1263 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len); 1264 1265 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); } 1266 void vandps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); } 1267 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len); 1268 1269 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); } 1270 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); } 1271 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1272 1273 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivss(dst, nds, src); } 1274 void vdivss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivss(dst, nds, src); } 1275 void vdivss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1276 1277 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulsd(dst, nds, src); } 1278 void vmulsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulsd(dst, nds, src); } 1279 void vmulsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1280 1281 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulss(dst, nds, src); } 1282 void vmulss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulss(dst, nds, src); } 1283 void vmulss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1284 1285 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubsd(dst, nds, src); } 1286 void vsubsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubsd(dst, nds, src); } 1287 void vsubsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1288 1289 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubss(dst, nds, src); } 1290 void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } 1291 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1292 1293 void vnegatess(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1294 void vnegatesd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1295 1296 // AVX Vector instructions 1297 1298 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); } 1299 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); } 1300 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len); 1301 1302 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); } 1303 void vxorps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); } 1304 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len); 1305 1306 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { 1307 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2 1308 Assembler::vpxor(dst, nds, src, vector_len); 1309 else 1310 Assembler::vxorpd(dst, nds, src, vector_len); 1311 } 1312 void vpxor(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { 1313 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2 1314 Assembler::vpxor(dst, nds, src, vector_len); 1315 else 1316 Assembler::vxorpd(dst, nds, src, vector_len); 1317 } 1318 1319 // Simple version for AVX2 256bit vectors 1320 void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); } 1321 void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); } 1322 1323 void vinserti128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8) { 1324 if (UseAVX > 2) { 1325 Assembler::vinserti32x4(dst, dst, src, imm8); 1326 } else if (UseAVX > 1) { 1327 // vinserti128 is available only in AVX2 1328 Assembler::vinserti128(dst, nds, src, imm8); 1329 } else { 1330 Assembler::vinsertf128(dst, nds, src, imm8); 1331 } 1332 } 1333 1334 void vinserti128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8) { 1335 if (UseAVX > 2) { 1336 Assembler::vinserti32x4(dst, dst, src, imm8); 1337 } else if (UseAVX > 1) { | 860 861 // Emit the CompiledIC call idiom 862 void ic_call(address entry, jint method_index = 0); 863 864 // Jumps 865 866 // NOTE: these jumps tranfer to the effective address of dst NOT 867 // the address contained by dst. This is because this is more natural 868 // for jumps/calls. 869 void jump(AddressLiteral dst); 870 void jump_cc(Condition cc, AddressLiteral dst); 871 872 // 32bit can do a case table jump in one instruction but we no longer allow the base 873 // to be installed in the Address class. This jump will tranfers to the address 874 // contained in the location described by entry (not the address of entry) 875 void jump(ArrayAddress entry); 876 877 // Floating 878 879 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } 880 void andpd(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1); 881 void andpd(XMMRegister dst, XMMRegister src) { Assembler::andpd(dst, src); } 882 883 void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); } 884 void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); } 885 void andps(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1); 886 887 void comiss(XMMRegister dst, XMMRegister src) { Assembler::comiss(dst, src); } 888 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } 889 void comiss(XMMRegister dst, AddressLiteral src); 890 891 void comisd(XMMRegister dst, XMMRegister src) { Assembler::comisd(dst, src); } 892 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } 893 void comisd(XMMRegister dst, AddressLiteral src); 894 895 void fadd_s(Address src) { Assembler::fadd_s(src); } 896 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } 897 898 void fldcw(Address src) { Assembler::fldcw(src); } 899 void fldcw(AddressLiteral src); 900 901 void fld_s(int index) { Assembler::fld_s(index); } 902 void fld_s(Address src) { Assembler::fld_s(src); } 903 void fld_s(AddressLiteral src); 904 905 void fld_d(Address src) { Assembler::fld_d(src); } 1049 1050 void libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, 1051 Register esi, Register edi, Register ebp, Register esp); 1052 1053 void libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, 1054 Register edx, Register ebx, Register esi, Register edi, 1055 Register ebp, Register esp); 1056 1057 void fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 1058 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 1059 Register rax, Register rcx, Register rdx, Register tmp); 1060 #endif 1061 1062 void increase_precision(); 1063 void restore_precision(); 1064 1065 private: 1066 1067 // these are private because users should be doing movflt/movdbl 1068 1069 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } 1070 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } 1071 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } 1072 void movss(XMMRegister dst, AddressLiteral src); 1073 1074 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } 1075 void movlpd(XMMRegister dst, AddressLiteral src); 1076 1077 public: 1078 1079 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } 1080 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } 1081 void addsd(XMMRegister dst, AddressLiteral src); 1082 1083 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } 1084 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } 1085 void addss(XMMRegister dst, AddressLiteral src); 1086 1087 void addpd(XMMRegister dst, XMMRegister src) { Assembler::addpd(dst, src); } 1088 void addpd(XMMRegister dst, Address src) { Assembler::addpd(dst, src); } 1089 void addpd(XMMRegister dst, AddressLiteral src); 1090 1091 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } 1092 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } 1093 void divsd(XMMRegister dst, AddressLiteral src); 1094 1095 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } 1096 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } 1097 void divss(XMMRegister dst, AddressLiteral src); 1098 1099 // Move Unaligned Double Quadword 1100 void movdqu(Address dst, XMMRegister src); 1101 void movdqu(XMMRegister dst, Address src); 1102 void movdqu(XMMRegister dst, XMMRegister src); 1103 void movdqu(XMMRegister dst, AddressLiteral src, Register scratchReg = rscratch1); 1104 // AVX Unaligned forms 1105 void vmovdqu(Address dst, XMMRegister src); 1106 void vmovdqu(XMMRegister dst, Address src); 1107 void vmovdqu(XMMRegister dst, XMMRegister src); 1108 void vmovdqu(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1); 1109 void evmovdquq(XMMRegister dst, Address src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1110 void evmovdquq(XMMRegister dst, XMMRegister src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1111 void evmovdquq(Address dst, XMMRegister src, int vector_len) { Assembler::evmovdquq(dst, src, vector_len); } 1112 void evmovdquq(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch); 1113 1114 // Move Aligned Double Quadword 1115 void movdqa(XMMRegister dst, Address src) { Assembler::movdqa(dst, src); } 1116 void movdqa(XMMRegister dst, XMMRegister src) { Assembler::movdqa(dst, src); } 1117 void movdqa(XMMRegister dst, AddressLiteral src); 1118 1119 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } 1120 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } 1121 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } 1122 void movsd(XMMRegister dst, AddressLiteral src); 1123 1124 void mulpd(XMMRegister dst, XMMRegister src) { Assembler::mulpd(dst, src); } 1125 void mulpd(XMMRegister dst, Address src) { Assembler::mulpd(dst, src); } 1126 void mulpd(XMMRegister dst, AddressLiteral src); 1127 1128 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } 1166 1167 void subsd(XMMRegister dst, XMMRegister src) { Assembler::subsd(dst, src); } 1168 void subsd(XMMRegister dst, Address src) { Assembler::subsd(dst, src); } 1169 void subsd(XMMRegister dst, AddressLiteral src); 1170 1171 void subss(XMMRegister dst, XMMRegister src) { Assembler::subss(dst, src); } 1172 void subss(XMMRegister dst, Address src) { Assembler::subss(dst, src); } 1173 void subss(XMMRegister dst, AddressLiteral src); 1174 1175 void ucomiss(XMMRegister dst, XMMRegister src) { Assembler::ucomiss(dst, src); } 1176 void ucomiss(XMMRegister dst, Address src) { Assembler::ucomiss(dst, src); } 1177 void ucomiss(XMMRegister dst, AddressLiteral src); 1178 1179 void ucomisd(XMMRegister dst, XMMRegister src) { Assembler::ucomisd(dst, src); } 1180 void ucomisd(XMMRegister dst, Address src) { Assembler::ucomisd(dst, src); } 1181 void ucomisd(XMMRegister dst, AddressLiteral src); 1182 1183 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values 1184 void xorpd(XMMRegister dst, XMMRegister src); 1185 void xorpd(XMMRegister dst, Address src) { Assembler::xorpd(dst, src); } 1186 void xorpd(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1); 1187 1188 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values 1189 void xorps(XMMRegister dst, XMMRegister src); 1190 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } 1191 void xorps(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1); 1192 1193 // Shuffle Bytes 1194 void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); } 1195 void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); } 1196 void pshufb(XMMRegister dst, AddressLiteral src); 1197 // AVX 3-operands instructions 1198 1199 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); } 1200 void vaddsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddsd(dst, nds, src); } 1201 void vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1202 1203 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); } 1204 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); } 1205 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1206 1207 void vabsss(XMMRegister dst, XMMRegister nds, XMMRegister src, AddressLiteral negate_field, int vector_len); 1208 void vabssd(XMMRegister dst, XMMRegister nds, XMMRegister src, AddressLiteral negate_field, int vector_len); 1209 1210 void vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1211 void vpaddb(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1212 1213 void vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1214 void vpaddw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1215 1216 void vpand(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vpand(dst, nds, src, vector_len); } 1217 void vpand(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vpand(dst, nds, src, vector_len); } 1218 void vpand(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1219 1220 void vpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len); 1221 void vpbroadcastw(XMMRegister dst, Address src, int vector_len) { Assembler::vpbroadcastw(dst, src, vector_len); } 1222 1223 void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1224 1225 void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1226 1227 void vpmovzxbw(XMMRegister dst, Address src, int vector_len); 1228 void vpmovzxbw(XMMRegister dst, XMMRegister src, int vector_len) { Assembler::vpmovzxbw(dst, src, vector_len); } 1229 1230 void vpmovmskb(Register dst, XMMRegister src); 1231 1232 void vpmullw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1233 void vpmullw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1234 1235 void vpsubb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1236 void vpsubb(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1237 1238 void vpsubw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); 1239 void vpsubw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); 1240 1241 void vpsraw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1242 void vpsraw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1243 1244 void evpsraq(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1245 void evpsraq(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1246 1247 void vpsrlw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1248 void vpsrlw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1249 1250 void vpsllw(XMMRegister dst, XMMRegister nds, XMMRegister shift, int vector_len); 1251 void vpsllw(XMMRegister dst, XMMRegister nds, int shift, int vector_len); 1252 1253 void vptest(XMMRegister dst, XMMRegister src); 1254 1255 void punpcklbw(XMMRegister dst, XMMRegister src); 1256 void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); } 1257 1258 void pshufd(XMMRegister dst, Address src, int mode); 1259 void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); } 1260 1261 void pshuflw(XMMRegister dst, XMMRegister src, int mode); 1262 void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); } 1263 1264 void vandpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); } 1265 void vandpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandpd(dst, nds, src, vector_len); } 1266 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1267 1268 void vandps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); } 1269 void vandps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vandps(dst, nds, src, vector_len); } 1270 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1271 1272 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); } 1273 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); } 1274 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1275 1276 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivss(dst, nds, src); } 1277 void vdivss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivss(dst, nds, src); } 1278 void vdivss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1279 1280 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulsd(dst, nds, src); } 1281 void vmulsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulsd(dst, nds, src); } 1282 void vmulsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1283 1284 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulss(dst, nds, src); } 1285 void vmulss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulss(dst, nds, src); } 1286 void vmulss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1287 1288 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubsd(dst, nds, src); } 1289 void vsubsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubsd(dst, nds, src); } 1290 void vsubsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1291 1292 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubss(dst, nds, src); } 1293 void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } 1294 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1295 1296 void vnegatess(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1297 void vnegatesd(XMMRegister dst, XMMRegister nds, AddressLiteral src); 1298 1299 // AVX Vector instructions 1300 1301 void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); } 1302 void vxorpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorpd(dst, nds, src, vector_len); } 1303 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1304 1305 void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); } 1306 void vxorps(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { Assembler::vxorps(dst, nds, src, vector_len); } 1307 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1308 1309 void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { 1310 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2 1311 Assembler::vpxor(dst, nds, src, vector_len); 1312 else 1313 Assembler::vxorpd(dst, nds, src, vector_len); 1314 } 1315 void vpxor(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { 1316 if (UseAVX > 1 || (vector_len < 1)) // vpxor 256 bit is available only in AVX2 1317 Assembler::vpxor(dst, nds, src, vector_len); 1318 else 1319 Assembler::vxorpd(dst, nds, src, vector_len); 1320 } 1321 void vpxor(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1); 1322 1323 // Simple version for AVX2 256bit vectors 1324 void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); } 1325 void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); } 1326 1327 void vinserti128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8) { 1328 if (UseAVX > 2) { 1329 Assembler::vinserti32x4(dst, dst, src, imm8); 1330 } else if (UseAVX > 1) { 1331 // vinserti128 is available only in AVX2 1332 Assembler::vinserti128(dst, nds, src, imm8); 1333 } else { 1334 Assembler::vinsertf128(dst, nds, src, imm8); 1335 } 1336 } 1337 1338 void vinserti128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8) { 1339 if (UseAVX > 2) { 1340 Assembler::vinserti32x4(dst, dst, src, imm8); 1341 } else if (UseAVX > 1) { |