| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index 527800b80ede2bafb2efdc232c5b302cdc74df3d..9cbe3e90e5d9d8ea074cda8055ea48efddb29d4f 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -1152,6 +1152,32 @@ void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void RestParamAccessStub::GenerateNew(MacroAssembler* masm) {
|
| + // esp[0] : return address
|
| + // esp[4] : language mode
|
| + // esp[8] : index of rest parameter
|
| + // esp[12] : number of parameters
|
| + // esp[16] : receiver displacement
|
| +
|
| + // Check if the calling frame is an arguments adaptor frame.
|
| + Label runtime;
|
| + __ mov(edx, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
|
| + __ mov(ecx, Operand(edx, StandardFrameConstants::kContextOffset));
|
| + __ cmp(ecx, Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
|
| + __ j(not_equal, &runtime);
|
| +
|
| + // Patch the arguments.length and the parameters pointer.
|
| + __ mov(ecx, Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset));
|
| + __ mov(Operand(esp, 3 * kPointerSize), ecx);
|
| + __ lea(edx,
|
| + Operand(edx, ecx, times_2, StandardFrameConstants::kCallerSPOffset));
|
| + __ mov(Operand(esp, 4 * kPointerSize), edx);
|
| +
|
| + __ bind(&runtime);
|
| + __ TailCallRuntime(Runtime::kNewRestParam, 4, 1);
|
| +}
|
| +
|
| +
|
| void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // Just jump directly to runtime if native RegExp is not selected at compile
|
| // time or if regexp entry in generated code is turned off runtime switch or
|
|
|