| Index: src/x64/builtins-x64.cc
 | 
| diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc
 | 
| index 38b4440863be77046f849022dccbcf667e3a3e3b..dbd13289b7a525658aa545c16687714edab18dfe 100644
 | 
| --- a/src/x64/builtins-x64.cc
 | 
| +++ b/src/x64/builtins-x64.cc
 | 
| @@ -904,134 +904,6 @@
 | 
|  
 | 
|  
 | 
|  void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
 | 
| -  // ----------- S t a t e -------------
 | 
| -  //  -- rax : argument count (preserved for callee)
 | 
| -  //  -- rdx : new target (preserved for callee)
 | 
| -  //  -- rdi : target function (preserved for callee)
 | 
| -  // -----------------------------------
 | 
| -  // First lookup code, maybe we don't need to compile!
 | 
| -  Label gotta_call_runtime;
 | 
| -  Label maybe_call_runtime;
 | 
| -  Label try_shared;
 | 
| -  Label loop_top, loop_bottom;
 | 
| -
 | 
| -  Register closure = rdi;
 | 
| -  Register map = r8;
 | 
| -  Register index = r9;
 | 
| -  __ movp(map, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset));
 | 
| -  __ movp(map, FieldOperand(map, SharedFunctionInfo::kOptimizedCodeMapOffset));
 | 
| -  __ SmiToInteger32(index, FieldOperand(map, FixedArray::kLengthOffset));
 | 
| -  __ cmpl(index, Immediate(2));
 | 
| -  __ j(less, &gotta_call_runtime);
 | 
| -
 | 
| -  // Find literals.
 | 
| -  // r14 : native context
 | 
| -  // r9  : length / index
 | 
| -  // r8  : optimized code map
 | 
| -  // rdx : new target
 | 
| -  // rdi : closure
 | 
| -  Register native_context = r14;
 | 
| -  __ movp(native_context, NativeContextOperand());
 | 
| -
 | 
| -  __ bind(&loop_top);
 | 
| -  // Native context match?
 | 
| -  Register temp = r11;
 | 
| -  __ movp(temp, FieldOperand(map, index, times_pointer_size,
 | 
| -                             SharedFunctionInfo::kOffsetToPreviousContext));
 | 
| -  __ movp(temp, FieldOperand(temp, WeakCell::kValueOffset));
 | 
| -  __ cmpp(temp, native_context);
 | 
| -  __ j(not_equal, &loop_bottom);
 | 
| -  // OSR id set to none?
 | 
| -  __ movp(temp, FieldOperand(map, index, times_pointer_size,
 | 
| -                             SharedFunctionInfo::kOffsetToPreviousOsrAstId));
 | 
| -  __ SmiToInteger32(temp, temp);
 | 
| -  const int bailout_id = BailoutId::None().ToInt();
 | 
| -  __ cmpl(temp, Immediate(bailout_id));
 | 
| -  __ j(not_equal, &loop_bottom);
 | 
| -  // Literals available?
 | 
| -  __ movp(temp, FieldOperand(map, index, times_pointer_size,
 | 
| -                             SharedFunctionInfo::kOffsetToPreviousLiterals));
 | 
| -  __ movp(temp, FieldOperand(temp, WeakCell::kValueOffset));
 | 
| -  __ JumpIfSmi(temp, &gotta_call_runtime);
 | 
| -
 | 
| -  // Save the literals in the closure.
 | 
| -  __ movp(FieldOperand(closure, JSFunction::kLiteralsOffset), temp);
 | 
| -  __ movp(r15, index);
 | 
