8228532: Shenandoah: Implement SBSA::try_resolve_jobject_in_native()
Reviewed-by: rkennke
This commit is contained in:
parent
4449a99f84
commit
e17feae1e8
@ -415,6 +415,26 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
|
||||||
|
Register obj, Register tmp, Label& slowpath) {
|
||||||
|
Label done;
|
||||||
|
// Resolve jobject
|
||||||
|
BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
|
||||||
|
|
||||||
|
// Check for null.
|
||||||
|
__ cbz(obj, done);
|
||||||
|
|
||||||
|
assert(obj != rscratch2, "need rscratch2");
|
||||||
|
Address gc_state(rthread, in_bytes(ShenandoahThreadLocalData::gc_state_offset()));
|
||||||
|
__ ldrb(rscratch2, gc_state);
|
||||||
|
|
||||||
|
// Check for heap in evacuation phase
|
||||||
|
__ tbnz(rscratch2, ShenandoahHeap::EVACUATION_BITPOS, slowpath);
|
||||||
|
|
||||||
|
__ bind(done);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
|
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
|
||||||
bool acquire, bool release, bool weak, bool is_cae,
|
bool acquire, bool release, bool weak, bool is_cae,
|
||||||
Register result) {
|
Register result) {
|
||||||
|
@ -81,6 +81,8 @@ public:
|
|||||||
Register dst, Address src, Register tmp1, Register tmp_thread);
|
Register dst, Address src, Register tmp1, Register tmp_thread);
|
||||||
virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
|
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);
|
||||||
|
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,
|
void cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
|
||||||
bool acquire, bool release, bool weak, bool is_cae, Register result);
|
bool acquire, bool release, bool weak, bool is_cae, Register result);
|
||||||
|
|
||||||
|
@ -621,6 +621,22 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
|
||||||
|
Register obj, Register tmp, Label& slowpath) {
|
||||||
|
Label done;
|
||||||
|
// Resolve jobject
|
||||||
|
BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
|
||||||
|
|
||||||
|
// Check for null.
|
||||||
|
__ testptr(obj, obj);
|
||||||
|
__ jcc(Assembler::zero, done);
|
||||||
|
|
||||||
|
Address gc_state(jni_env, ShenandoahThreadLocalData::gc_state_offset() - JavaThread::jni_environment_offset());
|
||||||
|
__ testb(gc_state, ShenandoahHeap::EVACUATION);
|
||||||
|
__ jccb(Assembler::notZero, slowpath);
|
||||||
|
__ bind(done);
|
||||||
|
}
|
||||||
|
|
||||||
// Special Shenandoah CAS implementation that handles false negatives
|
// Special Shenandoah CAS implementation that handles false negatives
|
||||||
// due to concurrent evacuation.
|
// due to concurrent evacuation.
|
||||||
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
|
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
|
||||||
|
@ -91,6 +91,8 @@ public:
|
|||||||
Register dst, Address src, Register tmp1, Register tmp_thread);
|
Register dst, Address src, Register tmp1, Register tmp_thread);
|
||||||
virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
|
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);
|
||||||
|
virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
|
||||||
|
Register obj, Register tmp, Label& slowpath);
|
||||||
|
|
||||||
virtual void barrier_stubs_init();
|
virtual void barrier_stubs_init();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user