Chromium Code Reviews| 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(); |
| } |