From 68571a9630308e480be0af09d4a4210589012756 Mon Sep 17 00:00:00 2001 From: panxuefeng Date: Tue, 4 Nov 2025 16:33:04 +0800 Subject: [PATCH] update LoongArch64 port to 21.0.9 --- LoongArch64-support.patch | 776 ++++++++------------------------------ openjdk-21.spec | 5 +- 2 files changed, 155 insertions(+), 626 deletions(-) diff --git a/LoongArch64-support.patch b/LoongArch64-support.patch index b8c7347..4e6dfb3 100644 --- a/LoongArch64-support.patch +++ b/LoongArch64-support.patch @@ -1,484 +1,3 @@ -From ec8d5d4ee41b448c99153fef416549460d8313c6 Mon Sep 17 00:00:00 2001 -From: songliyang -Date: Thu, 31 Jul 2025 14:53:37 +0800 -Subject: [PATCH] LoongArch64 support - ---- - make/autoconf/jvm-features.m4 | 18 +- - make/autoconf/platform.m4 | 17 + - .../abstractInterpreter_loongarch.cpp | 155 + - .../cpu/loongarch/assembler_loongarch.cpp | 820 + - .../cpu/loongarch/assembler_loongarch.hpp | 3213 ++++ - .../loongarch/assembler_loongarch.inline.hpp | 33 + - src/hotspot/cpu/loongarch/bytes_loongarch.hpp | 64 + - .../loongarch/c1_CodeStubs_loongarch_64.cpp | 338 + - .../cpu/loongarch/c1_Defs_loongarch.hpp | 88 + - .../loongarch/c1_FpuStackSim_loongarch.hpp | 32 + - .../loongarch/c1_FpuStackSim_loongarch_64.cpp | 31 + - .../cpu/loongarch/c1_FrameMap_loongarch.hpp | 143 + - .../loongarch/c1_FrameMap_loongarch_64.cpp | 345 + - .../loongarch/c1_LIRAssembler_loongarch.hpp | 84 + - .../c1_LIRAssembler_loongarch_64.cpp | 3383 ++++ - .../c1_LIRGenerator_loongarch_64.cpp | 1393 ++ - .../cpu/loongarch/c1_LIR_loongarch_64.cpp | 57 + - .../cpu/loongarch/c1_LinearScan_loongarch.hpp | 70 + - .../loongarch/c1_LinearScan_loongarch_64.cpp | 33 + - .../loongarch/c1_MacroAssembler_loongarch.hpp | 111 + - .../c1_MacroAssembler_loongarch_64.cpp | 350 + - .../loongarch/c1_Runtime1_loongarch_64.cpp | 1049 + - .../cpu/loongarch/c1_globals_loongarch.hpp | 64 + - .../cpu/loongarch/c2_CodeStubs_loongarch.cpp | 91 + - .../loongarch/c2_MacroAssembler_loongarch.cpp | 1903 ++ - .../loongarch/c2_MacroAssembler_loongarch.hpp | 141 + - .../cpu/loongarch/c2_globals_loongarch.hpp | 85 + - .../cpu/loongarch/c2_init_loongarch.cpp | 37 + - .../cpu/loongarch/codeBuffer_loongarch.cpp | 32 + - .../cpu/loongarch/codeBuffer_loongarch.hpp | 37 + - .../cpu/loongarch/compiledIC_loongarch.cpp | 138 + - .../loongarch/continuationEntry_loongarch.hpp | 33 + - .../continuationEntry_loongarch.inline.hpp | 52 + - ...ontinuationFreezeThaw_loongarch.inline.hpp | 284 + - .../continuationHelper_loongarch.inline.hpp | 145 + - src/hotspot/cpu/loongarch/copy_loongarch.cpp | 147 + - src/hotspot/cpu/loongarch/copy_loongarch.hpp | 65 + - .../cpu/loongarch/disassembler_loongarch.hpp | 49 + - .../loongarch/downcallLinker_loongarch_64.cpp | 360 + - .../loongarch/foreignGlobals_loongarch.cpp | 195 + - .../loongarch/foreignGlobals_loongarch.hpp | 50 + - src/hotspot/cpu/loongarch/frame_loongarch.cpp | 629 + - src/hotspot/cpu/loongarch/frame_loongarch.hpp | 200 + - .../cpu/loongarch/frame_loongarch.inline.hpp | 472 + - .../gc/g1/g1BarrierSetAssembler_loongarch.cpp | 491 + - .../gc/g1/g1BarrierSetAssembler_loongarch.hpp | 72 + - .../loongarch/gc/g1/g1Globals_loongarch.hpp | 30 + - .../shared/barrierSetAssembler_loongarch.cpp | 453 + - .../shared/barrierSetAssembler_loongarch.hpp | 147 + - .../gc/shared/barrierSetNMethod_loongarch.cpp | 222 + - ...cardTableBarrierSetAssembler_loongarch.cpp | 117 + - ...cardTableBarrierSetAssembler_loongarch.hpp | 44 + - .../modRefBarrierSetAssembler_loongarch.cpp | 53 + - .../modRefBarrierSetAssembler_loongarch.hpp | 54 + - .../c1/shenandoahBarrierSetC1_loongarch.cpp | 130 + - ...henandoahBarrierSetAssembler_loongarch.cpp | 783 + - ...henandoahBarrierSetAssembler_loongarch.hpp | 88 + - .../gc/shenandoah/shenandoah_loongarch_64.ad | 232 + - .../gc/x/xBarrierSetAssembler_loongarch.cpp | 471 + - .../gc/x/xBarrierSetAssembler_loongarch.hpp | 105 + - .../cpu/loongarch/gc/x/xGlobals_loongarch.cpp | 211 + - .../cpu/loongarch/gc/x/xGlobals_loongarch.hpp | 34 + - .../cpu/loongarch/gc/x/x_loongarch_64.ad | 256 + - .../cpu/loongarch/gc/z/zAddress_loongarch.cpp | 109 + - .../cpu/loongarch/gc/z/zAddress_loongarch.hpp | 35 + - .../gc/z/zAddress_loongarch.inline.hpp | 38 + - .../gc/z/zBarrierSetAssembler_loongarch.cpp | 1226 ++ - .../gc/z/zBarrierSetAssembler_loongarch.hpp | 192 + - .../cpu/loongarch/gc/z/zGlobals_loongarch.hpp | 30 + - .../cpu/loongarch/gc/z/z_loongarch_64.ad | 250 + - .../loongarch/globalDefinitions_loongarch.hpp | 58 + - .../cpu/loongarch/globals_loongarch.hpp | 125 + - .../cpu/loongarch/icBuffer_loongarch.cpp | 82 + - .../cpu/loongarch/icache_loongarch.cpp | 42 + - .../cpu/loongarch/icache_loongarch.hpp | 41 + - .../cpu/loongarch/interp_masm_loongarch.hpp | 272 + - .../loongarch/interp_masm_loongarch_64.cpp | 1965 ++ - .../cpu/loongarch/interpreterRT_loongarch.hpp | 62 + - .../loongarch/interpreterRT_loongarch_64.cpp | 264 + - .../loongarch/javaFrameAnchor_loongarch.hpp | 86 + - .../jniFastGetField_loongarch_64.cpp | 179 + - .../cpu/loongarch/jniTypes_loongarch.hpp | 143 + - .../jvmciCodeInstaller_loongarch.cpp | 194 + - src/hotspot/cpu/loongarch/loongarch.ad | 25 + - src/hotspot/cpu/loongarch/loongarch_64.ad | 15888 ++++++++++++++++ - .../loongarch/macroAssembler_loongarch.cpp | 4242 +++++ - .../loongarch/macroAssembler_loongarch.hpp | 809 + - .../macroAssembler_loongarch.inline.hpp | 937 + - .../macroAssembler_loongarch_chacha.cpp | 86 + - .../macroAssembler_loongarch_trig.cpp | 1626 ++ - .../cpu/loongarch/matcher_loongarch.hpp | 181 + - .../cpu/loongarch/methodHandles_loongarch.cpp | 568 + - .../cpu/loongarch/methodHandles_loongarch.hpp | 65 + - .../cpu/loongarch/nativeInst_loongarch.cpp | 537 + - .../cpu/loongarch/nativeInst_loongarch.hpp | 595 + - .../cpu/loongarch/registerMap_loongarch.hpp | 59 + - .../cpu/loongarch/register_loongarch.cpp | 61 + - .../cpu/loongarch/register_loongarch.hpp | 479 + - .../cpu/loongarch/relocInfo_loongarch.cpp | 133 + - .../cpu/loongarch/relocInfo_loongarch.hpp | 44 + - .../loongarch/sharedRuntime_loongarch_64.cpp | 2979 +++ - .../smallRegisterMap_loongarch.inline.hpp | 88 + - ...stackChunkFrameStream_loongarch.inline.hpp | 142 + - .../stackChunkOop_loongarch.inline.hpp | 43 + - .../loongarch/stubGenerator_loongarch_64.cpp | 5721 ++++++ - .../cpu/loongarch/stubRoutines_loongarch.hpp | 118 + - .../loongarch/stubRoutines_loongarch_64.cpp | 196 + - ...templateInterpreterGenerator_loongarch.cpp | 2106 ++ - .../cpu/loongarch/templateTable_loongarch.hpp | 43 + - .../loongarch/templateTable_loongarch_64.cpp | 4007 ++++ - .../loongarch/upcallLinker_loongarch_64.cpp | 351 + - .../cpu/loongarch/vmStructs_loongarch.hpp | 61 + - .../cpu/loongarch/vm_version_loongarch.cpp | 511 + - .../cpu/loongarch/vm_version_loongarch.hpp | 308 + - src/hotspot/cpu/loongarch/vmreg_loongarch.cpp | 54 + - src/hotspot/cpu/loongarch/vmreg_loongarch.hpp | 58 + - .../cpu/loongarch/vmreg_loongarch.inline.hpp | 38 + - .../cpu/loongarch/vmstorage_loongarch.hpp | 87 + - .../loongarch/vtableStubs_loongarch_64.cpp | 312 + - src/hotspot/os/linux/os_linux.cpp | 54 +- - src/hotspot/os/linux/os_linux.hpp | 8 + - .../os/linux/systemMemoryBarrier_linux.cpp | 8 + - .../assembler_linux_loongarch.cpp | 24 + - .../atomic_linux_loongarch.hpp | 499 + - .../copy_linux_loongarch.inline.hpp | 145 + - .../gc/x/xSyscall_linux_loongarch.hpp | 41 + - .../gc/z/zSyscall_linux_loongarch.hpp | 41 + - .../globals_linux_loongarch.hpp | 43 + - .../javaThread_linux_loongarch.cpp | 105 + - .../javaThread_linux_loongarch.hpp | 66 + - .../os_cpu/linux_loongarch/linux_loongarch.s | 25 + - .../orderAccess_linux_loongarch.hpp | 50 + - .../linux_loongarch/os_linux_loongarch.cpp | 474 + - .../os_linux_loongarch.inline.hpp | 29 + - .../prefetch_linux_loongarch.inline.hpp | 56 + - .../safefetch_linux_loongarch64.S | 56 + - .../vmStructs_linux_loongarch.hpp | 55 + - .../vm_version_linux_loongarch.cpp | 95 + - src/hotspot/share/adlc/formssel.cpp | 7 + - src/hotspot/share/c1/c1_Compiler.cpp | 8 +- - src/hotspot/share/c1/c1_LIR.cpp | 21 +- - src/hotspot/share/c1/c1_LIR.hpp | 25 +- - src/hotspot/share/c1/c1_LinearScan.cpp | 30 +- - src/hotspot/share/code/vtableStubs.cpp | 10 + - src/hotspot/share/gc/g1/g1Arguments.cpp | 20 + - .../gc/g1/g1ParScanThreadState.inline.hpp | 9 + - .../share/gc/parallel/parallelArguments.cpp | 12 + - .../share/gc/shared/barrierSetNMethod.cpp | 8 +- - .../share/gc/shared/c2/barrierSetC2.cpp | 15 + - .../gc/shenandoah/shenandoahArguments.cpp | 8 +- - src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp | 17 + - .../share/gc/z/zStoreBarrierBuffer.hpp | 10 +- - .../share/interpreter/interpreterRuntime.cpp | 8 +- - .../share/interpreter/interpreterRuntime.hpp | 8 +- - .../templateInterpreterGenerator.hpp | 10 +- - .../share/jfr/utilities/jfrBigEndian.hpp | 8 +- - src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 17 + - src/hotspot/share/memory/metaspace.cpp | 15 +- - .../share/oops/stackChunkOop.inline.hpp | 10 +- - src/hotspot/share/opto/classes.hpp | 7 + - src/hotspot/share/opto/compile.cpp | 7 + - src/hotspot/share/opto/memnode.cpp | 7 + - src/hotspot/share/opto/memnode.hpp | 14 + - src/hotspot/share/opto/output.cpp | 22 + - src/hotspot/share/runtime/arguments.cpp | 10 +- - src/hotspot/share/runtime/continuation.cpp | 8 +- - .../share/runtime/continuationFreezeThaw.cpp | 16 +- - .../share/runtime/javaThread.inline.hpp | 10 +- - src/hotspot/share/runtime/objectMonitor.cpp | 10 + - src/hotspot/share/runtime/os.cpp | 9 +- - src/hotspot/share/runtime/sharedRuntime.cpp | 8 +- - .../share/runtime/sharedRuntimeTrig.cpp | 16 + - src/hotspot/share/runtime/synchronizer.cpp | 8 +- - src/hotspot/share/runtime/vmStructs.cpp | 7 + - src/hotspot/share/utilities/macros.hpp | 18 + - .../classes/jdk/internal/foreign/CABI.java | 13 +- - .../internal/foreign/abi/AbstractLinker.java | 8 + - .../jdk/internal/foreign/abi/SharedUtils.java | 8 + - .../loongarch64/LoongArch64Architecture.java | 179 + - .../linux/LinuxLoongArch64CallArranger.java | 472 + - .../linux/LinuxLoongArch64Linker.java | 65 + - .../abi/loongarch64/linux/TypeClass.java | 217 + - .../jdk/internal/util/Architecture.java | 8 + - .../internal/util/PlatformProps.java.template | 8 + - .../native/libsaproc/LinuxDebuggerLocal.cpp | 28 +- - .../linux/native/libsaproc/libproc.h | 9 +- - .../linux/native/libsaproc/ps_proc.c | 8 +- - .../classes/sun/jvm/hotspot/HotSpotAgent.java | 9 + - .../MachineDescriptionLOONGARCH64.java | 41 + - .../debugger/linux/LinuxCDebugger.java | 17 +- - .../linux/LinuxThreadContextFactory.java | 11 +- - .../loongarch64/LinuxLOONGARCH64CFrame.java | 92 + - .../LinuxLOONGARCH64ThreadContext.java | 47 + - .../loongarch64/LOONGARCH64ThreadContext.java | 128 + - .../hotspot/debugger/posix/elf/ELFHeader.java | 8 + - .../debugger/remote/RemoteDebuggerClient.java | 11 + - .../loongarch64/RemoteLOONGARCH64Thread.java | 54 + - .../RemoteLOONGARCH64ThreadContext.java | 51 + - .../RemoteLOONGARCH64ThreadFactory.java | 45 + - .../sun/jvm/hotspot/runtime/Threads.java | 9 + - .../LinuxLOONGARCH64JavaThreadPDAccess.java | 139 + - .../LOONGARCH64CurrentFrameGuess.java | 250 + - .../runtime/loongarch64/LOONGARCH64Frame.java | 540 + - .../LOONGARCH64JavaCallWrapper.java | 59 + - .../loongarch64/LOONGARCH64RegisterMap.java | 52 + - .../jvm/hotspot/utilities/PlatformInfo.java | 12 +- - ...LoongArch64HotSpotJVMCIBackendFactory.java | 142 + - .../LoongArch64HotSpotRegisterConfig.java | 297 + - .../LoongArch64HotSpotVMConfig.java | 79 + - .../ci/hotspot/loongarch64/package-info.java | 28 + - .../jdk/vm/ci/loongarch64/LoongArch64.java | 251 + - .../vm/ci/loongarch64/LoongArch64Kind.java | 163 + - .../jdk/vm/ci/loongarch64/package-info.java | 28 + - .../share/classes/module-info.java | 7 + - src/utils/hsdis/binutils/hsdis-binutils.c | 9 + - .../arguments/TestCodeEntryAlignment.java | 8 +- - .../arraycopy/stress/TestStressArrayCopy.java | 14 + - test/hotspot/jtreg/compiler/c2/TestBit.java | 8 +- - .../compiler/c2/irTests/CmpUWithZero.java | 8 +- - .../irTests/TestAutoVecCountingDownLoop.java | 8 +- - .../jtreg/compiler/c2/irTests/TestIRAbs.java | 8 +- - .../c2/irTests/TestVectorizationNotRun.java | 8 +- - .../irTests/TestVectorizeTypeConversion.java | 8 +- - .../irTests/TestVectorizeURShiftSubword.java | 8 +- - .../TestAESIntrinsicsOnSupportedConfig.java | 8 +- - .../TestAESIntrinsicsOnUnsupportedConfig.java | 8 +- - .../intrinsics/TestCompareUnsigned.java | 9 +- - .../intrinsics/TestDoubleIsFinite.java | 8 +- - .../intrinsics/TestDoubleIsInfinite.java | 8 +- - .../intrinsics/TestFloatIsFinite.java | 8 +- - .../intrinsics/TestFloatIsInfinite.java | 8 +- - .../intrinsics/TestIntegerUnsignedDivMod.java | 8 +- - .../intrinsics/TestLongUnsignedDivMod.java | 8 +- - .../intrinsics/chacha/TestChaCha20.java | 12 + - .../float16/Binary16Conversion.java | 8 +- - .../float16/Binary16ConversionNaN.java | 8 +- - .../float16/TestAllFloat16ToFloat.java | 8 +- - .../float16/TestConstFloat16ToFloat.java | 8 +- - .../testcases/GenericTestCaseForOtherCPU.java | 13 +- - .../intrinsics/string/TestCountPositives.java | 9 +- - .../TestStringCompareToDifferentLength.java | 8 +- - .../vm/ci/code/test/CodeInstallationTest.java | 11 + - .../jdk/vm/ci/code/test/DataPatchTest.java | 11 +- - .../code/test/InterpreterFrameSizeTest.java | 11 +- - .../code/test/MaxOopMapStackOffsetTest.java | 11 +- - .../jdk/vm/ci/code/test/NativeCallTest.java | 11 +- - .../code/test/SimpleCodeInstallationTest.java | 11 +- - .../vm/ci/code/test/SimpleDebugInfoTest.java | 11 +- - .../code/test/VirtualObjectDebugInfoTest.java | 11 +- - .../loongarch64/LoongArch64TestAssembler.java | 568 + - .../compiler/lib/ir_framework/IRNode.java | 10 +- - .../loopopts/superword/ReductionPerf.java | 8 +- - .../TestRangeCheckHoistingScaledIV.java | 8 +- - .../runtime/TestConstantsInError.java | 14 +- - .../sharedstubs/SharedStubToInterpTest.java | 8 +- - .../sha/predicate/IntrinsicPredicates.java | 17 +- - .../compiler/vectorapi/TestVectorTest.java | 9 +- - .../VectorLogicalOpIdentityTest.java | 8 +- - .../vectorapi/VectorReverseBytesTest.java | 8 +- - .../vectorization/TestAutoVecIntMinMax.java | 8 +- - .../TestBufferVectorization.java | 8 +- - .../TestFloatConversionsVector.java | 8 +- - .../vectorization/TestPopulateIndex.java | 9 +- - .../vectorization/TestReverseBytes.java | 9 +- - .../vectorization/TestSignumVector.java | 8 +- - .../runner/ArrayIndexFillTest.java | 8 +- - .../runner/ArrayInvariantFillTest.java | 8 +- - .../runner/ArrayShiftOpTest.java | 8 +- - .../runner/BasicDoubleOpTest.java | 8 +- - .../runner/BasicFloatOpTest.java | 8 +- - .../vectorization/runner/BasicLongOpTest.java | 8 +- - .../runner/LoopArrayIndexComputeTest.java | 8 +- - .../runner/LoopReductionOpTest.java | 8 +- - .../compiler/TestLinkToNativeRBP.java | 8 +- - .../jtreg/loongson/25064/NUMAHelper.java | 100 + - .../loongson/25064/TestUseNUMADefault.java | 152 + - .../loongson/25064/TestUseNUMADisabled.java | 94 + - .../loongson/25064/TestUseNUMAEnabled.java | 165 + - .../jtreg/loongson/25443/Test25443.java | 58 + - .../jtreg/loongson/26733/Test26733.java | 570 + - .../jtreg/loongson/30358/MEMBARType.java | 38 + - .../jtreg/loongson/30358/TEST.properties | 25 + - .../jtreg/loongson/30358/TestLoadLoad.java | 129 + - .../30358/TestNewObjectWithFinal.java | 247 + - .../jtreg/loongson/30358/TestVolatile.java | 358 + - .../hotspot/jtreg/loongson/7432/Test7423.java | 61 + - .../ReservedStack/ReservedStackTest.java | 8 +- - .../jtreg/runtime/os/TestTracePageSizes.java | 8 +- - .../MyPackage/ASGCTBaseTest.java | 8 +- - .../sa/TestJhsdbJstackLineNumbers.java | 8 +- - .../ir_framework/tests/TestIRMatching.java | 8 +- - .../nsk/share/jdi/ArgumentHandler.java | 178 +- - .../TestLoongArch64CallArranger.java | 521 + - .../platform/PlatformLayouts.java | 58 + - .../ConcurrentHashMap/MapLoops.java | 8 +- - .../jdk/jfr/event/os/TestCPUInformation.java | 10 +- - .../nameservice/simple/DefaultCaching.java | 11 +- - ...stMutuallyExclusivePlatformPredicates.java | 8 +- - test/lib/jdk/test/lib/Platform.java | 10 + - .../org/openjdk/bench/loongarch/C2Memory.java | 67 + - .../bench/loongarch/MisAlignVector.java | 63 + - 301 files changed, 79755 insertions(+), 218 deletions(-) - create mode 100644 src/hotspot/cpu/loongarch/abstractInterpreter_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/assembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/assembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/assembler_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/bytes_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_CodeStubs_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_Defs_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_FpuStackSim_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_FpuStackSim_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_FrameMap_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_FrameMap_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LIRAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LIRAssembler_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LIRGenerator_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LIR_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LinearScan_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_LinearScan_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_MacroAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c1_MacroAssembler_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_Runtime1_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/c1_globals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c2_CodeStubs_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/c2_MacroAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/c2_MacroAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c2_globals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/c2_init_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/codeBuffer_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/codeBuffer_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/compiledIC_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/continuationEntry_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/continuationEntry_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/continuationFreezeThaw_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/continuationHelper_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/copy_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/copy_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/disassembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/downcallLinker_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/foreignGlobals_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/foreignGlobals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/frame_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/frame_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/frame_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/g1/g1BarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/g1/g1BarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/g1/g1Globals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/barrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/barrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/barrierSetNMethod_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/cardTableBarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/cardTableBarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/modRefBarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shared/modRefBarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shenandoah/c1/shenandoahBarrierSetC1_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shenandoah/shenandoahBarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shenandoah/shenandoahBarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/shenandoah/shenandoah_loongarch_64.ad - create mode 100644 src/hotspot/cpu/loongarch/gc/x/xBarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/x/xBarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/x/xGlobals_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/x/xGlobals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/x/x_loongarch_64.ad - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zBarrierSetAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zBarrierSetAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/zGlobals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/gc/z/z_loongarch_64.ad - create mode 100644 src/hotspot/cpu/loongarch/globalDefinitions_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/globals_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/icBuffer_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/icache_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/icache_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/interp_masm_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/interp_masm_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/interpreterRT_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/interpreterRT_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/javaFrameAnchor_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/jniFastGetField_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/jniTypes_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/jvmciCodeInstaller_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/loongarch.ad - create mode 100644 src/hotspot/cpu/loongarch/loongarch_64.ad - create mode 100644 src/hotspot/cpu/loongarch/macroAssembler_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/macroAssembler_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/macroAssembler_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/macroAssembler_loongarch_chacha.cpp - create mode 100644 src/hotspot/cpu/loongarch/macroAssembler_loongarch_trig.cpp - create mode 100644 src/hotspot/cpu/loongarch/matcher_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/methodHandles_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/methodHandles_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/nativeInst_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/nativeInst_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/registerMap_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/register_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/register_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/relocInfo_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/relocInfo_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/sharedRuntime_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/smallRegisterMap_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/stackChunkFrameStream_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/stackChunkOop_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/stubGenerator_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/stubRoutines_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/stubRoutines_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/templateInterpreterGenerator_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/templateTable_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/templateTable_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/upcallLinker_loongarch_64.cpp - create mode 100644 src/hotspot/cpu/loongarch/vmStructs_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/vm_version_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/vm_version_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/vmreg_loongarch.cpp - create mode 100644 src/hotspot/cpu/loongarch/vmreg_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/vmreg_loongarch.inline.hpp - create mode 100644 src/hotspot/cpu/loongarch/vmstorage_loongarch.hpp - create mode 100644 src/hotspot/cpu/loongarch/vtableStubs_loongarch_64.cpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/assembler_linux_loongarch.cpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/atomic_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/copy_linux_loongarch.inline.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/gc/x/xSyscall_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/gc/z/zSyscall_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/globals_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/javaThread_linux_loongarch.cpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/javaThread_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/linux_loongarch.s - create mode 100644 src/hotspot/os_cpu/linux_loongarch/orderAccess_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/os_linux_loongarch.cpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/os_linux_loongarch.inline.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/prefetch_linux_loongarch.inline.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/safefetch_linux_loongarch64.S - create mode 100644 src/hotspot/os_cpu/linux_loongarch/vmStructs_linux_loongarch.hpp - create mode 100644 src/hotspot/os_cpu/linux_loongarch/vm_version_linux_loongarch.cpp - create mode 100644 src/java.base/share/classes/jdk/internal/foreign/abi/loongarch64/LoongArch64Architecture.java - create mode 100644 src/java.base/share/classes/jdk/internal/foreign/abi/loongarch64/linux/LinuxLoongArch64CallArranger.java - create mode 100644 src/java.base/share/classes/jdk/internal/foreign/abi/loongarch64/linux/LinuxLoongArch64Linker.java - create mode 100644 src/java.base/share/classes/jdk/internal/foreign/abi/loongarch64/linux/TypeClass.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionLOONGARCH64.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/loongarch64/LinuxLOONGARCH64CFrame.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/loongarch64/LinuxLOONGARCH64ThreadContext.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/loongarch64/LOONGARCH64ThreadContext.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/loongarch64/RemoteLOONGARCH64Thread.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/loongarch64/RemoteLOONGARCH64ThreadContext.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/loongarch64/RemoteLOONGARCH64ThreadFactory.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_loongarch64/LinuxLOONGARCH64JavaThreadPDAccess.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/loongarch64/LOONGARCH64CurrentFrameGuess.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/loongarch64/LOONGARCH64Frame.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/loongarch64/LOONGARCH64JavaCallWrapper.java - create mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/loongarch64/LOONGARCH64RegisterMap.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/loongarch64/LoongArch64HotSpotJVMCIBackendFactory.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/loongarch64/LoongArch64HotSpotRegisterConfig.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/loongarch64/LoongArch64HotSpotVMConfig.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/loongarch64/package-info.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/loongarch64/LoongArch64.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/loongarch64/LoongArch64Kind.java - create mode 100644 src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/loongarch64/package-info.java - create mode 100644 test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/loongarch64/LoongArch64TestAssembler.java - create mode 100644 test/hotspot/jtreg/loongson/25064/NUMAHelper.java - create mode 100644 test/hotspot/jtreg/loongson/25064/TestUseNUMADefault.java - create mode 100644 test/hotspot/jtreg/loongson/25064/TestUseNUMADisabled.java - create mode 100644 test/hotspot/jtreg/loongson/25064/TestUseNUMAEnabled.java - create mode 100644 test/hotspot/jtreg/loongson/25443/Test25443.java - create mode 100644 test/hotspot/jtreg/loongson/26733/Test26733.java - create mode 100644 test/hotspot/jtreg/loongson/30358/MEMBARType.java - create mode 100644 test/hotspot/jtreg/loongson/30358/TEST.properties - create mode 100644 test/hotspot/jtreg/loongson/30358/TestLoadLoad.java - create mode 100644 test/hotspot/jtreg/loongson/30358/TestNewObjectWithFinal.java - create mode 100644 test/hotspot/jtreg/loongson/30358/TestVolatile.java - create mode 100644 test/hotspot/jtreg/loongson/7432/Test7423.java - create mode 100644 test/jdk/java/foreign/callarranger/TestLoongArch64CallArranger.java - create mode 100644 test/micro/org/openjdk/bench/loongarch/C2Memory.java - create mode 100644 test/micro/org/openjdk/bench/loongarch/MisAlignVector.java - diff --git a/make/autoconf/jvm-features.m4 b/make/autoconf/jvm-features.m4 index 288019848..c37c5c274 100644 --- a/make/autoconf/jvm-features.m4 @@ -576,12 +95,26 @@ index df610cc48..9f773892f 100644 # The cpu defines below are for zero, we don't support them directly. elif test "x$OPENJDK_$1_CPU" = xsparc; then +diff --git a/make/modules/java.desktop/lib/Awt2dLibraries.gmk b/make/modules/java.desktop/lib/Awt2dLibraries.gmk +index 70a4b634f..00c960eb1 100644 +--- a/make/modules/java.desktop/lib/Awt2dLibraries.gmk ++++ b/make/modules/java.desktop/lib/Awt2dLibraries.gmk +@@ -723,7 +723,8 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false) + endif + + LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE \ +- -DPNG_ARM_NEON_OPT=0 -DPNG_ARM_NEON_IMPLEMENTATION=0 ++ -DPNG_ARM_NEON_OPT=0 -DPNG_ARM_NEON_IMPLEMENTATION=0 \ ++ -DPNG_LOONGARCH_LSX_OPT=0 + + ifeq ($(call isTargetOs, linux), true) + ifeq ($(call isTargetCpuArch, ppc), true) diff --git a/src/hotspot/cpu/loongarch/abstractInterpreter_loongarch.cpp b/src/hotspot/cpu/loongarch/abstractInterpreter_loongarch.cpp new file mode 100644 -index 000000000..5423a4798 +index 000000000..cf3e2d426 --- /dev/null +++ b/src/hotspot/cpu/loongarch/abstractInterpreter_loongarch.cpp -@@ -0,0 +1,155 @@ +@@ -0,0 +1,158 @@ +/* + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. @@ -707,12 +240,15 @@ index 000000000..5423a4798 + interpreter_frame->interpreter_frame_set_method(method); + // NOTE the difference in using sender_sp and interpreter_frame_sender_sp + // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp) -+ // and sender_sp is fp+8 ++ // and sender_sp is fp + intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1; + +#ifdef ASSERT + if (caller->is_interpreted_frame()) { -+ assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement"); ++ // Test exact placement on top of caller args ++ intptr_t* l2 = caller->interpreter_frame_last_sp() + caller_actual_parameters - 1; ++ assert(l2 <= caller->interpreter_frame_expression_stack(), "bad placement"); ++ assert(l2 >= locals, "bad placement"); + } +#endif + @@ -21938,10 +21474,10 @@ index 000000000..c4e77f08b +%} diff --git a/src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.cpp b/src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.cpp new file mode 100644 -index 000000000..9caa23354 +index 000000000..3aac5f10f --- /dev/null +++ b/src/hotspot/cpu/loongarch/gc/z/zAddress_loongarch.cpp -@@ -0,0 +1,109 @@ +@@ -0,0 +1,111 @@ +/* + * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, Loongson Technology. All rights reserved. @@ -21981,9 +21517,11 @@ index 000000000..9caa23354 +#include +#endif // LINUX + -+// Default value if probing is not implemented for a certain platform: 128TB -+static const size_t DEFAULT_MAX_ADDRESS_BIT = 47; -+// Minimum value returned, if probing fails: 64GB ++// Default value if probing is not implemented for a certain platform ++// Max address bit is restricted by implicit assumptions in the code, for instance ++// the bit layout of ZForwardingEntry or Partial array entry (see ZMarkStackEntry) in mark stack ++static const size_t DEFAULT_MAX_ADDRESS_BIT = 46; ++// Minimum value returned, if probing fail +static const size_t MINIMUM_MAX_ADDRESS_BIT = 36; + +static size_t probe_valid_max_address_bit() { @@ -51293,10 +50831,10 @@ index 000000000..79b5d4157 +#endif // CPU_LOONGARCH_MATCHER_LOONGARCH_HPP diff --git a/src/hotspot/cpu/loongarch/methodHandles_loongarch.cpp b/src/hotspot/cpu/loongarch/methodHandles_loongarch.cpp new file mode 100644 -index 000000000..4b5d41aea +index 000000000..379d3c465 --- /dev/null +++ b/src/hotspot/cpu/loongarch/methodHandles_loongarch.cpp -@@ -0,0 +1,568 @@ +@@ -0,0 +1,569 @@ +/* + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. @@ -51326,6 +50864,7 @@ index 000000000..4b5d41aea +#include "asm/macroAssembler.hpp" +#include "classfile/javaClasses.inline.hpp" +#include "classfile/vmClasses.hpp" ++#include "compiler/disassembler.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/interpreterRuntime.hpp" +#include "memory/allocation.inline.hpp" @@ -51335,7 +50874,7 @@ index 000000000..4b5d41aea +#include "runtime/stubRoutines.hpp" +#include "utilities/preserveException.hpp" + -+#define __ _masm-> ++#define __ Disassembler::hook(__FILE__, __LINE__, _masm)-> + +#ifdef PRODUCT +#define BLOCK_COMMENT(str) // nothing @@ -51938,13 +51477,13 @@ index 000000000..8e1292255 + } diff --git a/src/hotspot/cpu/loongarch/nativeInst_loongarch.cpp b/src/hotspot/cpu/loongarch/nativeInst_loongarch.cpp new file mode 100644 -index 000000000..c298cda5d +index 000000000..bbdc237c5 --- /dev/null +++ b/src/hotspot/cpu/loongarch/nativeInst_loongarch.cpp @@ -0,0 +1,537 @@ +/* + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. ++ * Copyright (c) 2015, 2025, 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 @@ -53888,10 +53427,10 @@ index 000000000..c85ca4963 +#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 000000000..834a1e7ff +index 000000000..6c4f92d97 --- /dev/null +++ b/src/hotspot/cpu/loongarch/sharedRuntime_loongarch_64.cpp -@@ -0,0 +1,2979 @@ +@@ -0,0 +1,2975 @@ +/* + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Loongson Technology. All rights reserved. @@ -56211,11 +55750,7 @@ index 000000000..834a1e7ff + // we are very short of registers + + Address unpack_kind(unroll, Deoptimization::UnrollBlock::unpack_kind_offset()); -+ __ st_w(reason, unpack_kind); -+ // save the unpack_kind value -+ // Retrieve the possible live values (return values) -+ // All callee save registers representing jvm state -+ // are now in the vframeArray. ++ __ ld_w(reason, unpack_kind); + + Label noException; + __ li(AT, Deoptimization::Unpack_exception); @@ -63217,10 +62752,10 @@ index 000000000..4d8fe4154 +}; diff --git a/src/hotspot/cpu/loongarch/templateInterpreterGenerator_loongarch.cpp b/src/hotspot/cpu/loongarch/templateInterpreterGenerator_loongarch.cpp new file mode 100644 -index 000000000..f625f9b43 +index 000000000..c64b88b63 --- /dev/null +++ b/src/hotspot/cpu/loongarch/templateInterpreterGenerator_loongarch.cpp -@@ -0,0 +1,2106 @@ +@@ -0,0 +1,2115 @@ +/* + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. @@ -63249,6 +62784,7 @@ index 000000000..f625f9b43 +#include "precompiled.hpp" +#include "asm/macroAssembler.hpp" +#include "classfile/javaClasses.hpp" ++#include "compiler/disassembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" +#include "interpreter/bytecodeHistogram.hpp" +#include "interpreter/interp_masm.hpp" @@ -63274,7 +62810,7 @@ index 000000000..f625f9b43 +#include "runtime/vframeArray.hpp" +#include "utilities/debug.hpp" + -+#define __ _masm-> ++#define __ Disassembler::hook(__FILE__, __LINE__, _masm)-> + +int TemplateInterpreter::InterpreterCodeSize = 500 * K; + @@ -65233,13 +64769,21 @@ index 000000000..f625f9b43 + address& vep) { + assert(t->is_valid() && t->tos_in() == vtos, "illegal template"); + Label L; -+ fep = __ pc(); __ push(ftos); __ b(L); -+ dep = __ pc(); __ push(dtos); __ b(L); -+ lep = __ pc(); __ push(ltos); __ b(L); -+ aep =__ pc(); __ push(atos); __ b(L); -+ bep = cep = sep = -+ iep = __ pc(); __ push(itos); -+ vep = __ pc(); ++ aep = __ pc(); // atos entry point ++ __ push(atos); ++ __ b(L); ++ fep = __ pc(); // ftos entry point ++ __ push(ftos); ++ __ b(L); ++ dep = __ pc(); // dtos entry point ++ __ push(dtos); ++ __ b(L); ++ lep = __ pc(); // ltos entry point ++ __ push(ltos); ++ __ b(L); ++ bep = cep = sep = iep = __ pc(); // [bcsi]tos entry point ++ __ push(itos); ++ vep = __ pc(); // vtos entry point + __ bind(L); + generate_and_dispatch(t); +} @@ -65378,10 +64922,10 @@ index 000000000..ddb38faf4 +#endif // CPU_LOONGARCH_TEMPLATETABLE_LOONGARCH_64_HPP diff --git a/src/hotspot/cpu/loongarch/templateTable_loongarch_64.cpp b/src/hotspot/cpu/loongarch/templateTable_loongarch_64.cpp new file mode 100644 -index 000000000..7d308d998 +index 000000000..300b31c8b --- /dev/null +++ b/src/hotspot/cpu/loongarch/templateTable_loongarch_64.cpp -@@ -0,0 +1,4007 @@ +@@ -0,0 +1,4008 @@ +/* + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. @@ -65409,6 +64953,7 @@ index 000000000..7d308d998 + +#include "precompiled.hpp" +#include "asm/macroAssembler.hpp" ++#include "compiler/disassembler.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/interpreterRuntime.hpp" +#include "interpreter/interp_masm.hpp" @@ -65428,7 +64973,7 @@ index 000000000..7d308d998 +#include "utilities/macros.hpp" + + -+#define __ _masm-> ++#define __ Disassembler::hook(__FILE__, __LINE__, _masm)-> + + +// Address computation: local variables @@ -69815,7 +69360,7 @@ index 000000000..5b9f7b789 +#endif // CPU_LOONGARCH_VMSTRUCTS_LOONGARCH_HPP diff --git a/src/hotspot/cpu/loongarch/vm_version_loongarch.cpp b/src/hotspot/cpu/loongarch/vm_version_loongarch.cpp new file mode 100644 -index 000000000..44bca90d2 +index 000000000..1328144f5 --- /dev/null +++ b/src/hotspot/cpu/loongarch/vm_version_loongarch.cpp @@ -0,0 +1,511 @@ @@ -70274,7 +69819,7 @@ index 000000000..44bca90d2 + FLAG_SET_DEFAULT(UseActiveCoresMP, false); + } + } else { // !UseActiveCoresMP -+ if (FLAG_IS_DEFAULT(UseActiveCoresMP) && !os::is_MP()) { ++ if (FLAG_IS_DEFAULT(UseActiveCoresMP) && os::Linux::sched_active_processor_count() == 1) { + FLAG_SET_DEFAULT(UseActiveCoresMP, true); + } + } @@ -71224,7 +70769,7 @@ index 000000000..ab1202183 + return icache_line_size; +} diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp -index bfd55895a..9b124c74d 100644 +index c6a996d69..ab867828a 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -23,6 +23,12 @@ @@ -71253,7 +70798,7 @@ index bfd55895a..9b124c74d 100644 #ifdef __GLIBC__ // For Glibc, print a one-liner with the malloc tunables. // Most important and popular is MALLOC_ARENA_MAX, but we are -@@ -2450,7 +2462,7 @@ void os::print_memory_info(outputStream* st) { +@@ -2452,7 +2464,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) { @@ -71262,7 +70807,7 @@ index bfd55895a..9b124c74d 100644 // Other platforms have less repetitive cpuinfo files FILE *fp = os::fopen("/proc/cpuinfo", "r"); if (fp) { -@@ -2562,7 +2574,7 @@ void os::jfr_report_memory_info() { +@@ -2564,7 +2576,7 @@ void os::jfr_report_memory_info() { #endif // INCLUDE_JFR @@ -71271,7 +70816,7 @@ index bfd55895a..9b124c74d 100644 const char* search_string = "model name"; #elif defined(M68K) const char* search_string = "CPU"; -@@ -4565,6 +4577,44 @@ void os::Linux::numa_init() { +@@ -4567,6 +4579,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; @@ -72469,13 +72014,13 @@ index 000000000..2d096943a +#endif // OS_CPU_LINUX_LOONGARCH_ORDERACCESS_LINUX_LOONGARCH_HPP diff --git a/src/hotspot/os_cpu/linux_loongarch/os_linux_loongarch.cpp b/src/hotspot/os_cpu/linux_loongarch/os_linux_loongarch.cpp new file mode 100644 -index 000000000..304ceb7b3 +index 000000000..156d8679f --- /dev/null +++ b/src/hotspot/os_cpu/linux_loongarch/os_linux_loongarch.cpp @@ -0,0 +1,474 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2015, 2023, Loongson Technology. All rights reserved. ++ * Copyright (c) 2015, 2025, 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 @@ -73294,22 +72839,22 @@ index be4ee3a3a..9eb3b3a9d 100644 } diff --git a/src/hotspot/share/c1/c1_Compiler.cpp b/src/hotspot/share/c1/c1_Compiler.cpp -index 22299b405..573ce8ff7 100644 +index 22299b405..7a64b0345 100644 --- a/src/hotspot/share/c1/c1_Compiler.cpp +++ b/src/hotspot/share/c1/c1_Compiler.cpp -@@ -43,6 +43,12 @@ - #include "utilities/bitMap.inline.hpp" - #include "utilities/macros.hpp" +@@ -22,6 +22,12 @@ + * + */ +/* -+ * This file has been modified by Loongson Technology in 2022, These -+ * modifications are Copyright (c) 2022, Loongson Technology, and are made ++ * This file has been modified by Loongson Technology in 2025, These ++ * modifications are Copyright (c) 2022, 2025, Loongson Technology, and are made + * available on the same license terms set forth above. + */ + - - Compiler::Compiler() : AbstractCompiler(compiler_c1) { - } + #include "precompiled.hpp" + #include "c1/c1_Compilation.hpp" + #include "c1/c1_Compiler.hpp" @@ -219,7 +225,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) { case vmIntrinsics::_updateCRC32: case vmIntrinsics::_updateBytesCRC32: @@ -73482,7 +73027,7 @@ index 6f527135f..2e2910bdb 100644 void call_runtime_leaf(address routine, LIR_Opr tmp, LIR_Opr result, LIR_OprList* arguments) { append(new LIR_OpRTCall(routine, tmp, result, arguments)); diff --git a/src/hotspot/share/c1/c1_LinearScan.cpp b/src/hotspot/share/c1/c1_LinearScan.cpp -index 0634d970c..f77979358 100644 +index 0634d970c..8bab933d5 100644 --- a/src/hotspot/share/c1/c1_LinearScan.cpp +++ b/src/hotspot/share/c1/c1_LinearScan.cpp @@ -22,6 +22,12 @@ @@ -73490,28 +73035,15 @@ index 0634d970c..f77979358 100644 */ +/* -+ * This file has been modified by Loongson Technology in 2022, These -+ * modifications are Copyright (c) 2022, Loongson Technology, and are made ++ * This file has been modified by Loongson Technology in 2025, These ++ * modifications are Copyright (c) 2022, 2025, Loongson Technology, and are made + * available on the same license terms set forth above. + */ + #include "precompiled.hpp" #include "c1/c1_CFGPrinter.hpp" #include "c1/c1_CodeStubs.hpp" -@@ -35,6 +41,12 @@ - #include "runtime/timerTrace.hpp" - #include "utilities/bitMap.inline.hpp" - -+/* -+ * This file has been modified by Loongson Technology in 2022, These -+ * modifications are Copyright (c) 2022, Loongson Technology, and are made -+ * available on the same license terms set forth above. -+ */ -+ - #ifndef PRODUCT - - static LinearScanStatistic _stat_before_alloc; -@@ -3141,9 +3153,6 @@ void LinearScan::do_linear_scan() { +@@ -3141,9 +3147,6 @@ void LinearScan::do_linear_scan() { } } @@ -73521,7 +73053,7 @@ index 0634d970c..f77979358 100644 { TIME_LINEAR_SCAN(timer_optimize_lir); EdgeMoveOptimizer::optimize(ir()->code()); -@@ -3151,7 +3160,6 @@ void LinearScan::do_linear_scan() { +@@ -3151,7 +3154,6 @@ void LinearScan::do_linear_scan() { // check that cfg is still correct after optimizations ir()->verify(); } @@ -73529,7 +73061,7 @@ index 0634d970c..f77979358 100644 NOT_PRODUCT(print_lir(1, "Before Code Generation", false)); NOT_PRODUCT(LinearScanStatistic::compute(this, _stat_final)); -@@ -5957,9 +5965,13 @@ void EdgeMoveOptimizer::optimize(BlockList* code) { +@@ -5957,9 +5959,13 @@ void EdgeMoveOptimizer::optimize(BlockList* code) { if (block->number_of_preds() > 1 && !block->is_set(BlockBegin::exception_entry_flag)) { optimizer.optimize_moves_at_block_end(block); } @@ -73543,7 +73075,7 @@ index 0634d970c..f77979358 100644 } } -@@ -6376,7 +6388,16 @@ void ControlFlowOptimizer::delete_unnecessary_jumps(BlockList* code) { +@@ -6376,7 +6382,16 @@ void ControlFlowOptimizer::delete_unnecessary_jumps(BlockList* code) { LIR_OpBranch* prev_branch = (LIR_OpBranch*)prev_op; if (prev_branch->stub() == nullptr) { @@ -73560,7 +73092,7 @@ index 0634d970c..f77979358 100644 LIR_Op2* prev_cmp = nullptr; // There might be a cmove inserted for profiling which depends on the same // compare. If we change the condition of the respective compare, we have -@@ -6416,6 +6437,7 @@ void ControlFlowOptimizer::delete_unnecessary_jumps(BlockList* code) { +@@ -6416,6 +6431,7 @@ void ControlFlowOptimizer::delete_unnecessary_jumps(BlockList* code) { prev_cmove->set_in_opr2(t); } } @@ -73635,6 +73167,43 @@ index 28f850938..626bfee16 100644 FLAG_SET_DEFAULT(ParallelGCThreads, WorkerPolicy::parallel_worker_threads()); if (ParallelGCThreads == 0) { assert(!FLAG_IS_DEFAULT(ParallelGCThreads), "The default value for ParallelGCThreads should not be 0."); +diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp +index fb773a025..40e012a5b 100644 +--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp ++++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp +@@ -22,6 +22,12 @@ + * + */ + ++/* ++ * This file has been modified by Loongson Technology in 2025, These ++ * modifications are Copyright (c) 2025, Loongson Technology, and are made ++ * available on the same license terms set forth above. ++ */ ++ + #include "precompiled.hpp" + #include "classfile/classLoaderData.hpp" + #include "classfile/classLoaderDataGraph.hpp" +@@ -2694,6 +2700,9 @@ void G1CMTask::do_marking_step(double time_target_ms, + // Since we've done everything else, we can now totally drain the + // local queue and global stack. + drain_local_queue(false); ++ // Load of _age._fields._top in drain_local_queue must not pass ++ // the load of _age._fields._top in assert _task_queue->size(). ++ LOONGARCH64_ONLY(DEBUG_ONLY(OrderAccess::loadload();)) + drain_global_stack(false); + + // Attempt at work stealing from other task's queues. +@@ -2713,6 +2722,9 @@ void G1CMTask::do_marking_step(double time_target_ms, + // And since we're towards the end, let's totally drain the + // local queue and global stack. + drain_local_queue(false); ++ // Load of _age._fields._top in drain_local_queue must not pass ++ // the load of _age._fields._top in assert _task_queue->size(). ++ LOONGARCH64_ONLY(DEBUG_ONLY(OrderAccess::loadload();)) + drain_global_stack(false); + } else { + break; diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp index 41553e6bf..d426a240c 100644 --- a/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp @@ -74422,7 +73991,7 @@ index ee0f754b8..e29e71641 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 c8724cd06..9c6ea75ac 100644 +index dc0cff5fa..963dac270 100644 --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -22,6 +22,12 @@ @@ -79201,10 +78770,10 @@ index c2275f656..b94e05fc1 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 eed42c714..397465888 100644 +index eed42c714..d5bfca677 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java -@@ -21,11 +21,17 @@ +@@ -21,12 +21,19 @@ * questions. */ @@ -79218,16 +78787,17 @@ index eed42c714..397465888 100644 * @test * @bug 8289551 8302976 * @summary Verify conversion between float and the binary16 format -- * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" -+ * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" | os.arch=="loongarch64" + * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" * | ((os.arch == "ppc64" | os.arch == "ppc64le") & vm.cpu.features ~= ".*darn.*") ++ * | os.arch == "loongarch64" * @requires vm.compiler1.enabled & vm.compiler2.enabled * @requires vm.compMode != "Xcomp" + * @comment default run diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16ConversionNaN.java b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16ConversionNaN.java -index 1051600ab..bb5d0a420 100644 +index 1051600ab..7a02d2ed0 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16ConversionNaN.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16ConversionNaN.java -@@ -21,11 +21,17 @@ +@@ -21,12 +21,19 @@ * questions. */ @@ -79241,16 +78811,17 @@ index 1051600ab..bb5d0a420 100644 * @test * @bug 8289551 8302976 * @summary Verify NaN sign and significand bits are preserved across conversions -- * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" -+ * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" | os.arch=="loongarch64" + * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" * | ((os.arch == "ppc64" | os.arch == "ppc64le") & vm.cpu.features ~= ".*darn.*") ++ * | os.arch == "loongarch64" * @requires vm.compiler1.enabled & vm.compiler2.enabled * @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 5352d20c5..cbfbd8ce6 100644 +index 5352d20c5..d9d285105 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java -@@ -21,11 +21,17 @@ +@@ -21,12 +21,19 @@ * questions. */ @@ -79264,16 +78835,17 @@ index 5352d20c5..cbfbd8ce6 100644 * @test * @bug 8302976 * @summary Verify conversion between float and the binary16 format -- * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch == "aarch64" -+ * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch == "aarch64" | os.arch == "loongarch64" + * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch == "aarch64" * | ((os.arch == "ppc64" | os.arch == "ppc64le") & vm.cpu.features ~= ".*darn.*") ++ * | os.arch == "loongarch64" * @requires vm.compiler1.enabled & vm.compiler2.enabled * @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 c8a03cade..13b14ec0d 100644 +index c8a03cade..de24fb0d2 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java -@@ -21,11 +21,17 @@ +@@ -21,12 +21,19 @@ * questions. */ @@ -79287,57 +78859,14 @@ index c8a03cade..13b14ec0d 100644 * @test * @bug 8302976 * @summary Verify conversion cons between float and the binary16 format -- * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" -+ * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" | os.arch == "loongarch64" + * @requires (vm.cpu.features ~= ".*avx512vl.*" | vm.cpu.features ~= ".*f16c.*") | os.arch=="aarch64" * | ((os.arch == "ppc64" | os.arch == "ppc64le") & vm.cpu.features ~= ".*darn.*") ++ * | os.arch == "loongarch64" * @requires vm.compiler1.enabled & vm.compiler2.enabled * @requires vm.compMode != "Xcomp" -diff --git a/test/hotspot/jtreg/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java b/test/hotspot/jtreg/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java -index 468cd83d7..40d2b03e3 100644 ---- a/test/hotspot/jtreg/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java -+++ b/test/hotspot/jtreg/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java -@@ -21,6 +21,12 @@ - * questions. - */ - -+/* -+ * This file has been modified by Loongson Technology in 2021, These -+ * modifications are Copyright (c) 2021, Loongson Technology, and are made -+ * available on the same license terms set forth above. -+ */ -+ - package compiler.intrinsics.sha.cli.testcases; - - import compiler.intrinsics.sha.cli.DigestOptionsBase; -@@ -32,7 +38,7 @@ import jdk.test.lib.cli.predicate.OrPredicate; - - /** - * Generic test case for SHA-related options targeted to any CPU except -- * AArch64, RISCV64, PPC, S390x, and X86. -+ * AArch64, RISCV64, PPC, S390x, LoongArch64, and X86. - */ - public class GenericTestCaseForOtherCPU extends - DigestOptionsBase.TestCase { -@@ -44,14 +50,15 @@ public class GenericTestCaseForOtherCPU extends - } - - public GenericTestCaseForOtherCPU(String optionName, boolean checkUseSHA) { -- // Execute the test case on any CPU except AArch64, RISCV64, PPC, S390x, and X86. -+ // Execute the test case on any CPU except AArch64, RISCV64, PPC, S390x, LoongArch64, and X86. - super(optionName, new NotPredicate( - new OrPredicate(Platform::isAArch64, - new OrPredicate(Platform::isRISCV64, - new OrPredicate(Platform::isS390x, - new OrPredicate(Platform::isPPC, -+ new OrPredicate(Platform::isLoongArch64, - new OrPredicate(Platform::isX64, -- Platform::isX86))))))); -+ Platform::isX86)))))))); - - this.checkUseSHA = checkUseSHA; - } + * @comment default run: diff --git a/test/hotspot/jtreg/compiler/intrinsics/string/TestCountPositives.java b/test/hotspot/jtreg/compiler/intrinsics/string/TestCountPositives.java -index 76ef47661..7fca97a00 100644 +index 76ef47661..da416dbd7 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/string/TestCountPositives.java +++ b/test/hotspot/jtreg/compiler/intrinsics/string/TestCountPositives.java @@ -21,6 +21,12 @@ @@ -79353,20 +78882,20 @@ index 76ef47661..7fca97a00 100644 /* * @test * @bug 8281146 -@@ -51,6 +57,7 @@ - */ - package compiler.intrinsics.string; - -+import jdk.test.lib.Platform; - import java.lang.Helper; +@@ -55,6 +61,7 @@ import java.lang.Helper; import java.util.Random; import java.util.stream.IntStream; + ++import jdk.test.lib.Platform; + import jdk.test.lib.Utils; + + public class TestCountPositives { @@ -127,7 +134,7 @@ public class TestCountPositives { int calculated = Helper.StringCodingCountPositives(bytes, off, len); int expected = countPositives(bytes, off, len); if (calculated != expected) { - if (expected != len && ng >= 0 && calculated >= 0 && calculated < expected) { -+ if (!Platform.isLoongArch64() && expected != len && calculated >= 0 && calculated < expected) { ++ if (!Platform.isLoongArch64() && expected != len && ng >= 0 && calculated >= 0 && calculated < expected) { // allow intrinsics to return early with a lower value, // but only if we're not expecting the full length (no // negative bytes) @@ -84239,6 +83768,3 @@ index 000000000..1ee6649cd + } + } +} --- -2.33.0 - diff --git a/openjdk-21.spec b/openjdk-21.spec index 940d823..8a29824 100644 --- a/openjdk-21.spec +++ b/openjdk-21.spec @@ -905,7 +905,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: 2 +Release: 3 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons @@ -1945,6 +1945,9 @@ cjc.mainProgram(args) -- the returns from copy_jdk_configs.lua should not affect %changelog +* Tue Nov 04 2025 panxuefeng - 1:21.0.9.10-3 +- update LoongArch64 port to 21.0.9 + * Wed Oct 29 2025 zhangshihui - 1:21.0.9.10-2 - RISC-V add C2 HashCode and CopySign Intrinsics and fix BigInteger Intrinsics -- Gitee