arm: Implement VarHandle intrinsics for byte array views.
Using benchmarks provided by
https://android-review.googlesource.com/1420959
on blueline little cores with fixed frequency 1420800:
before after
GetByteArrayViewInt 28.989 0.028
SetByteArrayViewInt 30.114 0.028
GetByteArrayViewBigEndianInt 28.974 0.030
SetByteArrayViewBigEndianInt 30.130 0.030
Test: testrunner.py --target --32 --optimizing
Bug: 71781600
Change-Id: I40c1c2fdd829f17872c457994010f78549c895de
diff --git a/compiler/optimizing/code_generator_arm_vixl.h b/compiler/optimizing/code_generator_arm_vixl.h
index a310545..b797c30 100644
--- a/compiler/optimizing/code_generator_arm_vixl.h
+++ b/compiler/optimizing/code_generator_arm_vixl.h
@@ -18,6 +18,7 @@
#define ART_COMPILER_OPTIMIZING_CODE_GENERATOR_ARM_VIXL_H_
#include "base/enums.h"
+#include "class_root.h"
#include "code_generator.h"
#include "common_arm.h"
#include "dex/string_reference.h"
@@ -638,7 +639,9 @@
Handle<mirror::Class> handle);
void LoadBootImageAddress(vixl::aarch32::Register reg, uint32_t boot_image_reference);
+ void LoadTypeForBootImageIntrinsic(vixl::aarch32::Register reg, TypeReference type_reference);
void LoadIntrinsicDeclaringClass(vixl::aarch32::Register reg, HInvoke* invoke);
+ void LoadClassRootForIntrinsic(vixl::aarch32::Register reg, ClassRoot class_root);
void EmitLinkerPatches(ArenaVector<linker::LinkerPatch>* linker_patches) override;
bool NeedsThunkCode(const linker::LinkerPatch& patch) const override;