From a41ea2708d143b5982f1969864513b62706d11d4 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Mon, 7 Sep 2020 15:24:36 +0000 Subject: arm64: VarHandle.get/set intrinsic for fields. Test: testrunner.py --target --64 --optimizing -t 712-varhandle-invocation Test: Repeat with ART_USE_READ_BARRIER=false ART_HEAP_POISONING=true. Test: Repeat with ART_READ_BARRIER_TYPE=TABLELOOKUP. Bug: 65872996 Change-Id: Ic0ec2eba7b493ef3b1d15291b67e0214e6e2de0e --- compiler/optimizing/intrinsics_utils.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'compiler/optimizing/intrinsics_utils.h') diff --git a/compiler/optimizing/intrinsics_utils.h b/compiler/optimizing/intrinsics_utils.h index 4b8a8e743d..d900b21073 100644 --- a/compiler/optimizing/intrinsics_utils.h +++ b/compiler/optimizing/intrinsics_utils.h @@ -20,7 +20,10 @@ #include "base/casts.h" #include "base/macros.h" #include "code_generator.h" +#include "data_type-inl.h" +#include "dex/dex_file-inl.h" #include "locations.h" +#include "mirror/var_handle.h" #include "nodes.h" #include "utils/assembler.h" #include "utils/label.h" @@ -93,6 +96,24 @@ class IntrinsicSlowPath : public TSlowPathCode { DISALLOW_COPY_AND_ASSIGN(IntrinsicSlowPath); }; +static inline size_t GetExpectedVarHandleCoordinatesCount(HInvoke *invoke) { + mirror::VarHandle::AccessModeTemplate access_mode_template = + mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic()); + size_t var_type_count = mirror::VarHandle::GetNumberOfVarTypeParameters(access_mode_template); + size_t accessor_argument_count = invoke->GetNumberOfArguments() - 1; + + return accessor_argument_count - var_type_count; +} + +static inline DataType::Type GetDataTypeFromShorty(HInvoke* invoke, uint32_t index) { + DCHECK(invoke->IsInvokePolymorphic()); + const DexFile& dex_file = invoke->GetBlock()->GetGraph()->GetDexFile(); + const char* shorty = dex_file.GetShorty(invoke->AsInvokePolymorphic()->GetProtoIndex()); + DCHECK_LT(index, strlen(shorty)); + + return DataType::FromShorty(shorty[index]); +} + } // namespace art #endif // ART_COMPILER_OPTIMIZING_INTRINSICS_UTILS_H_ -- cgit v1.2.3-59-g8ed1b