112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// found in the LICENSE file. 412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#ifndef V8_MIPS_LITHIUM_MIPS_H_ 612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define V8_MIPS_LITHIUM_MIPS_H_ 712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#include "src/hydrogen.h" 912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#include "src/lithium.h" 1012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#include "src/lithium-allocator.h" 1112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#include "src/safepoint-table.h" 1212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#include "src/utils.h" 1312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgnamespace v8 { 1512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgnamespace internal { 1612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Forward declarations. 1812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LCodeGen; 1912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 20dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ 21dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AccessArgumentsAt) \ 22dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AddI) \ 23dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Allocate) \ 24dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AllocateBlockContext) \ 25dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ApplyArguments) \ 26dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArgumentsElements) \ 27dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArgumentsLength) \ 28dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArithmeticD) \ 29dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArithmeticT) \ 30dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(BitI) \ 31dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(BoundsCheck) \ 32dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Branch) \ 33dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallJSFunction) \ 34dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallWithDescriptor) \ 35dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallFunction) \ 36dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallNew) \ 37dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallNewArray) \ 38dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallRuntime) \ 39dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallStub) \ 40dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckInstanceType) \ 41dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckMaps) \ 42dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckMapValue) \ 43dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckNonSmi) \ 44dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckSmi) \ 45dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckValue) \ 46dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampDToUint8) \ 47dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampIToUint8) \ 48dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampTToUint8) \ 49dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClassOfTestAndBranch) \ 50dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CompareMinusZeroAndBranch) \ 51dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CompareNumericAndBranch) \ 52dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpObjectEqAndBranch) \ 53dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpHoleAndBranch) \ 54dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpMapAndBranch) \ 55dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpT) \ 56dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantD) \ 57dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantE) \ 58dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantI) \ 59dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantS) \ 60dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantT) \ 61dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstructDouble) \ 62dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Context) \ 63dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DateField) \ 64dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DebugBreak) \ 65dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DeclareGlobals) \ 66dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Deoptimize) \ 67dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivByConstI) \ 68dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivByPowerOf2I) \ 69dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivI) \ 70dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToI) \ 71dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleBits) \ 72dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToSmi) \ 73dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Drop) \ 74dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Dummy) \ 75dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DummyUse) \ 76dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivByConstI) \ 77dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivByPowerOf2I) \ 78dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivI) \ 79dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ForInCacheArray) \ 80dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ForInPrepareMap) \ 81dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FunctionLiteral) \ 82dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(GetCachedArrayIndex) \ 83dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Goto) \ 84dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(HasCachedArrayIndexAndBranch) \ 85dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(HasInstanceTypeAndBranch) \ 86dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InnerAllocatedObject) \ 87dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstanceOf) \ 88dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstanceOfKnownGlobal) \ 89dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstructionGap) \ 90dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Integer32ToDouble) \ 91dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InvokeFunction) \ 92dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsConstructCallAndBranch) \ 93dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsObjectAndBranch) \ 94dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsStringAndBranch) \ 95dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsSmiAndBranch) \ 96dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsUndetectableAndBranch) \ 97dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Label) \ 98dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LazyBailout) \ 99dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadContextSlot) \ 100dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadRoot) \ 101dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadFieldByIndex) \ 102dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadFunctionPrototype) \ 103dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadGlobalCell) \ 104dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadGlobalGeneric) \ 105dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadKeyed) \ 106dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadKeyedGeneric) \ 107dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadNamedField) \ 108dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadNamedGeneric) \ 109dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MapEnumLength) \ 110dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathAbs) \ 111dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathExp) \ 112dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathClz32) \ 113dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathFloor) \ 114dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathFround) \ 115dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathLog) \ 116dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathMinMax) \ 117dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathPowHalf) \ 118dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathRound) \ 119dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathSqrt) \ 120dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModByConstI) \ 121dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModByPowerOf2I) \ 122dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModI) \ 123dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MulI) \ 124dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MultiplyAddD) \ 125dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagD) \ 126dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagU) \ 127dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberUntagD) \ 128dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(OsrEntry) \ 129dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Parameter) \ 130dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Power) \ 131dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(PushArgument) \ 132dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(RegExpLiteral) \ 133dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Return) \ 134dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringGetChar) \ 135dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringSetChar) \ 136dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ShiftI) \ 137dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiTag) \ 138dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiUntag) \ 139dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StackCheck) \ 140dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreCodeEntry) \ 141dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreContextSlot) \ 142dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreFrameContext) \ 143dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreGlobalCell) \ 144dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyed) \ 145dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyedGeneric) \ 146dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedField) \ 147dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedGeneric) \ 148dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringAdd) \ 149dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharCodeAt) \ 150dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharFromCode) \ 151dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCompareAndBranch) \ 152dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SubI) \ 153dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TaggedToI) \ 154e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org V(TailCallThroughMegamorphicCache) \ 155dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ThisFunction) \ 156dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ToFastProperties) \ 157dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TransitionElementsKind) \ 158dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TrapAllocationMemento) \ 159dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Typeof) \ 160dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TypeofIsAndBranch) \ 161dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Uint32ToDouble) \ 162dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(UnknownOSRValue) \ 16312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org V(WrapReceiver) 16412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 16512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 166ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const FINAL OVERRIDE { \ 16712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return LInstruction::k##type; \ 16812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } \ 169ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) FINAL OVERRIDE; \ 170ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const FINAL OVERRIDE { \ 17112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return mnemonic; \ 17212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } \ 17312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org static L##type* cast(LInstruction* instr) { \ 174e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr->Is##type()); \ 17512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return reinterpret_cast<L##type*>(instr); \ 17612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 17712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 17812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 17912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define DECLARE_HYDROGEN_ACCESSOR(type) \ 18012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org H##type* hydrogen() const { \ 18112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return H##type::cast(hydrogen_value()); \ 18212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 18312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 18412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 18512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LInstruction : public ZoneObject { 18612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 18712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction() 18812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : environment_(NULL), 18912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org hydrogen_value_(NULL), 19012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bit_field_(IsCallBits::encode(false)) { 19112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 19212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 19312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual ~LInstruction() {} 19412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 19512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) = 0; 19612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual const char* Mnemonic() const = 0; 19712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintTo(StringStream* stream); 19812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 19912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintOutputOperandTo(StringStream* stream); 20012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 20112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org enum Opcode { 20212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Declare a unique enum value for each instruction. 20312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define DECLARE_OPCODE(type) k##type, 20412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 20512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org kNumberOfInstructions 20612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#undef DECLARE_OPCODE 20712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org }; 20812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 20912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual Opcode opcode() const = 0; 21012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 21112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Declare non-virtual type testers for all leaf IR classes. 21212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define DECLARE_PREDICATE(type) \ 21312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool Is##type() const { return opcode() == k##type; } 21412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 21512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#undef DECLARE_PREDICATE 21612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 21712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Declare virtual predicates for instructions that don't have 21812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // an opcode. 21912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual bool IsGap() const { return false; } 22012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 22112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual bool IsControl() const { return false; } 22212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Try deleting this instruction if possible. 2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual bool TryDelete() { return false; } 2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 22612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_environment(LEnvironment* env) { environment_ = env; } 22712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LEnvironment* environment() const { return environment_; } 22812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool HasEnvironment() const { return environment_ != NULL; } 22912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 23012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 23112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LPointerMap* pointer_map() const { return pointer_map_.get(); } 23212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool HasPointerMap() const { return pointer_map_.is_set(); } 23312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 23412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 23512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HValue* hydrogen_value() const { return hydrogen_value_; } 23612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 23712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) { } 23812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 23912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); } 24012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool IsCall() const { return IsCallBits::decode(bit_field_); } 24112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 24212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Interface to the register allocator and iterators. 24312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool ClobbersTemps() const { return IsCall(); } 24412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool ClobbersRegisters() const { return IsCall(); } 24512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const { 24612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return IsCall(); 24712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 24812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 24912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Interface to the register allocator and iterators. 25012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool IsMarkedAsCall() const { return IsCall(); } 25112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 25212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual bool HasResult() const = 0; 25312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual LOperand* result() const = 0; 25412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 25512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* FirstInput() { return InputAt(0); } 25612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* Output() { return HasResult() ? result() : NULL; } 25712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 25812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } 25912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 26012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#ifdef DEBUG 26112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void VerifyCall(); 26212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#endif 26312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual int InputCount() = 0; 2657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual LOperand* InputAt(int i) = 0; 2667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 26712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 26812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Iterator interface. 26912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org friend class InputIterator; 27012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 27112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org friend class TempIterator; 27212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual int TempCount() = 0; 27312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual LOperand* TempAt(int i) = 0; 27412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 27512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org class IsCallBits: public BitField<bool, 0, 1> {}; 27612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 27712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LEnvironment* environment_; 27812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org SetOncePointer<LPointerMap> pointer_map_; 27912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HValue* hydrogen_value_; 28012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int bit_field_; 28112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 28212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 28312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 28412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// R = number of result operands (0 or 1). 28512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgtemplate<int R> 28612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LTemplateResultInstruction : public LInstruction { 28712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 28812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Allow 0 or 1 output operands. 28912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org STATIC_ASSERT(R == 0 || R == 1); 290ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasResult() const FINAL OVERRIDE { 29112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return R != 0 && result() != NULL; 29212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 29312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_result(LOperand* operand) { results_[0] = operand; } 29412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* result() const { return results_[0]; } 29512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 29612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org protected: 29712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org EmbeddedContainer<LOperand*, R> results_; 29812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 29912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 30012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 30112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// R = number of result operands (0 or 1). 30212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// I = number of input operands. 30312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// T = number of temporary operands. 30412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgtemplate<int R, int I, int T> 30512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LTemplateInstruction : public LTemplateResultInstruction<R> { 30612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org protected: 30712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org EmbeddedContainer<LOperand*, I> inputs_; 30812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org EmbeddedContainer<LOperand*, T> temps_; 30912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 31012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 31112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Iterator support. 312ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return I; } 313ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 31412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 315ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return T; } 316ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return temps_[i]; } 31712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 31812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 31912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 32012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LGap : public LTemplateInstruction<0, 0, 0> { 32112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 32212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LGap(HBasicBlock* block) 32312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : block_(block) { 32412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org parallel_moves_[BEFORE] = NULL; 32512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org parallel_moves_[START] = NULL; 32612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org parallel_moves_[END] = NULL; 32712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org parallel_moves_[AFTER] = NULL; 32812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 32912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 33012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Can't use the DECLARE-macro here because of sub-classes. 331ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsGap() const FINAL OVERRIDE { return true; } 332ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 33312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org static LGap* cast(LInstruction* instr) { 334e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr->IsGap()); 33512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return reinterpret_cast<LGap*>(instr); 33612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 33712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 33812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool IsRedundant() const; 33912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 34012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* block() const { return block_; } 34112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 34212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org enum InnerPosition { 34312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org BEFORE, 34412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org START, 34512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org END, 34612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org AFTER, 34712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org FIRST_INNER_POSITION = BEFORE, 34812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAST_INNER_POSITION = AFTER 34912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org }; 35012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 35112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) { 35212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org if (parallel_moves_[pos] == NULL) { 35312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org parallel_moves_[pos] = new(zone) LParallelMove(zone); 35412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 35512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return parallel_moves_[pos]; 35612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 35712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 35812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LParallelMove* GetParallelMove(InnerPosition pos) { 35912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return parallel_moves_[pos]; 36012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 36112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 36212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 36312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 36412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* block_; 36512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 36612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 36712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 368ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstructionGap FINAL : public LGap { 36912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 37012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 37112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 372ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 37312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return !IsRedundant(); 37412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 37512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 37612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 37712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 37812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 37912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 380ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGoto FINAL : public LTemplateInstruction<0, 0, 0> { 38112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 38212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LGoto(HBasicBlock* block) : block_(block) { } 38312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 384ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE; 38512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 386ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 387ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 38812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 38912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int block_id() const { return block_->block_id(); } 39012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 39112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 39212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* block_; 39312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 39412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 39512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 396ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> { 39712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 39812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LLazyBailout() : gap_instructions_size_(0) { } 39912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 40012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 40112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 40212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_gap_instructions_size(int gap_instructions_size) { 40312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org gap_instructions_size_ = gap_instructions_size; 40412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 40512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int gap_instructions_size() { return gap_instructions_size_; } 40612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 40712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 40812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int gap_instructions_size_; 40912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 41012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 41112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 412ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummy FINAL : public LTemplateInstruction<1, 0, 0> { 41312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 4145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org LDummy() {} 41512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 41612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 41712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 41812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 419ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummyUse FINAL : public LTemplateInstruction<1, 1, 0> { 42012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 42112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDummyUse(LOperand* value) { 42212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 42312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 42412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 42512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 42612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 42712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 428ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> { 42912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 430ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 43112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 43212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 43312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 43412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 43512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 436ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLabel FINAL : public LGap { 43712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 43812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LLabel(HBasicBlock* block) 43912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : LGap(block), replacement_(NULL) { } 44012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 441ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 44212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return false; 44312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 44412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Label, "label") 44512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 446ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 44712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 44812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int block_id() const { return block()->block_id(); } 44912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_loop_header() const { return block()->IsLoopHeader(); } 45012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_osr_entry() const { return block()->is_osr_entry(); } 45112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* label() { return &label_; } 45212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LLabel* replacement() const { return replacement_; } 45312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void set_replacement(LLabel* label) { replacement_ = label; } 45412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool HasReplacement() const { return replacement_ != NULL; } 45512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 45612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 45712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label label_; 45812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LLabel* replacement_; 45912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 46012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 46112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 462ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LParameter FINAL : public LTemplateInstruction<1, 0, 0> { 46312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 464ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 46512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return false; 46612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 46712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 46812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 46912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 47012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 471ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallStub FINAL : public LTemplateInstruction<1, 1, 0> { 47212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 47312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCallStub(LOperand* context) { 47412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 47512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 47612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 47712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 47812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 47912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 48012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallStub) 48112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 48212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 48312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 484e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.orgclass LTailCallThroughMegamorphicCache FINAL 485e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org : public LTemplateInstruction<0, 3, 0> { 486e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org public: 487e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org explicit LTailCallThroughMegamorphicCache(LOperand* context, 488e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver, 489e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name) { 490e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[0] = context; 491e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[1] = receiver; 492e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[2] = name; 493e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org } 494e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 495e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* context() { return inputs_[0]; } 496e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver() { return inputs_[1]; } 497e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name() { return inputs_[2]; } 498e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 499e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache, 500e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org "tail-call-through-megamorphic-cache") 501e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TailCallThroughMegamorphicCache) 502e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org}; 503e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 504e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 505ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> { 50612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 507ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 50812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return false; 50912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 51012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 51112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 51212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 51312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 51412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgtemplate<int I, int T> 51512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LControlInstruction : public LTemplateInstruction<0, I, T> { 51612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 51712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 51812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 519ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const FINAL OVERRIDE { return true; } 52012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 52112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int SuccessorCount() { return hydrogen()->SuccessorCount(); } 52212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 52312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 52412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int TrueDestination(LChunk* chunk) { 52512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return chunk->LookupDestination(true_block_id()); 52612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 52712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int FalseDestination(LChunk* chunk) { 52812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return chunk->LookupDestination(false_block_id()); 52912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 53012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 53112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* TrueLabel(LChunk* chunk) { 53212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org if (true_label_ == NULL) { 53312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk)); 53412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 53512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return true_label_; 53612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 53712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* FalseLabel(LChunk* chunk) { 53812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org if (false_label_ == NULL) { 53912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk)); 54012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 54112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return false_label_; 54212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 54312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 54412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org protected: 54512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int true_block_id() { return SuccessorAt(0)->block_id(); } 54612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int false_block_id() { return SuccessorAt(1)->block_id(); } 54712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 54812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 54912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HControlInstruction* hydrogen() { 55012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return HControlInstruction::cast(this->hydrogen_value()); 55112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 55212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 55312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* false_label_; 55412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* true_label_; 55512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 55612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 55712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 558ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LWrapReceiver FINAL : public LTemplateInstruction<1, 2, 0> { 55912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 56012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LWrapReceiver(LOperand* receiver, LOperand* function) { 56112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = receiver; 56212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = function; 56312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 56412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 56512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 56612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 56712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 56812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* receiver() { return inputs_[0]; } 56912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[1]; } 57012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 57112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 57212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 573ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LApplyArguments FINAL : public LTemplateInstruction<1, 4, 0> { 57412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 57512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LApplyArguments(LOperand* function, 57612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* receiver, 57712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* length, 57812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* elements) { 57912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = function; 58012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = receiver; 58112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = length; 58212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[3] = elements; 58312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 58412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 58512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 58612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 58712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[0]; } 58812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* receiver() { return inputs_[1]; } 58912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* length() { return inputs_[2]; } 59012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* elements() { return inputs_[3]; } 59112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 59212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 59312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 594ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAccessArgumentsAt FINAL : public LTemplateInstruction<1, 3, 0> { 59512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 59612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 59712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = arguments; 59812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = length; 59912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = index; 60012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 60112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 60212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 60312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 60412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* arguments() { return inputs_[0]; } 60512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* length() { return inputs_[1]; } 60612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() { return inputs_[2]; } 60712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 608ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 60912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 61012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 61112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 612ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> { 61312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 61412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LArgumentsLength(LOperand* elements) { 61512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = elements; 61612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 61712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 61812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 61912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 62012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 62112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 62212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 62312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 624ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsElements FINAL : public LTemplateInstruction<1, 0, 0> { 62512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 62612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 62712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 62812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 62912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 63012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 631ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 63212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 63312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 63412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 63512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 63612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 63712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 63812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 63912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() const { return divisor_; } 64012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 64112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 64212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 64312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 64412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 64512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 64612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 64712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 64812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 649ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByConstI FINAL : public LTemplateInstruction<1, 1, 0> { 65012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 65112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LModByConstI(LOperand* dividend, int32_t divisor) { 65212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 65312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 65412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 65512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 65612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 65712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() const { return divisor_; } 65812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 65912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 66012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 66112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 66212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 66312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 66412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 66512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 66612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 667ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModI FINAL : public LTemplateInstruction<1, 2, 3> { 66812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 66912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LModI(LOperand* left, 67012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right) { 67112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 67212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 67312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 67412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 67512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 67612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 67712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 67812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 67912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 68012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 68112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 68212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 683ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 68412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 68512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 68612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 68712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 68812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 68912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 69012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 69112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() const { return divisor_; } 69212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 69312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 69412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 69512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 69612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 69712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 69812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 69912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 70012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 701ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByConstI FINAL : public LTemplateInstruction<1, 1, 0> { 70212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 70312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LDivByConstI(LOperand* dividend, int32_t divisor) { 70412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 70512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 70612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 70712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 70812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 70912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() const { return divisor_; } 71012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 71112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 71212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 71312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 71412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 71512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 71612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 71712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 71812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 719ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivI FINAL : public LTemplateInstruction<1, 2, 1> { 72012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 721dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 72212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 72312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = divisor; 724dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org temps_[0] = temp; 72512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 72612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 72712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 72812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 729dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LOperand* temp() { return temps_[0]; } 73012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 73112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 73212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 73312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 73412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 73512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 736ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 73712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 73812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 73912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 74012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 74112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 74212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 74312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 74412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() { return divisor_; } 74512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 74612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 74712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "flooring-div-by-power-of-2-i") 74812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 74912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 75012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 75112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 75212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 75312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 75412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 755ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByConstI FINAL : public LTemplateInstruction<1, 1, 2> { 75612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 75712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { 75812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 75912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org divisor_ = divisor; 76012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 76112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 76212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 76312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 76412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor() const { return divisor_; } 76512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 76612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 76712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 76812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 76912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 77012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 77112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t divisor_; 77212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 77312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 77412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 775ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivI FINAL : public LTemplateInstruction<1, 2, 0> { 77612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 77712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LFlooringDivI(LOperand* dividend, LOperand* divisor) { 77812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = dividend; 77912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = divisor; 78012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 78112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 78212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 78312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 78412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 78512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 78612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 78712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 78812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 78912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 790ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMulI FINAL : public LTemplateInstruction<1, 2, 0> { 79112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 79212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMulI(LOperand* left, LOperand* right) { 79312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 79412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 79512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 79612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 79712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 79812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 79912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 80012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 80112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mul) 80212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 80312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 80412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 80512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Instruction for computing multiplier * multiplicand + addend. 806ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMultiplyAddD FINAL : public LTemplateInstruction<1, 3, 0> { 80712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 80812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMultiplyAddD(LOperand* addend, LOperand* multiplier, 80912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* multiplicand) { 81012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = addend; 81112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = multiplier; 81212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = multiplicand; 81312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 81412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 81512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* addend() { return inputs_[0]; } 81612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* multiplier() { return inputs_[1]; } 81712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* multiplicand() { return inputs_[2]; } 81812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 81912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d") 82012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 82112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 82212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 823ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> { 82412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 82512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 82612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 82712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 82812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 829ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareNumericAndBranch FINAL : public LControlInstruction<2, 0> { 83012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 83112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCompareNumericAndBranch(LOperand* left, LOperand* right) { 83212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 83312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 83412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 83512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 83612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 83712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 83812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 83912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 84012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "compare-numeric-and-branch") 84112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 84212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 84312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 84412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_double() const { 84512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->representation().IsDouble(); 84612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 84712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 848ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 84912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 85012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 85112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 852ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFloor FINAL : public LTemplateInstruction<1, 1, 1> { 85312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 85412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathFloor(LOperand* value, LOperand* temp) { 85512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 85612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 85712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 85812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 85912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 86012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 86112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 86212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 86312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 86412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 86512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 86612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 867ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathRound FINAL : public LTemplateInstruction<1, 1, 1> { 86812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 86912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathRound(LOperand* value, LOperand* temp) { 87012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 87112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 87212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 87312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 87412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 87512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 87612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 87712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 87812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 87912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 88012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 88112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 882ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFround FINAL : public LTemplateInstruction<1, 1, 0> { 883dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org public: 884dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org explicit LMathFround(LOperand* value) { inputs_[0] = value; } 885dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 886dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LOperand* value() { return inputs_[0]; } 887dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 888dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") 889dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org}; 890dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 891dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 892ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathAbs FINAL : public LTemplateInstruction<1, 2, 0> { 89312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 89412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathAbs(LOperand* context, LOperand* value) { 89512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = context; 89612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 89712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 89812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 89912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[1]; } 90012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 90112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 90212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 90312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 90412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 90512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 90612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 907ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathLog FINAL : public LTemplateInstruction<1, 1, 0> { 90812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 90912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LMathLog(LOperand* value) { 91012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 91112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 91212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 91312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 91412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 91512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 91612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 91712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 91812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 919ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathClz32 FINAL : public LTemplateInstruction<1, 1, 0> { 92012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 92112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LMathClz32(LOperand* value) { 92212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 92312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 92412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 92512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 92612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 92712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 92812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 92912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 93012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 931ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathExp FINAL : public LTemplateInstruction<1, 1, 3> { 93212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 93312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathExp(LOperand* value, 93412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* double_temp, 93512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp1, 93612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2) { 93712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 93812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp1; 93912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[1] = temp2; 94012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[2] = double_temp; 94112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ExternalReference::InitializeMathExpData(); 94212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 94312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 94412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 94512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 94612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 94712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* double_temp() { return temps_[2]; } 94812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 94912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 95012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 95112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 95212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 953ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathSqrt FINAL : public LTemplateInstruction<1, 1, 0> { 95412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 95512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LMathSqrt(LOperand* value) { 95612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 95712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 95812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 95912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 96012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 96112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 96212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 96312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 96412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 965ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathPowHalf FINAL : public LTemplateInstruction<1, 1, 1> { 96612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 96712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathPowHalf(LOperand* value, LOperand* temp) { 96812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 96912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 97012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 97112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 97212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 97312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 97412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 97512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 97612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 97712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 97812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 979ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpObjectEqAndBranch FINAL : public LControlInstruction<2, 0> { 98012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 98112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 98212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 98312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 98412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 98512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 98612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 98712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 98812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 98912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 99012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch) 99112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 99212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 99312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 994ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpHoleAndBranch FINAL : public LControlInstruction<1, 0> { 99512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 99612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCmpHoleAndBranch(LOperand* object) { 99712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 99812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 99912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 100012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 100112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 100212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 100312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 100412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 100512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 100612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1007ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareMinusZeroAndBranch FINAL : public LControlInstruction<1, 1> { 100812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 100912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) { 101012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 101112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 101212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 101312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 101412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 101512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 101612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 101712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch, 101812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "cmp-minus-zero-and-branch") 101912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch) 102012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 102112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 102212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1023ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsObjectAndBranch FINAL : public LControlInstruction<1, 1> { 102412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 102512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LIsObjectAndBranch(LOperand* value, LOperand* temp) { 102612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 102712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 102812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 102912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 103012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 103112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 103212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 103312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 103412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) 103512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 103612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 103712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 103812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 103912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1040ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsStringAndBranch FINAL : public LControlInstruction<1, 1> { 104112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 104212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LIsStringAndBranch(LOperand* value, LOperand* temp) { 104312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 104412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 104512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 104612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 104712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 104812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 104912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 105012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 105112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 105212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1053ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 105412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 105512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 105612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1057ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> { 105812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 105912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LIsSmiAndBranch(LOperand* value) { 106012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 106112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 106212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 106312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 106412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 106512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 106612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 106712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1068ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 106912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 107012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 107112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1072ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> { 107312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 107412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 107512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 107612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 107712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 107812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 107912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 108012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 108112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 108212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 108312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "is-undetectable-and-branch") 108412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 108512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1086ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 108712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 108812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 108912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1090ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> { 109112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 109212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) { 109312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 109412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = left; 109512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = right; 109612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 109712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 109812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 109912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[1]; } 110012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[2]; } 110112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 110212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 110312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "string-compare-and-branch") 110412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 110512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 110612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 110712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1108ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 110912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 111012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 111112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1112ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> { 111312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 111412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LHasInstanceTypeAndBranch(LOperand* value) { 111512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 111612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 111712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 111812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 111912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 112012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 112112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "has-instance-type-and-branch") 112212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 112312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1124ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 112512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 112612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 112712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1128ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> { 112912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 113012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LGetCachedArrayIndex(LOperand* value) { 113112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 113212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 113312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 113412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 113512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 113612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 113712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 113812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 113912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 114012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1141ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasCachedArrayIndexAndBranch FINAL 114212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : public LControlInstruction<1, 0> { 114312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 114412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 114512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 114612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 114712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 114812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 114912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 115012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 115112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "has-cached-array-index-and-branch") 115212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 115312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1154ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 115512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 115612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 115712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1158ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClassOfTestAndBranch FINAL : public LControlInstruction<1, 1> { 115912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 116012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LClassOfTestAndBranch(LOperand* value, LOperand* temp) { 116112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 116212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 116312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 116412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 116512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 116612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 116712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 116812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 116912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "class-of-test-and-branch") 117012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 117112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1172ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 117312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 117412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 117512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1176ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpT FINAL : public LTemplateInstruction<1, 3, 0> { 117712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 117812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCmpT(LOperand* context, LOperand* left, LOperand* right) { 117912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 118012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = left; 118112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = right; 118212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 118312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 118412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 118512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[1]; } 118612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[2]; } 118712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 118812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 118912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 119012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 119112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 119212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 119312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 119412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1195ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOf FINAL : public LTemplateInstruction<1, 3, 0> { 119612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 119712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { 119812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 119912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = left; 120012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = right; 120112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 120212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 120312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 120412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[1]; } 120512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[2]; } 120612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 120712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 120812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 120912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 121012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1211ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOfKnownGlobal FINAL : public LTemplateInstruction<1, 2, 1> { 121212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 121312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { 121412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 121512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = value; 121612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 121712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 121812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 121912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 122012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[1]; } 122112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 122212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 122312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 122412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "instance-of-known-global") 122512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 122612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 122712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<JSFunction> function() const { return hydrogen()->function(); } 122812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { 122912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return lazy_deopt_env_; 123012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 123112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment( 1232ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org LEnvironment* env) OVERRIDE { 123312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org lazy_deopt_env_ = env; 123412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 123512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 123612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 123712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LEnvironment* lazy_deopt_env_; 123812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 123912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 124012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1241ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBoundsCheck FINAL : public LTemplateInstruction<0, 2, 0> { 124212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 124312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LBoundsCheck(LOperand* index, LOperand* length) { 124412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = index; 124512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = length; 124612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 124712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 124812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() { return inputs_[0]; } 124912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* length() { return inputs_[1]; } 125012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 125112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 125212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 125312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 125412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 125512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1256ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBitI FINAL : public LTemplateInstruction<1, 2, 0> { 125712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 125812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LBitI(LOperand* left, LOperand* right) { 125912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 126012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 126112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 126212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 126312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 126412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 126512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 126612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return hydrogen()->op(); } 126712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 126812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 126912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Bitwise) 127012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 127112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 127212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1273ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LShiftI FINAL : public LTemplateInstruction<1, 2, 0> { 127412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 127512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 127612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : op_(op), can_deopt_(can_deopt) { 127712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 127812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 127912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 128012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 128112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return op_; } 128212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 128312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 128412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool can_deopt() const { return can_deopt_; } 128512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 128612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 128712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 128812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 128912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op_; 129012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool can_deopt_; 129112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 129212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 129312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1294ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSubI FINAL : public LTemplateInstruction<1, 2, 0> { 129512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 129612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LSubI(LOperand* left, LOperand* right) { 129712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 129812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 129912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 130012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 130112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 130212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 130312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 130412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 130512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Sub) 130612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 130712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 130812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1309ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantI FINAL : public LTemplateInstruction<1, 0, 0> { 131012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 131112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 131212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 131312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 131412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int32_t value() const { return hydrogen()->Integer32Value(); } 131512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 131612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 131712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1318ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantS FINAL : public LTemplateInstruction<1, 0, 0> { 131912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 132012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 132112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 132212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 132312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 132412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 132512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 132612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1327ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantD FINAL : public LTemplateInstruction<1, 0, 0> { 132812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 132912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 133012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 133112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 133212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org double value() const { return hydrogen()->DoubleValue(); } 133312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 133412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 133512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1336ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantE FINAL : public LTemplateInstruction<1, 0, 0> { 133712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 133812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 133912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 134012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 134112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ExternalReference value() const { 134212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->ExternalReferenceValue(); 134312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 134412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 134512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 134612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1347ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantT FINAL : public LTemplateInstruction<1, 0, 0> { 134812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 134912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 135012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 135112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 135212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Object> value(Isolate* isolate) const { 135312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->handle(isolate); 135412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 135512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 135612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 135712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1358ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBranch FINAL : public LControlInstruction<1, 0> { 135912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 136012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LBranch(LOperand* value) { 136112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 136212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 136312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 136412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 136512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 136612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 136712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Branch) 136812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1369ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 137012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 137112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 137212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1373ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpMapAndBranch FINAL : public LControlInstruction<1, 1> { 137412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 137512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCmpMapAndBranch(LOperand* value, LOperand* temp) { 137612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 137712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 137812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 137912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 138012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 138112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 138212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 138312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 138412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMap) 138512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 138612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Map> map() const { return hydrogen()->map().handle(); } 138712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 138812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 138912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1390ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMapEnumLength FINAL : public LTemplateInstruction<1, 1, 0> { 139112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 139212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LMapEnumLength(LOperand* value) { 139312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 139412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 139512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 139612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 139712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 139812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length") 139912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 140012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 140112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1402ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDateField FINAL : public LTemplateInstruction<1, 1, 1> { 140312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 140412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LDateField(LOperand* date, LOperand* temp, Smi* index) : index_(index) { 140512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = date; 140612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 140712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 140812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 140912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* date() { return inputs_[0]; } 141012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 141112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Smi* index() const { return index_; } 141212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 141312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field") 141412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DateField) 141512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 141612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 141712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Smi* index_; 141812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 141912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 142012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1421ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringGetChar FINAL : public LTemplateInstruction<1, 2, 0> { 142212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 142312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LSeqStringGetChar(LOperand* string, LOperand* index) { 142412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = string; 142512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = index; 142612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 142712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 142812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* string() const { return inputs_[0]; } 142912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() const { return inputs_[1]; } 143012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 143112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 143212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 143312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 143412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 143512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1436ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringSetChar FINAL : public LTemplateInstruction<1, 4, 0> { 143712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 143812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LSeqStringSetChar(LOperand* context, 143912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* string, 144012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index, 144112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value) { 144212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 144312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = string; 144412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = index; 144512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[3] = value; 144612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 144712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 144812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* string() { return inputs_[1]; } 144912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() { return inputs_[2]; } 145012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[3]; } 145112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 145212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 145312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 145412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 145512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 145612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1457ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAddI FINAL : public LTemplateInstruction<1, 2, 0> { 145812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 145912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAddI(LOperand* left, LOperand* right) { 146012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 146112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 146212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 146312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 146412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 146512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 146612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 146712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 146812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Add) 146912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 147012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 147112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1472ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathMinMax FINAL : public LTemplateInstruction<1, 2, 0> { 147312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 147412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LMathMinMax(LOperand* left, LOperand* right) { 147512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 147612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 147712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 147812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 147912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 148012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 148112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 148212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 148312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 148412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 148512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 148612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1487ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPower FINAL : public LTemplateInstruction<1, 2, 0> { 148812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 148912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LPower(LOperand* left, LOperand* right) { 149012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 149112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 149212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 149312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 149412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 149512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 149612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 149712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Power, "power") 149812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Power) 149912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 150012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 150112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1502ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticD FINAL : public LTemplateInstruction<1, 2, 0> { 150312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 150412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 150512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : op_(op) { 150612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = left; 150712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = right; 150812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 150912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 151012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return op_; } 151112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[0]; } 151212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[1]; } 151312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1514ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const OVERRIDE { 151512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return LInstruction::kArithmeticD; 151612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 1517ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1518ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 151912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 152012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 152112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op_; 152212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 152312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 152412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1525ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> { 152612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 152712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LArithmeticT(Token::Value op, 152812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context, 152912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left, 153012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right) 153112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : op_(op) { 153212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 153312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = left; 153412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = right; 153512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 153612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 153712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 153812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[1]; } 153912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[2]; } 154012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op() const { return op_; } 154112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1542ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const FINAL { return LInstruction::kArithmeticT; } 1543ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1544ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 154512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 154612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 154712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Token::Value op_; 154812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 154912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 155012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1551ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LReturn FINAL : public LTemplateInstruction<0, 3, 0> { 155212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 155312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) { 155412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 155512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = context; 155612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = parameter_count; 155712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 155812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 155912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 156012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 156112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool has_constant_parameter_count() { 156212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return parameter_count()->IsConstantOperand(); 156312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 156412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LConstantOperand* constant_parameter_count() { 1565e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(has_constant_parameter_count()); 156612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return LConstantOperand::cast(parameter_count()); 156712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 156812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* parameter_count() { return inputs_[2]; } 156912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 157012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Return, "return") 157112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 157212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 157312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1574ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedField FINAL : public LTemplateInstruction<1, 1, 0> { 157512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 157612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LLoadNamedField(LOperand* object) { 157712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 157812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 157912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 158012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 158112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 158212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 158312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 158412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 158512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 158612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1587ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 158812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 15899d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { 159012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 159112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = object; 15929d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 159312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 159412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 159512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 159612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[1]; } 15979d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 159812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 159912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 160012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 160112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 160212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 160312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 160412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 160512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1606ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFunctionPrototype FINAL : public LTemplateInstruction<1, 1, 0> { 160712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 160812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LLoadFunctionPrototype(LOperand* function) { 160912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = function; 161012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 161112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 161212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[0]; } 161312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 161412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 161512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 161612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 161712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 161812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1619ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadRoot FINAL : public LTemplateInstruction<1, 0, 0> { 162012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 162112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 162212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 162312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 162412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Heap::RootListIndex index() const { return hydrogen()->index(); } 162512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 162612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 162712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1628ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyed FINAL : public LTemplateInstruction<1, 2, 0> { 162912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 163012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LLoadKeyed(LOperand* elements, LOperand* key) { 163112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = elements; 163212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = key; 163312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 163412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 163512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 163612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* key() { return inputs_[1]; } 163712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ElementsKind elements_kind() const { 163812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->elements_kind(); 163912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 164012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_external() const { 164112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->is_external(); 164212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 164312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_fixed_typed_array() const { 164412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 164512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 164612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_typed_elements() const { 164712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return is_external() || is_fixed_typed_array(); 164812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 164912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 165012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 165112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 165212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 165312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 165412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 165512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 165612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 165712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1658ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> { 165912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 16609d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, 16619d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 166212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 166312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = object; 166412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = key; 16659d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 166612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 166712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 166812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 166912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[1]; } 167012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* key() { return inputs_[2]; } 16719d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 167212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 167312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 16749d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) 167512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 167612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 167712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1678ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalCell FINAL : public LTemplateInstruction<1, 0, 0> { 167912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 168012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 168112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 168212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 168312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 168412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1685ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 168612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 16879d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadGlobalGeneric(LOperand* context, LOperand* global_object, 16889d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 168912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 169012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = global_object; 16919d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 169212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 169312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 169412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 169512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* global_object() { return inputs_[1]; } 16969d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 169712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 169812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 169912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 170012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 170112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 170212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool for_typeof() const { return hydrogen()->for_typeof(); } 170312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 170412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 170512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1706ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreGlobalCell FINAL : public LTemplateInstruction<0, 1, 1> { 170712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 170812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreGlobalCell(LOperand* value, LOperand* temp) { 170912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 171012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 171112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 171212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 171312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 171412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 171512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 171612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 171712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 171812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 171912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 172012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1721ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadContextSlot FINAL : public LTemplateInstruction<1, 1, 0> { 172212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 172312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LLoadContextSlot(LOperand* context) { 172412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 172512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 172612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 172712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 172812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 172912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 173012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 173112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 173212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int slot_index() { return hydrogen()->slot_index(); } 173312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 173412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 173512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 173612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 173712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1738ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 0> { 173912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 174012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreContextSlot(LOperand* context, LOperand* value) { 174112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 174212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = value; 174312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 174412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 174512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 174612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[1]; } 174712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 174812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 174912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 175012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 175112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int slot_index() { return hydrogen()->slot_index(); } 175212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1753ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 175412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 175512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 175612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1757ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> { 175812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 175912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LPushArgument(LOperand* value) { 176012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 176112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 176212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 176312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 176412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 176512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 176612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 176712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 176812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1769ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDrop FINAL : public LTemplateInstruction<0, 0, 0> { 177012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 177112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDrop(int count) : count_(count) { } 177212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 177312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int count() const { return count_; } 177412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 177512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 177612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 177712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 177812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int count_; 177912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 178012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 178112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1782ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> { 178312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 178412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreCodeEntry(LOperand* function, LOperand* code_object) { 178512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = function; 178612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = code_object; 178712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 178812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 178912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[0]; } 179012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* code_object() { return inputs_[1]; } 179112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 179212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 179312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 179412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 179512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 179612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 179712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 179812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1799ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> { 180012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 180112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 180212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = base_object; 180312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = offset; 180412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 180512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 180612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* base_object() const { return inputs_[0]; } 180712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* offset() const { return inputs_[1]; } 180812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1809ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 181012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 181112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 181212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 181312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 181412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1815ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> { 181612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 181712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 181812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 181912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 182012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 182112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1822ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LContext FINAL : public LTemplateInstruction<1, 0, 0> { 182312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 182412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Context, "context") 182512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Context) 182612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 182712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 182812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1829ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeclareGlobals FINAL : public LTemplateInstruction<0, 1, 0> { 183012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 183112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDeclareGlobals(LOperand* context) { 183212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 183312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 183412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 183512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 183612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 183712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 183812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 183912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 184012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 184112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1842ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallJSFunction FINAL : public LTemplateInstruction<1, 1, 0> { 184312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 184412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCallJSFunction(LOperand* function) { 184512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = function; 184612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 184712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 184812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[0]; } 184912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 185012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") 185112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) 185212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1853ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 185412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 185512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 185612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 185712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 185812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1859ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> { 186012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 18619aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org LCallWithDescriptor(CallInterfaceDescriptor descriptor, 1862ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org const ZoneList<LOperand*>& operands, Zone* zone) 1863ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org : descriptor_(descriptor), 18649aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org inputs_(descriptor.GetRegisterParameterCount() + 1, zone) { 18659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DCHECK(descriptor.GetRegisterParameterCount() + 1 == operands.length()); 186612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_.AddAll(operands, zone); 186712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 186812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 186912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* target() const { return inputs_[0]; } 187012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 18719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org const CallInterfaceDescriptor descriptor() { return descriptor_; } 187212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 187312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 187412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 187512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 187612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1877ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 187812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 187912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 188012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 18819aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallInterfaceDescriptor descriptor_; 188212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ZoneList<LOperand*> inputs_; 188312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 188412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Iterator support. 1885ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return inputs_.length(); } 1886ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 188712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1888ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return 0; } 1889ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return NULL; } 189012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 189112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 189212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 189312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1894ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> { 189512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 189612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInvokeFunction(LOperand* context, LOperand* function) { 189712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 189812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = function; 189912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 190012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 190112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 190212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[1]; } 190312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 190412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 190512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 190612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1907ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 190812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 190912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 191012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 191112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 191212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1913ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> { 191412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 191512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCallFunction(LOperand* context, LOperand* function) { 191612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 191712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = function; 191812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 191912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 192012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 192112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[1]; } 192212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 192312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 192412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallFunction) 192512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 192612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 192712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 192812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 192912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1930ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNew FINAL : public LTemplateInstruction<1, 2, 0> { 193112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 193212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCallNew(LOperand* context, LOperand* constructor) { 193312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 193412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = constructor; 193512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 193612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 193712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 193812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 193912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 194012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 194112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNew) 194212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1943ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 194412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 194512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 194612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 194712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 194812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1949ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> { 195012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 195112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCallNewArray(LOperand* context, LOperand* constructor) { 195212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 195312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = constructor; 195412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 195512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 195612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 195712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 195812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 195912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 196012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 196112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1962ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 196312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 196412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 196512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 196612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 196712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1968ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> { 196912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 197012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCallRuntime(LOperand* context) { 197112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 197212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 197312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 197412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 197512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 197612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 197712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 197812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1979ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE { 198012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return save_doubles() == kDontSaveFPRegs; 198112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 198212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 198312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org const Runtime::Function* function() const { return hydrogen()->function(); } 198412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int arity() const { return hydrogen()->argument_count(); } 198512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } 198612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 198712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 198812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 1989ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 199012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 199112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LInteger32ToDouble(LOperand* value) { 199212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 199312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 199412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 199512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 199612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 199712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 199812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 199912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 200012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2001ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUint32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 200212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 200312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LUint32ToDouble(LOperand* value) { 200412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 200512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 200612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 200712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 200812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 200912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 201012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 201112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 201212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2013ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagU FINAL : public LTemplateInstruction<1, 1, 2> { 201412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 201512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) { 201612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 201712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp1; 201812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[1] = temp2; 201912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 202012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 202112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 202212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 202312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 202412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 202512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 202612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 202712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 202812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2029ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagD FINAL : public LTemplateInstruction<1, 1, 2> { 203012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 203112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) { 203212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 203312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 203412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[1] = temp2; 203512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 203612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 203712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 203812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 203912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 204012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 204112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 204212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 204312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 204412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 204512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2046ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToSmi FINAL : public LTemplateInstruction<1, 1, 0> { 204712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 204812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDoubleToSmi(LOperand* value) { 204912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 205012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 205112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 205212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 205312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 205412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 205512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 205612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 205712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 205812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 205912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 206012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 206112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Sometimes truncating conversion from a tagged value to an int32. 2062ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToI FINAL : public LTemplateInstruction<1, 1, 0> { 206312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 206412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDoubleToI(LOperand* value) { 206512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 206612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 206712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 206812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 206912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 207012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 207112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 207212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 207312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 207412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 207512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 207612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 207712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org// Truncating conversion from a tagged value to an int32. 2078ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTaggedToI FINAL : public LTemplateInstruction<1, 1, 2> { 207912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 208012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LTaggedToI(LOperand* value, 208112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp, 208212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2) { 208312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 208412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 208512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[1] = temp2; 208612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 208712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 208812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 208912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 209012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 209112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 209212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 209312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 209412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 209512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 209612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 209712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 209812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2099ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiTag FINAL : public LTemplateInstruction<1, 1, 0> { 210012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 210112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LSmiTag(LOperand* value) { 210212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 210312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 210412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 210512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 210612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 210712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 210812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 210912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 211012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 211112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2112ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberUntagD FINAL : public LTemplateInstruction<1, 1, 0> { 211312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 211412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LNumberUntagD(LOperand* value) { 211512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 211612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 211712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 211812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 211912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 212012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 212112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 212212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 212312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 212412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2125ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiUntag FINAL : public LTemplateInstruction<1, 1, 0> { 212612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 212712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LSmiUntag(LOperand* value, bool needs_check) 212812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : needs_check_(needs_check) { 212912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 213012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 213112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 213212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 213312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool needs_check() const { return needs_check_; } 213412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 213512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 213612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 213712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 213812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool needs_check_; 213912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 214012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 214112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2142ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedField FINAL : public LTemplateInstruction<0, 2, 1> { 214312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 214412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 214512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 214612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = value; 214712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 214812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 214912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 215012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 215112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[1]; } 215212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 215312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 215412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 215512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 215612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2157ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 215812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 215912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Representation representation() const { 216012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->field_representation(); 216112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 216212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 216312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 216412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2165ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> { 216612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 216712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { 216812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 216912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = object; 217012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = value; 217112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 217212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 217312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 217412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[1]; } 217512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[2]; } 217612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 217712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 217812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 217912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2180ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 218112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 218212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 218312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 218412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 218512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 218612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2187ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> { 218812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 218912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { 219012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 219112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = key; 219212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = value; 219312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 219412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 219512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_external() const { return hydrogen()->is_external(); } 219612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_fixed_typed_array() const { 219712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 219812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 219912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool is_typed_elements() const { 220012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return is_external() || is_fixed_typed_array(); 220112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 220212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 220312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* key() { return inputs_[1]; } 220412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[2]; } 220512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ElementsKind elements_kind() const { 220612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->elements_kind(); 220712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 220812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 220912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 221012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 221112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2212ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 221312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 221412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 221512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 221612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 221712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2218ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> { 221912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 222012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStoreKeyedGeneric(LOperand* context, 222112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* obj, 222212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* key, 222312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value) { 222412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 222512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = obj; 222612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = key; 222712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[3] = value; 222812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 222912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 223012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 223112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[1]; } 223212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* key() { return inputs_[2]; } 223312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[3]; } 223412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 223512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 223612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 223712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2238ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 223912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 224012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 224112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 224212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 224312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2244ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 1> { 224512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 224612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LTransitionElementsKind(LOperand* object, 224712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context, 224812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* new_map_temp) { 224912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 225012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = context; 225112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = new_map_temp; 225212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 225312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 225412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[1]; } 225512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 225612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* new_map_temp() { return temps_[0]; } 225712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 225812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 225912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "transition-elements-kind") 226012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 226112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2262ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 226312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 226412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 226512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<Map> transitioned_map() { 226612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return hydrogen()->transitioned_map().handle(); 226712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 226812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ElementsKind from_kind() { return hydrogen()->from_kind(); } 226912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org ElementsKind to_kind() { return hydrogen()->to_kind(); } 227012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 227112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 227212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2273ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTrapAllocationMemento FINAL : public LTemplateInstruction<0, 1, 1> { 227412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 227512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LTrapAllocationMemento(LOperand* object, 227612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp) { 227712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 227812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 227912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 228012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 228112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 228212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 228312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 228412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 228512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "trap-allocation-memento") 228612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 228712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 228812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2289ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringAdd FINAL : public LTemplateInstruction<1, 3, 0> { 229012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 229112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 229212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 229312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = left; 229412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = right; 229512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 229612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 229712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 229812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* left() { return inputs_[1]; } 229912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* right() { return inputs_[2]; } 230012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 230112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 230212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringAdd) 230312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 230412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 230512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 230612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2307ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharCodeAt FINAL : public LTemplateInstruction<1, 3, 0> { 230812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 230912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 231012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 231112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = string; 231212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[2] = index; 231312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 231412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 231512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 231612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* string() { return inputs_[1]; } 231712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() { return inputs_[2]; } 231812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 231912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 232012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 232112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 232212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 232312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2324ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharFromCode FINAL : public LTemplateInstruction<1, 2, 0> { 232512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 232612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { 232712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 232812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = char_code; 232912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 233012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 233112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 233212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* char_code() { return inputs_[1]; } 233312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 233412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 233512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 233612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 233712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 233812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2339ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckValue FINAL : public LTemplateInstruction<0, 1, 0> { 234012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 234112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCheckValue(LOperand* value) { 234212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 234312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 234412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 234512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 234612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 234712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 234812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckValue) 234912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 235012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 235112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2352ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckInstanceType FINAL : public LTemplateInstruction<0, 1, 0> { 235312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 235412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCheckInstanceType(LOperand* value) { 235512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 235612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 235712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 235812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 235912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 236012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 236112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 236212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 236312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 236412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2365ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMaps FINAL : public LTemplateInstruction<0, 1, 0> { 236612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 236712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCheckMaps(LOperand* value = NULL) { 236812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 236912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 237012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 237112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 237212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 237312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 237412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 237512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 237612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 237712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2378ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckSmi FINAL : public LTemplateInstruction<1, 1, 0> { 237912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 238012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCheckSmi(LOperand* value) { 238112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 238212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 238312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 238412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 238512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 238612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 238712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 238812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 238912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2390ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckNonSmi FINAL : public LTemplateInstruction<0, 1, 0> { 239112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 239212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LCheckNonSmi(LOperand* value) { 239312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 239412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 239512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 239612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 239712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 239812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 239912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 240012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 240112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 240212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2403ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampDToUint8 FINAL : public LTemplateInstruction<1, 1, 1> { 240412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 240512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LClampDToUint8(LOperand* unclamped, LOperand* temp) { 240612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = unclamped; 240712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 240812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 240912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 241012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 241112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 241212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 241312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 241412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 241512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 241612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2417ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampIToUint8 FINAL : public LTemplateInstruction<1, 1, 0> { 241812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 241912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LClampIToUint8(LOperand* unclamped) { 242012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = unclamped; 242112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 242212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 242312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 242412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 242512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 242612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 242712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 242812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2429ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampTToUint8 FINAL : public LTemplateInstruction<1, 1, 1> { 243012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 243112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LClampTToUint8(LOperand* unclamped, LOperand* temp) { 243212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = unclamped; 243312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 243412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 243512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 243612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 243712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 243812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 243912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 244012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 244112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 244212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2443ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleBits FINAL : public LTemplateInstruction<1, 1, 0> { 244412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 244512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LDoubleBits(LOperand* value) { 244612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 244712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 244812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 244912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 245012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 245112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 245212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 245312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 245412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 245512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2456ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstructDouble FINAL : public LTemplateInstruction<1, 2, 0> { 245712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 245812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LConstructDouble(LOperand* hi, LOperand* lo) { 245912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = hi; 246012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = lo; 246112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 246212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 246312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* hi() { return inputs_[0]; } 246412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* lo() { return inputs_[1]; } 246512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 246612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double") 246712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 246812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 246912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2470ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAllocate FINAL : public LTemplateInstruction<1, 2, 2> { 247112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 247212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAllocate(LOperand* context, 247312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* size, 247412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp1, 247512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2) { 247612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 247712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = size; 247812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp1; 247912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[1] = temp2; 248012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 248112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 248212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 248312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* size() { return inputs_[1]; } 248412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 248512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 248612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 248712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 248812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Allocate) 248912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 249012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 249112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2492ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LRegExpLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 249312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 249412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LRegExpLiteral(LOperand* context) { 249512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 249612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 249712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 249812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 249912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 250012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 250112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 250212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 250312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 250412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2505ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFunctionLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 250612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 250712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LFunctionLiteral(LOperand* context) { 250812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 250912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 251012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 251112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 251212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 251312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 251412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 251512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 251612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 251712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2518ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LToFastProperties FINAL : public LTemplateInstruction<1, 1, 0> { 251912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 252012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LToFastProperties(LOperand* value) { 252112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 252212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 252312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 252412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 252512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 252612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 252712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 252812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 252912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 253012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2531ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeof FINAL : public LTemplateInstruction<1, 2, 0> { 253212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 253312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LTypeof(LOperand* context, LOperand* value) { 253412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 253512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = value; 253612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 253712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 253812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 253912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[1]; } 254012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 254112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 254212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 254312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 254412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2545ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeofIsAndBranch FINAL : public LControlInstruction<1, 0> { 254612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 254712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LTypeofIsAndBranch(LOperand* value) { 254812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 254912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 255012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 255112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 255212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 255312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 255412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 255512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 255612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<String> type_literal() { return hydrogen()->type_literal(); } 255712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2558ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 255912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 256012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 256112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2562ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> { 256312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 256412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LIsConstructCallAndBranch(LOperand* temp) { 256512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org temps_[0] = temp; 256612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 256712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 256812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* temp() { return temps_[0]; } 256912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 257012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 257112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "is-construct-call-and-branch") 257212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 257312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 257412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2575ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> { 257612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 257712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOsrEntry() {} 257812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2579ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 258012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return false; 258112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 258212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 258312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 258412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 258512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2586ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> { 258712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 258812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LStackCheck(LOperand* context) { 258912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 259012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 259112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 259212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 259312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 259412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 259512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StackCheck) 259612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 259712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label* done_label() { return &done_label_; } 259812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 259912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 260012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Label done_label_; 260112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 260212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 260312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2604ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInPrepareMap FINAL : public LTemplateInstruction<1, 2, 0> { 260512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 260612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LForInPrepareMap(LOperand* context, LOperand* object) { 260712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 260812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = object; 260912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 261012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 261112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 261212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[1]; } 261312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 261412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 261512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 261612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 261712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2618ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInCacheArray FINAL : public LTemplateInstruction<1, 1, 0> { 261912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 262012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LForInCacheArray(LOperand* map) { 262112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = map; 262212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 262312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 262412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* map() { return inputs_[0]; } 262512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 262612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 262712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 262812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int idx() { 262912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org return HForInCacheArray::cast(this->hydrogen_value())->idx(); 263012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 263112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 263212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 263312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2634ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMapValue FINAL : public LTemplateInstruction<0, 2, 0> { 263512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 263612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LCheckMapValue(LOperand* value, LOperand* map) { 263712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = value; 263812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = map; 263912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 264012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 264112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* value() { return inputs_[0]; } 264212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* map() { return inputs_[1]; } 264312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 264412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 264512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 264612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 264712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2648ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFieldByIndex FINAL : public LTemplateInstruction<1, 2, 0> { 264912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 265012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LLoadFieldByIndex(LOperand* object, LOperand* index) { 265112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = object; 265212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = index; 265312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 265412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 265512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* object() { return inputs_[0]; } 265612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* index() { return inputs_[1]; } 265712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 265812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 265912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 266012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 266112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 266212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LStoreFrameContext: public LTemplateInstruction<0, 1, 0> { 266312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 266412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org explicit LStoreFrameContext(LOperand* context) { 266512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 266612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 266712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 266812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 266912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 267012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext, "store-frame-context") 267112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 267212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 267312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 267412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LAllocateBlockContext: public LTemplateInstruction<1, 2, 0> { 267512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 267612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAllocateBlockContext(LOperand* context, LOperand* function) { 267712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[0] = context; 267812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org inputs_[1] = function; 267912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org } 268012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 268112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* context() { return inputs_[0]; } 268212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* function() { return inputs_[1]; } 268312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 268412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); } 268512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 268612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context") 268712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext) 268812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 268912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 269012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 269112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.orgclass LChunkBuilder; 2692ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPlatformChunk FINAL : public LChunk { 269312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 269412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LPlatformChunk(CompilationInfo* info, HGraph* graph) 269512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org : LChunk(info, graph) { } 269612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 269712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int GetNextSpillIndex(RegisterKind kind); 269812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LOperand* GetNextSpillSlot(RegisterKind kind); 269912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 270012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 270112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 2702ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LChunkBuilder FINAL : public LChunkBuilderBase { 270312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org public: 270412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2705b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org : LChunkBuilderBase(info, graph), 270612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org current_instruction_(NULL), 270712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org current_block_(NULL), 270812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org next_block_(NULL), 2709b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org allocator_(allocator) {} 271012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 271112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Build the sequence for the graph. 271212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LPlatformChunk* Build(); 271312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 271412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Declare methods that deal with the individual node types. 271512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 271612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 271712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#undef DECLARE_DO 271812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 271912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend); 272012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 272112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org static bool HasMagicNumberForDivisor(int32_t divisor); 272212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 272312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathFloor(HUnaryMathOperation* instr); 272412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathRound(HUnaryMathOperation* instr); 2725dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LInstruction* DoMathFround(HUnaryMathOperation* instr); 272612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathAbs(HUnaryMathOperation* instr); 272712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathLog(HUnaryMathOperation* instr); 272812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathExp(HUnaryMathOperation* instr); 272912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathSqrt(HUnaryMathOperation* instr); 273012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathPowHalf(HUnaryMathOperation* instr); 273112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoMathClz32(HUnaryMathOperation* instr); 273212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoDivByPowerOf2I(HDiv* instr); 273312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoDivByConstI(HDiv* instr); 273412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoDivI(HDiv* instr); 273512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoModByPowerOf2I(HMod* instr); 273612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoModByConstI(HMod* instr); 273712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoModI(HMod* instr); 273812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 273912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 274012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 274112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 274212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org private: 274312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Methods for getting operands for Use / Define / Temp. 274412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LUnallocated* ToUnallocated(Register reg); 274512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LUnallocated* ToUnallocated(DoubleRegister reg); 274612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 274712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Methods for setting up define-use relationships. 274812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 274912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 275012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 275112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DoubleRegister fixed_register); 275212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 275312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // A value that is guaranteed to be allocated to a register. 275412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Operand created by UseRegister is guaranteed to be live until the end of 275512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // instruction. This means that register allocator will not reuse it's 275612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // register for any other operand inside instruction. 275712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Operand created by UseRegisterAtStart is guaranteed to be live only at 275812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // instruction start. Register allocator is free to assign the same register 275912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // to some other operand used inside instruction (i.e. temporary or 276012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // output). 276112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegister(HValue* value); 276212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 276312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 276412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in a register that may be trashed. 276512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 276612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 276712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in a register or stack slot. 276812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value); 276912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 277012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 277112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in a register, stack slot or a constant operand. 277212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 277312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 277412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 277512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in a register or a constant operand. 277612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 277712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 277812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 277912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in a constant operand. 278012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* UseConstant(HValue* value); 278112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 278212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // An input operand in register, stack slot or a constant operand. 278312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Will not be moved to a register even if one is freely available. 2784ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE; 278512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 278612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Temporary operand that must be in a register. 278712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LUnallocated* TempRegister(); 278812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LUnallocated* TempDoubleRegister(); 278912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* FixedTemp(Register reg); 279012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); 279112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 279212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Methods for setting up define-use relationships. 279312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // Return the same instruction that they are passed. 279412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* Define(LTemplateResultInstruction<1>* instr, 279512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LUnallocated* result); 279612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); 279712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, 279812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org int index); 279912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr); 280012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr, 280112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org Register reg); 280212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr, 280312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DoubleRegister reg); 280412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* AssignEnvironment(LInstruction* instr); 280512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* AssignPointerMap(LInstruction* instr); 280612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 280712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 280812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 280912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // By default we assume that instruction sequences generated for calls 281012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // cannot deoptimize eagerly and we do not attach environment to this 281112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org // instruction. 281212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* MarkAsCall( 281312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* instr, 281412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HInstruction* hinstr, 281512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 281612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 281712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void VisitInstruction(HInstruction* current); 281812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void AddInstruction(LInstruction* instr, HInstruction* current); 281912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 282012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 282112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoBit(Token::Value op, HBitwiseBinaryOperation* instr); 282212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 282312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoArithmeticD(Token::Value op, 282412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HArithmeticBinaryOperation* instr); 282512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LInstruction* DoArithmeticT(Token::Value op, 282612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBinaryOperation* instr); 282712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 282812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HInstruction* current_instruction_; 282912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* current_block_; 283012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org HBasicBlock* next_block_; 283112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org LAllocator* allocator_; 283212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 283312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 283412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org}; 283512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 283612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#undef DECLARE_HYDROGEN_ACCESSOR 283712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#undef DECLARE_CONCRETE_INSTRUCTION 283812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 283912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org} } // namespace v8::internal 284012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org 284112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org#endif // V8_MIPS_LITHIUM_MIPS_H_ 2842