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

ARM32: failed check_simd should set UsePopCountInstruction to false

    Details

    • Subcomponent:
    • Resolved In Build:
      b21
    • CPU:
      arm
    • OS:
      linux

      Backports

        Description

        TestPopCountVector.java test in fastdebug mode gives following assertion:
        # Internal Error (/home/build/jdk-jdk/src/hotspot/cpu/arm/assembler_arm_32.hpp:1030), pid=19519, tid=19533
        # assert(!VM_Version::is_initialized() || VM_Version::has_simd()) failed: simd instruction

        Problem is that VM generates vcnt (Vector Count Set Bits) instruction in spite of failed check_simd check. Correct mechanism should work like the following:
        1. VM_Version::initialize generates and calls short check_simd utility
        2. check_simd executes vcnt instruction, vcnt produces SIGILL on machines without SIMD support
        3. JVM_handle_linux_signal handles SIGILL and returns execution to the process with PC+=8 (to skip mov r0, 1)
        4. check_simd returns false and makes VM_Version know that SIMD is not supported
        5. VM_Version::initialize should set UsePopCountInstruction=false to disable further SIMD instructions usage

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  bulasevich Boris Ulasevich
                  Reporter:
                  bulasevich Boris Ulasevich
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: