Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8359386

Fix incorrect value for max_size of C2CodeStub when APX is used

XMLWordPrintable

    • b03
    • x86
    • generic

        The value of max_size of the C2CodeStub in C2_MacroAssembler::convertF2I() function is hardcoded to 23. However, this value is incorrect when Intel APX instructions with extended general purpose registers (EGPRs) are used. Using EGPRs when APX is enabled in the JVM leads to an increase in the instruction encoding size by additional 4 bytes.

        Without this fix, we see the following errors for the C2 compiler tests below:
        compiler/vectorization/runner/ArrayTypeConvertTest.java
        compiler/intrinsics/zip/TestFpRegsABI.java

        The error message is:
        #
        # 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
        #
        #

              sparasa Srinivas Parasa
              sparasa Srinivas Parasa
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: