Implement array get and array put in optimizing.
Also fix a couple of assembler/disassembler issues.
Change-Id: I705c8572988c1a9c4df3172b304678529636d5f6
diff --git a/compiler/utils/arm/assembler_thumb2.cc b/compiler/utils/arm/assembler_thumb2.cc
index 78ff31a..4904428 100644
--- a/compiler/utils/arm/assembler_thumb2.cc
+++ b/compiler/utils/arm/assembler_thumb2.cc
@@ -659,6 +659,10 @@
if (so.IsImmediate()) {
return true;
}
+
+ if (!can_contain_high_register) {
+ return true;
+ }
}
if (so.IsRegister() && IsHighRegister(so.GetRegister()) && !can_contain_high_register) {
diff --git a/compiler/utils/assembler_thumb_test.cc b/compiler/utils/assembler_thumb_test.cc
index 3312f8f..891a287 100644
--- a/compiler/utils/assembler_thumb_test.cc
+++ b/compiler/utils/assembler_thumb_test.cc
@@ -312,6 +312,9 @@
__ movs(R0, ShifterOperand(R1));
__ mvns(R0, ShifterOperand(R1));
+ // 32 bit variants.
+ __ add(R12, R1, ShifterOperand(R0));
+
size_t cs = __ CodeSize();
std::vector<uint8_t> managed_code(cs);
MemoryRegion code(&managed_code[0], managed_code.size());
@@ -868,6 +871,9 @@
__ StoreToOffset(kStoreWord, R2, R4, 12); // Simple
__ StoreToOffset(kStoreWord, R2, R4, 0x2000); // Offset too big.
+ __ StoreToOffset(kStoreWord, R0, R12, 12);
+ __ StoreToOffset(kStoreHalfword, R0, R12, 12);
+ __ StoreToOffset(kStoreByte, R2, R12, 12);
size_t cs = __ CodeSize();
std::vector<uint8_t> managed_code(cs);
diff --git a/compiler/utils/assembler_thumb_test_expected.cc.inc b/compiler/utils/assembler_thumb_test_expected.cc.inc
index 18035f3..3f2641c 100644
--- a/compiler/utils/assembler_thumb_test_expected.cc.inc
+++ b/compiler/utils/assembler_thumb_test_expected.cc.inc
@@ -43,6 +43,7 @@
" 3e: 42c8 cmn r0, r1\n",
" 40: 0008 movs r0, r1\n",
" 42: 43c8 mvns r0, r1\n",
+ " 44: eb01 0c00 add.w ip, r1, r0\n",
nullptr
};
const char* DataProcessingImmediateResults[] = {
@@ -355,6 +356,9 @@
" 2: f44f 5c00 mov.w ip, #8192 ; 0x2000\n",
" 6: 44a4 add ip, r4\n",
" 8: f8cc 2000 str.w r2, [ip]\n",
+ " c: f8cc 000c str.w r0, [ip, #12]\n",
+ " 10: f8ac 000c strh.w r0, [ip, #12]\n",
+ " 14: f88c 200c strb.w r2, [ip, #12]\n",
nullptr
};
const char* IfThenResults[] = {