| Index: src/arm/lithium-arm.cc
|
| ===================================================================
|
| --- src/arm/lithium-arm.cc (revision 6433)
|
| +++ src/arm/lithium-arm.cc (working copy)
|
| @@ -64,12 +64,12 @@
|
| }
|
|
|
|
|
| -void LInstruction::PrintTo(StringStream* stream) const {
|
| +void LInstruction::PrintTo(StringStream* stream) {
|
| stream->Add("%s ", this->Mnemonic());
|
| if (HasResult()) {
|
| - result()->PrintTo(stream);
|
| - stream->Add(" ");
|
| + PrintOutputOperandTo(stream);
|
| }
|
| +
|
| PrintDataTo(stream);
|
|
|
| if (HasEnvironment()) {
|
| @@ -84,7 +84,29 @@
|
| }
|
|
|
|
|
| -void LLabel::PrintDataTo(StringStream* stream) const {
|
| +template<int R, int I, int T>
|
| +void LTemplateInstruction<R, I, T>::PrintDataTo(StringStream* stream) {
|
| + stream->Add("= ");
|
| + inputs_.PrintOperandsTo(stream);
|
| +}
|
| +
|
| +
|
| +template<int R, int I, int T>
|
| +void LTemplateInstruction<R, I, T>::PrintOutputOperandTo(StringStream* stream) {
|
| + results_.PrintOperandsTo(stream);
|
| +}
|
| +
|
| +
|
| +template<typename T, int N>
|
| +void OperandContainer<T, N>::PrintOperandsTo(StringStream* stream) {
|
| + for (int i = 0; i < N; i++) {
|
| + if (i > 0) stream->Add(" ");
|
| + elems_[i]->PrintTo(stream);
|
| + }
|
| +}
|
| +
|
| +
|
| +void LLabel::PrintDataTo(StringStream* stream) {
|
| LGap::PrintDataTo(stream);
|
| LLabel* rep = replacement();
|
| if (rep != NULL) {
|
| @@ -143,74 +165,65 @@
|
| }
|
|
|
|
|
| -
|
| -void LBinaryOperation::PrintDataTo(StringStream* stream) const {
|
| - stream->Add("= ");
|
| - left()->PrintTo(stream);
|
| - stream->Add(" ");
|
| - right()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| -void LGoto::PrintDataTo(StringStream* stream) const {
|
| +void LGoto::PrintDataTo(StringStream* stream) {
|
| stream->Add("B%d", block_id());
|
| }
|
|
|
|
|
| -void LBranch::PrintDataTo(StringStream* stream) const {
|
| +void LBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("B%d | B%d on ", true_block_id(), false_block_id());
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| }
|
|
|
|
|
| -void LCmpIDAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LCmpIDAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if ");
|
| - left()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(" %s ", Token::String(op()));
|
| - right()->PrintTo(stream);
|
| + InputAt(1)->PrintTo(stream);
|
| stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LIsNullAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LIsNullAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if ");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(is_strict() ? " === null" : " == null");
|
| stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LIsObjectAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LIsObjectAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if is_object(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LIsSmiAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LIsSmiAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if is_smi(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if has_instance_type(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if has_cached_array_index(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LClassOfTestAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LClassOfTestAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if class_of_test(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(", \"%o\") then B%d else B%d",
|
| *hydrogen()->class_name(),
|
| true_block_id(),
|
| @@ -218,29 +231,29 @@
|
| }
|
|
|
|
|
| -void LTypeofIs::PrintDataTo(StringStream* stream) const {
|
| - input()->PrintTo(stream);
|
| +void LTypeofIs::PrintDataTo(StringStream* stream) {
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(" == \"%s\"", *hydrogen()->type_literal()->ToCString());
|
| }
|
|
|
|
|
| -void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) const {
|
| +void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if typeof ");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(" == \"%s\" then B%d else B%d",
|
| *hydrogen()->type_literal()->ToCString(),
|
| true_block_id(), false_block_id());
|
| }
|
|
|
|
|
| -void LCallConstantFunction::PrintDataTo(StringStream* stream) const {
|
| +void LCallConstantFunction::PrintDataTo(StringStream* stream) {
|
| stream->Add("#%d / ", arity());
|
| }
|
|
|
|
|
| -void LUnaryMathOperation::PrintDataTo(StringStream* stream) const {
|
| +void LUnaryMathOperation::PrintDataTo(StringStream* stream) {
|
| stream->Add("/%s ", hydrogen()->OpName());
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| }
|
|
|
|
|
| @@ -249,48 +262,43 @@
|
| }
|
|
|
|
|
| -void LCallKeyed::PrintDataTo(StringStream* stream) const {
|
| +void LCallKeyed::PrintDataTo(StringStream* stream) {
|
| stream->Add("[r2] #%d / ", arity());
|
| }
|
|
|
|
|
| -void LCallNamed::PrintDataTo(StringStream* stream) const {
|
| +void LCallNamed::PrintDataTo(StringStream* stream) {
|
| SmartPointer<char> name_string = name()->ToCString();
|
| stream->Add("%s #%d / ", *name_string, arity());
|
| }
|
|
|
|
|
| -void LCallGlobal::PrintDataTo(StringStream* stream) const {
|
| +void LCallGlobal::PrintDataTo(StringStream* stream) {
|
| SmartPointer<char> name_string = name()->ToCString();
|
| stream->Add("%s #%d / ", *name_string, arity());
|
| }
|
|
|
|
|
| -void LCallKnownGlobal::PrintDataTo(StringStream* stream) const {
|
| +void LCallKnownGlobal::PrintDataTo(StringStream* stream) {
|
| stream->Add("#%d / ", arity());
|
| }
|
|
|
|
|
| -void LCallNew::PrintDataTo(StringStream* stream) const {
|
| - LUnaryOperation::PrintDataTo(stream);
|
| +void LCallNew::PrintDataTo(StringStream* stream) {
|
| + stream->Add("= ");
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(" #%d / ", arity());
|
| }
|
|
|
|
|
| -void LClassOfTest::PrintDataTo(StringStream* stream) const {
|
| +void LClassOfTest::PrintDataTo(StringStream* stream) {
|
| stream->Add("= class_of_test(");
|
| - input()->PrintTo(stream);
|
| + InputAt(0)->PrintTo(stream);
|
| stream->Add(", \"%o\")", *hydrogen()->class_name());
|
| }
|
|
|
|
|
| -void LUnaryOperation::PrintDataTo(StringStream* stream) const {
|
| - stream->Add("= ");
|
| - input()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| -void LAccessArgumentsAt::PrintDataTo(StringStream* stream) const {
|
| +void LAccessArgumentsAt::PrintDataTo(StringStream* stream) {
|
| arguments()->PrintTo(stream);
|
|
|
| stream->Add(" length ");
|
| @@ -301,6 +309,24 @@
|
| }
|
|
|
|
|
| +void LStoreNamed::PrintDataTo(StringStream* stream) {
|
| + object()->PrintTo(stream);
|
| + stream->Add(".");
|
| + stream->Add(*String::cast(*name())->ToCString());
|
| + stream->Add(" <- ");
|
| + value()->PrintTo(stream);
|
| +}
|
| +
|
| +
|
| +void LStoreKeyed::PrintDataTo(StringStream* stream) {
|
| + object()->PrintTo(stream);
|
| + stream->Add("[");
|
| + key()->PrintTo(stream);
|
| + stream->Add("] <- ");
|
| + value()->PrintTo(stream);
|
| +}
|
| +
|
| +
|
| LChunk::LChunk(HGraph* graph)
|
| : spill_slot_count_(0),
|
| graph_(graph),
|
| @@ -310,11 +336,6 @@
|
| }
|
|
|
|
|
| -void LChunk::Verify() const {
|
| - // TODO(twuerthinger): Implement verification for chunk.
|
| -}
|
| -
|
| -
|
| int LChunk::GetNextSpillIndex(bool is_double) {
|
| // Skip a slot if for a double-width slot.
|
| if (is_double) spill_slot_count_++;
|
| @@ -369,24 +390,6 @@
|
| }
|
|
|
|
|
| -void LStoreNamed::PrintDataTo(StringStream* stream) const {
|
| - object()->PrintTo(stream);
|
| - stream->Add(".");
|
| - stream->Add(*String::cast(*name())->ToCString());
|
| - stream->Add(" <- ");
|
| - value()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| -void LStoreKeyed::PrintDataTo(StringStream* stream) const {
|
| - object()->PrintTo(stream);
|
| - stream->Add("[");
|
| - key()->PrintTo(stream);
|
| - stream->Add("] <- ");
|
| - value()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| int LChunk::AddInstruction(LInstruction* instr, HBasicBlock* block) {
|
| LGap* gap = new LGap(block);
|
| int index = -1;
|
| @@ -593,33 +596,52 @@
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::Define(LInstruction* instr) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr,
|
| + LUnallocated* result) {
|
| + allocator_->RecordDefinition(current_instruction_, result);
|
| + instr->set_result(result);
|
| + return instr;
|
| +}
|
| +
|
| +
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr) {
|
| return Define(instr, new LUnallocated(LUnallocated::NONE));
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DefineAsRegister(LInstruction* instr) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::DefineAsRegister(
|
| + LTemplateInstruction<1, I, T>* instr) {
|
| return Define(instr, new LUnallocated(LUnallocated::MUST_HAVE_REGISTER));
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DefineAsSpilled(LInstruction* instr, int index) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::DefineAsSpilled(
|
| + LTemplateInstruction<1, I, T>* instr, int index) {
|
| return Define(instr, new LUnallocated(LUnallocated::FIXED_SLOT, index));
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DefineSameAsFirst(LInstruction* instr) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::DefineSameAsFirst(
|
| + LTemplateInstruction<1, I, T>* instr) {
|
| return Define(instr, new LUnallocated(LUnallocated::SAME_AS_FIRST_INPUT));
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DefineFixed(LInstruction* instr, Register reg) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::DefineFixed(
|
| + LTemplateInstruction<1, I, T>* instr, Register reg) {
|
| return Define(instr, ToUnallocated(reg));
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DefineFixedDouble(LInstruction* instr,
|
| - DoubleRegister reg) {
|
| +template<int I, int T>
|
| +LInstruction* LChunkBuilder::DefineFixedDouble(
|
| + LTemplateInstruction<1, I, T>* instr, DoubleRegister reg) {
|
| return Define(instr, ToUnallocated(reg));
|
| }
|
|
|
| @@ -687,13 +709,6 @@
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::Define(LInstruction* instr, LUnallocated* result) {
|
| - allocator_->RecordDefinition(current_instruction_, result);
|
| - instr->set_result(result);
|
| - return instr;
|
| -}
|
| -
|
| -
|
| LUnallocated* LChunkBuilder::TempRegister() {
|
| LUnallocated* operand = new LUnallocated(LUnallocated::MUST_HAVE_REGISTER);
|
| allocator_->RecordTemporary(operand);
|
| @@ -801,7 +816,7 @@
|
| ASSERT(right->representation().IsTagged());
|
| LOperand* left_operand = UseFixed(left, r1);
|
| LOperand* right_operand = UseFixed(right, r0);
|
| - LInstruction* result = new LArithmeticT(op, left_operand, right_operand);
|
| + LArithmeticT* result = new LArithmeticT(op, left_operand, right_operand);
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| }
|
|
|
| @@ -882,8 +897,14 @@
|
| if (FLAG_stress_environments && !instr->HasEnvironment()) {
|
| instr = AssignEnvironment(instr);
|
| }
|
| - if (current->IsTest()) {
|
| - instr->set_hydrogen_value(HTest::cast(current)->value());
|
| + if (current->IsTest() && !instr->IsGoto()) {
|
| + ASSERT(instr->IsControl());
|
| + HTest* test = HTest::cast(current);
|
| + instr->set_hydrogen_value(test->value());
|
| + HBasicBlock* first = test->FirstSuccessor();
|
| + HBasicBlock* second = test->SecondSuccessor();
|
| + ASSERT(first != NULL && second != NULL);
|
| + instr->SetBranchTargets(first->block_id(), second->block_id());
|
| } else {
|
| instr->set_hydrogen_value(current);
|
| }
|
| @@ -939,21 +960,13 @@
|
|
|
| LInstruction* LChunkBuilder::DoTest(HTest* instr) {
|
| HValue* v = instr->value();
|
| - HBasicBlock* first = instr->FirstSuccessor();
|
| - HBasicBlock* second = instr->SecondSuccessor();
|
| - ASSERT(first != NULL && second != NULL);
|
| - int first_id = first->block_id();
|
| - int second_id = second->block_id();
|
| -
|
| if (v->EmitAtUses()) {
|
| if (v->IsClassOfTest()) {
|
| HClassOfTest* compare = HClassOfTest::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
|
|
| return new LClassOfTestAndBranch(UseTempRegister(compare->value()),
|
| - TempRegister(),
|
| - first_id,
|
| - second_id);
|
| + TempRegister());
|
| } else if (v->IsCompare()) {
|
| HCompare* compare = HCompare::cast(v);
|
| Token::Value op = compare->token();
|
| @@ -964,16 +977,12 @@
|
| ASSERT(left->representation().IsInteger32());
|
| ASSERT(right->representation().IsInteger32());
|
| return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
| - UseOrConstantAtStart(right),
|
| - first_id,
|
| - second_id);
|
| + UseOrConstantAtStart(right));
|
| } else if (r.IsDouble()) {
|
| ASSERT(left->representation().IsDouble());
|
| ASSERT(right->representation().IsDouble());
|
| return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
| - UseRegisterAtStart(right),
|
| - first_id,
|
| - second_id);
|
| + UseRegisterAtStart(right));
|
| } else {
|
| ASSERT(left->representation().IsTagged());
|
| ASSERT(right->representation().IsTagged());
|
| @@ -981,38 +990,30 @@
|
| LOperand* left_operand = UseFixed(left, reversed ? r0 : r1);
|
| LOperand* right_operand = UseFixed(right, reversed ? r1 : r0);
|
| LInstruction* result = new LCmpTAndBranch(left_operand,
|
| - right_operand,
|
| - first_id,
|
| - second_id);
|
| + right_operand);
|
| return MarkAsCall(result, instr);
|
| }
|
| } else if (v->IsIsSmi()) {
|
| HIsSmi* compare = HIsSmi::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
|
|
| - return new LIsSmiAndBranch(Use(compare->value()),
|
| - first_id,
|
| - second_id);
|
| + return new LIsSmiAndBranch(Use(compare->value()));
|
| } else if (v->IsHasInstanceType()) {
|
| HHasInstanceType* compare = HHasInstanceType::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
| -
|
| - return new LHasInstanceTypeAndBranch(UseRegisterAtStart(compare->value()),
|
| - first_id,
|
| - second_id);
|
| + return new LHasInstanceTypeAndBranch(
|
| + UseRegisterAtStart(compare->value()));
|
| } else if (v->IsHasCachedArrayIndex()) {
|
| HHasCachedArrayIndex* compare = HHasCachedArrayIndex::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
|
|
| return new LHasCachedArrayIndexAndBranch(
|
| - UseRegisterAtStart(compare->value()), first_id, second_id);
|
| + UseRegisterAtStart(compare->value()));
|
| } else if (v->IsIsNull()) {
|
| HIsNull* compare = HIsNull::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
|
|
| - return new LIsNullAndBranch(UseRegisterAtStart(compare->value()),
|
| - first_id,
|
| - second_id);
|
| + return new LIsNullAndBranch(UseRegisterAtStart(compare->value()));
|
| } else if (v->IsIsObject()) {
|
| HIsObject* compare = HIsObject::cast(v);
|
| ASSERT(compare->value()->representation().IsTagged());
|
| @@ -1021,41 +1022,33 @@
|
| LOperand* temp2 = TempRegister();
|
| return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()),
|
| temp1,
|
| - temp2,
|
| - first_id,
|
| - second_id);
|
| + temp2);
|
| } else if (v->IsCompareJSObjectEq()) {
|
| HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v);
|
| return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()),
|
| - UseRegisterAtStart(compare->right()),
|
| - first_id,
|
| - second_id);
|
| + UseRegisterAtStart(compare->right()));
|
| } else if (v->IsInstanceOf()) {
|
| HInstanceOf* instance_of = HInstanceOf::cast(v);
|
| LInstruction* result =
|
| new LInstanceOfAndBranch(Use(instance_of->left()),
|
| - Use(instance_of->right()),
|
| - first_id,
|
| - second_id);
|
| + Use(instance_of->right()));
|
| return MarkAsCall(result, instr);
|
| } else if (v->IsTypeofIs()) {
|
| HTypeofIs* typeof_is = HTypeofIs::cast(v);
|
| - return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()),
|
| - first_id,
|
| - second_id);
|
| + return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()));
|
| } else {
|
| if (v->IsConstant()) {
|
| if (HConstant::cast(v)->handle()->IsTrue()) {
|
| - return new LGoto(first_id);
|
| + return new LGoto(instr->FirstSuccessor()->block_id());
|
| } else if (HConstant::cast(v)->handle()->IsFalse()) {
|
| - return new LGoto(second_id);
|
| + return new LGoto(instr->SecondSuccessor()->block_id());
|
| }
|
| }
|
| Abort("Undefined compare before branch");
|
| return NULL;
|
| }
|
| }
|
| - return new LBranch(UseRegisterAtStart(v), first_id, second_id);
|
| + return new LBranch(UseRegisterAtStart(v));
|
| }
|
|
|
|
|
| @@ -1078,7 +1071,7 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) {
|
| - LInstruction* result =
|
| + LInstanceOf* result =
|
| new LInstanceOf(UseFixed(instr->left(), r0),
|
| UseFixed(instr->right(), r1));
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| @@ -1087,7 +1080,7 @@
|
|
|
| LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
|
| HInstanceOfKnownGlobal* instr) {
|
| - LInstruction* result =
|
| + LInstanceOfKnownGlobal* result =
|
| new LInstanceOfKnownGlobal(UseFixed(instr->value(), r0), FixedTemp(r4));
|
| MarkAsSaveDoubles(result);
|
| return AssignEnvironment(AssignPointerMap(DefineFixed(result, r0)));
|
| @@ -1099,10 +1092,10 @@
|
| LOperand* receiver = UseFixed(instr->receiver(), r0);
|
| LOperand* length = UseRegisterAtStart(instr->length());
|
| LOperand* elements = UseRegisterAtStart(instr->elements());
|
| - LInstruction* result = new LApplyArguments(function,
|
| - receiver,
|
| - length,
|
| - elements);
|
| + LApplyArguments* result = new LApplyArguments(function,
|
| + receiver,
|
| + length,
|
| + elements);
|
| return MarkAsCall(DefineFixed(result, r0), instr, CAN_DEOPTIMIZE_EAGERLY);
|
| }
|
|
|
| @@ -1135,7 +1128,7 @@
|
| BuiltinFunctionId op = instr->op();
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| LOperand* temp = (op == kMathFloor) ? TempRegister() : NULL;
|
| - LInstruction* result = new LUnaryMathOperation(input, temp);
|
| + LUnaryMathOperation* result = new LUnaryMathOperation(input, temp);
|
| switch (op) {
|
| case kMathAbs:
|
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| @@ -1168,8 +1161,8 @@
|
| LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) {
|
| ASSERT(instr->key()->representation().IsTagged());
|
| argument_count_ -= instr->argument_count();
|
| - UseFixed(instr->key(), r2);
|
| - return MarkAsCall(DefineFixed(new LCallKeyed, r0), instr);
|
| + LOperand* key = UseFixed(instr->key(), r2);
|
| + return MarkAsCall(DefineFixed(new LCallKeyed(key), r0), instr);
|
| }
|
|
|
|
|
| @@ -1194,7 +1187,7 @@
|
| LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) {
|
| LOperand* constructor = UseFixed(instr->constructor(), r1);
|
| argument_count_ -= instr->argument_count();
|
| - LInstruction* result = new LCallNew(constructor);
|
| + LCallNew* result = new LCallNew(constructor);
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| }
|
|
|
| @@ -1384,7 +1377,7 @@
|
| bool reversed = (op == Token::GT || op == Token::LTE);
|
| LOperand* left = UseFixed(instr->left(), reversed ? r0 : r1);
|
| LOperand* right = UseFixed(instr->right(), reversed ? r1 : r0);
|
| - LInstruction* result = new LCmpT(left, right);
|
| + LCmpT* result = new LCmpT(left, right);
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| }
|
| }
|
| @@ -1394,7 +1387,7 @@
|
| HCompareJSObjectEq* instr) {
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseRegisterAtStart(instr->right());
|
| - LInstruction* result = new LCmpJSObjectEq(left, right);
|
| + LCmpJSObjectEq* result = new LCmpJSObjectEq(left, right);
|
| return DefineAsRegister(result);
|
| }
|
|
|
| @@ -1461,7 +1454,7 @@
|
|
|
| LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) {
|
| LOperand* object = UseRegister(instr->value());
|
| - LInstruction* result = new LValueOf(object, TempRegister());
|
| + LValueOf* result = new LValueOf(object, TempRegister());
|
| return AssignEnvironment(DefineSameAsFirst(result));
|
| }
|
|
|
| @@ -1484,7 +1477,7 @@
|
| if (from.IsTagged()) {
|
| if (to.IsDouble()) {
|
| LOperand* value = UseRegister(instr->value());
|
| - LInstruction* res = new LNumberUntagD(value);
|
| + LNumberUntagD* res = new LNumberUntagD(value);
|
| return AssignEnvironment(DefineAsRegister(res));
|
| } else {
|
| ASSERT(to.IsInteger32());
|
| @@ -1510,13 +1503,13 @@
|
| // Make sure that the temp and result_temp registers are
|
| // different.
|
| LUnallocated* result_temp = TempRegister();
|
| - LInstruction* result = new LNumberTagD(value, temp1, temp2);
|
| + LNumberTagD* result = new LNumberTagD(value, temp1, temp2);
|
| Define(result, result_temp);
|
| return AssignPointerMap(result);
|
| } else {
|
| ASSERT(to.IsInteger32());
|
| LOperand* value = UseRegister(instr->value());
|
| - LInstruction* res = new LDoubleToI(value);
|
| + LDoubleToI* res = new LDoubleToI(value);
|
| return AssignEnvironment(DefineAsRegister(res));
|
| }
|
| } else if (from.IsInteger32()) {
|
| @@ -1526,7 +1519,7 @@
|
| if (val->HasRange() && val->range()->IsInSmiRange()) {
|
| return DefineSameAsFirst(new LSmiTag(value));
|
| } else {
|
| - LInstruction* result = new LNumberTagI(value);
|
| + LNumberTagI* result = new LNumberTagI(value);
|
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| }
|
| } else {
|
| @@ -1603,7 +1596,7 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) {
|
| - LInstruction* result = new LLoadGlobal();
|
| + LLoadGlobal* result = new LLoadGlobal();
|
| return instr->check_hole_value()
|
| ? AssignEnvironment(DefineAsRegister(result))
|
| : DefineAsRegister(result);
|
| @@ -1652,7 +1645,7 @@
|
| ASSERT(instr->key()->representation().IsInteger32());
|
| LOperand* obj = UseRegisterAtStart(instr->object());
|
| LOperand* key = UseRegisterAtStart(instr->key());
|
| - LInstruction* result = new LLoadKeyedFastElement(obj, key);
|
| + LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key);
|
| return AssignEnvironment(DefineSameAsFirst(result));
|
| }
|
|
|
| @@ -1726,7 +1719,7 @@
|
| LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) {
|
| LOperand* string = UseRegister(instr->string());
|
| LOperand* index = UseRegisterOrConstant(instr->index());
|
| - LInstruction* result = new LStringCharCodeAt(string, index);
|
| + LStringCharCodeAt* result = new LStringCharCodeAt(string, index);
|
| return AssignEnvironment(AssignPointerMap(DefineAsRegister(result)));
|
| }
|
|
|
| @@ -1760,7 +1753,7 @@
|
| LInstruction* LChunkBuilder::DoDeleteProperty(HDeleteProperty* instr) {
|
| LOperand* object = UseRegisterAtStart(instr->object());
|
| LOperand* key = UseRegisterAtStart(instr->key());
|
| - LInstruction* result = new LDeleteProperty(object, key);
|
| + LDeleteProperty* result = new LDeleteProperty(object, key);
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| }
|
|
|
| @@ -1801,13 +1794,13 @@
|
| LOperand* arguments = UseRegister(instr->arguments());
|
| LOperand* length = UseTempRegister(instr->length());
|
| LOperand* index = UseRegister(instr->index());
|
| - LInstruction* result = new LAccessArgumentsAt(arguments, length, index);
|
| - return DefineAsRegister(AssignEnvironment(result));
|
| + LAccessArgumentsAt* result = new LAccessArgumentsAt(arguments, length, index);
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) {
|
| - LInstruction* result = new LTypeof(UseRegisterAtStart(instr->value()));
|
| + LTypeof* result = new LTypeof(UseRegisterAtStart(instr->value()));
|
| return MarkAsCall(DefineFixed(result, r0), instr);
|
| }
|
|
|
|
|