8269528: VectorAPI Long512VectorTest fails on X86 KNL target

Reviewed-by: kvn, sviswanathan
This commit is contained in:
Jatin Bhateja 2021-06-30 02:33:01 +00:00
parent a661686e1e
commit 90eb1189ae
3 changed files with 22 additions and 5 deletions

View File

@ -1462,7 +1462,7 @@ void C2_MacroAssembler::evscatter(BasicType typ, Register base, XMMRegister idx,
}
}
void C2_MacroAssembler::load_vector_mask(XMMRegister dst, XMMRegister src, int vlen_in_bytes, BasicType elem_bt) {
void C2_MacroAssembler::load_vector_mask(XMMRegister dst, XMMRegister src, int vlen_in_bytes, BasicType elem_bt, bool is_legacy) {
if (vlen_in_bytes <= 16) {
pxor (dst, dst);
psubb(dst, src);
@ -1477,10 +1477,12 @@ void C2_MacroAssembler::load_vector_mask(XMMRegister dst, XMMRegister src, int v
default: assert(false, "%s", type2name(elem_bt));
}
} else {
assert(!is_legacy || !is_subword_type(elem_bt) || vlen_in_bytes < 64, "");
int vlen_enc = vector_length_encoding(vlen_in_bytes);
vpxor (dst, dst, dst, vlen_enc);
vpsubb(dst, dst, src, vlen_enc);
vpsubb(dst, dst, src, is_legacy ? AVX_256bit : vlen_enc);
switch (elem_bt) {
case T_BYTE: /* nothing to do */ break;
case T_SHORT: vpmovsxbw(dst, dst, vlen_enc); break;

View File

@ -142,7 +142,7 @@ public:
void evpcmp(BasicType typ, KRegister kdmask, KRegister ksmask, XMMRegister src1, XMMRegister src2, int comparison, int vector_len);
void evpblend(BasicType typ, XMMRegister dst, KRegister kmask, XMMRegister src1, XMMRegister src2, bool merge, int vector_len);
void load_vector_mask(XMMRegister dst, XMMRegister src, int vlen_in_bytes, BasicType elem_bt);
void load_vector_mask(XMMRegister dst, XMMRegister src, int vlen_in_bytes, BasicType elem_bt, bool is_legacy);
void load_iota_indices(XMMRegister dst, Register scratch, int vlen_in_bytes);
// vector compare

View File

@ -7454,7 +7454,8 @@ instruct cmpvptest_anytrue_evex(rFlagsReg cr, legVec src1, legVec src2, immI_0 z
//------------------------------------- LoadMask --------------------------------------------
instruct loadMask(vec dst, vec src) %{
instruct loadMask(legVec dst, legVec src) %{
predicate(!VM_Version::supports_avx512vlbw());
match(Set dst (VectorLoadMask src));
effect(TEMP dst);
format %{ "vector_loadmask_byte $dst,$src\n\t" %}
@ -7462,7 +7463,21 @@ instruct loadMask(vec dst, vec src) %{
int vlen_in_bytes = vector_length_in_bytes(this);
BasicType elem_bt = vector_element_basic_type(this);
__ load_vector_mask($dst$$XMMRegister, $src$$XMMRegister, vlen_in_bytes, elem_bt);
__ load_vector_mask($dst$$XMMRegister, $src$$XMMRegister, vlen_in_bytes, elem_bt, true);
%}
ins_pipe( pipe_slow );
%}
instruct loadMask_evex(vec dst, vec src) %{
predicate(VM_Version::supports_avx512vlbw());
match(Set dst (VectorLoadMask src));
effect(TEMP dst);
format %{ "vector_loadmask_byte $dst,$src\n\t" %}
ins_encode %{
int vlen_in_bytes = vector_length_in_bytes(this);
BasicType elem_bt = vector_element_basic_type(this);
__ load_vector_mask($dst$$XMMRegister, $src$$XMMRegister, vlen_in_bytes, elem_bt, false);
%}
ins_pipe( pipe_slow );
%}