| Index: src/ia32/lithium-codegen-ia32.cc
|
| ===================================================================
|
| --- src/ia32/lithium-codegen-ia32.cc (revision 8444)
|
| +++ src/ia32/lithium-codegen-ia32.cc (working copy)
|
| @@ -1637,13 +1637,8 @@
|
|
|
| Condition LCodeGen::EmitIsObject(Register input,
|
| Register temp1,
|
| - Register temp2,
|
| Label* is_not_object,
|
| Label* is_object) {
|
| - ASSERT(!input.is(temp1));
|
| - ASSERT(!input.is(temp2));
|
| - ASSERT(!temp1.is(temp2));
|
| -
|
| __ JumpIfSmi(input, is_not_object);
|
|
|
| __ cmp(input, isolate()->factory()->null_value());
|
| @@ -1651,14 +1646,14 @@
|
|
|
| __ mov(temp1, FieldOperand(input, HeapObject::kMapOffset));
|
| // Undetectable objects behave like undefined.
|
| - __ movzx_b(temp2, FieldOperand(temp1, Map::kBitFieldOffset));
|
| - __ test(temp2, Immediate(1 << Map::kIsUndetectable));
|
| + __ test_b(FieldOperand(temp1, Map::kBitFieldOffset),
|
| + 1 << Map::kIsUndetectable);
|
| __ j(not_zero, is_not_object);
|
|
|
| - __ movzx_b(temp2, FieldOperand(temp1, Map::kInstanceTypeOffset));
|
| - __ cmp(temp2, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE);
|
| + __ movzx_b(temp1, FieldOperand(temp1, Map::kInstanceTypeOffset));
|
| + __ cmp(temp1, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE);
|
| __ j(below, is_not_object);
|
| - __ cmp(temp2, LAST_NONCALLABLE_SPEC_OBJECT_TYPE);
|
| + __ cmp(temp1, LAST_NONCALLABLE_SPEC_OBJECT_TYPE);
|
| return below_equal;
|
| }
|
|
|
| @@ -1666,10 +1661,9 @@
|
| void LCodeGen::DoIsObject(LIsObject* instr) {
|
| Register reg = ToRegister(instr->InputAt(0));
|
| Register result = ToRegister(instr->result());
|
| - Register temp = ToRegister(instr->TempAt(0));
|
| Label is_false, is_true, done;
|
|
|
| - Condition true_cond = EmitIsObject(reg, result, temp, &is_false, &is_true);
|
| + Condition true_cond = EmitIsObject(reg, result, &is_false, &is_true);
|
| __ j(true_cond, &is_true);
|
|
|
| __ bind(&is_false);
|
| @@ -1686,14 +1680,13 @@
|
| void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
|
| Register reg = ToRegister(instr->InputAt(0));
|
| Register temp = ToRegister(instr->TempAt(0));
|
| - Register temp2 = ToRegister(instr->TempAt(1));
|
|
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
| int false_block = chunk_->LookupDestination(instr->false_block_id());
|
| Label* true_label = chunk_->GetAssemblyLabel(true_block);
|
| Label* false_label = chunk_->GetAssemblyLabel(false_block);
|
|
|
| - Condition true_cond = EmitIsObject(reg, temp, temp2, false_label, true_label);
|
| + Condition true_cond = EmitIsObject(reg, temp, false_label, true_label);
|
|
|
| EmitBranch(true_block, false_block, true_cond);
|
| }
|
|
|