!52 update LoongArch64 port to 21.0.4.7

From: @panxuefeng-loongson 
Reviewed-by: @kuenking111 
Signed-off-by: @kuenking111
This commit is contained in:
openeuler-ci-bot 2024-11-01 01:26:57 +00:00 committed by Gitee
commit d10fc7f889
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 219 additions and 237 deletions

View File

@ -23376,10 +23376,10 @@ index 00000000000..7a50810acda
+%}
diff --git a/src/hotspot/cpu/loongarch/globalDefinitions_loongarch.hpp b/src/hotspot/cpu/loongarch/globalDefinitions_loongarch.hpp
new file mode 100644
index 00000000000..441882dcaa0
index 00000000000..2306c5bc6d1
--- /dev/null
+++ b/src/hotspot/cpu/loongarch/globalDefinitions_loongarch.hpp
@@ -0,0 +1,57 @@
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved.
@ -23411,6 +23411,7 @@ index 00000000000..441882dcaa0
+const int BytesPerInstWord = 4;
+
+const int StackAlignmentInBytes = (2*wordSize);
+const size_t pd_segfault_address = 1024;
+
+// Indicates whether the C calling conventions require that
+// 32-bit integer argument values are properly extended to 64 bits.
@ -42836,10 +42837,10 @@ index 00000000000..366df18eb9c
+
diff --git a/src/hotspot/cpu/loongarch/macroAssembler_loongarch.cpp b/src/hotspot/cpu/loongarch/macroAssembler_loongarch.cpp
new file mode 100644
index 00000000000..e1c033e7085
index 00000000000..e2f69cea31b
--- /dev/null
+++ b/src/hotspot/cpu/loongarch/macroAssembler_loongarch.cpp
@@ -0,0 +1,4238 @@
@@ -0,0 +1,4242 @@
+/*
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2023, Loongson Technology. All rights reserved.
@ -46164,12 +46165,16 @@ index 00000000000..e1c033e7085
+ address prev = pc() - NativeInstruction::sync_instruction_size;
+ address last = code()->last_insn();
+ if (last != nullptr && ((NativeInstruction*)last)->is_sync() && prev == last) {
+ code()->set_last_insn(nullptr);
+ NativeMembar *membar = (NativeMembar*)prev;
+#ifndef PRODUCT
+ char buf[50];
+ snprintf(buf, sizeof(buf), "merged membar 0x%x 0x%x => 0x%x",
+ (Ordering | membar->get_hint()), (Ordering | (~hint & 0xF)), (Ordering | (membar->get_hint() & (~hint & 0xF))));
+ block_comment(buf);
+#endif
+ // merged membar
+ // e.g. LoadLoad and LoadLoad|LoadStore to LoadLoad|LoadStore
+ membar->set_hint(membar->get_hint() & (~hint & 0xF));
+ block_comment("merged membar");
+ } else {
+ code()->set_last_insn(pc());
+ Assembler::membar(hint);
@ -48930,13 +48935,13 @@ index 00000000000..ea4d5a2ac4c
+}
diff --git a/src/hotspot/cpu/loongarch/macroAssembler_loongarch_trig.cpp b/src/hotspot/cpu/loongarch/macroAssembler_loongarch_trig.cpp
new file mode 100644
index 00000000000..b4a1b09b375
index 00000000000..0c31904a36b
--- /dev/null
+++ b/src/hotspot/cpu/loongarch/macroAssembler_loongarch_trig.cpp
@@ -0,0 +1,1625 @@
@@ -0,0 +1,1626 @@
+/* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Cavium. All rights reserved. (By BELLSOFT)
+ * Copyright (c) 2022, Loongson Technology. All rights reserved.
+ * Copyright (c) 2022, 2024, Loongson Technology. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
@ -49830,7 +49835,7 @@ index 00000000000..b4a1b09b375
+ b(Q_DONE);
+ bind(JX_IS_0);
+ if (UseLASX) {
+ xvfmul_d(v28, v18, v6); // f[0,1] * x[0]
+ xvfmul_d(v28, v18, v6); // f[0,3] * x[0]
+ fmul_d(v30, v19, v6); // f[4] * x[0]
+ } else {
+ vfmul_d(v28, v18, v6); // f[0,1] * x[0]
@ -50064,6 +50069,7 @@ index 00000000000..b4a1b09b375
+ st_w(tmp2, SCR2, 0);
+ addi_w(SCR1, SCR1, 24);
+ addi_w(jz, jz, 1);
+ alsl_d(SCR2, jz, iqBase, 2 - 1);
+ st_w(tmp3, SCR2, 0); // iq[jz] = (int) fw
+ b(Z_ZERO_CHECK_DONE);
+ bind(Z_IS_LESS_THAN_TWO24B);
@ -53343,13 +53349,13 @@ index 00000000000..c85ca4963f3
+#endif // CPU_LOONGARCH_RELOCINFO_LOONGARCH_HPP
diff --git a/src/hotspot/cpu/loongarch/sharedRuntime_loongarch_64.cpp b/src/hotspot/cpu/loongarch/sharedRuntime_loongarch_64.cpp
new file mode 100644
index 00000000000..930b1c18841
index 00000000000..834a1e7ffc6
--- /dev/null
+++ b/src/hotspot/cpu/loongarch/sharedRuntime_loongarch_64.cpp
@@ -0,0 +1,2975 @@
@@ -0,0 +1,2979 @@
+/*
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved.
+ * Copyright (c) 2015, 2024, Loongson Technology. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
@ -53697,7 +53703,7 @@ index 00000000000..930b1c18841
+
+ uint int_args = 0;
+ uint fp_args = 0;
+ uint stk_args = 0; // inc by 2 each time
+ uint stk_args = 0;
+
+ for (int i = 0; i < total_args_passed; i++) {
+ switch (sig_bt[i]) {
@ -53714,8 +53720,9 @@ index 00000000000..930b1c18841
+ if (int_args < Argument::n_int_register_parameters_j) {
+ regs[i].set1(INT_ArgReg[int_args++]->as_VMReg());
+ } else {
+ stk_args = align_up(stk_args, 2);
+ regs[i].set1(VMRegImpl::stack2reg(stk_args));
+ stk_args += 2;
+ stk_args += 1;
+ }
+ break;
+ case T_LONG:
@ -53727,6 +53734,7 @@ index 00000000000..930b1c18841
+ if (int_args < Argument::n_int_register_parameters_j) {
+ regs[i].set2(INT_ArgReg[int_args++]->as_VMReg());
+ } else {
+ stk_args = align_up(stk_args, 2);
+ regs[i].set2(VMRegImpl::stack2reg(stk_args));
+ stk_args += 2;
+ }
@ -53735,8 +53743,9 @@ index 00000000000..930b1c18841
+ if (fp_args < Argument::n_float_register_parameters_j) {
+ regs[i].set1(FP_ArgReg[fp_args++]->as_VMReg());
+ } else {
+ stk_args = align_up(stk_args, 2);
+ regs[i].set1(VMRegImpl::stack2reg(stk_args));
+ stk_args += 2;
+ stk_args += 1;
+ }
+ break;
+ case T_DOUBLE:
@ -53744,6 +53753,7 @@ index 00000000000..930b1c18841
+ if (fp_args < Argument::n_float_register_parameters_j) {
+ regs[i].set2(FP_ArgReg[fp_args++]->as_VMReg());
+ } else {
+ stk_args = align_up(stk_args, 2);
+ regs[i].set2(VMRegImpl::stack2reg(stk_args));
+ stk_args += 2;
+ }
@ -53754,7 +53764,7 @@ index 00000000000..930b1c18841
+ }
+ }
+
+ return align_up(stk_args, 2);
+ return stk_args;
+}
+
+// Patch the callers callsite with entry to compiled code if it exists.
@ -68846,13 +68856,13 @@ index 00000000000..7d308d998dd
+}
diff --git a/src/hotspot/cpu/loongarch/upcallLinker_loongarch_64.cpp b/src/hotspot/cpu/loongarch/upcallLinker_loongarch_64.cpp
new file mode 100644
index 00000000000..ccaa16bb6b1
index 00000000000..da902dda7a5
--- /dev/null
+++ b/src/hotspot/cpu/loongarch/upcallLinker_loongarch_64.cpp
@@ -0,0 +1,347 @@
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2020, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2021, 2023, Loongson Technology. All rights reserved.
+ * Copyright (c) 2021, 2024, Loongson Technology. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
@ -69092,9 +69102,13 @@ index 00000000000..ccaa16bb6b1
+ __ mov_metadata(Rmethod, entry);
+ __ st_d(Rmethod, TREG, in_bytes(JavaThread::callee_target_offset())); // just in case callee is deoptimized
+
+ __ push_cont_fastpath(TREG);
+
+ __ ld_d(T4, Rmethod, in_bytes(Method::from_compiled_offset()));
+ __ jalr(T4);
+
+ __ pop_cont_fastpath(TREG);
+
+ // return value shuffle
+ if (!needs_return_buffer) {
+#ifdef ASSERT
@ -70675,7 +70689,7 @@ index 00000000000..ab12021832d
+ return icache_line_size;
+}
diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp
index aa8be1d897d..f71a20207c5 100644
index 492300a37d4..b0504aff9c2 100644
--- a/src/hotspot/os/linux/os_linux.cpp
+++ b/src/hotspot/os/linux/os_linux.cpp
@@ -23,6 +23,12 @@
@ -70691,7 +70705,7 @@ index aa8be1d897d..f71a20207c5 100644
// no precompiled headers
#include "classfile/vmSymbols.hpp"
#include "code/icBuffer.hpp"
@@ -2191,6 +2197,12 @@ bool os::Linux::query_process_memory_info(os::Linux::meminfo_t* info) {
@@ -2200,6 +2206,12 @@ bool os::Linux::query_process_memory_info(os::Linux::meminfo_t* info) {
return false;
}
@ -70704,7 +70718,7 @@ index aa8be1d897d..f71a20207c5 100644
#ifdef __GLIBC__
// For Glibc, print a one-liner with the malloc tunables.
// Most important and popular is MALLOC_ARENA_MAX, but we are
@@ -2407,7 +2419,7 @@ void os::print_memory_info(outputStream* st) {
@@ -2416,7 +2428,7 @@ void os::print_memory_info(outputStream* st) {
// before "flags" so if we find a second "model name", then the
// "flags" field is considered missing.
static bool print_model_name_and_flags(outputStream* st, char* buf, size_t buflen) {
@ -70713,7 +70727,7 @@ index aa8be1d897d..f71a20207c5 100644
// Other platforms have less repetitive cpuinfo files
FILE *fp = os::fopen("/proc/cpuinfo", "r");
if (fp) {
@@ -2519,7 +2531,7 @@ void os::jfr_report_memory_info() {
@@ -2528,7 +2540,7 @@ void os::jfr_report_memory_info() {
#endif // INCLUDE_JFR
@ -70722,7 +70736,7 @@ index aa8be1d897d..f71a20207c5 100644
const char* search_string = "model name";
#elif defined(M68K)
const char* search_string = "CPU";
@@ -4490,6 +4502,44 @@ void os::Linux::numa_init() {
@@ -4480,6 +4492,44 @@ void os::Linux::numa_init() {
// If there's only one node (they start from 0) or if the process
// is bound explicitly to a single node using membind, disable NUMA
UseNUMA = false;
@ -70768,7 +70782,7 @@ index aa8be1d897d..f71a20207c5 100644
LogTarget(Info,os) log;
LogStream ls(log);
diff --git a/src/hotspot/os/linux/os_linux.hpp b/src/hotspot/os/linux/os_linux.hpp
index ace7e4ab2dd..4baf381b2f2 100644
index 029f2aa7a52..78bf68a72e9 100644
--- a/src/hotspot/os/linux/os_linux.hpp
+++ b/src/hotspot/os/linux/os_linux.hpp
@@ -22,6 +22,12 @@
@ -70784,7 +70798,7 @@ index ace7e4ab2dd..4baf381b2f2 100644
#ifndef OS_LINUX_OS_LINUX_HPP
#define OS_LINUX_OS_LINUX_HPP
@@ -193,6 +199,8 @@ class os::Linux {
@@ -195,6 +201,8 @@ class os::Linux {
// none present
@ -70794,7 +70808,7 @@ index ace7e4ab2dd..4baf381b2f2 100644
static void numa_init();
diff --git a/src/hotspot/os/linux/systemMemoryBarrier_linux.cpp b/src/hotspot/os/linux/systemMemoryBarrier_linux.cpp
index 609967128fb..d67deeda164 100644
index 51397b139d8..96269fef53d 100644
--- a/src/hotspot/os/linux/systemMemoryBarrier_linux.cpp
+++ b/src/hotspot/os/linux/systemMemoryBarrier_linux.cpp
@@ -22,6 +22,12 @@
@ -70809,9 +70823,9 @@ index 609967128fb..d67deeda164 100644
+
#include "precompiled.hpp"
#include "logging/log.hpp"
#include "runtime/os.hpp"
@@ -43,6 +49,8 @@
#define SYS_membarrier 283
#include "os_linux.hpp"
@@ -45,6 +51,8 @@
#define SYS_membarrier 389
#elif defined(ALPHA)
#define SYS_membarrier 517
+ #elif defined(LOONGARCH)
@ -70819,179 +70833,6 @@ index 609967128fb..d67deeda164 100644
#else
#error define SYS_membarrier for the arch
#endif
diff --git a/src/hotspot/os_cpu/linux_loongarch/amcas_asm.h b/src/hotspot/os_cpu/linux_loongarch/amcas_asm.h
new file mode 100644
index 00000000000..305974a178f
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_loongarch/amcas_asm.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, Loongson Technology. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef __AMCAS_ASM_H__
+#define __AMCAS_ASM_H__
+ asm(
+ ".macro parse_r var r \n\t"
+ "\\var = -1 \n\t"
+ ".ifc \\r, $r0 \n\t"
+ "\\var = 0 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r1 \n\t"
+ "\\var = 1 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r2 \n\t"
+ "\\var = 2 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r3 \n\t"
+ "\\var = 3 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r4 \n\t"
+ "\\var = 4 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r5 \n\t"
+ "\\var = 5 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r6 \n\t"
+ "\\var = 6 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r7 \n\t"
+ "\\var = 7 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r8 \n\t"
+ "\\var = 8 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r9 \n\t"
+ "\\var = 9 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r10 \n\t"
+ "\\var = 10 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r11 \n\t"
+ "\\var = 11 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r12 \n\t"
+ "\\var = 12 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r13 \n\t"
+ "\\var = 13 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r14 \n\t"
+ "\\var = 14 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r15 \n\t"
+ "\\var = 15 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r16 \n\t"
+ "\\var = 16 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r17 \n\t"
+ "\\var = 17 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r18 \n\t"
+ "\\var = 18 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r19 \n\t"
+ "\\var = 19 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r20 \n\t"
+ "\\var = 20 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r21 \n\t"
+ "\\var = 21 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r22 \n\t"
+ "\\var = 22 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r23 \n\t"
+ "\\var = 23 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r24 \n\t"
+ "\\var = 24 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r25 \n\t"
+ "\\var = 25 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r26 \n\t"
+ "\\var = 26 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r27 \n\t"
+ "\\var = 27 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r28 \n\t"
+ "\\var = 28 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r29 \n\t"
+ "\\var = 29 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r30 \n\t"
+ "\\var = 30 \n\t"
+ ".endif \n\t"
+ ".ifc \\r, $r31 \n\t"
+ "\\var = 31 \n\t"
+ ".endif \n\t"
+ ".iflt \\var \n\t"
+ ".error \n\t"
+ ".endif \n\t"
+ ".endm \n\t"
+
+ ".macro amcas_w rd, rk, rj \n\t"
+ "parse_r d, \\rd \n\t"
+ "parse_r j, \\rj \n\t"
+ "parse_r k, \\rk \n\t"
+ ".word ((0b00111000010110010 << 15) | (k << 10) | (j << 5) | d) \n\t"
+ ".endm \n\t"
+
+ ".macro amcas_d rd, rk, rj \n\t"
+ "parse_r d, \\rd \n\t"
+ "parse_r j, \\rj \n\t"
+ "parse_r k, \\rk \n\t"
+ ".word ((0b00111000010110011 << 15) | (k << 10) | (j << 5) | d) \n\t"
+ ".endm \n\t"
+
+ ".macro amcas_db_b rd, rk, rj \n\t"
+ "parse_r d, \\rd \n\t"
+ "parse_r j, \\rj \n\t"
+ "parse_r k, \\rk \n\t"
+ ".word ((0b00111000010110100 << 15) | (k << 10) | (j << 5) | d) \n\t"
+ ".endm \n\t"
+
+ ".macro amcas_db_w rd, rk, rj \n\t"
+ "parse_r d, \\rd \n\t"
+ "parse_r j, \\rj \n\t"
+ "parse_r k, \\rk \n\t"
+ ".word ((0b00111000010110110 << 15) | (k << 10) | (j << 5) | d) \n\t"
+ ".endm \n\t"
+
+ ".macro amcas_db_d rd, rk, rj \n\t"
+ "parse_r d, \\rd \n\t"
+ "parse_r j, \\rj \n\t"
+ "parse_r k, \\rk \n\t"
+ ".word ((0b00111000010110111 << 15) | (k << 10) | (j << 5) | d) \n\t"
+ ".endm \n\t"
+ );
+#endif /* __AMCAS_ASM_H__ */
diff --git a/src/hotspot/os_cpu/linux_loongarch/assembler_linux_loongarch.cpp b/src/hotspot/os_cpu/linux_loongarch/assembler_linux_loongarch.cpp
new file mode 100644
index 00000000000..30719a0340b
@ -71024,13 +70865,13 @@ index 00000000000..30719a0340b
+ */
diff --git a/src/hotspot/os_cpu/linux_loongarch/atomic_linux_loongarch.hpp b/src/hotspot/os_cpu/linux_loongarch/atomic_linux_loongarch.hpp
new file mode 100644
index 00000000000..bb820b5e5ae
index 00000000000..f0c7a7e3a5d
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_loongarch/atomic_linux_loongarch.hpp
@@ -0,0 +1,361 @@
@@ -0,0 +1,499 @@
+/*
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved.
+ * Copyright (c) 2015, 2024, Loongson Technology. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
@ -71057,10 +70898,146 @@ index 00000000000..bb820b5e5ae
+#define OS_CPU_LINUX_LOONGARCH_ATOMIC_LINUX_LOONGARCH_HPP
+
+#include "runtime/vm_version.hpp"
+#include "amcas_asm.h"
+
+// Implementation of class atomic
+
+#define AMCAS_MACRO asm volatile ( \
+ ".ifndef _ASM_ASMMACRO_ \n\t" \
+ ".set _ASM_ASMMACRO_, 1 \n\t" \
+ ".macro parse_r var r \n\t" \
+ "\\var = -1 \n\t" \
+ ".ifc \\r, $r0 \n\t" \
+ "\\var = 0 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r1 \n\t" \
+ "\\var = 1 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r2 \n\t" \
+ "\\var = 2 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r3 \n\t" \
+ "\\var = 3 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r4 \n\t" \
+ "\\var = 4 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r5 \n\t" \
+ "\\var = 5 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r6 \n\t" \
+ "\\var = 6 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r7 \n\t" \
+ "\\var = 7 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r8 \n\t" \
+ "\\var = 8 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r9 \n\t" \
+ "\\var = 9 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r10 \n\t" \
+ "\\var = 10 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r11 \n\t" \
+ "\\var = 11 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r12 \n\t" \
+ "\\var = 12 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r13 \n\t" \
+ "\\var = 13 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r14 \n\t" \
+ "\\var = 14 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r15 \n\t" \
+ "\\var = 15 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r16 \n\t" \
+ "\\var = 16 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r17 \n\t" \
+ "\\var = 17 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r18 \n\t" \
+ "\\var = 18 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r19 \n\t" \
+ "\\var = 19 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r20 \n\t" \
+ "\\var = 20 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r21 \n\t" \
+ "\\var = 21 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r22 \n\t" \
+ "\\var = 22 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r23 \n\t" \
+ "\\var = 23 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r24 \n\t" \
+ "\\var = 24 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r25 \n\t" \
+ "\\var = 25 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r26 \n\t" \
+ "\\var = 26 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r27 \n\t" \
+ "\\var = 27 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r28 \n\t" \
+ "\\var = 28 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r29 \n\t" \
+ "\\var = 29 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r30 \n\t" \
+ "\\var = 30 \n\t" \
+ ".endif \n\t" \
+ ".ifc \\r, $r31 \n\t" \
+ "\\var = 31 \n\t" \
+ ".endif \n\t" \
+ ".iflt \\var \n\t" \
+ ".endif \n\t" \
+ ".endm \n\t" \
+ ".macro amcas_w rd, rk, rj \n\t" \
+ "parse_r d, \\rd \n\t" \
+ "parse_r j, \\rj \n\t" \
+ "parse_r k, \\rk \n\t" \
+ ".word ((0b00111000010110010 << 15) | (k << 10) | (j << 5) | d) \n\t" \
+ ".endm \n\t" \
+ ".macro amcas_d rd, rk, rj \n\t" \
+ "parse_r d, \\rd \n\t" \
+ "parse_r j, \\rj \n\t" \
+ "parse_r k, \\rk \n\t" \
+ ".word ((0b00111000010110011 << 15) | (k << 10) | (j << 5) | d) \n\t" \
+ ".endm \n\t" \
+ ".macro amcas_db_b rd, rk, rj \n\t" \
+ "parse_r d, \\rd \n\t" \
+ "parse_r j, \\rj \n\t" \
+ "parse_r k, \\rk \n\t" \
+ ".word ((0b00111000010110100 << 15) | (k << 10) | (j << 5) | d) \n\t" \
+ ".endm \n\t" \
+ ".macro amcas_db_w rd, rk, rj \n\t" \
+ "parse_r d, \\rd \n\t" \
+ "parse_r j, \\rj \n\t" \
+ "parse_r k, \\rk \n\t" \
+ ".word ((0b00111000010110110 << 15) | (k << 10) | (j << 5) | d) \n\t" \
+ ".endm \n\t" \
+ ".macro amcas_db_d rd, rk, rj \n\t" \
+ "parse_r d, \\rd \n\t" \
+ "parse_r j, \\rj \n\t" \
+ "parse_r k, \\rk \n\t" \
+ ".word ((0b00111000010110111 << 15) | (k << 10) | (j << 5) | d) \n\t" \
+ ".endm \n\t" \
+ ".endif \n\t" \
+ );
+
+template<size_t byte_size>
+struct Atomic::PlatformAdd {
+ template<typename D, typename I>
@ -71197,6 +71174,7 @@ index 00000000000..bb820b5e5ae
+ T prev, temp;
+
+ if (UseAMCAS) {
+ AMCAS_MACRO
+ switch (order) {
+ case memory_order_relaxed:
+ asm volatile (
@ -71280,6 +71258,7 @@ index 00000000000..bb820b5e5ae
+ T prev, temp;
+
+ if (UseAMCAS) {
+ AMCAS_MACRO
+ switch (order) {
+ case memory_order_relaxed:
+ asm volatile (
@ -73072,7 +73051,7 @@ index 0634d970c26..f7797935846 100644
}
}
diff --git a/src/hotspot/share/code/vtableStubs.cpp b/src/hotspot/share/code/vtableStubs.cpp
index 934f805eefc..774a81f569b 100644
index eed3dc8e787..c8b58dd459c 100644
--- a/src/hotspot/share/code/vtableStubs.cpp
+++ b/src/hotspot/share/code/vtableStubs.cpp
@@ -22,6 +22,12 @@
@ -73088,7 +73067,7 @@ index 934f805eefc..774a81f569b 100644
#include "precompiled.hpp"
#include "code/vtableStubs.hpp"
#include "compiler/compileBroker.hpp"
@@ -102,7 +108,11 @@ int VtableStubs::_itab_stub_size = 0;
@@ -101,7 +107,11 @@ int VtableStubs::_itab_stub_size = 0;
#if defined(PRODUCT)
// These values are good for the PRODUCT case (no tracing).
@ -73558,7 +73537,7 @@ index f3008084254..5780d3f3ad6 100644
#endif // _LP64
diff --git a/src/hotspot/share/oops/stackChunkOop.inline.hpp b/src/hotspot/share/oops/stackChunkOop.inline.hpp
index 1d5bb7ffa81..37a41655672 100644
index 9bde7e255d2..8ac313e6b1d 100644
--- a/src/hotspot/share/oops/stackChunkOop.inline.hpp
+++ b/src/hotspot/share/oops/stackChunkOop.inline.hpp
@@ -22,6 +22,12 @@
@ -73574,7 +73553,7 @@ index 1d5bb7ffa81..37a41655672 100644
#ifndef SHARE_OOPS_STACKCHUNKOOP_INLINE_HPP
#define SHARE_OOPS_STACKCHUNKOOP_INLINE_HPP
@@ -335,7 +341,7 @@ inline void stackChunkOopDesc::copy_from_stack_to_chunk(intptr_t* from, intptr_t
@@ -336,7 +342,7 @@ inline void stackChunkOopDesc::copy_from_stack_to_chunk(intptr_t* from, intptr_t
assert(to >= start_address(), "Chunk underflow");
assert(to + size <= end_address(), "Chunk overflow");
@ -73583,7 +73562,7 @@ index 1d5bb7ffa81..37a41655672 100644
// Suppress compilation warning-as-error on unimplemented architectures
// that stub out arch-specific methods. Some compilers are smart enough
// to figure out the argument is always null and then warn about it.
@@ -354,7 +360,7 @@ inline void stackChunkOopDesc::copy_from_chunk_to_stack(intptr_t* from, intptr_t
@@ -355,7 +361,7 @@ inline void stackChunkOopDesc::copy_from_chunk_to_stack(intptr_t* from, intptr_t
assert(from >= start_address(), "");
assert(from + size <= end_address(), "");
@ -73618,7 +73597,7 @@ index 892ccc6b8ab..6c1b9affcbe 100644
macro(MinI)
macro(MinL)
diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
index c9b82face2d..40005a687f5 100644
index 22817951242..ccb24de6741 100644
--- a/src/hotspot/share/opto/compile.cpp
+++ b/src/hotspot/share/opto/compile.cpp
@@ -22,6 +22,12 @@
@ -73634,7 +73613,7 @@ index c9b82face2d..40005a687f5 100644
#include "precompiled.hpp"
#include "asm/macroAssembler.hpp"
#include "asm/macroAssembler.inline.hpp"
@@ -3755,6 +3761,7 @@ void Compile::final_graph_reshaping_main_switch(Node* n, Final_Reshape_Counts& f
@@ -3753,6 +3759,7 @@ void Compile::final_graph_reshaping_main_switch(Node* n, Final_Reshape_Counts& f
n->set_req(MemBarNode::Precedent, top());
}
break;
@ -73643,7 +73622,7 @@ index c9b82face2d..40005a687f5 100644
if (n->as_MemBar()->trailing_load() && n->req() > MemBarNode::Precedent) {
// At parse time, the trailing MemBarAcquire for a volatile load
diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp
index 76ed95c4a78..e2fdbedd804 100644
index 89a064a03b7..6746c08498e 100644
--- a/src/hotspot/share/opto/memnode.cpp
+++ b/src/hotspot/share/opto/memnode.cpp
@@ -22,6 +22,12 @@
@ -73800,7 +73779,7 @@ index 03c0af1a572..7e468def61d 100644
#else
frame sender = frame();
diff --git a/src/hotspot/share/runtime/continuationFreezeThaw.cpp b/src/hotspot/share/runtime/continuationFreezeThaw.cpp
index 36ce7a532eb..51125dd80b1 100644
index 0882bc933c2..d08380c4ca9 100644
--- a/src/hotspot/share/runtime/continuationFreezeThaw.cpp
+++ b/src/hotspot/share/runtime/continuationFreezeThaw.cpp
@@ -22,6 +22,12 @@
@ -73834,7 +73813,7 @@ index 36ce7a532eb..51125dd80b1 100644
// We don't use FKind::frame_bottom(f) == _bottom_address because on x64 there's sometimes an extra word between
// enterSpecial and an interpreted frame
@@ -1604,7 +1610,7 @@ static freeze_result is_pinned0(JavaThread* thread, oop cont_scope, bool safepoi
@@ -1603,7 +1609,7 @@ static freeze_result is_pinned0(JavaThread* thread, oop cont_scope, bool safepoi
if (!safepoint) {
f = f.sender(&map); // this is the yield frame
} else { // safepoint yield
@ -73843,7 +73822,7 @@ index 36ce7a532eb..51125dd80b1 100644
f.set_fp(f.real_fp()); // Instead of this, maybe in ContinuationWrapper::set_last_frame always use the real_fp?
#else
Unimplemented();
@@ -2224,8 +2230,8 @@ void ThawBase::recurse_thaw_compiled_frame(const frame& hf, frame& caller, int n
@@ -2234,8 +2240,8 @@ void ThawBase::recurse_thaw_compiled_frame(const frame& hf, frame& caller, int n
// If we're the bottom-most thawed frame, we're writing to within one word from entrySP
// (we might have one padding word for alignment)
@ -73890,7 +73869,7 @@ index 7b1ad7e17e1..c7a0246e375 100644
// Threads::create_vm() for size checks.
Atomic::release_store(&_thread_state, s);
diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp
index c8952cf8af3..f2e7fb05d69 100644
index ee0f754b865..e29e7164181 100644
--- a/src/hotspot/share/runtime/objectMonitor.cpp
+++ b/src/hotspot/share/runtime/objectMonitor.cpp
@@ -22,6 +22,12 @@
@ -73916,7 +73895,7 @@ index c8952cf8af3..f2e7fb05d69 100644
assert(_succ != current, "invariant");
assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
assert(current->thread_state() != _thread_blocked, "invariant");
@@ -717,6 +726,7 @@ void ObjectMonitor::EnterI(JavaThread* current) {
@@ -707,6 +716,7 @@ void ObjectMonitor::EnterI(JavaThread* current) {
}
// The Spin failed -- Enqueue and park the thread ...
@ -73925,7 +73904,7 @@ index c8952cf8af3..f2e7fb05d69 100644
assert(owner_raw() != current, "invariant");
assert(_Responsible != current, "invariant");
diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp
index a5ea07d8c64..8adb584b769 100644
index d27d34d7a81..6cb80af29e5 100644
--- a/src/hotspot/share/runtime/os.cpp
+++ b/src/hotspot/share/runtime/os.cpp
@@ -22,6 +22,12 @@
@ -73941,7 +73920,7 @@ index a5ea07d8c64..8adb584b769 100644
#include "precompiled.hpp"
#include "classfile/javaClasses.hpp"
#include "classfile/moduleEntry.hpp"
@@ -1259,7 +1265,8 @@ bool os::is_first_C_frame(frame* fr) {
@@ -1265,7 +1271,8 @@ bool os::is_first_C_frame(frame* fr) {
if ((uintptr_t)fr->sender_sp() == (uintptr_t)-1 || is_pointer_bad(fr->sender_sp())) return true;
uintptr_t old_fp = (uintptr_t)fr->link_or_null();
@ -73952,7 +73931,7 @@ index a5ea07d8c64..8adb584b769 100644
// stack grows downwards; if old_fp is below current fp or if the stack
diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp
index edbdad4f24b..404d9113f48 100644
index 6439a958ccb..622bb9dd8e1 100644
--- a/src/hotspot/share/runtime/sharedRuntime.cpp
+++ b/src/hotspot/share/runtime/sharedRuntime.cpp
@@ -22,6 +22,12 @@
@ -74019,7 +73998,7 @@ index fac76262f3c..f41cf843d31 100644
static double __kernel_sin(double x, double y, int iy)
{
diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp
index 6e6f2115e1e..fdd94b21883 100644
index 6cdb95be2e6..44c93897852 100644
--- a/src/hotspot/share/runtime/synchronizer.cpp
+++ b/src/hotspot/share/runtime/synchronizer.cpp
@@ -22,6 +22,12 @@
@ -74035,7 +74014,7 @@ index 6e6f2115e1e..fdd94b21883 100644
#include "precompiled.hpp"
#include "classfile/vmSymbols.hpp"
#include "gc/shared/collectedHeap.hpp"
@@ -487,7 +493,7 @@ void ObjectSynchronizer::handle_sync_on_value_based_class(Handle obj, JavaThread
@@ -486,7 +492,7 @@ void ObjectSynchronizer::handle_sync_on_value_based_class(Handle obj, JavaThread
}
static bool useHeavyMonitors() {
@ -74045,7 +74024,7 @@ index 6e6f2115e1e..fdd94b21883 100644
#else
return false;
diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp
index 37241534b2b..f7302bea5f7 100644
index d11af5cb5af..80f7ec0d827 100644
--- a/src/hotspot/share/runtime/vmStructs.cpp
+++ b/src/hotspot/share/runtime/vmStructs.cpp
@@ -22,6 +22,12 @@
@ -74061,7 +74040,7 @@ index 37241534b2b..f7302bea5f7 100644
#include "precompiled.hpp"
#include "cds/filemap.hpp"
#include "ci/ciField.hpp"
@@ -1567,6 +1573,7 @@
@@ -1566,6 +1572,7 @@
declare_c2_type(StoreFenceNode, MemBarNode) \
declare_c2_type(MemBarVolatileNode, MemBarNode) \
declare_c2_type(MemBarCPUOrderNode, MemBarNode) \
@ -74070,7 +74049,7 @@ index 37241534b2b..f7302bea5f7 100644
declare_c2_type(BlackholeNode, MultiNode) \
declare_c2_type(InitializeNode, MemBarNode) \
diff --git a/src/hotspot/share/utilities/macros.hpp b/src/hotspot/share/utilities/macros.hpp
index bfbaaa58acc..74e56975081 100644
index 244b18ecdd4..cdb392b5ef2 100644
--- a/src/hotspot/share/utilities/macros.hpp
+++ b/src/hotspot/share/utilities/macros.hpp
@@ -22,6 +22,12 @@
@ -78465,7 +78444,7 @@ index ebe3fe63ccf..04ea3cccdef 100644
* @run driver compiler.c2.irTests.TestVectorizeURShiftSubword
*/
diff --git a/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java b/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java
index 4c56daebfb8..92836130408 100644
index ac3a6d9a8c6..c17598902ff 100644
--- a/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java
+++ b/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java
@@ -21,12 +21,18 @@
@ -78489,7 +78468,7 @@ index 4c56daebfb8..92836130408 100644
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
* @run main/othervm/timeout=600 -Xbootclasspath/a:.
diff --git a/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java b/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java
index 03016ea3dd6..62ce6c1a7a5 100644
index fdc8f63f9e0..993cf68d011 100644
--- a/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java
+++ b/test/hotspot/jtreg/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java
@@ -21,6 +21,12 @@
@ -78731,7 +78710,7 @@ index c2275f6563e..b94e05fc1ff 100644
// We only have ChaCha20 intrinsics on x64 and aarch64
// currently. If the platform is neither of these then
diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java
index eeba614de4f..5a2f293e259 100644
index 0541121c127..d9fe8c91dc4 100644
--- a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java
+++ b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java
@@ -21,11 +21,17 @@
@ -78777,7 +78756,7 @@ index 38060dfb504..151caa94346 100644
* @requires vm.compMode != "Xcomp"
* @library /test/lib /
diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java b/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java
index 4afda120709..230aef2fb58 100644
index 492901f0046..e95554fa944 100644
--- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java
+++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java
@@ -21,11 +21,17 @@
@ -78800,7 +78779,7 @@ index 4afda120709..230aef2fb58 100644
* @requires vm.compMode != "Xcomp"
* @comment default run:
diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java b/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java
index 062e6804897..42a9d239e06 100644
index b4ba578c9f2..27e6b86abe2 100644
--- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java
+++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java
@@ -21,11 +21,17 @@
@ -79857,7 +79836,7 @@ index 390a0dcdd3f..d7baa9bfb75 100644
* @compile --enable-preview -source ${jdk.version} TestRangeCheckHoistingScaledIV.java
* @run main/othervm --enable-preview compiler.rangechecks.TestRangeCheckHoistingScaledIV
diff --git a/test/hotspot/jtreg/compiler/runtime/TestConstantsInError.java b/test/hotspot/jtreg/compiler/runtime/TestConstantsInError.java
index df221959bb5..a15ac48e3fa 100644
index 3daf12df879..31018941a9c 100644
--- a/test/hotspot/jtreg/compiler/runtime/TestConstantsInError.java
+++ b/test/hotspot/jtreg/compiler/runtime/TestConstantsInError.java
@@ -21,6 +21,12 @@
@ -79910,7 +79889,7 @@ index df221959bb5..a15ac48e3fa 100644
.shouldMatch("Test_CD2.*::test \\(3 bytes\\) made not entrant")
.shouldMatch("Test_CD3.*::test \\(3 bytes\\) made not entrant")
diff --git a/test/hotspot/jtreg/compiler/sharedstubs/SharedStubToInterpTest.java b/test/hotspot/jtreg/compiler/sharedstubs/SharedStubToInterpTest.java
index 682198672f7..c62956d467f 100644
index 5dd938442cc..2ec4cab8f62 100644
--- a/test/hotspot/jtreg/compiler/sharedstubs/SharedStubToInterpTest.java
+++ b/test/hotspot/jtreg/compiler/sharedstubs/SharedStubToInterpTest.java
@@ -22,6 +22,12 @@

View File

@ -897,7 +897,7 @@ Name: java-21-%{origin}
Version: %{newjavaver}.%{buildver}
# This package needs `.rolling` as part of Release so as to not conflict on install with
# java-X-openjdk. I.e. when latest rolling release is also an LTS release packaged as
Release: 0
Release: 1
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
@ -1792,6 +1792,9 @@ cjc.mainProgram(arg)
%changelog
* Wed Oct 30 2024 Pan Xuefeng <panxuefeng@loongson.cn> -1:21.0.4.7-1
- update LoongArch64 port to 21.0.4.7
* Thu Jul 18 2024 Autistic_boyya <wangzhongyi7@huawei.com> -1:21.0.4.7-rolling
- update to jdk21.0.4-ga