| Index: src/arm/code-stubs-arm.cc
|
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
|
| index 5858eac6294610656a0df56b7fc5c64d0d739856..f815dca1e815f572089a90456f90db4f954e32fb 100644
|
| --- a/src/arm/code-stubs-arm.cc
|
| +++ b/src/arm/code-stubs-arm.cc
|
| @@ -359,6 +359,7 @@ void FastNewClosureStub::Generate(MacroAssembler* masm) {
|
| __ LoadRoot(r4, Heap::kUndefinedValueRootIndex);
|
| __ str(r4, FieldMemOperand(r0, JSFunction::kNextFunctionLinkOffset));
|
| __ ldr(r3, FieldMemOperand(r3, SharedFunctionInfo::kCodeOffset));
|
| + __ CheckModeBit(r3);
|
| __ add(r3, r3, Operand(Code::kHeaderSize - kHeapObjectTag));
|
| __ str(r3, FieldMemOperand(r0, JSFunction::kCodeEntryOffset));
|
|
|
| @@ -405,6 +406,7 @@ void FastNewClosureStub::Generate(MacroAssembler* masm) {
|
| // TODO(fschneider): Idea: store proper code pointers in the map and either
|
| // unmangle them on marking or do nothing as the whole map is discarded on
|
| // major GC anyway.
|
| + __ CheckModeBit(r4);
|
| __ add(r4, r4, Operand(Code::kHeaderSize - kHeapObjectTag));
|
| __ str(r4, FieldMemOperand(r0, JSFunction::kCodeEntryOffset));
|
|
|
| @@ -3241,6 +3243,8 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| // (See LCodeGen::DoDeferredLInstanceOfKnownGlobal)
|
| __ LoadFromSafepointRegisterSlot(scratch, r4);
|
| __ sub(inline_site, lr, scratch);
|
| + __ tst(inline_site, Operand(3));
|
| + __ add(inline_site, inline_site, Operand(4), LeaveCC, ne);
|
| // Get the map location in scratch and patch it.
|
| __ GetRelocatedValueLocation(inline_site, scratch);
|
| __ ldr(scratch, MemOperand(scratch));
|
| @@ -3273,7 +3277,10 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| } else {
|
| // Patch the call site to return true.
|
| __ LoadRoot(r0, Heap::kTrueValueRootIndex);
|
| - __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult));
|
| + __ tst(inline_site, Operand(3));
|
| + __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult),
|
| + LeaveCC, eq);
|
| + __ add(inline_site, inline_site, Operand(14), LeaveCC, ne);
|
| // Get the boolean result location in scratch and patch it.
|
| __ GetRelocatedValueLocation(inline_site, scratch);
|
| __ str(r0, MemOperand(scratch));
|
| @@ -3291,7 +3298,10 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| } else {
|
| // Patch the call site to return false.
|
| __ LoadRoot(r0, Heap::kFalseValueRootIndex);
|
| - __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult));
|
| + __ tst(inline_site, Operand(3));
|
| + __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult),
|
| + LeaveCC, eq);
|
| + __ add(inline_site, inline_site, Operand(14), LeaveCC, ne);
|
| // Get the boolean result location in scratch and patch it.
|
| __ GetRelocatedValueLocation(inline_site, scratch);
|
| __ str(r0, MemOperand(scratch));
|
| @@ -6847,6 +6857,8 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
|
|
| // Save all caller-save registers as this may be called from anywhere.
|
| __ stm(db_w, sp, kSavedRegs | lr.bit());
|
| + __ tst(lr, Operand(1));
|
| + __ add(lr, lr, Operand(1), LeaveCC, ne);
|
|
|
| // Compute the function's address for the first argument.
|
| __ sub(r0, lr, Operand(kReturnAddressDistanceFromFunctionStart));
|
|
|