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

ARM32: failed check_simd should set UsePopCountInstruction to false

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: 12
    • Fix Version/s: 12
    • Component/s: hotspot
    • Labels:
    • Subcomponent:
    • Resolved In Build:
      b21
    • CPU:
      arm
    • OS:
      linux

      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

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: