diff options
author | Jatin Bhateja <jatin.bhateja@intel.com> | 2024-03-02 21:30:08 +0530 |
---|---|---|
committer | Jatin Bhateja <jatin.bhateja@intel.com> | 2024-03-02 21:30:08 +0530 |
commit | 0b270d2eabf62a762a4820fefc30bf238625afb4 (patch) | |
tree | a3bac48439724a0c7236d3acd228058934546aba | |
parent | b971fbb76f9d38fef341f927752d2a26daecf91a (diff) |
Review resolutions.pr/16354
4 files changed, 16 insertions, 15 deletions
diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index f6d11f07d09..1ce12bbd48d 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -1668,26 +1668,27 @@ void C2_MacroAssembler::vgather_subword(BasicType elem_ty, XMMRegister dst, Register mask_idx, Register length, int vector_len, int vlen_enc) { Label GATHER8_LOOP; - XMMRegister iota = xtmp1; - XMMRegister two_vec = xtmp2; - assert(is_subword_type(elem_ty), ""); movl(length, vector_len); - vpxor(xtmp1, xtmp1, xtmp1, vlen_enc); - vpxor(dst, dst, dst, vlen_enc); + vpxor(xtmp1, xtmp1, xtmp1, vlen_enc); // xtmp1 = {0, ...} + vpxor(dst, dst, dst, vlen_enc); // dst = {0, ...} vallones(xtmp2, vlen_enc); vpsubd(xtmp2, xtmp1, xtmp2, vlen_enc); - vpslld(two_vec, xtmp2, 1, vlen_enc); - load_iota_indices(iota, vector_len * type2aelembytes(elem_ty), T_INT); + vpslld(xtmp2, xtmp2, 1, vlen_enc); // xtmp2 = {2, 2, ...} + load_iota_indices(xtmp1, vector_len * type2aelembytes(elem_ty), T_INT); // xtmp1 = {0, 1, 2, ...} bind(GATHER8_LOOP); + // TMP_VEC_64(temp_dst) = PICK_SUB_WORDS_FROM_GATHER_INDICES if (mask == noreg) { vgather8b_offset(elem_ty, temp_dst, base, idx_base, offset, rtmp, vlen_enc); } else { LP64_ONLY(vgather8b_masked_offset(elem_ty, temp_dst, base, idx_base, offset, mask, mask_idx, rtmp, vlen_enc)); } - vpermd(temp_dst, iota, temp_dst, vlen_enc == Assembler::AVX_512bit ? vlen_enc : Assembler::AVX_256bit); - vpsubd(iota, iota, two_vec, vlen_enc); + // TEMP_PERM_VEC(temp_dst) = PERMUTE TMP_VEC_64(temp_dst) PERM_INDEX(xtmp1) + vpermd(temp_dst, xtmp1, temp_dst, vlen_enc == Assembler::AVX_512bit ? vlen_enc : Assembler::AVX_256bit); + // PERM_INDEX(xtmp1) = PERM_INDEX(xtmp1) - TWO_VEC(xtmp2) + vpsubd(xtmp1, xtmp1, xtmp2, vlen_enc); + // DST_VEC = DST_VEC OR TEMP_PERM_VEC vpor(dst, dst, temp_dst, vlen_enc); addptr(idx_base, 32 >> (type2aelembytes(elem_ty) - 1)); subl(length, 8 >> (type2aelembytes(elem_ty) - 1)); diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java index 57f3d7d0334..cf53cd58476 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java @@ -3054,9 +3054,9 @@ public abstract class ByteVector extends AbstractVector<Byte> { Objects.requireNonNull(indexMap); Class<? extends ByteVector> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { @@ -3810,9 +3810,9 @@ public abstract class ByteVector extends AbstractVector<Byte> { m.check(vsp); Class<? extends ByteVector> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java index 6f11c5a7a7d..39276894b9f 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java @@ -3055,9 +3055,9 @@ public abstract class ShortVector extends AbstractVector<Short> { Objects.requireNonNull(indexMap); Class<? extends ShortVector> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { @@ -3796,9 +3796,9 @@ public abstract class ShortVector extends AbstractVector<Short> { m.check(vsp); Class<? extends ShortVector> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template index 6306096265d..22ab291ad2b 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template @@ -3627,9 +3627,9 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { Objects.requireNonNull(indexMap); Class<? extends $abstractvectortype$> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { @@ -4827,9 +4827,9 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { m.check(vsp); Class<? extends $abstractvectortype$> vectorType = vsp.vectorType(); - VectorSpecies<Integer> lsp = null; // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { lsp = IntVector.SPECIES_PREFERRED; } else { |