| Index: src/x64/macro-assembler-x64.cc
 | 
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
 | 
| index e8b363e0fba4d037049f9664b37453c353bf2d5d..49849d8c493e617a172ee7d122895ff8c5686c60 100644
 | 
| --- a/src/x64/macro-assembler-x64.cc
 | 
| +++ b/src/x64/macro-assembler-x64.cc
 | 
| @@ -396,9 +396,7 @@ void MacroAssembler::RecordWrite(Register object,
 | 
|    ASSERT(!object.is(value));
 | 
|    ASSERT(!object.is(address));
 | 
|    ASSERT(!value.is(address));
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfSmi(object);
 | 
| -  }
 | 
| +  AssertNotSmi(object);
 | 
|  
 | 
|    if (remembered_set_action == OMIT_REMEMBERED_SET &&
 | 
|        !FLAG_incremental_marking) {
 | 
| @@ -1115,18 +1113,14 @@ void MacroAssembler::SmiTest(Register src) {
 | 
|  
 | 
|  
 | 
|  void MacroAssembler::SmiCompare(Register smi1, Register smi2) {
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfNotSmi(smi1);
 | 
| -    AbortIfNotSmi(smi2);
 | 
| -  }
 | 
| +  AssertSmi(smi1);
 | 
| +  AssertSmi(smi2);
 | 
|    cmpq(smi1, smi2);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void MacroAssembler::SmiCompare(Register dst, Smi* src) {
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfNotSmi(dst);
 | 
| -  }
 | 
| +  AssertSmi(dst);
 | 
|    Cmp(dst, src);
 | 
|  }
 | 
|  
 | 
| @@ -1143,27 +1137,21 @@ void MacroAssembler::Cmp(Register dst, Smi* src) {
 | 
|  
 | 
|  
 | 
|  void MacroAssembler::SmiCompare(Register dst, const Operand& src) {
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfNotSmi(dst);
 | 
| -    AbortIfNotSmi(src);
 | 
| -  }
 | 
| +  AssertSmi(dst);
 | 
| +  AssertSmi(src);
 | 
|    cmpq(dst, src);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void MacroAssembler::SmiCompare(const Operand& dst, Register src) {
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfNotSmi(dst);
 | 
| -    AbortIfNotSmi(src);
 | 
| -  }
 | 
| +  AssertSmi(dst);
 | 
| +  AssertSmi(src);
 | 
|    cmpq(dst, src);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void MacroAssembler::SmiCompare(const Operand& dst, Smi* src) {
 | 
| -  if (emit_debug_code()) {
 | 
| -    AbortIfNotSmi(dst);
 | 
| -  }
 | 
| +  AssertSmi(dst);
 | 
|    cmpl(Operand(dst, kSmiShift / kBitsPerByte), Immediate(src->value()));
 | 
|  }
 | 
|  
 | 
| @@ -2971,61 +2959,75 @@ void MacroAssembler::DispatchMap(Register obj,
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotNumber(Register object) {
 | 
| -  Label ok;
 | 
| -  Condition is_smi = CheckSmi(object);
 | 
| -  j(is_smi, &ok, Label::kNear);
 | 
| -  Cmp(FieldOperand(object, HeapObject::kMapOffset),
 | 
| -      isolate()->factory()->heap_number_map());
 | 
| -  Assert(equal, "Operand not a number");
 | 
| -  bind(&ok);
 | 
| +void MacroAssembler::AssertNumber(Register object) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    Label ok;
 | 
| +    Condition is_smi = CheckSmi(object);
 | 
| +    j(is_smi, &ok, Label::kNear);
 | 
| +    Cmp(FieldOperand(object, HeapObject::kMapOffset),
 | 
| +        isolate()->factory()->heap_number_map());
 | 
| +    Check(equal, "Operand is not a number");
 | 
| +    bind(&ok);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfSmi(Register object) {
 | 
| -  Condition is_smi = CheckSmi(object);
 | 
| -  Assert(NegateCondition(is_smi), "Operand is a smi");
 | 
| +void MacroAssembler::AssertNotSmi(Register object) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    Condition is_smi = CheckSmi(object);
 | 
| +    Check(NegateCondition(is_smi), "Operand is a smi");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotSmi(Register object) {
 | 
| -  Condition is_smi = CheckSmi(object);
 | 
| -  Assert(is_smi, "Operand is not a smi");
 | 
| +void MacroAssembler::AssertSmi(Register object) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    Condition is_smi = CheckSmi(object);
 | 
| +    Check(is_smi, "Operand is not a smi");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotSmi(const Operand& object) {
 | 
| -  Condition is_smi = CheckSmi(object);
 | 
| -  Assert(is_smi, "Operand is not a smi");
 | 
| +void MacroAssembler::AssertSmi(const Operand& object) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    Condition is_smi = CheckSmi(object);
 | 
| +    Check(is_smi, "Operand is not a smi");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotZeroExtended(Register int32_register) {
 | 
| -  ASSERT(!int32_register.is(kScratchRegister));
 | 
| -  movq(kScratchRegister, 0x100000000l, RelocInfo::NONE);
 | 
| -  cmpq(kScratchRegister, int32_register);
 | 
| -  Assert(above_equal, "32 bit value in register is not zero-extended");
 | 
| +void MacroAssembler::AssertZeroExtended(Register int32_register) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    ASSERT(!int32_register.is(kScratchRegister));
 | 
| +    movq(kScratchRegister, 0x100000000l, RelocInfo::NONE);
 | 
| +    cmpq(kScratchRegister, int32_register);
 | 
| +    Check(above_equal, "32 bit value in register is not zero-extended");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotString(Register object) {
 | 
| -  testb(object, Immediate(kSmiTagMask));
 | 
| -  Assert(not_equal, "Operand is not a string");
 | 
| -  push(object);
 | 
| -  movq(object, FieldOperand(object, HeapObject::kMapOffset));
 | 
| -  CmpInstanceType(object, FIRST_NONSTRING_TYPE);
 | 
| -  pop(object);
 | 
| -  Assert(below, "Operand is not a string");
 | 
| +void MacroAssembler::AssertString(Register object) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    testb(object, Immediate(kSmiTagMask));
 | 
| +    Check(not_equal, "Operand is a smi and not a string");
 | 
| +    push(object);
 | 
| +    movq(object, FieldOperand(object, HeapObject::kMapOffset));
 | 
| +    CmpInstanceType(object, FIRST_NONSTRING_TYPE);
 | 
| +    pop(object);
 | 
| +    Check(below, "Operand is not a string");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::AbortIfNotRootValue(Register src,
 | 
| -                                         Heap::RootListIndex root_value_index,
 | 
| -                                         const char* message) {
 | 
| -  ASSERT(!src.is(kScratchRegister));
 | 
| -  LoadRoot(kScratchRegister, root_value_index);
 | 
| -  cmpq(src, kScratchRegister);
 | 
| -  Check(equal, message);
 | 
| +void MacroAssembler::AssertRootValue(Register src,
 | 
| +                                     Heap::RootListIndex root_value_index,
 | 
| +                                     const char* message) {
 | 
| +  if (emit_debug_code()) {
 | 
| +    ASSERT(!src.is(kScratchRegister));
 | 
| +    LoadRoot(kScratchRegister, root_value_index);
 | 
| +    cmpq(src, kScratchRegister);
 | 
| +    Check(equal, message);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |