RFR: 8367611: Enable vblendvp[sd] on Future ECore [v2]

Volodymyr Paprotski vpaprotski at openjdk.org
Fri Sep 19 18:59:49 UTC 2025


On Thu, 18 Sep 2025 23:28:07 GMT, Mohamed Issa <missa at openjdk.org> wrote:

>> The upcoming ECore platforms will benefit from using `vblendvps` and `vblendvpd` instructions when the destination register is the same as the source register. This change takes that situation into account.
>> 
>> The JTREG test shown below was used to verify correctness against the [OpenJDK v26-b15](https://github.com/openjdk/jdk/releases/tag/jdk-26%2B15) baseline build.
>> 
>> 1. `jtreg:test/hotspot/jtreg/compiler/intrinsics/math/TestSignumIntrinsic.java`
>
> Mohamed Issa has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use function to identify Darkmont cores instead of global flag

src/hotspot/cpu/x86/macroAssembler_x86.cpp line 2900:

> 2898: void MacroAssembler::vblendvps(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask, int vector_len, bool compute_mask, XMMRegister scratch) {
> 2899:   // WARN: Allow dst == (src1|src2), mask == scratch
> 2900:   bool use_blend_instr = VM_Version::is_intel_darkmont() && (dst == src1);

My only real comment is a nit-pick about the variable name.. `use_blend_instr` implies a range of _darkmont and above_ and  _'EnableX86CoreOpts' and 'below'_.. which is not the value of this variable (i.e. just darkmont and above). Perhaps `blend_fixed`? `blend_partly_fixed`? Or 'just' add it to the `blend_emulation`...

bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1 
                    && VM_Version::is_intel_darkmont() && (dst == src1); // partly fixed on Darkmont

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/27354#discussion_r2364153198


More information about the hotspot-dev mailing list