summaryrefslogtreecommitdiff
path: root/compiler/optimizing/intrinsics_utils.h
diff options
context:
space:
mode:
author Ulya Trafimovich <skvadrik@google.com> 2022-01-26 10:21:32 +0000
committer Ulya Trofimovich <skvadrik@google.com> 2022-01-27 12:51:11 +0000
commitec696e5d98ae4c503966f199bac341b50bfa1a5b (patch)
tree8b23d8373f28b1f19f57f99d9a1484f7c7942c31 /compiler/optimizing/intrinsics_utils.h
parent9c69afddaf25924ef7148a8fee0c319e7c4c95b0 (diff)
Clean up debug checks in intrinsic code.
Deduplicate checks that were repeated for all ISAs, use a few helper functions to make the code simpler. Bug: 71781600 Test: art/test.py -r --host Test: art/test.py -r --target Change-Id: I3fefecce98a9a8b3b9bf53c31c2eefdafe8bd6a3
Diffstat (limited to 'compiler/optimizing/intrinsics_utils.h')
-rw-r--r--compiler/optimizing/intrinsics_utils.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/compiler/optimizing/intrinsics_utils.h b/compiler/optimizing/intrinsics_utils.h
index 3713b32a6c..f24454786e 100644
--- a/compiler/optimizing/intrinsics_utils.h
+++ b/compiler/optimizing/intrinsics_utils.h
@@ -146,6 +146,44 @@ static inline bool IsVarHandleGetAndAdd(HInvoke* invoke) {
}
}
+static inline bool IsVarHandleGet(HInvoke* invoke) {
+ mirror::VarHandle::AccessModeTemplate access_mode =
+ mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic());
+ return access_mode == mirror::VarHandle::AccessModeTemplate::kGet;
+}
+
+static inline bool IsUnsafeGetObject(HInvoke* invoke) {
+ switch (invoke->GetIntrinsic()) {
+ case Intrinsics::kUnsafeGetObject:
+ case Intrinsics::kUnsafeGetObjectVolatile:
+ case Intrinsics::kJdkUnsafeGetObject:
+ case Intrinsics::kJdkUnsafeGetObjectVolatile:
+ case Intrinsics::kJdkUnsafeGetObjectAcquire:
+ return true;
+ default:
+ return false;
+ }
+}
+
+static inline bool IsUnsafeCASObject(HInvoke* invoke) {
+ switch (invoke->GetIntrinsic()) {
+ case Intrinsics::kUnsafeCASObject:
+ case Intrinsics::kJdkUnsafeCASObject:
+ case Intrinsics::kJdkUnsafeCompareAndSetObject:
+ return true;
+ default:
+ return false;
+ }
+}
+
+static inline bool IsVarHandleCASFamily(HInvoke* invoke) {
+ mirror::VarHandle::AccessModeTemplate access_mode =
+ mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic());
+ return access_mode == mirror::VarHandle::AccessModeTemplate::kCompareAndSet ||
+ access_mode == mirror::VarHandle::AccessModeTemplate::kGetAndUpdate ||
+ access_mode == mirror::VarHandle::AccessModeTemplate::kCompareAndExchange;
+}
+
static inline DataType::Type GetVarHandleExpectedValueType(HInvoke* invoke,
size_t expected_coordinates_count) {
DCHECK_EQ(expected_coordinates_count, GetExpectedVarHandleCoordinatesCount(invoke));