RFR: 8358592: Assert in Assembler::ptest due to missing SSE42 support [v6]
Vladimir Kozlov
kvn at openjdk.org
Tue Jul 15 16:56:44 UTC 2025
On Tue, 15 Jul 2025 06:26:09 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 nine additional commits since the last revision:
>
> - move UseSSE42Intrinsics check outside of the CPU-specific sections
> - Merge remote-tracking branch 'upstream/master' into 8358592
> - 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.
Looks good
src/hotspot/cpu/x86/vm_version_x86.cpp line 1637:
> 1635: }
> 1636: } else {
> 1637: if (UseSSE42Intrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
Ha, there was bug in all these checks: checking `UseAESIntrinsics` instead of `UseSSE42Intrinsics`!
Thank you for fixing it in your changes
-------------
Marked as reviewed by kvn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/26151#pullrequestreview-3021263315
PR Review Comment: https://git.openjdk.org/jdk/pull/26151#discussion_r2208025830
More information about the hotspot-dev
mailing list