@@ -2592,11 +2592,11 @@ void MacroAssembler::cmpxchgptr(Register oldv, Register newv, Register addr, Reg
2592
2592
Label retry_load, nope;
2593
2593
bind (retry_load);
2594
2594
// Load reserved from the memory location
2595
- lr_d (tmp, addr, Assembler::aqrl);
2595
+ load_reserved (tmp, addr, int64 , Assembler::aqrl);
2596
2596
// Fail and exit if it is not what we expect
2597
2597
bne (tmp, oldv, nope);
2598
2598
// 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);
2600
2600
beqz (tmp, succeed);
2601
2601
// Retry only when the store conditional failed
2602
2602
j (retry_load);
@@ -2615,36 +2615,38 @@ void MacroAssembler::cmpxchg_obj_header(Register oldv, Register newv, Register o
2615
2615
cmpxchgptr (oldv, newv, obj, tmp, succeed, fail);
2616
2616
}
2617
2617
2618
- void MacroAssembler::load_reserved (Register addr,
2618
+ void MacroAssembler::load_reserved (Register dst,
2619
+ Register addr,
2619
2620
enum operand_size size,
2620
2621
Assembler::Aqrl acquire) {
2621
2622
switch (size) {
2622
2623
case int64:
2623
- lr_d (t0 , addr, acquire);
2624
+ lr_d (dst , addr, acquire);
2624
2625
break ;
2625
2626
case int32:
2626
- lr_w (t0 , addr, acquire);
2627
+ lr_w (dst , addr, acquire);
2627
2628
break ;
2628
2629
case uint32:
2629
- lr_w (t0 , addr, acquire);
2630
+ lr_w (dst , addr, acquire);
2630
2631
zero_extend (t0, t0, 32 );
2631
2632
break ;
2632
2633
default :
2633
2634
ShouldNotReachHere ();
2634
2635
}
2635
2636
}
2636
2637
2637
- void MacroAssembler::store_conditional (Register addr ,
2638
+ void MacroAssembler::store_conditional (Register dst ,
2638
2639
Register new_val,
2640
+ Register addr,
2639
2641
enum operand_size size,
2640
2642
Assembler::Aqrl release) {
2641
2643
switch (size) {
2642
2644
case int64:
2643
- sc_d (t0 , new_val, addr, release);
2645
+ sc_d (dst , new_val, addr, release);
2644
2646
break ;
2645
2647
case int32:
2646
2648
case uint32:
2647
- sc_w (t0 , new_val, addr, release);
2649
+ sc_w (dst , new_val, addr, release);
2648
2650
break ;
2649
2651
default :
2650
2652
ShouldNotReachHere ();
@@ -2778,9 +2780,9 @@ void MacroAssembler::cmpxchg(Register addr, Register expected,
2778
2780
2779
2781
Label retry_load, done, ne_done;
2780
2782
bind (retry_load);
2781
- load_reserved (addr, size, acquire);
2783
+ load_reserved (t0, addr, size, acquire);
2782
2784
bne (t0, expected, ne_done);
2783
- store_conditional (addr , new_val, size, release);
2785
+ store_conditional (t0 , new_val, addr , size, release);
2784
2786
bnez (t0, retry_load);
2785
2787
2786
2788
// equal, succeed
@@ -2812,9 +2814,9 @@ void MacroAssembler::cmpxchg_weak(Register addr, Register expected,
2812
2814
assert_different_registers (new_val, t0);
2813
2815
2814
2816
Label fail, done;
2815
- load_reserved (addr, size, acquire);
2817
+ load_reserved (t0, addr, size, acquire);
2816
2818
bne (t0, expected, fail);
2817
- store_conditional (addr , new_val, size, release);
2819
+ store_conditional (t0 , new_val, addr , size, release);
2818
2820
bnez (t0, fail);
2819
2821
2820
2822
// Success
0 commit comments