| -  __ RecordWriteField(closure, JSFunction::kLiteralsOffset, temp, r15,
 | 
| -                      kDontSaveFPRegs, EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
 | 
| -
 | 
| -  // Code available?
 | 
| -  Register entry = rcx;
 | 
| -  __ movp(entry, FieldOperand(map, index, times_pointer_size,
 | 
| -                              SharedFunctionInfo::kOffsetToPreviousCachedCode));
 | 
| -  __ movp(entry, FieldOperand(entry, WeakCell::kValueOffset));
 | 
| -  __ JumpIfSmi(entry, &maybe_call_runtime);
 | 
| -
 | 
| -  // Found literals and code. Get them into the closure and return.
 | 
| -  __ leap(entry, FieldOperand(entry, Code::kHeaderSize));
 | 
| -
 | 
| -  Label install_optimized_code_and_tailcall;
 | 
| -  __ bind(&install_optimized_code_and_tailcall);
 | 
| -  __ movp(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry);
 | 
| -  __ RecordWriteCodeEntryField(closure, entry, r15);
 | 
| -
 | 
| -  // Link the closure into the optimized function list.
 | 
| -  // rcx : code entry (entry)
 | 
| -  // r14 : native context
 | 
| -  // rdx : new target
 | 
| -  // rdi : closure
 | 
| -  __ movp(rbx,
 | 
| -          ContextOperand(native_context, Context::OPTIMIZED_FUNCTIONS_LIST));
 | 
| -  __ movp(FieldOperand(closure, JSFunction::kNextFunctionLinkOffset), rbx);
 | 
| -  __ RecordWriteField(closure, JSFunction::kNextFunctionLinkOffset, rbx, r15,
 | 
| -                      kDontSaveFPRegs, EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
 | 
| -  const int function_list_offset =
 | 
| -      Context::SlotOffset(Context::OPTIMIZED_FUNCTIONS_LIST);
 | 
| -  __ movp(ContextOperand(native_context, Context::OPTIMIZED_FUNCTIONS_LIST),
 | 
| -          closure);
 | 
| -  // Save closure before the write barrier.
 | 
| -  __ movp(rbx, closure);
 | 
| -  __ RecordWriteContextSlot(native_context, function_list_offset, closure, r15,
 | 
| -                            kDontSaveFPRegs);
 | 
| -  __ movp(closure, rbx);
 | 
| -  __ jmp(entry);
 | 
| -
 | 
| -  __ bind(&loop_bottom);
 | 
| -  __ subl(index, Immediate(SharedFunctionInfo::kEntryLength));
 | 
| -  __ cmpl(index, Immediate(1));
 | 
| -  __ j(greater, &loop_top);
 | 
| -
 | 
| -  // We found neither literals nor code.
 | 
| -  __ jmp(&gotta_call_runtime);
 | 
| -
 | 
| -  __ bind(&maybe_call_runtime);
 | 
| -
 | 
| -  // Last possibility. Check the context free optimized code map entry.
 | 
| -  __ movp(entry, FieldOperand(map, FixedArray::kHeaderSize +
 | 
| -                                       SharedFunctionInfo::kSharedCodeIndex));
 | 
| -  __ movp(entry, FieldOperand(entry, WeakCell::kValueOffset));
 | 
| -  __ JumpIfSmi(entry, &try_shared);
 | 
| -
 | 
| -  // Store code entry in the closure.
 | 
| -  __ leap(entry, FieldOperand(entry, Code::kHeaderSize));
 | 
| -  __ jmp(&install_optimized_code_and_tailcall);
 | 
| -
 | 
| -  __ bind(&try_shared);
 | 
| -  // Is the full code valid?
 | 
| -  __ movp(entry, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset));
 | 
| -  __ movp(entry, FieldOperand(entry, SharedFunctionInfo::kCodeOffset));
 | 
| -  __ movl(rbx, FieldOperand(entry, Code::kFlagsOffset));
 | 
| -  __ andl(rbx, Immediate(Code::KindField::kMask));
 | 
| -  __ shrl(rbx, Immediate(Code::KindField::kShift));
 | 
| -  __ cmpl(rbx, Immediate(Code::BUILTIN));
 | 
| -  __ j(equal, &gotta_call_runtime);
 | 
| -  // Yes, install the full code.
 | 
| -  __ leap(entry, FieldOperand(entry, Code::kHeaderSize));
 | 
| -  __ movp(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry);
 | 
| -  __ RecordWriteCodeEntryField(closure, entry, r15);
 | 
| -  __ jmp(entry);
 | 
| -
 | 
| -  __ bind(&gotta_call_runtime);
 | 
|    GenerateTailCallToReturnedCode(masm, Runtime::kCompileLazy);
 | 
|  }
 | 
|  
 | 
| 
 |