-
Enhancement
-
Resolution: Unresolved
-
P4
-
25
-
aarch64
After this commit - https://github.com/openjdk/jdk/commit/a49ecb26c5ff2f949851937f3bb036d7946a103e the JTREG test - hotspot/jtreg/compiler/vectorization/TestFloat16VectorOperations.java fails for some of the tests which contain constant values such as -
public void vectorAddConstInputFloat16() {
for (int i = 0; i < LEN; ++i) {
output[i] = float16ToRawShortBits(add(shortBitsToFloat16(input1[i]), FP16_CONST));
}
}
The failure that's observed -
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/ent-user/ci-scripts/jdk_build/jdk_src/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:3760), pid=2751988, tid=2752010
# guarantee(false) failed: invalid immediate
#
# JRE version: OpenJDK Runtime Environment (26.0) (fastdebug build 26-internal-git-1b3cf1166)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 26-internal-git-1b3cf1166, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
# Problematic frame:
# V [libjvm.so+0x47f128] Assembler::sve_dup(FloatRegister, Assembler::SIMD_RegVariant, int)+0x128
#
# Core dump will be written. Default location: /tmp/core.2751988
This is because sve_dup instruction does not accept 16-bit immediates. The fix involves removing that part of the code.
public void vectorAddConstInputFloat16() {
for (int i = 0; i < LEN; ++i) {
output[i] = float16ToRawShortBits(add(shortBitsToFloat16(input1[i]), FP16_CONST));
}
}
The failure that's observed -
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/ent-user/ci-scripts/jdk_build/jdk_src/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:3760), pid=2751988, tid=2752010
# guarantee(false) failed: invalid immediate
#
# JRE version: OpenJDK Runtime Environment (26.0) (fastdebug build 26-internal-git-1b3cf1166)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 26-internal-git-1b3cf1166, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
# Problematic frame:
# V [libjvm.so+0x47f128] Assembler::sve_dup(FloatRegister, Assembler::SIMD_RegVariant, int)+0x128
#
# Core dump will be written. Default location: /tmp/core.2751988
This is because sve_dup instruction does not accept 16-bit immediates. The fix involves removing that part of the code.