< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page
*** 2530,12 ***
      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) {
      vmovdqu(dst, src, scratch_reg);
    } else {
      movdqu(dst, src, scratch_reg);
    }
  }
--- 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_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 >