| Index: src/x64/codegen-x64.cc
 | 
| ===================================================================
 | 
| --- src/x64/codegen-x64.cc	(revision 2380)
 | 
| +++ src/x64/codegen-x64.cc	(working copy)
 | 
| @@ -3235,10 +3235,25 @@
 | 
|  
 | 
|  
 | 
|  void CodeGenerator::GenerateIsConstructCall(ZoneList<Expression*>* args) {
 | 
| -  // TODO(X64): Optimize this like it's done on IA-32.
 | 
|    ASSERT(args->length() == 0);
 | 
| -  Result answer = frame_->CallRuntime(Runtime::kIsConstructCall, 0);
 | 
| -  frame_->Push(&answer);
 | 
| +
 | 
| +  // Get the frame pointer for the calling frame.
 | 
| +  Result fp = allocator()->Allocate();
 | 
| +  __ movq(fp.reg(), Operand(rbp, StandardFrameConstants::kCallerFPOffset));
 | 
| +
 | 
| +  // Skip the arguments adaptor frame if it exists.
 | 
| +  Label check_frame_marker;
 | 
| +  __ cmpq(Operand(fp.reg(), StandardFrameConstants::kContextOffset),
 | 
| +          Immediate(ArgumentsAdaptorFrame::SENTINEL));
 | 
| +  __ j(not_equal, &check_frame_marker);
 | 
| +  __ movq(fp.reg(), Operand(fp.reg(), StandardFrameConstants::kCallerFPOffset));
 | 
| +
 | 
| +  // Check the marker in the calling frame.
 | 
| +  __ bind(&check_frame_marker);
 | 
| +  __ cmpq(Operand(fp.reg(), StandardFrameConstants::kMarkerOffset),
 | 
| +          Immediate(Smi::FromInt(StackFrame::CONSTRUCT)));
 | 
| +  fp.Unuse();
 | 
| +  destination()->Split(equal);
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |