Skip to content
This repository has been archived by the owner on Sep 2, 2022. It is now read-only.
/ jdk17 Public archive

Commit

Permalink
8269528: VectorAPI Long512VectorTest fails on X86 KNL target
Browse files Browse the repository at this point in the history
Reviewed-by: kvn, sviswanathan
  • Loading branch information
Jatin Bhateja committed Jun 30, 2021
1 parent a661686 commit 90eb118
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 5 deletions.
6 changes: 4 additions & 2 deletions src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
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
Expand Down
19 changes: 17 additions & 2 deletions src/hotspot/cpu/x86/x86.ad
Original file line number Diff line number Diff line change
Expand Up @@ -7454,15 +7454,30 @@ 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" %}
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, 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);
__ load_vector_mask($dst$$XMMRegister, $src$$XMMRegister, vlen_in_bytes, elem_bt, false);
%}
ins_pipe( pipe_slow );
%}
Expand Down

1 comment on commit 90eb118

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.