| Index: src/x64/macro-assembler-x64.h
 | 
| diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h
 | 
| index 8086388b12854251d557cfff29d561be4514912f..4c177205b6be4f143933f751678641b9dbc14f52 100644
 | 
| --- a/src/x64/macro-assembler-x64.h
 | 
| +++ b/src/x64/macro-assembler-x64.h
 | 
| @@ -323,6 +323,16 @@ class MacroAssembler: public Assembler {
 | 
|                                             Register src,
 | 
|                                             int power);
 | 
|  
 | 
| +  // Perform the logical or of two smi values and return a smi value.
 | 
| +  // If either argument is not a smi, jump to on_not_smis and retain
 | 
| +  // the original values of source registers. The destination register
 | 
| +  // may be changed if it's not one of the source registers.
 | 
| +  template <typename LabelType>
 | 
| +  void SmiOrIfSmis(Register dst,
 | 
| +                   Register src1,
 | 
| +                   Register src2,
 | 
| +                   LabelType* on_not_smis);
 | 
| +
 | 
|  
 | 
|    // Simple comparison of smis.  Both sides must be known smis to use these,
 | 
|    // otherwise use Cmp.
 | 
| @@ -1790,6 +1800,24 @@ void MacroAssembler::JumpUnlessBothNonNegativeSmi(Register src1,
 | 
|  
 | 
|  
 | 
|  template <typename LabelType>
 | 
| +void MacroAssembler::SmiOrIfSmis(Register dst, Register src1, Register src2,
 | 
| +                                 LabelType* on_not_smis) {
 | 
| +  if (dst.is(src1) || dst.is(src2)) {
 | 
| +    ASSERT(!src1.is(kScratchRegister));
 | 
| +    ASSERT(!src2.is(kScratchRegister));
 | 
| +    movq(kScratchRegister, src1);
 | 
| +    or_(kScratchRegister, src2);
 | 
| +    JumpIfNotSmi(kScratchRegister, on_not_smis);
 | 
| +    movq(dst, kScratchRegister);
 | 
| +  } else {
 | 
| +    movq(dst, src1);
 | 
| +    or_(dst, src2);
 | 
| +    JumpIfNotSmi(dst, on_not_smis);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +template <typename LabelType>
 | 
|  void MacroAssembler::JumpIfNotString(Register object,
 | 
|                                       Register object_map,
 | 
|                                       LabelType* not_string) {
 | 
| 
 |