diff --git a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp index f53f501a350..3f655722cdc 100644 --- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp @@ -367,7 +367,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet d } void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2) { + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { bool on_oop = is_reference_type(type); if (!on_oop) { BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2); @@ -392,7 +392,7 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet false /* expand_call */); if (val == noreg) { - BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), noreg, noreg, noreg); + BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), noreg, noreg, noreg, noreg); } else { iu_barrier(masm, val, tmp1); // G1 barrier needs uncompressed oop for region cross check. @@ -401,7 +401,7 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet new_val = rscratch2; __ mov(new_val, val); } - BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), val, noreg, noreg); + BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), val, noreg, noreg, noreg); } } diff --git a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp index 1a20417f080..30482e1ab48 100644 --- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp @@ -74,7 +74,7 @@ class ShenandoahBarrierSetAssembler: public BarrierSetAssembler { virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread); virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2); + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3 = noreg); virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env, Register obj, Register tmp, Label& slowpath); void cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val, diff --git a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp index d6cc3839ad8..24a6b1acf5b 100644 --- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp @@ -3306,7 +3306,7 @@ void TemplateTable::fast_accessfield(TosState state) switch (bytecode()) { case Bytecodes::_fast_qgetfield: { - Register index = r4, klass = r5, inline_klass = r6; + Register index = r4, klass = r5, inline_klass = r6, tmp = r7; Label is_inlined, nonnull, Done; __ test_field_is_inlined(r3, noreg /* temp */, is_inlined); // field is not inlined @@ -3316,7 +3316,7 @@ void TemplateTable::fast_accessfield(TosState state) __ ldr(klass, Address(r2, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f1_offset()))); __ get_inline_type_field_klass(klass, index, inline_klass); - __ get_default_value_oop(inline_klass, rscratch1 /* temp */, r0); + __ get_default_value_oop(inline_klass, tmp /* temp */, r0); __ bind(nonnull); __ verify_oop(r0); __ b(Done); @@ -3325,7 +3325,7 @@ void TemplateTable::fast_accessfield(TosState state) __ andw(index, r3, ConstantPoolCacheEntry::field_index_mask); __ ldr(klass, Address(r2, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f1_offset()))); - __ read_inlined_field(klass, index, r1, inline_klass /* temp */, r0); + __ read_inlined_field(klass, index, r1, tmp /* temp */, r0); __ verify_oop(r0); __ bind(Done); }