| 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));
|
| + }
|
| + }
|
| }
|
|
|
|
|
|
|