From ad33392536e606eac02bf3ee261fa7ddd26646a0 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Tue, 2 Nov 2021 10:51:57 +0000 Subject: JNI: Rewrite read barrier slow path. Preserve all argument registers in the slow path to prepare for moving arguments in registers for @FastNative. Move the read barrier check earlier as it logically belongs to the transition frame creation. For Baker read barriers, add a mark bit check with fast return to the main path. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: run-gtests.sh Test: testrunner.py --target --optimizing Bug: 172332525 Change-Id: I50bbc0bc9d54577281e7667aafebb4a53a539af1 --- compiler/utils/jni_macro_assembler.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'compiler/utils/jni_macro_assembler.h') diff --git a/compiler/utils/jni_macro_assembler.h b/compiler/utils/jni_macro_assembler.h index 0ccf4cd60e..7f5dc2f76b 100644 --- a/compiler/utils/jni_macro_assembler.h +++ b/compiler/utils/jni_macro_assembler.h @@ -257,6 +257,10 @@ class JNIMacroAssembler : public DeletableArenaObject { virtual void Jump(JNIMacroLabel* label) = 0; // Emit a conditional jump to the label by applying a unary condition test to the GC marking flag. virtual void TestGcMarking(JNIMacroLabel* label, JNIMacroUnaryCondition cond) = 0; + // Emit a conditional jump to the label by applying a unary condition test to object's mark bit. + virtual void TestMarkBit(ManagedRegister ref, + JNIMacroLabel* label, + JNIMacroUnaryCondition cond) = 0; // Code at this offset will serve as the target for the Jump call. virtual void Bind(JNIMacroLabel* label) = 0; -- cgit v1.2.3-59-g8ed1b