| Index: src/builtins.h | 
| diff --git a/src/builtins.h b/src/builtins.h | 
| index b9629d28d16713d099713b6a3cc8b192c57b2e9c..8ddadd6e75983ccbe2c599d2243d3655795cdfe3 100644 | 
| --- a/src/builtins.h | 
| +++ b/src/builtins.h | 
| @@ -157,6 +157,11 @@ inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) { | 
| V(CallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED,         \ | 
| kNoExtraICState)                                                           \ | 
| V(CallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState)       \ | 
| +  V(TailCallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED,        \ | 
| +    kNoExtraICState)                                                           \ | 
| +  V(TailCallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED,     \ | 
| +    kNoExtraICState)                                                           \ | 
| +  V(TailCallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState)   \ | 
| V(CallBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState)                \ | 
| V(Call_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, kNoExtraICState)   \ | 
| V(Call_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED,                 \ | 
| @@ -339,6 +344,9 @@ class Builtins { | 
| // Convenience wrappers. | 
| Handle<Code> CallFunction(ConvertReceiverMode = ConvertReceiverMode::kAny); | 
| Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny); | 
| +  Handle<Code> TailCallFunction( | 
| +      ConvertReceiverMode = ConvertReceiverMode::kAny); | 
| +  Handle<Code> TailCall(ConvertReceiverMode = ConvertReceiverMode::kAny); | 
|  | 
| Code* builtin(Name name) { | 
| // Code::cast cannot be used here since we access builtins | 
| @@ -403,17 +411,35 @@ class Builtins { | 
|  | 
| // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) | 
| static void Generate_CallFunction(MacroAssembler* masm, | 
| -                                    ConvertReceiverMode mode); | 
| +                                    ConvertReceiverMode mode, | 
| +                                    TailCallMode tail_call_mode); | 
| static void Generate_CallFunction_ReceiverIsNullOrUndefined( | 
| MacroAssembler* masm) { | 
| -    Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined); | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined, | 
| +                          TailCallMode::kDisallow); | 
| } | 
| static void Generate_CallFunction_ReceiverIsNotNullOrUndefined( | 
| MacroAssembler* masm) { | 
| -    Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined); | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined, | 
| +                          TailCallMode::kDisallow); | 
| } | 
| static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) { | 
| -    Generate_CallFunction(masm, ConvertReceiverMode::kAny); | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kAny, | 
| +                          TailCallMode::kDisallow); | 
| +  } | 
| +  static void Generate_TailCallFunction_ReceiverIsNullOrUndefined( | 
| +      MacroAssembler* masm) { | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined, | 
| +                          TailCallMode::kAllow); | 
| +  } | 
| +  static void Generate_TailCallFunction_ReceiverIsNotNullOrUndefined( | 
| +      MacroAssembler* masm) { | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined, | 
| +                          TailCallMode::kAllow); | 
| +  } | 
| +  static void Generate_TailCallFunction_ReceiverIsAny(MacroAssembler* masm) { | 
| +    Generate_CallFunction(masm, ConvertReceiverMode::kAny, | 
| +                          TailCallMode::kAllow); | 
| } | 
| // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) | 
| static void Generate_CallBoundFunction(MacroAssembler* masm); | 
|  |