< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page
@@ -2530,12 +2530,14 @@
      vmovdqu(dst, Address(scratch_reg, 0));
    }
  }
  
  void MacroAssembler::vmovdqu(XMMRegister dst, AddressLiteral src, Register scratch_reg, int vector_len) {
-   assert(vector_len <= AVX_256bit, "AVX2 vector length");
-   if (vector_len == AVX_256bit) {
+   assert(vector_len <= AVX_512bit, "unexpected vector length");
+   if (vector_len == AVX_512bit) {
+     evmovdquq(dst, src, AVX_512bit, scratch_reg);
+   } else if (vector_len == AVX_256bit) {
      vmovdqu(dst, src, scratch_reg);
    } else {
      movdqu(dst, src, scratch_reg);
    }
  }

@@ -3143,10 +3145,19 @@
  void MacroAssembler::vpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len) {
    assert(((dst->encoding() < 16 && src->encoding() < 16) || VM_Version::supports_avx512vlbw()),"XMM register should be 0-15");
    Assembler::vpbroadcastw(dst, src, vector_len);
  }
  
+ void MacroAssembler::vpbroadcastq(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch) {
+   if (reachable(src)) {
+     Assembler::vpbroadcastq(dst, as_Address(src), vector_len);
+   } else {
+     lea(rscratch, src);
+     Assembler::vpbroadcastq(dst, Address(rscratch, 0), vector_len);
+   }
+ }
+ 
  void MacroAssembler::vbroadcastsd(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch) {
    if (reachable(src)) {
      Assembler::vbroadcastsd(dst, as_Address(src), vector_len);
    } else {
      lea(rscratch, src);
< prev index next >