Implement thin-lock fast path for compiler-llvm.
Change-Id: I09d6a0dba4df7cbeb0c0e3f432ab3b09fce0846d
diff --git a/src/compiler_llvm/runtime_support_builder_arm.cc b/src/compiler_llvm/runtime_support_builder_arm.cc
index a180520..6ce9ea4 100644
--- a/src/compiler_llvm/runtime_support_builder_arm.cc
+++ b/src/compiler_llvm/runtime_support_builder_arm.cc
@@ -33,6 +33,7 @@
namespace art {
namespace compiler_llvm {
+/* Thread */
llvm::Value* RuntimeSupportBuilderARM::EmitGetCurrentThread() {
Function* ori_func = GetRuntimeSupportFunction(runtime_support::GetCurrentThread);
@@ -73,5 +74,23 @@
}
+/* Monitor */
+
+void RuntimeSupportBuilderARM::EmitLockObject(llvm::Value* object) {
+ RuntimeSupportBuilder::EmitLockObject(object);
+ FunctionType* func_ty = FunctionType::get(/*Result=*/Type::getVoidTy(context_),
+ /*isVarArg=*/false);
+ InlineAsm* func = InlineAsm::get(func_ty, "dmb sy", "", true);
+ irb_.CreateCall(func);
+}
+
+void RuntimeSupportBuilderARM::EmitUnlockObject(llvm::Value* object) {
+ RuntimeSupportBuilder::EmitUnlockObject(object);
+ FunctionType* func_ty = FunctionType::get(/*Result=*/Type::getVoidTy(context_),
+ /*isVarArg=*/false);
+ InlineAsm* func = InlineAsm::get(func_ty, "dmb sy", "", true);
+ irb_.CreateCall(func);
+}
+
} // namespace compiler_llvm
} // namespace art