| Index: src/arm/lithium-codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/lithium-codegen-arm.cc (revision 8460)
|
| +++ src/arm/lithium-codegen-arm.cc (working copy)
|
| @@ -1531,7 +1531,7 @@
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
| int false_block = chunk_->LookupDestination(instr->false_block_id());
|
|
|
| - Representation r = instr->hydrogen()->representation();
|
| + Representation r = instr->hydrogen()->value()->representation();
|
| if (r.IsInteger32()) {
|
| Register reg = ToRegister(instr->InputAt(0));
|
| __ cmp(reg, Operand(0));
|
| @@ -1547,7 +1547,7 @@
|
| } else {
|
| ASSERT(r.IsTagged());
|
| Register reg = ToRegister(instr->InputAt(0));
|
| - if (instr->hydrogen()->type().IsBoolean()) {
|
| + if (instr->hydrogen()->value()->type().IsBoolean()) {
|
| __ LoadRoot(ip, Heap::kTrueValueRootIndex);
|
| __ cmp(reg, ip);
|
| EmitBranch(true_block, false_block, eq);
|
| @@ -1645,34 +1645,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoCmpID(LCmpID* instr) {
|
| - LOperand* left = instr->InputAt(0);
|
| - LOperand* right = instr->InputAt(1);
|
| - LOperand* result = instr->result();
|
| - Register scratch = scratch0();
|
| -
|
| - Label unordered, done;
|
| - if (instr->is_double()) {
|
| - // Compare left and right as doubles and load the
|
| - // resulting flags into the normal status register.
|
| - __ VFPCompareAndSetFlags(ToDoubleRegister(left), ToDoubleRegister(right));
|
| - // If a NaN is involved, i.e. the result is unordered (V set),
|
| - // jump to unordered to return false.
|
| - __ b(vs, &unordered);
|
| - } else {
|
| - EmitCmpI(left, right);
|
| - }
|
| -
|
| - Condition cc = TokenToCondition(instr->op(), instr->is_double());
|
| - __ LoadRoot(ToRegister(result), Heap::kTrueValueRootIndex);
|
| - __ b(cc, &done);
|
| -
|
| - __ bind(&unordered);
|
| - __ LoadRoot(ToRegister(result), Heap::kFalseValueRootIndex);
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
|
| LOperand* left = instr->InputAt(0);
|
| LOperand* right = instr->InputAt(1);
|
| @@ -1695,17 +1667,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoCmpObjectEq(LCmpObjectEq* instr) {
|
| - Register left = ToRegister(instr->InputAt(0));
|
| - Register right = ToRegister(instr->InputAt(1));
|
| - Register result = ToRegister(instr->result());
|
| -
|
| - __ cmp(left, Operand(right));
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex, eq);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, ne);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
|
| Register left = ToRegister(instr->InputAt(0));
|
| Register right = ToRegister(instr->InputAt(1));
|
| @@ -1717,17 +1678,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoCmpConstantEq(LCmpConstantEq* instr) {
|
| - Register left = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| -
|
| - Label done;
|
| - __ cmp(left, Operand(instr->hydrogen()->right()));
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex, eq);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, ne);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
|
| Register left = ToRegister(instr->InputAt(0));
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
| @@ -1738,39 +1688,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoIsNull(LIsNull* instr) {
|
| - Register reg = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| -
|
| - __ LoadRoot(ip, Heap::kNullValueRootIndex);
|
| - __ cmp(reg, ip);
|
| - if (instr->is_strict()) {
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex, eq);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, ne);
|
| - } else {
|
| - Label true_value, false_value, done;
|
| - __ b(eq, &true_value);
|
| - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
|
| - __ cmp(ip, reg);
|
| - __ b(eq, &true_value);
|
| - __ JumpIfSmi(reg, &false_value);
|
| - // Check for undetectable objects by looking in the bit field in
|
| - // the map. The object has already been smi checked.
|
| - Register scratch = result;
|
| - __ ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
| - __ ldrb(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset));
|
| - __ tst(scratch, Operand(1 << Map::kIsUndetectable));
|
| - __ b(ne, &true_value);
|
| - __ bind(&false_value);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ jmp(&done);
|
| - __ bind(&true_value);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| - __ bind(&done);
|
| - }
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoIsNullAndBranch(LIsNullAndBranch* instr) {
|
| Register scratch = scratch0();
|
| Register reg = ToRegister(instr->InputAt(0));
|
| @@ -1830,25 +1747,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoIsObject(LIsObject* instr) {
|
| - Register reg = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| - Label is_false, is_true, done;
|
| -
|
| - Condition true_cond = EmitIsObject(reg, result, &is_false, &is_true);
|
| - __ b(true_cond, &is_true);
|
| -
|
| - __ bind(&is_false);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ b(&done);
|
| -
|
| - __ bind(&is_true);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| -
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
|
| Register reg = ToRegister(instr->InputAt(0));
|
| Register temp1 = ToRegister(instr->TempAt(0));
|
| @@ -1866,18 +1764,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoIsSmi(LIsSmi* instr) {
|
| - ASSERT(instr->hydrogen()->value()->representation().IsTagged());
|
| - Register result = ToRegister(instr->result());
|
| - Register input_reg = EmitLoadRegister(instr->InputAt(0), ip);
|
| - Label done;
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| - __ JumpIfSmi(input_reg, &done);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
| int false_block = chunk_->LookupDestination(instr->false_block_id());
|
| @@ -1888,25 +1774,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoIsUndetectable(LIsUndetectable* instr) {
|
| - Register input = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| -
|
| - ASSERT(instr->hydrogen()->value()->representation().IsTagged());
|
| - Label false_label, done;
|
| - __ JumpIfSmi(input, &false_label);
|
| - __ ldr(result, FieldMemOperand(input, HeapObject::kMapOffset));
|
| - __ ldrb(result, FieldMemOperand(result, Map::kBitFieldOffset));
|
| - __ tst(result, Operand(1 << Map::kIsUndetectable));
|
| - __ b(eq, &false_label);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| - __ jmp(&done);
|
| - __ bind(&false_label);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) {
|
| Register input = ToRegister(instr->InputAt(0));
|
| Register temp = ToRegister(instr->TempAt(0));
|
| @@ -1922,7 +1789,7 @@
|
| }
|
|
|
|
|
| -static InstanceType TestType(HHasInstanceType* instr) {
|
| +static InstanceType TestType(HHasInstanceTypeAndBranch* instr) {
|
| InstanceType from = instr->from();
|
| InstanceType to = instr->to();
|
| if (from == FIRST_TYPE) return to;
|
| @@ -1931,7 +1798,7 @@
|
| }
|
|
|
|
|
| -static Condition BranchCondition(HHasInstanceType* instr) {
|
| +static Condition BranchCondition(HHasInstanceTypeAndBranch* instr) {
|
| InstanceType from = instr->from();
|
| InstanceType to = instr->to();
|
| if (from == to) return eq;
|
| @@ -1942,23 +1809,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoHasInstanceType(LHasInstanceType* instr) {
|
| - Register input = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| -
|
| - ASSERT(instr->hydrogen()->value()->representation().IsTagged());
|
| - Label done;
|
| - __ tst(input, Operand(kSmiTagMask));
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, eq);
|
| - __ b(eq, &done);
|
| - __ CompareObjectType(input, result, result, TestType(instr->hydrogen()));
|
| - Condition cond = BranchCondition(instr->hydrogen());
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex, cond);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, NegateCondition(cond));
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) {
|
| Register scratch = scratch0();
|
| Register input = ToRegister(instr->InputAt(0));
|
| @@ -1988,20 +1838,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoHasCachedArrayIndex(LHasCachedArrayIndex* instr) {
|
| - Register input = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| - Register scratch = scratch0();
|
| -
|
| - ASSERT(instr->hydrogen()->value()->representation().IsTagged());
|
| - __ ldr(scratch,
|
| - FieldMemOperand(input, String::kHashFieldOffset));
|
| - __ tst(scratch, Operand(String::kContainsCachedArrayIndexMask));
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex, eq);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex, ne);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoHasCachedArrayIndexAndBranch(
|
| LHasCachedArrayIndexAndBranch* instr) {
|
| Register input = ToRegister(instr->InputAt(0));
|
| @@ -2074,27 +1910,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoClassOfTest(LClassOfTest* instr) {
|
| - Register input = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| - ASSERT(input.is(result));
|
| - Handle<String> class_name = instr->hydrogen()->class_name();
|
| -
|
| - Label done, is_true, is_false;
|
| -
|
| - EmitClassOfTest(&is_true, &is_false, class_name, input, scratch0(), input);
|
| - __ b(ne, &is_false);
|
| -
|
| - __ bind(&is_true);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| - __ jmp(&done);
|
| -
|
| - __ bind(&is_false);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoClassOfTestAndBranch(LClassOfTestAndBranch* instr) {
|
| Register input = ToRegister(instr->InputAt(0));
|
| Register temp = scratch0();
|
| @@ -4349,29 +4164,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoTypeofIs(LTypeofIs* instr) {
|
| - Register input = ToRegister(instr->InputAt(0));
|
| - Register result = ToRegister(instr->result());
|
| - Label true_label;
|
| - Label false_label;
|
| - Label done;
|
| -
|
| - Condition final_branch_condition = EmitTypeofIs(&true_label,
|
| - &false_label,
|
| - input,
|
| - instr->type_literal());
|
| - __ b(final_branch_condition, &true_label);
|
| - __ bind(&false_label);
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ b(&done);
|
| -
|
| - __ bind(&true_label);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| -
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
|
| Register input = ToRegister(instr->InputAt(0));
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
| @@ -4455,26 +4247,6 @@
|
| }
|
|
|
|
|
| -void LCodeGen::DoIsConstructCall(LIsConstructCall* instr) {
|
| - Register result = ToRegister(instr->result());
|
| - Label true_label;
|
| - Label false_label;
|
| - Label done;
|
| -
|
| - EmitIsConstructCall(result, scratch0());
|
| - __ b(eq, &true_label);
|
| -
|
| - __ LoadRoot(result, Heap::kFalseValueRootIndex);
|
| - __ b(&done);
|
| -
|
| -
|
| - __ bind(&true_label);
|
| - __ LoadRoot(result, Heap::kTrueValueRootIndex);
|
| -
|
| - __ bind(&done);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoIsConstructCallAndBranch(LIsConstructCallAndBranch* instr) {
|
| Register temp1 = ToRegister(instr->TempAt(0));
|
| int true_block = chunk_->LookupDestination(instr->true_block_id());
|
|
|