| Index: src/x64/stub-cache-x64.cc
|
| ===================================================================
|
| --- src/x64/stub-cache-x64.cc (revision 2231)
|
| +++ src/x64/stub-cache-x64.cc (working copy)
|
| @@ -122,10 +122,34 @@
|
| }
|
|
|
|
|
| -Object* StubCompiler::CompileLazyCompile(Code::Flags a) {
|
| - UNIMPLEMENTED();
|
| - return NULL;
|
| +#define __ ACCESS_MASM(masm())
|
| +
|
| +
|
| +// TODO(1241006): Avoid having lazy compile stubs specialized by the
|
| +// number of arguments. It is not needed anymore.
|
| +Object* StubCompiler::CompileLazyCompile(Code::Flags flags) {
|
| + // Enter an internal frame.
|
| + __ EnterInternalFrame();
|
| +
|
| + // Push a copy of the function onto the stack.
|
| + __ push(rdi);
|
| +
|
| + __ push(rdi); // function is also the parameter to the runtime call
|
| + __ CallRuntime(Runtime::kLazyCompile, 1);
|
| + __ pop(rdi);
|
| +
|
| + // Tear down temporary frame.
|
| + __ LeaveInternalFrame();
|
| +
|
| + // Do a tail-call of the compiled function.
|
| + __ lea(rcx, FieldOperand(rax, Code::kHeaderSize));
|
| + __ jmp(rcx);
|
| +
|
| + return GetCodeWithFlags(flags, "LazyCompileStub");
|
| }
|
|
|
|
|
| +#undef __
|
| +
|
| +
|
| } } // namespace v8::internal
|
|
|