Index: src/ia32/codegen-ia32.cc |
diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc |
index 39c6653164ab397bbc4f26c009e50f456c459c6d..89937bd6dbd10506ef50f00c9c72b2a1df0299b7 100644 |
--- a/src/ia32/codegen-ia32.cc |
+++ b/src/ia32/codegen-ia32.cc |
@@ -832,7 +832,7 @@ void CodeGenerator::ToBoolean(ControlDestination* dest) { |
Comment cmnt(masm_, "ONLY_INTEGER_32"); |
if (FLAG_debug_code) { |
Label ok; |
- __ AbortIfNotNumber(value.reg(), "ToBoolean operand is not a number."); |
+ __ AbortIfNotNumber(value.reg()); |
__ test(value.reg(), Immediate(kSmiTagMask)); |
__ j(zero, &ok); |
__ fldz(); |
@@ -852,7 +852,7 @@ void CodeGenerator::ToBoolean(ControlDestination* dest) { |
Comment cmnt(masm_, "ONLY_NUMBER"); |
// Fast case if NumberInfo indicates only numbers. |
if (FLAG_debug_code) { |
- __ AbortIfNotNumber(value.reg(), "ToBoolean operand is not a number."); |
+ __ AbortIfNotNumber(value.reg()); |
} |
// Smi => false iff zero. |
ASSERT(kSmiTag == 0); |
@@ -1038,6 +1038,8 @@ void DeferredInlineBinaryOperation::Generate() { |
__ jmp(&load_right); |
__ bind(&left_smi); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left_); |
} |
__ SmiUntag(left_); |
__ cvtsi2sd(xmm0, Operand(left_)); |
@@ -1070,6 +1072,8 @@ void DeferredInlineBinaryOperation::Generate() { |
__ jmp(&do_op); |
__ bind(&right_smi); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right_); |
} |
__ SmiUntag(right_); |
__ cvtsi2sd(xmm1, Operand(right_)); |
@@ -1575,7 +1579,7 @@ Result CodeGenerator::LikelySmiBinaryOperation(Token::Value op, |
overwrite_mode); |
Label do_op, left_nonsmi; |
- // if right is a smi we make a fast case if left is either a smi |
+ // If right is a smi we make a fast case if left is either a smi |
// or a heapnumber. |
if (CpuFeatures::IsSupported(SSE2) && right->number_info().IsSmi()) { |
CpuFeatures::Scope use_sse2(SSE2); |
@@ -1584,7 +1588,10 @@ Result CodeGenerator::LikelySmiBinaryOperation(Token::Value op, |
if (!left->number_info().IsSmi()) { |
__ test(answer.reg(), Immediate(kSmiTagMask)); |
__ j(not_zero, &left_nonsmi); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left->reg()); |
} |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right->reg()); |
__ SmiUntag(answer.reg()); |
__ jmp(&do_op); |
@@ -2003,6 +2010,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
if (!operand->number_info().IsSmi()) { |
__ test(operand->reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
} |
deferred->BindExit(); |
answer = *operand; |
@@ -2040,6 +2049,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
if (!operand->number_info().IsSmi()) { |
__ test(answer.reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
} |
deferred->BindExit(); |
operand->Unuse(); |
@@ -2073,6 +2084,7 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
} |
deferred->BindExit(); |
} else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
if (shift_value > 0) { |
__ sar(operand->reg(), shift_value); |
__ and_(operand->reg(), ~kSmiTagMask); |
@@ -2104,6 +2116,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
if (!operand->number_info().IsSmi()) { |
__ test(operand->reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
} |
__ mov(answer.reg(), operand->reg()); |
__ SmiUntag(answer.reg()); |
@@ -2152,6 +2166,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
__ sar(ecx, kSmiTagSize); |
if (!right.number_info().IsSmi()) { |
deferred->Branch(carry); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right.reg()); |
} |
__ shl_cl(answer.reg()); |
__ cmp(answer.reg(), 0xc0000000); |
@@ -2192,6 +2208,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
if (!operand->number_info().IsSmi()) { |
__ test(operand->reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
} |
__ mov(answer.reg(), operand->reg()); |
ASSERT(kSmiTag == 0); // adjust code if not the case |
@@ -2234,6 +2252,8 @@ Result CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
if (!operand->number_info().IsSmi()) { |
__ test(operand->reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand->reg()); |
} |
if (op == Token::BIT_AND) { |
__ and_(Operand(operand->reg()), Immediate(value)); |
@@ -2427,9 +2447,7 @@ void CodeGenerator::Comparison(AstNode* node, |
// by reconstituting them on the non-fall-through path. |
if (left_side.is_smi()) { |
- if (FLAG_debug_code) { |
- __ AbortIfNotSmi(left_side.reg(), "Argument not a smi"); |
- } |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left_side.reg()); |
} else { |
JumpTarget is_smi; |
__ test(left_side.reg(), Immediate(kSmiTagMask)); |
@@ -3741,7 +3759,7 @@ void CodeGenerator::VisitForStatement(ForStatement* node) { |
frame_->PushLocalAt(slot->index()); |
Result var = frame_->Pop(); |
var.ToRegister(); |
- __ AbortIfNotSmi(var.reg(), "Loop variable not a smi."); |
+ __ AbortIfNotSmi(var.reg()); |
} |
} |
@@ -3775,7 +3793,7 @@ void CodeGenerator::VisitForStatement(ForStatement* node) { |
frame_->PushLocalAt(slot->index()); |
Result var = frame_->Pop(); |
var.ToRegister(); |
- __ AbortIfNotSmi(var.reg(), "Loop variable not a smi."); |
+ __ AbortIfNotSmi(var.reg()); |
} |
} |
@@ -6692,9 +6710,7 @@ void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) { |
NumberInfo operand_info = operand.number_info(); |
operand.ToRegister(); |
if (operand_info.IsSmi()) { |
- if (FLAG_debug_code) { |
- __ AbortIfNotSmi(operand.reg(), "Operand not a smi."); |
- } |
+ if (FLAG_debug_code) __ AbortIfNotSmi(operand.reg()); |
frame_->Spill(operand.reg()); |
// Set smi tag bit. It will be reset by the not operation. |
__ lea(operand.reg(), Operand(operand.reg(), kSmiTagMask)); |
@@ -6894,9 +6910,7 @@ void CodeGenerator::VisitCountOperation(CountOperation* node) { |
Result tmp; |
if (new_value.is_smi()) { |
- if (FLAG_debug_code) { |
- __ AbortIfNotSmi(new_value.reg(), "Operand not a smi"); |
- } |
+ if (FLAG_debug_code) __ AbortIfNotSmi(new_value.reg()); |
} else { |
// We don't know statically if the input is a smi. |
// In order to combine the overflow and the smi tag check, we need |
@@ -7860,6 +7874,8 @@ Result CodeGenerator::EmitKeyedLoad() { |
if (!key.is_smi()) { |
__ test(key.reg(), Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(key.reg()); |
} |
// Get the elements array from the receiver and check that it |
@@ -8013,6 +8029,8 @@ static void CheckTwoForSminess(MacroAssembler* masm, |
if (!left_info.IsSmi()) { |
__ test(left, Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left); |
} |
} else if (!left_info.IsSmi()) { |
if (!right_info.IsSmi()) { |
@@ -8023,11 +8041,15 @@ static void CheckTwoForSminess(MacroAssembler* masm, |
} else { |
__ test(left, Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right); |
} |
} else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left); |
if (!right_info.IsSmi()) { |
__ test(right, Immediate(kSmiTagMask)); |
deferred->Branch(not_zero); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right); |
} |
} |
} |
@@ -8534,6 +8556,10 @@ void GenericBinaryOpStub::GenerateSmiCode(MacroAssembler* masm, Label* slow) { |
} |
if (static_operands_type_.IsSmi()) { |
+ if (FLAG_debug_code) { |
+ __ AbortIfNotSmi(left); |
+ __ AbortIfNotSmi(right); |
+ } |
if (op_ == Token::BIT_OR) { |
__ or_(right, Operand(left)); |
GenerateReturn(masm); |
@@ -8888,12 +8914,14 @@ void GenericBinaryOpStub::Generate(MacroAssembler* masm) { |
if (static_operands_type_.IsNumber()) { |
if (FLAG_debug_code) { |
// Assert at runtime that inputs are only numbers. |
- __ AbortIfNotNumber(edx, |
- "GenericBinaryOpStub operand not a number."); |
- __ AbortIfNotNumber(eax, |
- "GenericBinaryOpStub operand not a number."); |
+ __ AbortIfNotNumber(edx); |
+ __ AbortIfNotNumber(eax); |
} |
if (static_operands_type_.IsSmi()) { |
+ if (FLAG_debug_code) { |
+ __ AbortIfNotSmi(edx); |
+ __ AbortIfNotSmi(eax); |
+ } |
FloatingPointHelper::LoadSSE2Smis(masm, ecx); |
} else { |
FloatingPointHelper::LoadSSE2Operands(masm); |
@@ -8916,10 +8944,8 @@ void GenericBinaryOpStub::Generate(MacroAssembler* masm) { |
if (static_operands_type_.IsNumber()) { |
if (FLAG_debug_code) { |
// Assert at runtime that inputs are only numbers. |
- __ AbortIfNotNumber(edx, |
- "GenericBinaryOpStub operand not a number."); |
- __ AbortIfNotNumber(eax, |
- "GenericBinaryOpStub operand not a number."); |
+ __ AbortIfNotNumber(edx); |
+ __ AbortIfNotNumber(eax); |
} |
} else { |
FloatingPointHelper::CheckFloatOperands(masm, &call_runtime, ebx); |
@@ -9649,6 +9675,8 @@ void FloatingPointHelper::LoadNumbersAsIntegers(MacroAssembler* masm, |
if (!number_info.IsSmi()) { |
__ test(edx, Immediate(kSmiTagMask)); |
__ j(not_zero, &arg1_is_object); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(edx); |
} |
__ SmiUntag(edx); |
__ jmp(&load_arg2); |
@@ -9667,6 +9695,8 @@ void FloatingPointHelper::LoadNumbersAsIntegers(MacroAssembler* masm, |
if (!number_info.IsSmi()) { |
__ test(eax, Immediate(kSmiTagMask)); |
__ j(not_zero, &arg2_is_object); |
+ } else { |
+ if (FLAG_debug_code) __ AbortIfNotSmi(eax); |
} |
__ SmiUntag(eax); |
__ mov(ecx, eax); |