RFR: 8359386: Fix incorrect value for max_size of C2CodeStub when APX is used
Aleksey Shipilev
shade at openjdk.org
Fri Jun 13 09:46:30 UTC 2025
On Thu, 12 Jun 2025 19:41:01 GMT, Srinivas Vamsi Parasa <sparasa at openjdk.org> wrote:
> The goal of this PR is to fix the value of max_size of the C2CodeStub hardcoded in the C2_MacroAssembler::convertF2I() function when Intel APX instrucitons are used. Currently, max_size is hardcoded to 23 (introduced in [JDK-8306706](https://bugs.openjdk.org/browse/JDK-8306706)) . However, this value is incorrect when Intel APX instructions with extended general-purpose registers (EGPRs) are used in the code stub as using EGPRs with APX instructions leads to an increase in the instruction encoding size by additional 4 bytes.
>
> Without this fix, we see the following error for the C2 compiler tests below:
>
> compiler/vectorization/runner/ArrayTypeConvertTest.java
> compiler/intrinsics/zip/TestFpRegsABI.java
>
>
>
>
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # Internal Error (/src/hotspot/share/opto/c2_CodeStubs.cpp:50), pid=3961123, tid=3961332
> # assert(max_size >= actual_size) failed: Expected stub size (23) must be larger than or equal to actual stub size (24)
> #
> # JRE version: OpenJDK Runtime Environment (26.0) (fastdebug build 26-internal-adhoc.parasa.jdkdemotion)
> # Java VM: OpenJDK 64-Bit Server VM (fastdebug 26-internal-adhoc.parasa.jdkdemotion, mixed mode, sharing, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
> # Problematic frame:
> # V [libjvm.so+0x955a77] C2CodeStubList::emit(C2_MacroAssembler&)+0x227
> #
>
>
> This PR fixes the errors in the above-mentioned tests.
src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp line 4691:
> 4689:
> 4690: // Using the APX extended general purpose registers increases the instruction encoding size by 4 bytes.
> 4691: int max_size = dst->encoding() <= 15 ? 23 : 27;
Do you want to write it in a more explicit way then?
int max_size = 23 + (UseAPX ? 4 : 0);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25787#discussion_r2144636061
More information about the hotspot-compiler-dev
mailing list