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

ARM32: failed check_simd should set UsePopCountInstruction to false

XMLWordPrintable

    • b21
    • arm
    • linux

        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

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

                Created:
                Updated:
                Resolved: