Chromium Code Reviews| Index: src/ia32/builtins-ia32.cc |
| diff --git a/src/ia32/builtins-ia32.cc b/src/ia32/builtins-ia32.cc |
| index 7b44bc0d34d51cf8db2719fdfb7c201a9a2a76a1..139f9f359bb307df4e9a7770139efdee86599acb 100644 |
| --- a/src/ia32/builtins-ia32.cc |
| +++ b/src/ia32/builtins-ia32.cc |
| @@ -74,21 +74,25 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, |
| } |
| -static void CallRuntimePassFunction(MacroAssembler* masm, |
| - Runtime::FunctionId function_id) { |
| - FrameScope scope(masm, StackFrame::INTERNAL); |
| - // Push a copy of the function. |
| - __ push(edi); |
| - // Push call kind information. |
| - __ push(ecx); |
| - // Function is also the parameter to the runtime call. |
| - __ push(edi); |
| +static void CallRuntimePassFunctionAndTailCall( |
|
titzer
2013/12/09 14:49:28
Similar comments to the arm port on naming here.
Yang
2013/12/10 11:22:04
Done.
|
| + MacroAssembler* masm, Runtime::FunctionId function_id) { |
| + { FrameScope scope(masm, StackFrame::INTERNAL); |
| + // Push a copy of the function. |
| + __ push(edi); |
| + // Push call kind information. |
| + __ push(ecx); |
| + // Function is also the parameter to the runtime call. |
| + __ push(edi); |
| - __ CallRuntime(function_id, 1); |
| - // Restore call kind information. |
| - __ pop(ecx); |
| - // Restore receiver. |
| - __ pop(edi); |
| + __ CallRuntime(function_id, 1); |
| + // Restore call kind information. |
| + __ pop(ecx); |
| + // Restore receiver. |
| + __ pop(edi); |
| + } |
| + // Tail call to returned code. |
| + __ lea(eax, FieldOperand(eax, Code::kHeaderSize)); |
| + __ jmp(eax); |
| } |
| @@ -100,7 +104,7 @@ static void GenerateTailCallToSharedCode(MacroAssembler* masm) { |
| } |
| -void Builtins::Generate_InRecompileQueue(MacroAssembler* masm) { |
| +void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { |
| // Checking whether the queued function is ready for install is optional, |
| // since we come across interrupts and stack checks elsewhere. However, |
| // not checking may delay installing ready functions, and always checking |
| @@ -112,22 +116,13 @@ void Builtins::Generate_InRecompileQueue(MacroAssembler* masm) { |
| __ cmp(esp, Operand::StaticVariable(stack_limit)); |
| __ j(above_equal, &ok, Label::kNear); |
| - CallRuntimePassFunction(masm, Runtime::kTryInstallRecompiledCode); |
| - // Tail call to returned code. |
| - __ lea(eax, FieldOperand(eax, Code::kHeaderSize)); |
| - __ jmp(eax); |
| + CallRuntimePassFunctionAndTailCall(masm, Runtime::kTryInstallOptimizedCode); |
| __ bind(&ok); |
| GenerateTailCallToSharedCode(masm); |
| } |
| -void Builtins::Generate_ConcurrentRecompile(MacroAssembler* masm) { |
| - CallRuntimePassFunction(masm, Runtime::kConcurrentRecompile); |
| - GenerateTailCallToSharedCode(masm); |
| -} |
| - |
| - |
| static void Generate_JSConstructStubHelper(MacroAssembler* masm, |
| bool is_api_function, |
| bool count_constructions) { |
| @@ -510,21 +505,45 @@ void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { |
| void Builtins::Generate_LazyCompile(MacroAssembler* masm) { |
| - CallRuntimePassFunction(masm, Runtime::kLazyCompile); |
| - // Do a tail-call of the compiled function. |
| - __ lea(eax, FieldOperand(eax, Code::kHeaderSize)); |
| - __ jmp(eax); |
| + CallRuntimePassFunctionAndTailCall(masm, Runtime::kCompileUnoptimized); |
| } |
| -void Builtins::Generate_LazyRecompile(MacroAssembler* masm) { |
| - CallRuntimePassFunction(masm, Runtime::kLazyRecompile); |
| - // Do a tail-call of the compiled function. |
| + |
| +static void CallCompileOptimizedAndTailCall(MacroAssembler* masm, |
| + bool concurrent) { |
| + { FrameScope scope(masm, StackFrame::INTERNAL); |
| + // Push a copy of the function. |
| + __ push(edi); |
| + // Push call kind information. |
| + __ push(ecx); |
| + // Function is also the parameter to the runtime call. |
| + __ push(edi); |
| + // Whether to compile in a background thread. |
| + __ Push(masm->isolate()->factory()->ToBoolean(concurrent)); |
| + |
| + __ CallRuntime(Runtime::kCompileOptimized, 2); |
| + // Restore call kind information. |
| + __ pop(ecx); |
| + // Restore receiver. |
| + __ pop(edi); |
| + } |
| + // Tail call to returned code. |
| __ lea(eax, FieldOperand(eax, Code::kHeaderSize)); |
| __ jmp(eax); |
| } |
| +void Builtins::Generate_CompileOptimized(MacroAssembler* masm) { |
| + CallCompileOptimizedAndTailCall(masm, false); |
| +} |
| + |
| + |
| +void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { |
| + CallCompileOptimizedAndTailCall(masm, true); |
| +} |
| + |
| + |
| static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) { |
| // For now, we are relying on the fact that make_code_young doesn't do any |
| // garbage collection which allows us to save/restore the registers without |