@@ -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)
28982898void 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)
29222923void 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) {
0 commit comments