Use Thumb sp-relative store.
When storing a register to stack, we used to always generate Thumb2 store.
This CL uses a kThumbStrSpRel instruction when generating sp-relative stores
with a Thumb source register.
Change-Id: If729b5428c41350f8dc253e71ce8b63acbbc2acc
diff --git a/src/compiler/dex/quick/arm/utility_arm.cc b/src/compiler/dex/quick/arm/utility_arm.cc
index ba543ac..33e8210 100644
--- a/src/compiler/dex/quick/arm/utility_arm.cc
+++ b/src/compiler/dex/quick/arm/utility_arm.cc
@@ -966,9 +966,14 @@
short_form = true;
encoded_disp >>= 2;
}
- break;
+ break;
}
- if (all_low_regs && displacement < 128 && displacement >= 0) {
+ if (ARM_LOWREG(r_src) && (rBase == r13sp) &&
+ (displacement <= 1020) && (displacement >= 0)) {
+ short_form = true;
+ encoded_disp >>= 2;
+ opcode = kThumbStrSpRel;
+ } else if (all_low_regs && displacement < 128 && displacement >= 0) {
DCHECK_EQ((displacement & 0x3), 0);
short_form = true;
encoded_disp >>= 2;