Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Unified Diff: runtime/vm/assembler_arm.cc

Issue 1407393006: Make arm assembler explicitly take both registers for load/store-pair. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/assembler_arm.cc
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
index 815b7961c78196994ed2e23ab7eb39719fe789d1..31a188e58b9fbbc25fa45fc9b6fc6fb93ef3cfbe 100644
--- a/runtime/vm/assembler_arm.cc
+++ b/runtime/vm/assembler_arm.cc
@@ -493,10 +493,11 @@ void Assembler::ldrsh(Register rd, Address ad, Condition cond) {
}
-void Assembler::ldrd(Register rd, Register rn, int32_t offset, Condition cond) {
+void Assembler::ldrd(Register rd, Register rd2, Register rn, int32_t offset,
+ Condition cond) {
ASSERT((rd % 2) == 0);
+ ASSERT(rd2 == rd + 1);
if (TargetCPUFeatures::arm_version() == ARMv5TE) {
- const Register rd2 = static_cast<Register>(static_cast<int32_t>(rd) + 1);
ldr(rd, Address(rn, offset), cond);
ldr(rd2, Address(rn, offset + kWordSize), cond);
} else {
@@ -505,10 +506,11 @@ void Assembler::ldrd(Register rd, Register rn, int32_t offset, Condition cond) {
}
-void Assembler::strd(Register rd, Register rn, int32_t offset, Condition cond) {
+void Assembler::strd(Register rd, Register rd2, Register rn, int32_t offset,
+ Condition cond) {
ASSERT((rd % 2) == 0);
+ ASSERT(rd2 == rd + 1);
if (TargetCPUFeatures::arm_version() == ARMv5TE) {
- const Register rd2 = static_cast<Register>(static_cast<int32_t>(rd) + 1);
str(rd, Address(rn, offset), cond);
str(rd2, Address(rn, offset + kWordSize), cond);
} else {
@@ -1712,10 +1714,10 @@ void Assembler::WriteShadowedFieldPair(Register base,
ASSERT(base != value_odd);
Operand shadow(GetVerifiedMemoryShadow());
add(base, base, shadow, cond);
- strd(value_even, base, offset, cond);
+ strd(value_even, value_odd, base, offset, cond);
sub(base, base, shadow, cond);
}
- strd(value_even, base, offset, cond);
+ strd(value_even, value_odd, base, offset, cond);
}
@@ -2854,9 +2856,11 @@ void Assembler::LoadFromOffset(OperandSize size,
case kWord:
ldr(reg, Address(base, offset), cond);
break;
- case kWordPair:
- ldrd(reg, base, offset, cond);
+ case kWordPair: {
zra 2015/10/23 03:48:44 To retain the benefits of passing both registers t
rmacnak 2015/10/23 16:29:03 Deleted this case as it is unused.
+ Register reg2 = static_cast<Register>(static_cast<int32_t>(reg) + 1);
+ ldrd(reg, reg2, base, offset, cond);
break;
+ }
default:
UNREACHABLE();
}
@@ -2886,9 +2890,11 @@ void Assembler::StoreToOffset(OperandSize size,
case kWord:
str(reg, Address(base, offset), cond);
break;
- case kWordPair:
- strd(reg, base, offset, cond);
+ case kWordPair: {
zra 2015/10/23 03:48:44 ditto
rmacnak 2015/10/23 16:29:03 Deleted
+ Register reg2 = static_cast<Register>(static_cast<int32_t>(reg) + 1);
+ strd(reg, reg2, base, offset, cond);
break;
+ }
default:
UNREACHABLE();
}

Powered by Google App Engine
This is Rietveld 408576698