Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 27bd92bb204e13a397d999df8a2863a3083b8855..ad7b92fe7af19208734f8b71586b7ac77cbf69d8 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -1222,8 +1222,7 @@ void LCodeGen::DoValueOf(LValueOf* instr) { |
ASSERT(input.is(result)); |
Label done; |
// If the object is a smi return the object. |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(zero, &done, Label::kNear); |
+ __ JumpIfSmi(input, &done, Label::kNear); |
// If the object is not a value type, return the object. |
__ CmpObjectType(input, JS_VALUE_TYPE, map); |
@@ -1381,8 +1380,7 @@ void LCodeGen::DoBranch(LBranch* instr) { |
__ j(equal, false_label); |
__ test(reg, Operand(reg)); |
__ j(equal, false_label); |
- __ test(reg, Immediate(kSmiTagMask)); |
- __ j(zero, true_label); |
+ __ JumpIfSmi(reg, true_label); |
// Test for double values. Zero is false. |
Label call_stub; |
@@ -1604,8 +1602,7 @@ void LCodeGen::DoIsNull(LIsNull* instr) { |
__ j(equal, &true_value, Label::kNear); |
__ cmp(reg, factory()->undefined_value()); |
__ j(equal, &true_value, Label::kNear); |
- __ test(reg, Immediate(kSmiTagMask)); |
- __ j(zero, &false_value, Label::kNear); |
+ __ JumpIfSmi(reg, &false_value, Label::kNear); |
// Check for undetectable objects by looking in the bit field in |
// the map. The object has already been smi checked. |
Register scratch = result; |
@@ -1641,8 +1638,7 @@ void LCodeGen::DoIsNullAndBranch(LIsNullAndBranch* instr) { |
__ j(equal, true_label); |
__ cmp(reg, factory()->undefined_value()); |
__ j(equal, true_label); |
- __ test(reg, Immediate(kSmiTagMask)); |
- __ j(zero, false_label); |
+ __ JumpIfSmi(reg, false_label); |
// Check for undetectable objects by looking in the bit field in |
// the map. The object has already been smi checked. |
Register scratch = ToRegister(instr->TempAt(0)); |
@@ -1663,8 +1659,7 @@ Condition LCodeGen::EmitIsObject(Register input, |
ASSERT(!input.is(temp2)); |
ASSERT(!temp1.is(temp2)); |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(equal, is_not_object); |
+ __ JumpIfSmi(input, is_not_object); |
__ cmp(input, isolate()->factory()->null_value()); |
__ j(equal, is_object); |
@@ -1724,10 +1719,9 @@ void LCodeGen::DoIsSmi(LIsSmi* instr) { |
Register result = ToRegister(instr->result()); |
ASSERT(instr->hydrogen()->value()->representation().IsTagged()); |
- __ test(input, Immediate(kSmiTagMask)); |
- __ mov(result, factory()->true_value()); |
Label done; |
- __ j(zero, &done, Label::kNear); |
+ __ mov(result, factory()->true_value()); |
+ __ JumpIfSmi(input, &done, Label::kNear); |
__ mov(result, factory()->false_value()); |
__ bind(&done); |
} |
@@ -1751,8 +1745,7 @@ void LCodeGen::DoIsUndetectable(LIsUndetectable* instr) { |
ASSERT(instr->hydrogen()->value()->representation().IsTagged()); |
Label false_label, done; |
STATIC_ASSERT(kSmiTag == 0); |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(zero, &false_label, Label::kNear); |
+ __ JumpIfSmi(input, &false_label, Label::kNear); |
__ mov(result, FieldOperand(input, HeapObject::kMapOffset)); |
__ test_b(FieldOperand(result, Map::kBitFieldOffset), |
1 << Map::kIsUndetectable); |
@@ -1773,8 +1766,7 @@ void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) { |
int false_block = chunk_->LookupDestination(instr->false_block_id()); |
STATIC_ASSERT(kSmiTag == 0); |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(zero, chunk_->GetAssemblyLabel(false_block)); |
+ __ JumpIfSmi(input, chunk_->GetAssemblyLabel(false_block)); |
__ mov(temp, FieldOperand(input, HeapObject::kMapOffset)); |
__ test_b(FieldOperand(temp, Map::kBitFieldOffset), |
1 << Map::kIsUndetectable); |
@@ -1807,9 +1799,8 @@ void LCodeGen::DoHasInstanceType(LHasInstanceType* instr) { |
Register result = ToRegister(instr->result()); |
ASSERT(instr->hydrogen()->value()->representation().IsTagged()); |
- __ test(input, Immediate(kSmiTagMask)); |
Label done, is_false; |
- __ j(zero, &is_false, Label::kNear); |
+ __ JumpIfSmi(input, &is_false, Label::kNear); |
__ CmpObjectType(input, TestType(instr->hydrogen()), result); |
__ j(NegateCondition(BranchCondition(instr->hydrogen())), |
&is_false, Label::kNear); |
@@ -1830,8 +1821,7 @@ void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) { |
Label* false_label = chunk_->GetAssemblyLabel(false_block); |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(zero, false_label); |
+ __ JumpIfSmi(input, false_label); |
__ CmpObjectType(input, TestType(instr->hydrogen()), temp); |
EmitBranch(true_block, false_block, BranchCondition(instr->hydrogen())); |
@@ -1889,8 +1879,7 @@ void LCodeGen::EmitClassOfTest(Label* is_true, |
Register temp2) { |
ASSERT(!input.is(temp)); |
ASSERT(!temp.is(temp2)); // But input and temp2 may be the same register. |
- __ test(input, Immediate(kSmiTagMask)); |
- __ j(zero, is_false); |
+ __ JumpIfSmi(input, is_false); |
__ CmpObjectType(input, FIRST_SPEC_OBJECT_TYPE, temp); |
__ j(below, is_false); |
@@ -2036,8 +2025,7 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) { |
Register temp = ToRegister(instr->TempAt(0)); |
// A Smi is not an instance of anything. |
- __ test(object, Immediate(kSmiTagMask)); |
- __ j(zero, &false_result); |
+ __ JumpIfSmi(object, &false_result); |
// This is the inlined call site instanceof cache. The two occurences of the |
// hole value will be patched to the last map/result pair generated by the |
@@ -2840,8 +2828,7 @@ void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { |
new DeferredMathAbsTaggedHeapNumber(this, instr); |
Register input_reg = ToRegister(instr->InputAt(0)); |
// Smi check. |
- __ test(input_reg, Immediate(kSmiTagMask)); |
- __ j(not_zero, deferred->entry()); |
+ __ JumpIfNotSmi(input_reg, deferred->entry()); |
EmitIntegerMathAbs(instr); |
__ bind(deferred->exit()); |
} |
@@ -2963,8 +2950,7 @@ void LCodeGen::DoPower(LPower* instr) { |
Register right_reg = ToRegister(right); |
Label non_smi, call; |
- __ test(right_reg, Immediate(kSmiTagMask)); |
- __ j(not_zero, &non_smi); |
+ __ JumpIfNotSmi(right_reg, &non_smi); |
__ SmiUntag(right_reg); |
__ cvtsi2sd(result_reg, Operand(right_reg)); |
__ jmp(&call); |
@@ -3631,8 +3617,7 @@ void LCodeGen::EmitNumberUntagD(Register input_reg, |
Label load_smi, done; |
// Smi check. |
- __ test(input_reg, Immediate(kSmiTagMask)); |
- __ j(zero, &load_smi, Label::kNear); |
+ __ JumpIfSmi(input_reg, &load_smi, Label::kNear); |
// Heap number map check. |
__ cmp(FieldOperand(input_reg, HeapObject::kMapOffset), |
@@ -3766,8 +3751,7 @@ void LCodeGen::DoTaggedToI(LTaggedToI* instr) { |
DeferredTaggedToI* deferred = new DeferredTaggedToI(this, instr); |
// Smi check. |
- __ test(input_reg, Immediate(kSmiTagMask)); |
- __ j(not_zero, deferred->entry()); |
+ __ JumpIfNotSmi(input_reg, deferred->entry()); |
// Smi to int32 conversion |
__ SmiUntag(input_reg); // Untag smi. |