Index: src/arm/macro-assembler-arm.cc |
=================================================================== |
--- src/arm/macro-assembler-arm.cc (revision 8139) |
+++ src/arm/macro-assembler-arm.cc (working copy) |
@@ -654,19 +654,34 @@ |
ASSERT_EQ(0, dst1.code() % 2); |
ASSERT_EQ(dst1.code() + 1, dst2.code()); |
+ // V8 does not use this addressing mode, so the fallback code |
+ // below doesn't support it yet. |
+ ASSERT((src.am() != PreIndex) && (src.am() != NegPreIndex)); |
+ |
// Generate two ldr instructions if ldrd is not available. |
if (CpuFeatures::IsSupported(ARMv7)) { |
CpuFeatures::Scope scope(ARMv7); |
ldrd(dst1, dst2, src, cond); |
} else { |
MemOperand src2(src); |
Søren Thygesen Gjesse
2011/06/14 10:44:01
Please move the declaration of src2 closer to wher
m.m.capewell
2011/06/22 12:42:36
Done.
|
- src2.set_offset(src2.offset() + 4); |
- if (dst1.is(src.rn())) { |
- ldr(dst2, src2, cond); |
- ldr(dst1, src, cond); |
- } else { |
- ldr(dst1, src, cond); |
- ldr(dst2, src2, cond); |
+ if ((src.am() == Offset) || (src.am() == NegOffset)) { |
+ src2.set_offset(src2.offset() + 4); |
+ if (dst1.is(src.rn())) { |
+ ldr(dst2, src2, cond); |
+ ldr(dst1, src, cond); |
+ } else { |
+ ldr(dst1, src, cond); |
+ ldr(dst2, src2, cond); |
+ } |
+ } else { // PostIndex or NegPostIndex. |
Søren Thygesen Gjesse
2011/06/14 10:44:01
Please assert PostIndex or NegPostIndex.
m.m.capewell
2011/06/22 12:42:36
Done.
|
+ if (dst1.is(src.rn())) { |
+ ldr(dst2, MemOperand(src.rn(), 4, Offset), cond); |
+ ldr(dst1, src, cond); |
+ } else { |
+ src2.set_offset(src2.offset() - 4); |
+ ldr(dst1, MemOperand(src.rn(), 4, PostIndex), cond); |
+ ldr(dst2, src2, cond); |
+ } |
} |
} |
} |
@@ -679,15 +694,25 @@ |
ASSERT_EQ(0, src1.code() % 2); |
ASSERT_EQ(src1.code() + 1, src2.code()); |
+ // V8 does not use this addressing mode, so the fallback code |
+ // below doesn't support it yet. |
+ ASSERT((dst.am() != PreIndex) && (dst.am() != NegPreIndex)); |
+ |
// Generate two str instructions if strd is not available. |
if (CpuFeatures::IsSupported(ARMv7)) { |
CpuFeatures::Scope scope(ARMv7); |
strd(src1, src2, dst, cond); |
} else { |
MemOperand dst2(dst); |
- dst2.set_offset(dst2.offset() + 4); |
- str(src1, dst, cond); |
- str(src2, dst2, cond); |
+ if ((dst.am() == Offset) || (dst.am() == NegOffset)) { |
+ dst2.set_offset(dst2.offset() + 4); |
+ str(src1, dst, cond); |
+ str(src2, dst2, cond); |
+ } else { // PostIndex or NegPostIndex. |
Søren Thygesen Gjesse
2011/06/14 10:44:01
Please assert PostIndex or NegPostIndex.
m.m.capewell
2011/06/22 12:42:36
Done.
|
+ dst2.set_offset(dst2.offset() - 4); |
+ str(src1, MemOperand(dst.rn(), 4, PostIndex), cond); |
+ str(src2, dst2, cond); |
+ } |
} |
} |