diff options
Diffstat (limited to 'deps/v8/src/arm/macro-assembler-arm.cc')
-rw-r--r-- | deps/v8/src/arm/macro-assembler-arm.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/deps/v8/src/arm/macro-assembler-arm.cc b/deps/v8/src/arm/macro-assembler-arm.cc index 4fc3b03abf..59a5e5ba79 100644 --- a/deps/v8/src/arm/macro-assembler-arm.cc +++ b/deps/v8/src/arm/macro-assembler-arm.cc @@ -407,6 +407,19 @@ void MacroAssembler::StoreRoot(Register source, } +void MacroAssembler::LoadHeapObject(Register result, + Handle<HeapObject> object) { + if (isolate()->heap()->InNewSpace(*object)) { + Handle<JSGlobalPropertyCell> cell = + isolate()->factory()->NewJSGlobalPropertyCell(object); + mov(result, Operand(cell)); + ldr(result, FieldMemOperand(result, JSGlobalPropertyCell::kValueOffset)); + } else { + mov(result, Operand(object)); + } +} + + void MacroAssembler::InNewSpace(Register object, Register scratch, Condition cond, @@ -1111,7 +1124,7 @@ void MacroAssembler::InvokeFunction(Handle<JSFunction> function, ASSERT(flag == JUMP_FUNCTION || has_frame()); // Get the function and setup the context. - mov(r1, Operand(function)); + LoadHeapObject(r1, function); ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); ParameterCount expected(function->shared()->formal_parameter_count()); |