@@ -2592,11 +2592,11 @@ void MacroAssembler::cmpxchgptr(Register oldv, Register newv, Register addr, Reg
25922592 Label retry_load, nope;
25932593 bind (retry_load);
25942594 // Load reserved from the memory location
2595- lr_d (tmp, addr, Assembler::aqrl);
2595+ load_reserved (tmp, addr, int64 , Assembler::aqrl);
25962596 // Fail and exit if it is not what we expect
25972597 bne (tmp, oldv, nope);
25982598 // If the store conditional succeeds, tmp will be zero
2599- sc_d (tmp, newv, addr, Assembler::rl);
2599+ store_conditional (tmp, newv, addr, int64 , Assembler::rl);
26002600 beqz (tmp, succeed);
26012601 // Retry only when the store conditional failed
26022602 j (retry_load);
@@ -2615,36 +2615,38 @@ void MacroAssembler::cmpxchg_obj_header(Register oldv, Register newv, Register o
26152615 cmpxchgptr (oldv, newv, obj, tmp, succeed, fail);
26162616}
26172617
2618- void MacroAssembler::load_reserved (Register addr,
2618+ void MacroAssembler::load_reserved (Register dst,
2619+ Register addr,
26192620 enum operand_size size,
26202621 Assembler::Aqrl acquire) {
26212622 switch (size) {
26222623 case int64:
2623- lr_d (t0 , addr, acquire);
2624+ lr_d (dst , addr, acquire);
26242625 break ;
26252626 case int32:
2626- lr_w (t0 , addr, acquire);
2627+ lr_w (dst , addr, acquire);
26272628 break ;
26282629 case uint32:
2629- lr_w (t0 , addr, acquire);
2630+ lr_w (dst , addr, acquire);
26302631 zero_extend (t0, t0, 32 );
26312632 break ;
26322633 default :
26332634 ShouldNotReachHere ();
26342635 }
26352636}
26362637
2637- void MacroAssembler::store_conditional (Register addr ,
2638+ void MacroAssembler::store_conditional (Register dst ,
26382639 Register new_val,
2640+ Register addr,
26392641 enum operand_size size,
26402642 Assembler::Aqrl release) {
26412643 switch (size) {
26422644 case int64:
2643- sc_d (t0 , new_val, addr, release);
2645+ sc_d (dst , new_val, addr, release);
26442646 break ;
26452647 case int32:
26462648 case uint32:
2647- sc_w (t0 , new_val, addr, release);
2649+ sc_w (dst , new_val, addr, release);
26482650 break ;
26492651 default :
26502652 ShouldNotReachHere ();
@@ -2778,9 +2780,9 @@ void MacroAssembler::cmpxchg(Register addr, Register expected,
27782780
27792781 Label retry_load, done, ne_done;
27802782 bind (retry_load);
2781- load_reserved (addr, size, acquire);
2783+ load_reserved (t0, addr, size, acquire);
27822784 bne (t0, expected, ne_done);
2783- store_conditional (addr , new_val, size, release);
2785+ store_conditional (t0 , new_val, addr , size, release);
27842786 bnez (t0, retry_load);
27852787
27862788 // equal, succeed
@@ -2812,9 +2814,9 @@ void MacroAssembler::cmpxchg_weak(Register addr, Register expected,
28122814 assert_different_registers (new_val, t0);
28132815
28142816 Label fail, done;
2815- load_reserved (addr, size, acquire);
2817+ load_reserved (t0, addr, size, acquire);
28162818 bne (t0, expected, fail);
2817- store_conditional (addr , new_val, size, release);
2819+ store_conditional (t0 , new_val, addr , size, release);
28182820 bnez (t0, fail);
28192821
28202822 // Success
0 commit comments