Skip to content

Commit 8969069

Browse files
Paul SandozSandhya Viswanathan
Paul Sandoz
and
Sandhya Viswanathan
committedNov 30, 2020
8256995: [vector] Improve broadcast operations
Co-authored-by: Paul Sandoz <psandoz@openjdk.org> Co-authored-by: Sandhya Viswanathan <sviswanathan@openjdk.org> Reviewed-by: kvn, vlivanov
1 parent 6eb25d7 commit 8969069

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed
 

‎src/hotspot/cpu/x86/x86.ad

+17
Original file line numberDiff line numberDiff line change
@@ -3726,6 +3726,10 @@ instruct ReplB_reg(vec dst, rRegI src) %{
37263726
assert(VM_Version::supports_avx512bw(), "required"); // 512-bit byte vectors assume AVX512BW
37273727
int vlen_enc = vector_length_encoding(this);
37283728
__ evpbroadcastb($dst$$XMMRegister, $src$$Register, vlen_enc);
3729+
} else if (VM_Version::supports_avx2()) {
3730+
int vlen_enc = vector_length_encoding(this);
3731+
__ movdl($dst$$XMMRegister, $src$$Register);
3732+
__ vpbroadcastb($dst$$XMMRegister, $dst$$XMMRegister, vlen_enc);
37293733
} else {
37303734
__ movdl($dst$$XMMRegister, $src$$Register);
37313735
__ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
@@ -3805,6 +3809,10 @@ instruct ReplS_reg(vec dst, rRegI src) %{
38053809
assert(VM_Version::supports_avx512bw(), "required"); // 512-bit short vectors assume AVX512BW
38063810
int vlen_enc = vector_length_encoding(this);
38073811
__ evpbroadcastw($dst$$XMMRegister, $src$$Register, vlen_enc);
3812+
} else if (VM_Version::supports_avx2()) {
3813+
int vlen_enc = vector_length_encoding(this);
3814+
__ movdl($dst$$XMMRegister, $src$$Register);
3815+
__ vpbroadcastw($dst$$XMMRegister, $dst$$XMMRegister, vlen_enc);
38083816
} else {
38093817
__ movdl($dst$$XMMRegister, $src$$Register);
38103818
__ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
@@ -3880,6 +3888,10 @@ instruct ReplI_reg(vec dst, rRegI src) %{
38803888
if (vlen == 16 || VM_Version::supports_avx512vl()) { // AVX512VL for <512bit operands
38813889
int vlen_enc = vector_length_encoding(this);
38823890
__ evpbroadcastd($dst$$XMMRegister, $src$$Register, vlen_enc);
3891+
} else if (VM_Version::supports_avx2()) {
3892+
int vlen_enc = vector_length_encoding(this);
3893+
__ movdl($dst$$XMMRegister, $src$$Register);
3894+
__ vpbroadcastd($dst$$XMMRegister, $dst$$XMMRegister, vlen_enc);
38833895
} else {
38843896
__ movdl($dst$$XMMRegister, $src$$Register);
38853897
__ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
@@ -3975,6 +3987,11 @@ instruct ReplL_reg(vec dst, rRegL src) %{
39753987
} else if (vlen == 8 || VM_Version::supports_avx512vl()) { // AVX512VL for <512bit operands
39763988
int vlen_enc = vector_length_encoding(this);
39773989
__ evpbroadcastq($dst$$XMMRegister, $src$$Register, vlen_enc);
3990+
} else if (VM_Version::supports_avx2()) {
3991+
assert(vlen == 4, "sanity");
3992+
int vlen_enc = vector_length_encoding(this);
3993+
__ movdq($dst$$XMMRegister, $src$$Register);
3994+
__ vpbroadcastq($dst$$XMMRegister, $dst$$XMMRegister, vlen_enc);
39783995
} else {
39793996
assert(vlen == 4, "sanity");
39803997
__ movdq($dst$$XMMRegister, $src$$Register);

‎src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ static boolean doBinTest(int cond, double a, double b) {
400400
/*package-private*/
401401
@ForceInline
402402
static long toBits(double e) {
403-
return Double.doubleToLongBits(e);
403+
return Double.doubleToRawLongBits(e);
404404
}
405405

406406
/*package-private*/

‎src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ static boolean doBinTest(int cond, float a, float b) {
400400
/*package-private*/
401401
@ForceInline
402402
static long toBits(float e) {
403-
return Float.floatToIntBits(e);
403+
return Float.floatToRawIntBits(e);
404404
}
405405

406406
/*package-private*/

‎src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template

+1-1
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> {
404404
/*package-private*/
405405
@ForceInline
406406
static long toBits($type$ e) {
407-
return {#if[FP]? $Type$.$type$To$Bitstype$Bits(e): e};
407+
return {#if[FP]? $Type$.$type$ToRaw$Bitstype$Bits(e): e};
408408
}
409409

410410
/*package-private*/

0 commit comments

Comments
 (0)
Please sign in to comment.