Index: src/arm/macro-assembler-arm.cc |
=================================================================== |
--- src/arm/macro-assembler-arm.cc (revision 6618) |
+++ src/arm/macro-assembler-arm.cc (working copy) |
@@ -1577,13 +1577,14 @@ |
Register dest, |
Register scratch, |
Register scratch2, |
+ DwVfpRegister double_scratch, |
Label *not_int32) { |
if (CpuFeatures::IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
sub(scratch, source, Operand(kHeapObjectTag)); |
- vldr(d0, scratch, HeapNumber::kValueOffset); |
- vcvt_s32_f64(s0, d0); |
- vmov(dest, s0); |
+ vldr(double_scratch, scratch, HeapNumber::kValueOffset); |
+ vcvt_s32_f64(double_scratch.low(), double_scratch); |
+ vmov(dest, double_scratch.low()); |
// Signed vcvt instruction will saturate to the minimum (0x80000000) or |
// maximun (0x7fffffff) signed 32bits integer when the double is out of |
// range. When substracting one, the minimum signed integer becomes the |
@@ -1999,6 +2000,16 @@ |
} |
+void MacroAssembler::AbortIfNotRootValue(Register src, |
+ Heap::RootListIndex root_value_index, |
+ const char* message) { |
+ ASSERT(!src.is(ip)); |
+ LoadRoot(ip, root_value_index); |
+ cmp(src, ip); |
+ Assert(eq, message); |
+} |
+ |
+ |
void MacroAssembler::JumpIfNotHeapNumber(Register object, |
Register heap_number_map, |
Register scratch, |