Skip to content

Commit f68cba3

Browse files
Mohamed IssaSandhya Viswanathan
authored andcommitted
8367611: Enable vblendvp[sd] on Future ECore
Reviewed-by: mhaessig, sviswanathan, vpaprotski
1 parent f1ee1b4 commit f68cba3

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2897,7 +2897,8 @@ void MacroAssembler::vbroadcastss(XMMRegister dst, AddressLiteral src, int vecto
28972897
// vblendvps(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg)
28982898
void MacroAssembler::vblendvps(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask, int vector_len, bool compute_mask, XMMRegister scratch) {
28992899
// WARN: Allow dst == (src1|src2), mask == scratch
2900-
bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1;
2900+
bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1 &&
2901+
!(VM_Version::is_intel_darkmont() && (dst == src1)); // partially fixed on Darkmont
29012902
bool scratch_available = scratch != xnoreg && scratch != src1 && scratch != src2 && scratch != dst;
29022903
bool dst_available = dst != mask && (dst != src1 || dst != src2);
29032904
if (blend_emulation && scratch_available && dst_available) {
@@ -2921,7 +2922,8 @@ void MacroAssembler::vblendvps(XMMRegister dst, XMMRegister src1, XMMRegister sr
29212922
// vblendvpd(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg)
29222923
void MacroAssembler::vblendvpd(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask, int vector_len, bool compute_mask, XMMRegister scratch) {
29232924
// WARN: Allow dst == (src1|src2), mask == scratch
2924-
bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1;
2925+
bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1 &&
2926+
!(VM_Version::is_intel_darkmont() && (dst == src1)); // partially fixed on Darkmont
29252927
bool scratch_available = scratch != xnoreg && scratch != src1 && scratch != src2 && scratch != dst && (!compute_mask || scratch != mask);
29262928
bool dst_available = dst != mask && (dst != src1 || dst != src2);
29272929
if (blend_emulation && scratch_available && dst_available) {

src/hotspot/cpu/x86/vm_version_x86.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,6 +2093,10 @@ bool VM_Version::is_intel_cascade_lake() {
20932093
return is_intel_skylake() && _stepping >= 5;
20942094
}
20952095

2096+
bool VM_Version::is_intel_darkmont() {
2097+
return is_intel() && is_intel_server_family() && (_model == 0xCC || _model == 0xDD);
2098+
}
2099+
20962100
// avx3_threshold() sets the threshold at which 64-byte instructions are used
20972101
// for implementing the array copy and clear operations.
20982102
// The Intel platforms that supports the serialize instruction

src/hotspot/cpu/x86/vm_version_x86.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,8 @@ class VM_Version : public Abstract_VM_Version {
938938

939939
static bool is_intel_cascade_lake();
940940

941+
static bool is_intel_darkmont();
942+
941943
static int avx3_threshold();
942944

943945
static bool is_intel_tsc_synched_at_init();

0 commit comments

Comments
 (0)