| Index: src/x64/builtins-x64.cc | 
| diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc | 
| index 08cd21d41b00dbaf6a29341c80c211b17a01aec1..43ae7c37ef6b62510cc03f113c250cd04c3fa2bf 100644 | 
| --- a/src/x64/builtins-x64.cc | 
| +++ b/src/x64/builtins-x64.cc | 
| @@ -642,6 +642,13 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { | 
| // Change context eagerly in case we need the global receiver. | 
| __ movq(rsi, FieldOperand(rdi, JSFunction::kContextOffset)); | 
|  | 
| +    // Do not transform the receiver for strict mode functions. | 
| +    __ movq(rbx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset)); | 
| +    __ testb(FieldOperand(rbx, SharedFunctionInfo::kStrictModeByteOffset), | 
| +             Immediate(1 << SharedFunctionInfo::kStrictModeBitWithinByte)); | 
| +    __ j(not_equal, &shift_arguments); | 
| + | 
| +    // Compute the receiver in non-strict mode. | 
| __ movq(rbx, Operand(rsp, rax, times_pointer_size, 0)); | 
| __ JumpIfSmi(rbx, &convert_to_object); | 
|  | 
| @@ -798,6 +805,14 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) { | 
| // Compute the receiver. | 
| Label call_to_object, use_global_receiver, push_receiver; | 
| __ movq(rbx, Operand(rbp, kReceiverOffset)); | 
| + | 
| +  // Do not transform the receiver for strict mode functions. | 
| +  __ movq(rdx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset)); | 
| +  __ testb(FieldOperand(rdx, SharedFunctionInfo::kStrictModeByteOffset), | 
| +           Immediate(1 << SharedFunctionInfo::kStrictModeBitWithinByte)); | 
| +  __ j(not_equal, &push_receiver); | 
| + | 
| +  // Compute the receiver in non-strict mode. | 
| __ JumpIfSmi(rbx, &call_to_object); | 
| __ CompareRoot(rbx, Heap::kNullValueRootIndex); | 
| __ j(equal, &use_global_receiver); | 
|  |