diff options
Diffstat (limited to 'deps/v8/src/x87/lithium-x87.cc')
-rw-r--r-- | deps/v8/src/x87/lithium-x87.cc | 60 |
1 files changed, 19 insertions, 41 deletions
diff --git a/deps/v8/src/x87/lithium-x87.cc b/deps/v8/src/x87/lithium-x87.cc index d382e4f6d5..cb429b2f21 100644 --- a/deps/v8/src/x87/lithium-x87.cc +++ b/deps/v8/src/x87/lithium-x87.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "src/x87/lithium-x87.h" + #include <sstream> #if V8_TARGET_ARCH_X87 @@ -198,13 +200,6 @@ void LCompareNumericAndBranch::PrintDataTo(StringStream* stream) { } -void LIsObjectAndBranch::PrintDataTo(StringStream* stream) { - stream->Add("if is_object("); - value()->PrintTo(stream); - stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); -} - - void LIsStringAndBranch::PrintDataTo(StringStream* stream) { stream->Add("if is_string("); value()->PrintTo(stream); @@ -978,28 +973,25 @@ void LChunkBuilder::AddInstruction(LInstruction* instr, } chunk_->AddInstruction(instr, current_block_); - if (instr->IsCall()) { + if (instr->IsCall() || instr->IsPrologue()) { HValue* hydrogen_value_for_lazy_bailout = hydrogen_val; - LInstruction* instruction_needing_environment = NULL; if (hydrogen_val->HasObservableSideEffects()) { HSimulate* sim = HSimulate::cast(hydrogen_val->next()); - instruction_needing_environment = instr; sim->ReplayEnvironment(current_block_->last_environment()); hydrogen_value_for_lazy_bailout = sim; } LInstruction* bailout = AssignEnvironment(new(zone()) LLazyBailout()); bailout->set_hydrogen_value(hydrogen_value_for_lazy_bailout); chunk_->AddInstruction(bailout, current_block_); - if (instruction_needing_environment != NULL) { - // Store the lazy deopt environment with the instruction if needed. - // Right now it is only used for LInstanceOfKnownGlobal. - instruction_needing_environment-> - SetDeferredLazyDeoptimizationEnvironment(bailout->environment()); - } } } +LInstruction* LChunkBuilder::DoPrologue(HPrologue* instr) { + return new (zone()) LPrologue(); +} + + LInstruction* LChunkBuilder::DoGoto(HGoto* instr) { return new(zone()) LGoto(instr->FirstSuccessor()); } @@ -1052,22 +1044,22 @@ LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) { LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { - LOperand* left = UseFixed(instr->left(), InstanceofStub::left()); - LOperand* right = UseFixed(instr->right(), InstanceofStub::right()); + LOperand* left = + UseFixed(instr->left(), InstanceOfDescriptor::LeftRegister()); + LOperand* right = + UseFixed(instr->right(), InstanceOfDescriptor::RightRegister()); LOperand* context = UseFixed(instr->context(), esi); - LInstanceOf* result = new(zone()) LInstanceOf(context, left, right); + LInstanceOf* result = new (zone()) LInstanceOf(context, left, right); return MarkAsCall(DefineFixed(result, eax), instr); } -LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( - HInstanceOfKnownGlobal* instr) { - LInstanceOfKnownGlobal* result = - new(zone()) LInstanceOfKnownGlobal( - UseFixed(instr->context(), esi), - UseFixed(instr->left(), InstanceofStub::left()), - FixedTemp(edi)); - return MarkAsCall(DefineFixed(result, eax), instr); +LInstruction* LChunkBuilder::DoHasInPrototypeChainAndBranch( + HHasInPrototypeChainAndBranch* instr) { + LOperand* object = UseRegister(instr->object()); + LOperand* prototype = UseRegister(instr->prototype()); + LOperand* temp = TempRegister(); + return new (zone()) LHasInPrototypeChainAndBranch(object, prototype, temp); } @@ -1749,13 +1741,6 @@ LInstruction* LChunkBuilder::DoCompareMinusZeroAndBranch( } -LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) { - DCHECK(instr->value()->representation().IsSmiOrTagged()); - LOperand* temp = TempRegister(); - return new(zone()) LIsObjectAndBranch(UseRegister(instr->value()), temp); -} - - LInstruction* LChunkBuilder::DoIsStringAndBranch(HIsStringAndBranch* instr) { DCHECK(instr->value()->representation().IsTagged()); LOperand* temp = TempRegister(); @@ -2557,13 +2542,6 @@ LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) { } -LInstruction* LChunkBuilder::DoFunctionLiteral(HFunctionLiteral* instr) { - LOperand* context = UseFixed(instr->context(), esi); - return MarkAsCall( - DefineFixed(new(zone()) LFunctionLiteral(context), eax), instr); -} - - LInstruction* LChunkBuilder::DoOsrEntry(HOsrEntry* instr) { DCHECK(argument_count_ == 0); allocator_->MarkAsOsrEntry(); |