| Index: src/arm/assembler-arm.cc
|
| ===================================================================
|
| --- src/arm/assembler-arm.cc (revision 5198)
|
| +++ src/arm/assembler-arm.cc (working copy)
|
| @@ -1820,6 +1820,7 @@
|
| ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| ASSERT(offset % 4 == 0);
|
| ASSERT((offset / 4) < 256);
|
| + ASSERT(offset >= 0);
|
| emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 |
|
| 0xB*B8 | ((offset / 4) & 255));
|
| }
|
| @@ -1836,6 +1837,7 @@
|
| ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| ASSERT(offset % 4 == 0);
|
| ASSERT((offset / 4) < 256);
|
| + ASSERT(offset >= 0);
|
| emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 |
|
| 0xA*B8 | ((offset / 4) & 255));
|
| }
|
| @@ -1852,11 +1854,29 @@
|
| ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| ASSERT(offset % 4 == 0);
|
| ASSERT((offset / 4) < 256);
|
| + ASSERT(offset >= 0);
|
| emit(cond | 0xD8*B20 | base.code()*B16 | src.code()*B12 |
|
| 0xB*B8 | ((offset / 4) & 255));
|
| }
|
|
|
|
|
| +void Assembler::vstr(const SwVfpRegister src,
|
| + const Register base,
|
| + int offset,
|
| + const Condition cond) {
|
| + // MEM(Rbase + offset) = SSrc.
|
| + // Instruction details available in ARM DDI 0406A, A8-786.
|
| + // cond(31-28) | 1101(27-24)| 1000(23-20) | Rbase(19-16) |
|
| + // Vdst(15-12) | 1010(11-8) | (offset/4)
|
| + ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(offset % 4 == 0);
|
| + ASSERT((offset / 4) < 256);
|
| + ASSERT(offset >= 0);
|
| + emit(cond | 0xD8*B20 | base.code()*B16 | src.code()*B12 |
|
| + 0xA*B8 | ((offset / 4) & 255));
|
| +}
|
| +
|
| +
|
| static void DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) {
|
| uint64_t i;
|
| memcpy(&i, &d, 8);
|
|
|