RFR: 8358592: Assert in Assembler::ptest due to missing SSE42 support [v5]
Vladimir Kozlov
kvn at openjdk.org
Mon Jul 14 18:21:41 UTC 2025
On Mon, 14 Jul 2025 13:35:02 GMT, Guanqiang Han <duke at openjdk.org> wrote:
>> Setting "-XX:UseSSE=1" in command line prevents the code from entering the block shown below, which causes UseSSE42Intrinsics to not be correctly set. Because supports_sse3() return false.
>> 
>> in addition , setting "-XX:+UseSSE42Intrinsics" in command line set UseVectorizedMismatchIntrinsic to True shown below.
>> 
>> The above code causes the ptest instruction to be invoked.
>> The assertion "assert(VM_Version::supports_sse4_1() || VM_Version::supports_avx(), "")" in ptest was triggered and caused the crash because of the following reason:
>> Setting "-XX:UseSSE=1" in command line cause "CPU_SSE4_1" was cleared and cause "VM_Version::supports_sse4_1()" return false ,related code as below:
>> 
>> Setting "-XX:UseSSE=1" in command line cause "UseAVX=0" and cause "VM_Version::supports_avx()" return false ,related code as below:
>> 
>> all of these above cause this issue.
>> i fix this issue by correcting UseSSE42Intrinsics to false when "UseSSE" in command line was set to 1, so that UseVectorizedMismatchIntrinsic will be set false and ptest was not triggered.
>
> Guanqiang Han has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:
>
> - Update full name
> - Merge remote-tracking branch 'upstream/master' into 8358592
> - update regression test
> - Update Test8358592.java
>
> run on x86_64
> - add regression test for JDK-8358592
> - Merge remote-tracking branch 'upstream/master' into 8358592
> - 8358592: Assert in Assembler::ptest due to missing SSE42 support
>
> Setting "-XX:UseSSE=1" in command line prevents the code from entering the block which causes UseSSE42Intrinsics to not be correctly set.
Okay, forget about other flags. My proposal regarding SSE4_2 for re-writing was because we should not have such sets under specific CPU's families. SSE4_2 features bit set regardless that: https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/vm_version_x86.cpp#L2930
We also check `supports_sse4_2` outside CPUs specific codes for `UseCRC32CIntrinsics` for example.
Originally only Intel supported, that is why it was placed there. And then code was copied for AMD. We don't need to do it separately.
An other reason to put such code under specific CPU if on other cpus it is slow/broken. sse4_2 is very old, I think we should not worry about that.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26151#issuecomment-3070533726
More information about the hotspot-dev
mailing list