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