@@ -3482,60 +3482,60 @@ address MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
3482
3482
return stub_start_addr;
3483
3483
}
3484
3484
3485
- Address MacroAssembler::add_memory_helper (const Address dst) {
3485
+ Address MacroAssembler::add_memory_helper (const Address dst, Register tmp ) {
3486
3486
switch (dst.getMode ()) {
3487
3487
case Address::base_plus_offset:
3488
3488
// This is the expected mode, although we allow all the other
3489
3489
// forms below.
3490
- return form_address (t1 , dst.base (), dst.offset ());
3490
+ return form_address (tmp , dst.base (), dst.offset ());
3491
3491
default :
3492
- la (t1 , dst);
3493
- return Address (t1 );
3492
+ la (tmp , dst);
3493
+ return Address (tmp );
3494
3494
}
3495
3495
}
3496
3496
3497
- void MacroAssembler::increment (const Address dst, int64_t value) {
3497
+ void MacroAssembler::increment (const Address dst, int64_t value, Register tmp1, Register tmp2 ) {
3498
3498
assert (((dst.getMode () == Address::base_plus_offset &&
3499
3499
is_offset_in_range (dst.offset (), 12 )) || is_imm_in_range (value, 12 , 0 )),
3500
3500
" invalid value and address mode combination" );
3501
- Address adr = add_memory_helper (dst);
3502
- assert (!adr.uses (t0 ), " invalid dst for address increment" );
3503
- ld (t0 , adr);
3504
- add (t0, t0 , value, t1 );
3505
- sd (t0 , adr);
3501
+ Address adr = add_memory_helper (dst, tmp2 );
3502
+ assert (!adr.uses (tmp1 ), " invalid dst for address increment" );
3503
+ ld (tmp1 , adr);
3504
+ add (tmp1, tmp1 , value, tmp2 );
3505
+ sd (tmp1 , adr);
3506
3506
}
3507
3507
3508
- void MacroAssembler::incrementw (const Address dst, int32_t value) {
3508
+ void MacroAssembler::incrementw (const Address dst, int32_t value, Register tmp1, Register tmp2 ) {
3509
3509
assert (((dst.getMode () == Address::base_plus_offset &&
3510
3510
is_offset_in_range (dst.offset (), 12 )) || is_imm_in_range (value, 12 , 0 )),
3511
3511
" invalid value and address mode combination" );
3512
- Address adr = add_memory_helper (dst);
3513
- assert (!adr.uses (t0 ), " invalid dst for address increment" );
3514
- lwu (t0 , adr);
3515
- addw (t0, t0 , value, t1 );
3516
- sw (t0 , adr);
3512
+ Address adr = add_memory_helper (dst, tmp2 );
3513
+ assert (!adr.uses (tmp1 ), " invalid dst for address increment" );
3514
+ lwu (tmp1 , adr);
3515
+ addw (tmp1, tmp1 , value, tmp2 );
3516
+ sw (tmp1 , adr);
3517
3517
}
3518
3518
3519
- void MacroAssembler::decrement (const Address dst, int64_t value) {
3519
+ void MacroAssembler::decrement (const Address dst, int64_t value, Register tmp1, Register tmp2 ) {
3520
3520
assert (((dst.getMode () == Address::base_plus_offset &&
3521
3521
is_offset_in_range (dst.offset (), 12 )) || is_imm_in_range (value, 12 , 0 )),
3522
3522
" invalid value and address mode combination" );
3523
- Address adr = add_memory_helper (dst);
3524
- assert (!adr.uses (t0 ), " invalid dst for address decrement" );
3525
- ld (t0 , adr);
3526
- sub (t0, t0 , value, t1 );
3527
- sd (t0 , adr);
3523
+ Address adr = add_memory_helper (dst, tmp2 );
3524
+ assert (!adr.uses (tmp1 ), " invalid dst for address decrement" );
3525
+ ld (tmp1 , adr);
3526
+ sub (tmp1, tmp1 , value, tmp2 );
3527
+ sd (tmp1 , adr);
3528
3528
}
3529
3529
3530
- void MacroAssembler::decrementw (const Address dst, int32_t value) {
3530
+ void MacroAssembler::decrementw (const Address dst, int32_t value, Register tmp1, Register tmp2 ) {
3531
3531
assert (((dst.getMode () == Address::base_plus_offset &&
3532
3532
is_offset_in_range (dst.offset (), 12 )) || is_imm_in_range (value, 12 , 0 )),
3533
3533
" invalid value and address mode combination" );
3534
- Address adr = add_memory_helper (dst);
3535
- assert (!adr.uses (t0 ), " invalid dst for address decrement" );
3536
- lwu (t0 , adr);
3537
- subw (t0, t0 , value, t1 );
3538
- sw (t0 , adr);
3534
+ Address adr = add_memory_helper (dst, tmp2 );
3535
+ assert (!adr.uses (tmp1 ), " invalid dst for address decrement" );
3536
+ lwu (tmp1 , adr);
3537
+ subw (tmp1, tmp1 , value, tmp2 );
3538
+ sw (tmp1 , adr);
3539
3539
}
3540
3540
3541
3541
void MacroAssembler::cmpptr (Register src1, Address src2, Label& equal) {
0 commit comments