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.
>> ![图片1](https://github.com/user-attachments/assets/d3cdb1fe-f0e0-41dc-98c9-4427eaffdb0e)
>> in addition , setting "-XX:+UseSSE42Intrinsics" in command line set UseVectorizedMismatchIntrinsic to True shown below.
>> ![图片2](https://github.com/user-attachments/assets/bbe623a3-453a-483d-b34c-1cdb394f2d4e)
>> 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:
>> ![图片3](https://github.com/user-attachments/assets/e9a8a690-dd4d-4216-b09f-be8439a9a73b)
>> Setting "-XX:UseSSE=1" in command line  cause "UseAVX=0" and cause "VM_Version::supports_avx()" return false ,related code as below:
>> ![image](https://github.com/user-attachments/assets/6d9e770b-0a7a-43cd-a4bc-d15247f6478e)
>> 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