From db1b48ef3bb4f8f0fbb6879200c0655b7fe006eb Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Fri, 10 Feb 2023 18:12:43 +0000 Subject: [PATCH] 8302167: Avoid allocating register in fast_lock() Reviewed-by: kvn, kdnilsen --- src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp | 3 ++- src/hotspot/cpu/x86/x86_64.ad | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index b508429f0ab..cb11789523a 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -559,6 +559,7 @@ void C2_MacroAssembler::fast_lock(Register objReg, Register boxReg, Register tmp if (use_rtm) { assert_different_registers(objReg, boxReg, tmpReg, scrReg, cx1Reg, cx2Reg); } else { + assert(cx1Reg == noreg, ""); assert(cx2Reg == noreg, ""); assert_different_registers(objReg, boxReg, tmpReg, scrReg); } @@ -581,7 +582,7 @@ void C2_MacroAssembler::fast_lock(Register objReg, Register boxReg, Register tmp Label IsInflated, DONE_LABEL, NO_COUNT, COUNT; if (DiagnoseSyncOnValueBasedClasses != 0) { - load_klass(tmpReg, objReg, cx1Reg); + load_klass(tmpReg, objReg, scrReg); movl(tmpReg, Address(tmpReg, Klass::access_flags_offset())); testl(tmpReg, JVM_ACC_IS_VALUE_BASED_CLASS); jcc(Assembler::notZero, DONE_LABEL); diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad index d0d5246eddc..5d48c95ddbb 100644 --- a/src/hotspot/cpu/x86/x86_64.ad +++ b/src/hotspot/cpu/x86/x86_64.ad @@ -13369,15 +13369,15 @@ instruct cmpFastLockRTM(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI tmp, ins_pipe(pipe_slow); %} -instruct cmpFastLock(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI tmp, rRegP scr, rRegP cx1) %{ +instruct cmpFastLock(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI tmp, rRegP scr) %{ predicate(!Compile::current()->use_rtm()); match(Set cr (FastLock object box)); - effect(TEMP tmp, TEMP scr, TEMP cx1, USE_KILL box); + effect(TEMP tmp, TEMP scr, USE_KILL box); ins_cost(300); format %{ "fastlock $object,$box\t! kills $box,$tmp,$scr" %} ins_encode %{ __ fast_lock($object$$Register, $box$$Register, $tmp$$Register, - $scr$$Register, $cx1$$Register, noreg, NULL, NULL, NULL, false, false); + $scr$$Register, noreg, noreg, NULL, NULL, NULL, false, false); %} ins_pipe(pipe_slow); %}