Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index ce5ca09867010f0045538cb7e3da92bb19a49910..d8df4cda5cfcb4bdf2b5f37ff6a4626ae5de4352 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -240,7 +240,19 @@ |
void MacroAssembler::Move(Register dst, Handle<Object> value) { |
- mov(dst, Operand(value)); |
+ AllowDeferredHandleDereference smi_check; |
+ if (value->IsSmi()) { |
+ mov(dst, Operand(value)); |
+ } else { |
+ DCHECK(value->IsHeapObject()); |
+ if (isolate()->heap()->InNewSpace(*value)) { |
+ Handle<Cell> cell = isolate()->factory()->NewCell(value); |
+ mov(dst, Operand(cell)); |
+ ldr(dst, FieldMemOperand(dst, Cell::kValueOffset)); |
+ } else { |
+ mov(dst, Operand(value)); |
+ } |
+ } |
} |