Chromium Code Reviews| Index: src/arm/lithium-codegen-arm.cc |
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
| index 0aa8197ce1fe128098ef6f5c742592eb976f5653..74c45ebab7655e6fb2b248cef5ea24bd99bbd7d4 100644 |
| --- a/src/arm/lithium-codegen-arm.cc |
| +++ b/src/arm/lithium-codegen-arm.cc |
| @@ -5597,22 +5597,21 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label, |
| Register scratch = scratch0(); |
| if (type_name->Equals(heap()->number_string())) { |
| __ JumpIfSmi(input, true_label); |
| - __ ldr(input, FieldMemOperand(input, HeapObject::kMapOffset)); |
| - __ LoadRoot(ip, Heap::kHeapNumberMapRootIndex); |
| - __ cmp(input, Operand(ip)); |
| + __ ldr(scratch, FieldMemOperand(input, HeapObject::kMapOffset)); |
| + __ CompareRoot(scratch, Heap::kHeapNumberMapRootIndex); |
| final_branch_condition = eq; |
| } else if (type_name->Equals(heap()->string_string())) { |
| __ JumpIfSmi(input, false_label); |
| - __ CompareObjectType(input, input, scratch, FIRST_NONSTRING_TYPE); |
| + __ CompareObjectType(input, scratch, no_reg, FIRST_NONSTRING_TYPE); |
| __ b(ge, false_label); |
| - __ ldrb(ip, FieldMemOperand(input, Map::kBitFieldOffset)); |
| - __ tst(ip, Operand(1 << Map::kIsUndetectable)); |
| + __ ldrb(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset)); |
| + __ tst(scratch, Operand(1 << Map::kIsUndetectable)); |
| final_branch_condition = eq; |
| } else if (type_name->Equals(heap()->symbol_string())) { |
| __ JumpIfSmi(input, false_label); |
| - __ CompareObjectType(input, input, scratch, SYMBOL_TYPE); |
| + __ CompareObjectType(input, scratch, no_reg, SYMBOL_TYPE); |
| final_branch_condition = eq; |
| } else if (type_name->Equals(heap()->boolean_string())) { |
| @@ -5630,17 +5629,18 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label, |
| __ b(eq, true_label); |
| __ JumpIfSmi(input, false_label); |
| // Check for undetectable objects => true. |
| - __ ldr(input, FieldMemOperand(input, HeapObject::kMapOffset)); |
| - __ ldrb(ip, FieldMemOperand(input, Map::kBitFieldOffset)); |
| - __ tst(ip, Operand(1 << Map::kIsUndetectable)); |
| + __ ldr(scratch, FieldMemOperand(input, HeapObject::kMapOffset)); |
| + __ ldrb(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset)); |
| + __ tst(scratch, Operand(1 << Map::kIsUndetectable)); |
| final_branch_condition = ne; |
| } else if (type_name->Equals(heap()->function_string())) { |
| STATIC_ASSERT(NUM_OF_CALLABLE_SPEC_OBJECT_TYPES == 2); |
| + Register type_reg = scratch; |
| __ JumpIfSmi(input, false_label); |
| - __ CompareObjectType(input, scratch, input, JS_FUNCTION_TYPE); |
| + __ CompareObjectType(input, scratch, type_reg, JS_FUNCTION_TYPE); |
| __ b(eq, true_label); |
| - __ cmp(input, Operand(JS_FUNCTION_PROXY_TYPE)); |
| + __ cmp(type_reg, Operand(JS_FUNCTION_PROXY_TYPE)); |
| final_branch_condition = eq; |
| } else if (type_name->Equals(heap()->object_string())) { |
| @@ -5649,14 +5649,14 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label, |
| __ CompareRoot(input, Heap::kNullValueRootIndex); |
| __ b(eq, true_label); |
| } |
| - __ CompareObjectType(input, input, scratch, |
| - FIRST_NONCALLABLE_SPEC_OBJECT_TYPE); |
| - __ b(lt, false_label); |
| - __ CompareInstanceType(input, scratch, LAST_NONCALLABLE_SPEC_OBJECT_TYPE); |
| - __ b(gt, false_label); |
| + __ CheckObjectTypeRange(input, |
| + scratch, |
|
ulan
2013/11/22 15:43:46
Maybe name the scratch "map" similar to the "type_
|
| + FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, |
| + LAST_NONCALLABLE_SPEC_OBJECT_TYPE, |
| + false_label); |
| // Check for undetectable objects => false. |
| - __ ldrb(ip, FieldMemOperand(input, Map::kBitFieldOffset)); |
| - __ tst(ip, Operand(1 << Map::kIsUndetectable)); |
| + __ ldrb(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset)); |
| + __ tst(scratch, Operand(1 << Map::kIsUndetectable)); |
| final_branch_condition = eq; |
| } else { |