diff options
author | 2022-01-26 10:21:32 +0000 | |
---|---|---|
committer | 2022-01-27 12:51:11 +0000 | |
commit | ec696e5d98ae4c503966f199bac341b50bfa1a5b (patch) | |
tree | 8b23d8373f28b1f19f57f99d9a1484f7c7942c31 /compiler/optimizing/intrinsics_utils.h | |
parent | 9c69afddaf25924ef7148a8fee0c319e7c4c95b0 (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.h | 38 |
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)); |