| Index: src/x87/code-stubs-x87.cc
|
| diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc
|
| index 70f3e27f641d5966c8af39f474cbadc7f1557926..fc10a9b995866a11dac8cc30eab48fee1357fee6 100644
|
| --- a/src/x87/code-stubs-x87.cc
|
| +++ b/src/x87/code-stubs-x87.cc
|
| @@ -853,6 +853,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
|
|
|