summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/common_arm64.h
diff options
context:
space:
mode:
authorAlexandre Rames <alexandre.rames@linaro.org>2015-07-07 11:34:16 +0100
committerAlexandre Rames <alexandre.rames@linaro.org>2015-07-07 11:34:16 +0100
commit82000b0cf9bb32fc55cdb125bf37c884d44a8671 (patch)
treee94afb4ff819998a15c411fff967e666adecadf0 /compiler/optimizing/common_arm64.h
parent4a305daf77a9b80d6abb7817a836aa59d2db521d (diff)
downloadart-82000b0cf9bb32fc55cdb125bf37c884d44a8671.tar.gz
art-82000b0cf9bb32fc55cdb125bf37c884d44a8671.tar.bz2
art-82000b0cf9bb32fc55cdb125bf37c884d44a8671.zip
Improve code generation for ARM64 VisitArrayGet/Set.
We prefer the code sequence add temp, obj, #offset ldr out, [temp, index LSL #shift_amount] to add temp, obj, index LSL #shift_amount ldr out, [temp, #offset] Change-Id: I98f51a1b5a5ecd84c677d6dbd4c4bfc0f157f5e2
Diffstat (limited to 'compiler/optimizing/common_arm64.h')
-rw-r--r--compiler/optimizing/common_arm64.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/optimizing/common_arm64.h b/compiler/optimizing/common_arm64.h
index 246fff99ac..f54547534f 100644
--- a/compiler/optimizing/common_arm64.h
+++ b/compiler/optimizing/common_arm64.h
@@ -151,6 +151,15 @@ static inline vixl::MemOperand HeapOperand(const vixl::Register& base, size_t of
return vixl::MemOperand(base.X(), offset);
}
+static inline vixl::MemOperand HeapOperand(const vixl::Register& base,
+ const vixl::Register& regoffset,
+ vixl::Shift shift = vixl::LSL,
+ unsigned shift_amount = 0) {
+ // A heap reference must be 32bit, so fit in a W register.
+ DCHECK(base.IsW());
+ return vixl::MemOperand(base.X(), regoffset, shift, shift_amount);
+}
+
static inline vixl::MemOperand HeapOperand(const vixl::Register& base, Offset offset) {
return HeapOperand(base, offset.SizeValue());
}