| Index: src/x64/code-stubs-x64.cc
 | 
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
 | 
| index e6f46966517f37a78818bb0c4d4116b85fba628a..0fb827bb08fbbd49bf4e6067222407c7b6128a9f 100644
 | 
| --- a/src/x64/code-stubs-x64.cc
 | 
| +++ b/src/x64/code-stubs-x64.cc
 | 
| @@ -1062,6 +1062,9 @@ void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
 | 
|      case TRBinaryOpIC::HEAP_NUMBER:
 | 
|        GenerateHeapNumberStub(masm);
 | 
|        break;
 | 
| +    case TRBinaryOpIC::ODDBALL:
 | 
| +      GenerateOddballStub(masm);
 | 
| +      break;
 | 
|      case TRBinaryOpIC::STRING:
 | 
|        GenerateStringStub(masm);
 | 
|        break;
 | 
| @@ -1438,6 +1441,39 @@ void TypeRecordingBinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
 | 
| +  Label call_runtime;
 | 
| +
 | 
| +  if (op_ == Token::ADD) {
 | 
| +    // Handle string addition here, because it is the only operation
 | 
| +    // that does not do a ToNumber conversion on the operands.
 | 
| +    GenerateStringAddCode(masm);
 | 
| +  }
 | 
| +
 | 
| +  // Convert oddball arguments to numbers.
 | 
| +  NearLabel check, done;
 | 
| +  __ CompareRoot(rdx, Heap::kUndefinedValueRootIndex);
 | 
| +  __ j(not_equal, &check);
 | 
| +  if (Token::IsBitOp(op_)) {
 | 
| +    __ xor_(rdx, rdx);
 | 
| +  } else {
 | 
| +    __ LoadRoot(rdx, Heap::kNanValueRootIndex);
 | 
| +  }
 | 
| +  __ jmp(&done);
 | 
| +  __ bind(&check);
 | 
| +  __ CompareRoot(rax, Heap::kUndefinedValueRootIndex);
 | 
| +  __ j(not_equal, &done);
 | 
| +  if (Token::IsBitOp(op_)) {
 | 
| +    __ xor_(rax, rax);
 | 
| +  } else {
 | 
| +    __ LoadRoot(rax, Heap::kNanValueRootIndex);
 | 
| +  }
 | 
| +  __ bind(&done);
 | 
| +
 | 
| +  GenerateHeapNumberStub(masm);
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
 | 
|    Label gc_required, not_number;
 | 
|    GenerateFloatingPointCode(masm, &gc_required, ¬_number);
 | 
| 
 |