Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
fc9073b
8394233: AArch64: Remove unreachable non-acquiring CAS match rules
albertnetymk Oct 22, 2026
913463f
8390621: Use .debug_frame if .eh_frame is not enough to unwind
YaSuenag Oct 22, 2026
afdaf76
8394914: C2: Remove dead functions
marc-chevalier Oct 22, 2026
ae8d975
8394960: [Valhalla] unitialized field when null value returned from t…
rwestrel Oct 22, 2026
94f833e
8394782: Test gc/metaspace/TestMetaspaceFirstGC.java fails
shivshah-oracle Oct 22, 2026
a2e0fda
8395369: Adjust aix VirtualMachineImpl.c to latest changes on Linux
MBaesken Oct 22, 2026
e0b649c
8388435: [REDO] C2: crash in compiled code due to zero division becau…
rwestrel Oct 22, 2026
bfb6744
8394834: [leyden] Improve map file logging to add code cache
Oct 22, 2026
6413068
8394889: C2: Missed Ideal optimization opportunity in PhaseIterGVN fo…
eme64 Oct 22, 2026
da0f61d
8394804: [Valhalla] C2 misses Ideal optimization for ValueType in Pha…
eme64 Oct 22, 2026
186449d
8252694: C2: Make node containers templated by the contained node type
marc-chevalier Oct 22, 2026
4b1b166
8395368: RISC-V: Remove redundant la before external-address loads
albertnetymk Oct 22, 2026
a02db4f
8394399: BSD supports posix_fadvise
Oct 22, 2026
e4107f6
8394606: [Windows] jpackage generates identical MSI component GUIDs f…
Oct 22, 2026
312dc3b
8393426: GenShen: Remembered set scan should not keep old referents a…
Oct 22, 2026
38e34dc
8394732: Test java/lang/LazyConstant/ThrowablesClassUnloading.java ti…
Oct 22, 2026
593cd45
8395322: Add IDE generated files into the .gitignore
lmesnik Oct 22, 2026
e37ebb0
8343851: Slow new array creation in case of many classes loaded
benshuai5D Oct 22, 2026
c216b3b
8394501: ImmutableDescriptor.hashCode(), MBeanInfo.hashCode() and JMX…
Oct 22, 2026
722e2ff
8391910: RISC-V: Add CMoveP/CMoveN C2 match rules
zifeihan Oct 23, 2026
5ea770f
8373933: clhsdb "dumpcodecache" command does not work
jyukutyo Oct 23, 2026
485d2fb
8395600: RISC-V: Detect Zicbop via Linux hwprobe
zifeihan Oct 23, 2026
e317c5b
8394730: G1: Last-ditch Full GC can leak humongous region card set me…
Oct 23, 2026
96e89db
8394846: TestExtendedMasterSecretHandshake.java failing with java.lan…
chmielewskiandreas Oct 23, 2026
a68782d
8394802: Unsafe reference Acquire/Release ops don't use acquire/relea…
albertnetymk Oct 23, 2026
3bd37aa
8395713: C2: remove useless JumpProjNode::_switch_val
marc-chevalier Oct 23, 2026
73ae24b
8394667: Omitting enclosing instance fields in value classes can prov…
Oct 23, 2026
fa970a3
8393076: PPC64: Remove postalloc expansion for EncodeP
dbriemann Oct 23, 2026
475fedc
8393085: AArch64: implement compact uncommon trap sequence
Oct 23, 2026
e0f2967
8395610: [valhalla] method not marked mismatched with non scalarized…
rwestrel Oct 23, 2026
64e5768
8394809: G1: mark_clean_range_as_from_remset dirties already scanned …
benjaminp Oct 23, 2026
52edf6b
8394949: Rename SystemDictionaryShared to AOTSystemDictionary
iklam Oct 23, 2026
fd8089e
8395355: Update tests to not rely on the default value of EnableDynam…
Oct 24, 2026
8e492bf
8395690: CA certificate improvements
Oct 23, 2026
e2d940b
Merge
Oct 24, 2026
be3ca50
8395706: RISC-V: Avoid redundant copies when converting long values t…
albertnetymk Oct 26, 2026
ee33ee4
8395709: RISC-V: Consolidate C2 scalar CMove match rules
zifeihan Oct 26, 2026
ec081d9
8367717: Cleanup atomic_copy64
dev-jonghoonpark Oct 26, 2026
7245a8b
8395378: C2: Missed Ideal optimization opportunity in PhaseIterGVN fo…
eme64 Oct 26, 2026
7615d26
8379512: C2: Remove macro node flag once a node is removed from Compi…
dev-jonghoonpark Oct 26, 2026
d2c9e08
8395609: ARM32: Remove unreachable SubI/SubL register-immediate match…
albertnetymk Oct 26, 2026
779014d
8395607: AArch64: Remove unreachable SubI/SubL register-immediate mat…
albertnetymk Oct 26, 2026
40ac65a
8395606: x86: Remove unreachable APX SubI/SubL register-immediate mat…
albertnetymk Oct 26, 2026
5797606
8395608: RISC-V: Remove unreachable SubI/SubL register-immediate matc…
albertnetymk Oct 26, 2026
66e4c01
8393467: [Valhalla] C2: crash with SIGSEGV in PhaseMacroExpand::value…
TobiHartmann Oct 26, 2026
f4ca8b5
8395752: Shenandoah: Weak marking closures should not strongly claim …
Oct 26, 2026
bbd629b
8394613: sun/security/pkcs12/KeytoolOpensslInteropTest.java#GenerateO…
yaqsun Oct 26, 2026
7ae0f1f
8395828: Clang build failure after JDK-8395752
shipilev Oct 26, 2026
89f6e75
8393552: Test vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiled…
plummercj Oct 26, 2026
b83ad05
8394143: CachedRowSet.acceptChanges fails when the table name contain…
justin-curtis-lu Oct 26, 2026
90b8588
8392187: JFR: Use-after-free bug in CPU-time profiler can crash JVM
Oct 26, 2026
830141d
8394660: [Valhalla] C1 detection of unloaded array klasses must be up…
fparain Oct 26, 2026
6a81b85
8394466: Test runtime/jni/critical/SuspendInCritical.java fails with ZGC
Oct 26, 2026
02703c0
8394456: C2: Unexpected CompressBits/ExpandBits nodes in SuperWord tr…
jaskarth Oct 26, 2026
4d6983d
8394986: Shenandoah: HeapDumpBeforeFullGC and HeapDumpAfterFullGC cra…
Oct 26, 2026
bfffe17
8394081: C2: Simplify implicit null check control dominance condition
albertnetymk Oct 27, 2026
142fd85
8366531: Add vector size and type checks for IRNode.VECTOR_REINTERPRET
galderz Oct 27, 2026
5de3273
8395787: ScopedValue: Unused GrowableArray allocation in JVM_FindScop…
SirYwell Oct 27, 2026
a954a3e
8388927: C2: Missed ideal optimization causes TestVectorReassociation…
Oct 27, 2026
e249306
8307970: Thread.start is slow with large number of threads
fbredber Oct 27, 2026
50d32ec
8389366: SSLFlowDelegate writerCF is incorrectly initialized
djelinski Oct 27, 2026
3289945
8395895: [BACKOUT] ScopedValue: Unused GrowableArray allocation in JV…
marc-chevalier Oct 27, 2026
a0340ff
8394468: Compiler Bug "Invalid pool entry"
dev-jonghoonpark Oct 27, 2026
bf2bc25
8393865: [Valhalla] C2: assert(_gvn.type(stored_value_casted) == Type…
fparain Oct 27, 2026
562716b
8390187: Some typos in jdk.jshell ("Postion", 2x"evalution")
archiecobbs Oct 27, 2026
aa76018
8395884: [Valhalla] Unitialized field when null value returned from C1
TobiHartmann Oct 27, 2026
1eb3eda
8394548: javac: Incomplete Unicode escape surrogate pair causes incor…
archiecobbs Oct 27, 2026
ff95e9f
8395632: Remove SA tests from problem list due to 8318754
plummercj Oct 27, 2026
f2259dc
8391472: Make keytool key generation defaults provider-independent
wangweij Oct 27, 2026
e0ca371
8393849: GenShen: Only the young bootstrap mark should enqueue old ob…
Oct 27, 2026
bf46968
8393432: P-384 field operations should utilize larger limb sizes
smemery Oct 27, 2026
b066db6
8395595: Simplify PartialArrayState lifetime accounting
albertnetymk Oct 28, 2026
50364ea
8395860: RISC-V: Auto-enable Zicbop extension features
zifeihan Oct 28, 2026
7ec5fb6
8389236: RISC-V: Use more single-bit instructions from the Zbs extension
zifeihan Oct 28, 2026
8c7484c
8383870: Uppercase .MD/.HTML in doc-files crashes javadoc
hns Oct 28, 2026
de15ba6
8394860: [Valhalla] C1 asserts with "stack or locks not matching (inv…
TobiHartmann Oct 28, 2026
6dbb8fe
8393235: Module$ReflectionData.reads is missing from AOT cache
Oct 28, 2026
e8a16a3
8395869: RISC-V: Remove Zicboz-based block zeroing
zifeihan Oct 28, 2026
bef8237
8395722: PPC64: Remove postalloc expansion for DecodeN
dbriemann Oct 28, 2026
8358036
8395897: [Valhalla] C2: Incorrect array layout type information after…
TobiHartmann Oct 28, 2026
c4599b2
8395907: JFR: JfrDCmd should only use current command
egahlin Oct 28, 2026
6917797
8395882: Currency.getInstance(Locale) compiles a regex on every call
justin-curtis-lu Oct 28, 2026
c201b83
8377312: Improve waiting in MountUnmountDisabler
pchilano Oct 28, 2026
841e5f8
8396054: ProblemList tools/launcher/MiscTests.java with virtual threads
Oct 28, 2026
5056ff9
8396015: Remove unused methods in PartialArrayTaskStats
albertnetymk Oct 29, 2026
6dcc19c
8396014: RISC-V: Normalize immediate operand names in AD files
zifeihan Oct 29, 2026
689b99e
8396029: C2: RegionNode::Ideal may leave a CFG node with 2 CFG outputs
merykitty Oct 29, 2026
6fe8374
8395888: [Valhalla] C2 incorrectly eliminates stores to flat arrays w…
TobiHartmann Oct 29, 2026
202b89b
8395981: C1 incorrectly masks constant long shift counts to 5 bits
TobiHartmann Oct 29, 2026
2f526da
8396025: [Valhalla] Unsafe access to a value object can leave control…
TobiHartmann Oct 29, 2026
bef89c5
8395827: [Valhalla] New Unsafe paths should be @ForceInline
shipilev Oct 29, 2026
4aa52ae
8396020: RISC-V: C1: fix assertion failure when c1 compiling a large …
Marukohe Oct 29, 2026
73aa91b
8393264: SplashDecodeGif may read past GIF colour table
Oct 29, 2026
e6af341
8389933: [s390x] C2: Add missing nodes that are present on other arch…
Oct 29, 2026
1066596
8395929: Change the exception texts in SmtpClient and FtpClient to so…
MBaesken Oct 29, 2026
5d01212
8395885: ZGC: Fix pathologically slow remset verification
stefank Oct 29, 2026
6e1ce2d
Merge branch 'sapmachine' into pr-jdk-28+22
RealCLanger Oct 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ NashornProfile.txt
**/JTwork/**
/src/utils/LogCompilation/target/
/src/utils/LogCompilation/logc.jar
/.project/
/.settings/
**/.classpath
**/.factorypath
**/.project
**/.settings/
/compile_commands.json
/.cache
/.gdbinit
Expand Down
1 change: 1 addition & 0 deletions make/hotspot/lib/CompileJvm.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
DISABLED_WARNINGS_gcc_jvmFlag.cpp := unused-const-variable, \
DISABLED_WARNINGS_gcc_jvmtiTagMap.cpp := stringop-overflow, \
DISABLED_WARNINGS_gcc_macroAssembler_ppc_sha.cpp := unused-const-variable, \
DISABLED_WARNINGS_gcc_mountUnmountDisabler.cpp := stringop-overflow, \
DISABLED_WARNINGS_gcc_postaloc.cpp := address, \
DISABLED_WARNINGS_gcc_safepointMechanism.cpp := stringop-overflow, \
DISABLED_WARNINGS_gcc_shenandoahGenerationalHeap.cpp := stringop-overflow, \
Expand Down
3 changes: 0 additions & 3 deletions make/hotspot/lib/JvmFeatures.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,7 @@ ifneq ($(call check-jvm-feature, cds), true)
JVM_CFLAGS_FEATURES += -DINCLUDE_CDS=0
JVM_EXCLUDE_FILES += \
aotCodeCache.cpp \
classLoaderDataShared.cpp \
classLoaderExt.cpp \
aotCompileBroker.cpp \
systemDictionaryShared.cpp \
trainingData.cpp
JVM_EXCLUDE_PATTERNS += cds/
endif
Expand Down
20 changes: 1 addition & 19 deletions make/jdk/src/classes/build/tools/intpoly/FieldGen.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,24 +88,6 @@ private static List<CarryReduce> P256CrSequence() {
return result;
}

static FieldParams P384 = new FieldParams(
"IntegerPolynomialP384", 28, 14, 2, 384,
Arrays.asList(
new Term(128, -1),
new Term(96, -1),
new Term(32, 1),
new Term(0, -1)
),
P384CrSequence(), simpleSmallCrSequence(14)
);

private static List<CarryReduce> P384CrSequence() {
List<CarryReduce> result = new ArrayList<CarryReduce>();
result.addAll(fullReduce(14));
result.addAll(simpleSmallCrSequence(14));
return result;
}

static FieldParams P521 = new FieldParams(
"IntegerPolynomialP521", 28, 19, 2, 521,
Arrays.asList(
Expand Down Expand Up @@ -194,7 +176,7 @@ private static List<CarryReduce> orderFieldSmallCrSequence(int numLimbs) {
}

static final FieldParams[] ALL_FIELDS = {
Curve448, P256, P384, P521, O256, O384, O521, O25519, O448
Curve448, P256, P521, O256, O384, O521, O25519, O448
};

public static class Term {
Expand Down
68 changes: 36 additions & 32 deletions src/hotspot/cpu/aarch64/aarch64.ad
Original file line number Diff line number Diff line change
Expand Up @@ -1701,6 +1701,34 @@ int MachCallRuntimeNode::ret_addr_offset() const {

//=============================================================================

void MachUncommonTrapNode::emit_impl(C2_MacroAssembler* masm, PhaseRegAlloc* ra_) const {
address entry_point = OptoRuntime::uncommon_trap_blob()->entry_point();
address runtime_call = __ trampoline_call(Address(entry_point, relocInfo::runtime_call_type));
if (runtime_call == nullptr) {
ciEnv::current()->record_failure("Failed to emit uncommon trap trampoline call");
return;
}

__ emit_int32(trap_request());
}

uint MachUncommonTrapNode::size_impl(PhaseRegAlloc* ra_) const {
// BL followed by 32-bit integer constant.
//
// If target address cannot be directly encoded into the BL,
// a trampoline in the stub code will be emitted and used to reach
// the uncommon trap blob, similarly to trampolines for static calls
// into compiled Java methods. The size of the trampoline is
// accounted for separately.
return NativeInstruction::instruction_size + sizeof(int32_t);
}

int MachUncommonTrapNode::ret_addr_offset_impl() const {
return NativeInstruction::instruction_size;
}

//=============================================================================

#ifndef PRODUCT
void MachBreakpointNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
st->print("BREAKPOINT");
Expand Down Expand Up @@ -3657,10 +3685,16 @@ encode %{
}
}

__ post_call_nop();
int trap_request;
bool is_trap = is_uncommon_trap(&trap_request);
if (is_trap) {
__ emit_int32(trap_request);
} else {
__ post_call_nop();
}

// Only non uncommon_trap calls need to reinitialize ptrue.
if (Compile::current()->max_vector_size() > 0 && uncommon_trap_request() == 0) {
if (Compile::current()->max_vector_size() > 0 && !is_trap) {
__ reinitialize_ptrue();
}
%}
Expand Down Expand Up @@ -9315,21 +9349,6 @@ instruct subI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
ins_pipe(ialu_reg_reg);
%}

// Immediate Subtraction
instruct subI_reg_imm(iRegINoSp dst, iRegIorL2I src1, immIAddSub src2) %{
match(Set dst (SubI src1 src2));

ins_cost(INSN_COST);
format %{ "subw $dst, $src1, $src2" %}

// use opcode to indicate that this is a sub not an add
opcode(0x1);

ins_encode(aarch64_enc_addsubw_imm(dst, src1, src2));

ins_pipe(ialu_reg_imm);
%}

// Long Subtraction
instruct subL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{

Expand All @@ -9347,21 +9366,6 @@ instruct subL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{
ins_pipe(ialu_reg_reg);
%}

// No constant pool entries requiredLong Immediate Subtraction.
instruct subL_reg_imm(iRegLNoSp dst, iRegL src1, immLAddSub src2) %{
match(Set dst (SubL src1 src2));

ins_cost(INSN_COST);
format %{ "sub$dst, $src1, $src2" %}

// use opcode to indicate that this is a sub not an add
opcode(0x1);

ins_encode( aarch64_enc_addsub_imm(dst, src1, src2) );

ins_pipe(ialu_reg_imm);
%}

// Integer Negation (special case for sub)

instruct negI_reg(iRegINoSp dst, iRegIorL2I src, immI0 zero, rFlagsReg cr) %{
Expand Down
3 changes: 2 additions & 1 deletion src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,7 @@ void LIR_Assembler::return_op(LIR_Opr result, C1SafepointPollStub* code_stub) {
Label not_null;
__ cbnz(r0, not_null);
// Returned value is null, zero all return registers because they may belong to oop fields
__ mov(j_rarg0, zr);
__ mov(j_rarg1, zr);
__ mov(j_rarg2, zr);
__ mov(j_rarg3, zr);
Expand Down Expand Up @@ -2415,7 +2416,7 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {
}

// if we don't know anything, just go through the generic arraycopy
if (default_type == nullptr // || basic_type == T_OBJECT
if (default_type == nullptr || !default_type->is_loaded() // || basic_type == T_OBJECT
) {
Label done;
assert(src == r1 && src_pos == r2, "mismatch in calling convention");
Expand Down
9 changes: 4 additions & 5 deletions src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1173,7 +1173,8 @@ void LIRGenerator::do_NewObjectArray(NewObjectArray* x) {
// in case of patching (i.e., object class is not yet loaded), we need to reexecute the instruction
// and therefore provide the state before the parameters have been consumed
CodeEmitInfo* patching_info = nullptr;
if (!x->klass()->is_loaded() || PatchALot) {
ciKlass* obj = ciObjArrayKlass::make(x->klass());
if (!x->klass()->is_loaded() || !obj->is_loaded() || PatchALot) {
patching_info = state_for(x, x->state_before());
}

Expand All @@ -1189,15 +1190,13 @@ void LIRGenerator::do_NewObjectArray(NewObjectArray* x) {
length.load_item_force(FrameMap::r19_opr);
LIR_Opr len = length.result();

ciKlass* obj = ciObjArrayKlass::make(x->klass());

// TODO 8265122 Implement a fast path for this
bool is_flat = obj->is_loaded() && obj->is_flat_array_klass();
bool is_null_free = obj->is_loaded() && obj->as_array_klass()->is_elem_null_free();

CodeStub* slow_path = new NewObjectArrayStub(klass_reg, len, reg, info, is_null_free);
if (obj == ciEnv::unloaded_ciobjarrayklass()) {
BAILOUT("encountered unloaded_ciobjarrayklass due to out of memory error");
if (x->klass()->is_loaded() && !obj->is_loaded()) {
BAILOUT("encountered unloaded ciobjarrayklass due to out of memory error");
}

klass2reg_with_patching(klass_reg, obj, patching_info);
Expand Down
7 changes: 7 additions & 0 deletions src/hotspot/cpu/aarch64/frame_aarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ bool frame::safe_for_sender(JavaThread *thread) {
if (_cb->is_nmethod() || _cb->is_adapter_blob() || _cb->is_runtime_stub()) {
return false;
}

if (_cb->is_uncommon_trap_stub() &&
!(thread->has_last_Java_frame() && thread->frame_anchor()->walkable())) {
// The frame might not be safe to walk when the frame anchor is missing.
// For example, RegisterSaver adjusts the stack pointer as it spills the registers.
return false;
}
}

// Could just be some random pointer within the codeBlob
Expand Down
55 changes: 0 additions & 55 deletions src/hotspot/cpu/aarch64/gc/g1/g1_aarch64.ad
Original file line number Diff line number Diff line change
Expand Up @@ -633,33 +633,6 @@ instruct g1CompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN newval, iRegPNo
ins_pipe(pipe_slow);
%}

// This pattern is generated automatically from g1_aarch64.m4.
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
instruct g1GetAndSetP(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval, rFlagsReg cr)
%{
predicate(UseG1GC && !needs_acquiring_load_exclusive(n) && n->as_LoadStore()->barrier_data() != 0);
match(Set preval (GetAndSetP mem newval));
effect(TEMP preval, TEMP tmp1, TEMP tmp2, KILL cr);
ins_cost(2 * VOLATILE_REF_COST);
format %{ "atomic_xchg $preval, $newval, [$mem]" %}
ins_encode %{
assert_different_registers($mem$$Register, $newval$$Register);
write_barrier_pre(masm, this,
$mem$$Register /* obj */,
$preval$$Register /* pre_val (as a temporary register) */,
$tmp1$$Register /* tmp1 */,
$tmp2$$Register /* tmp2 */,
RegSet::of($mem$$Register, $preval$$Register, $newval$$Register) /* preserve */);
__ atomic_xchg($preval$$Register, $newval$$Register, $mem$$Register);
write_barrier_post(masm, this,
$mem$$Register /* store_addr */,
$newval$$Register /* new_val */,
$tmp1$$Register /* tmp1 */,
$tmp2$$Register /* tmp2 */);
%}
ins_pipe(pipe_serial);
%}

// This pattern is generated automatically from g1_aarch64.m4.
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
instruct g1GetAndSetPAcq(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval, rFlagsReg cr)
Expand Down Expand Up @@ -687,34 +660,6 @@ instruct g1GetAndSetPAcq(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp t
ins_pipe(pipe_serial);
%}

// This pattern is generated automatically from g1_aarch64.m4.
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
instruct g1GetAndSetN(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval, rFlagsReg cr)
%{
predicate(UseG1GC && !needs_acquiring_load_exclusive(n) && n->as_LoadStore()->barrier_data() != 0);
match(Set preval (GetAndSetN mem newval));
effect(TEMP preval, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr);
ins_cost(2 * VOLATILE_REF_COST);
format %{ "atomic_xchgw $preval, $newval, [$mem]" %}
ins_encode %{
assert_different_registers($mem$$Register, $newval$$Register);
write_barrier_pre(masm, this,
$mem$$Register /* obj */,
$tmp1$$Register /* pre_val */,
$tmp2$$Register /* tmp1 */,
$tmp3$$Register /* tmp2 */,
RegSet::of($mem$$Register, $preval$$Register, $newval$$Register) /* preserve */);
__ atomic_xchgw($preval$$Register, $newval$$Register, $mem$$Register);
__ decode_heap_oop($tmp1$$Register, $newval$$Register);
write_barrier_post(masm, this,
$mem$$Register /* store_addr */,
$tmp1$$Register /* new_val */,
$tmp2$$Register /* tmp1 */,
$tmp3$$Register /* tmp2 */);
%}
ins_pipe(pipe_serial);
%}

// This pattern is generated automatically from g1_aarch64.m4.
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
instruct g1GetAndSetNAcq(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval, rFlagsReg cr)
Expand Down
4 changes: 1 addition & 3 deletions src/hotspot/cpu/aarch64/gc/g1/g1_aarch64.m4
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
dnl Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
dnl Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
dnl DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
dnl
dnl This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -299,7 +299,6 @@ instruct g1GetAndSetP$1(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tm
%}
ins_pipe(pipe_serial);
%}')dnl
XCHGP_INSN(,,atomic_xchg)
XCHGP_INSN(Acq,_acq,atomic_xchgal)
dnl
define(`XCHGN_INSN',
Expand Down Expand Up @@ -331,7 +330,6 @@ instruct g1GetAndSetN$1(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tm
%}
ins_pipe(pipe_serial);
%}')dnl
XCHGN_INSN(,atomic_xchgw,atomic_xchgw)
XCHGN_INSN(Acq,atomic_xchgw_acq,atomic_xchgalw)

// This pattern is generated automatically from g1_aarch64.m4.
Expand Down
Loading
Loading