Revert^2 "JNI: Rewrite locking for synchronized methods."
This reverts commit 02e0eb7eef35b03ae9eed60f02c889a6be400de9.
Reason for revert: Fixed the arm64 UNLOCK_OBJECT_FAST_PATH
macro to use the correct label for one branch to slow path.
Change-Id: I311687e877c54229af1613db2928e47b3ef0b6f2
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: run-gtests.sh
Test: testrunner.py --target --optimizing
Bug: 172332525
diff --git a/compiler/utils/x86/jni_macro_assembler_x86.cc b/compiler/utils/x86/jni_macro_assembler_x86.cc
index d0afa72..7dff279 100644
--- a/compiler/utils/x86/jni_macro_assembler_x86.cc
+++ b/compiler/utils/x86/jni_macro_assembler_x86.cc
@@ -332,6 +332,10 @@
DCHECK_EQ(src.GetSize(), dest.GetSize()); // Even for references.
if (src.IsRegister()) {
if (UNLIKELY(dest.IsRegister())) {
+ if (dest.GetRegister().Equals(src.GetRegister())) {
+ // JNI compiler sometimes adds a no-op move.
+ continue;
+ }
// Native ABI has only stack arguments but we may pass one "hidden arg" in register.
CHECK(!found_hidden_arg);
found_hidden_arg = true;
@@ -341,7 +345,6 @@
Move(dest.GetRegister(), src.GetRegister(), dest.GetSize());
} else {
if (ref != kInvalidReferenceOffset) {
- Store(ref, srcs[i].GetRegister(), kObjectReferenceSize);
// Note: We can clobber `src` here as the register cannot hold more than one argument.
// This overload of `CreateJObject()` currently does not use the scratch
// register ECX, so this shall not clobber another argument.