| Index: src/arm/builtins-arm.cc
|
| diff --git a/src/arm/builtins-arm.cc b/src/arm/builtins-arm.cc
|
| index 554adb3f0db71812ddfcc7eded3d40a99f4f52b1..13c0e4441649327a7183c1ec586be124eb4bc207 100644
|
| --- a/src/arm/builtins-arm.cc
|
| +++ b/src/arm/builtins-arm.cc
|
| @@ -891,21 +891,6 @@ void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -void Builtins::Generate_NotifyOSR(MacroAssembler* masm) {
|
| - // For now, we are relying on the fact that Runtime::NotifyOSR
|
| - // doesn't do any garbage collection which allows us to save/restore
|
| - // the registers without worrying about which of them contain
|
| - // pointers. This seems a bit fragile.
|
| - __ stm(db_w, sp, kJSCallerSaved | kCalleeSaved | lr.bit() | fp.bit());
|
| - {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| - __ CallRuntime(Runtime::kNotifyOSR, 0);
|
| - }
|
| - __ ldm(ia_w, sp, kJSCallerSaved | kCalleeSaved | lr.bit() | fp.bit());
|
| - __ Ret();
|
| -}
|
| -
|
| -
|
| void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
|
| // Lookup the function in the JavaScript frame.
|
| __ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| @@ -952,6 +937,24 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
|
| + // We check the stack limit as indicator that recompilation might be done.
|
| + Label ok;
|
| + __ LoadRoot(ip, Heap::kStackLimitRootIndex);
|
| + __ cmp(sp, Operand(ip));
|
| + __ b(hs, &ok);
|
| + {
|
| + FrameScope scope(masm, StackFrame::INTERNAL);
|
| + __ CallRuntime(Runtime::kStackGuard, 0);
|
| + }
|
| + __ Jump(masm->isolate()->builtins()->OnStackReplacement(),
|
| + RelocInfo::CODE_TARGET);
|
| +
|
| + __ bind(&ok);
|
| + __ Ret();
|
| +}
|
| +
|
| +
|
| void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
|
| // 1. Make sure we have at least one argument.
|
| // r0: actual number of arguments
|
|
|