From bb175727144b05ccbae235954056ce583071f9b2 Mon Sep 17 00:00:00 2001 From: aoqi Date: Thu, 1 Aug 2024 14:34:18 +0800 Subject: [PATCH] update LoongArch64 port to 21.0.4 --- LoongArch64-support.patch | 451 ++++++++++++++++++-------------------- openjdk-21.spec | 5 +- 2 files changed, 219 insertions(+), 237 deletions(-) diff --git a/LoongArch64-support.patch b/LoongArch64-support.patch index 8ae6956..2cae223 100644 --- a/LoongArch64-support.patch +++ b/LoongArch64-support.patch @@ -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 +struct Atomic::PlatformAdd { + template @@ -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 @@ diff --git a/openjdk-21.spec b/openjdk-21.spec index e3f3622..38a0463 100644 --- a/openjdk-21.spec +++ b/openjdk-21.spec @@ -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 @@ -1793,6 +1793,9 @@ cjc.mainProgram(args) -- the returns from copy_jdk_configs.lua should not affect %changelog +* Thu Aug 1 2024 aoqi - 1:21.0.4.7-1 +- update LoongArch64 port to 21.0.4 + * Thu Jul 18 2024 Autistic_boyya -1:21.0.4.7-rolling - update to jdk21.0.4-ga -- Gitee