1864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 2864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// found in the LICENSE file. 4864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 5864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#ifndef V8_X87_LITHIUM_X87_H_ 6864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define V8_X87_LITHIUM_X87_H_ 7864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/hydrogen.h" 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium-allocator.h" 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/safepoint-table.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/utils.h" 13864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 14864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace v8 { 15864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgnamespace internal { 16864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 17864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Forward declarations. 18864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCodeGen; 19864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 20864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ 21864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(AccessArgumentsAt) \ 22864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(AddI) \ 23e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org V(AllocateBlockContext) \ 24864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Allocate) \ 25864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ApplyArguments) \ 26864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ArgumentsElements) \ 27864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ArgumentsLength) \ 28864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ArithmeticD) \ 29864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ArithmeticT) \ 30864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(BitI) \ 31864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(BoundsCheck) \ 32864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Branch) \ 33864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallJSFunction) \ 34864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallWithDescriptor) \ 35864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallFunction) \ 36864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallNew) \ 37864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallNewArray) \ 38864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallRuntime) \ 39864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CallStub) \ 40864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckInstanceType) \ 41864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckMaps) \ 42864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckMapValue) \ 43864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckNonSmi) \ 44864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckSmi) \ 45864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CheckValue) \ 46864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ClampDToUint8) \ 47864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ClampIToUint8) \ 48864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ClampTToUint8NoSSE2) \ 49864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ClassOfTestAndBranch) \ 50864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ClobberDoubles) \ 51864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CompareMinusZeroAndBranch) \ 52864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CompareNumericAndBranch) \ 53864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CmpObjectEqAndBranch) \ 54864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CmpHoleAndBranch) \ 55864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CmpMapAndBranch) \ 56864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(CmpT) \ 57864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstantD) \ 58864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstantE) \ 59864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstantI) \ 60864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstantS) \ 61864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstantT) \ 62864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ConstructDouble) \ 63864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Context) \ 64864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DateField) \ 65864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DebugBreak) \ 66864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DeclareGlobals) \ 67864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Deoptimize) \ 68864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DivByConstI) \ 69864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DivByPowerOf2I) \ 70864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DivI) \ 71864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DoubleBits) \ 72864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DoubleToI) \ 73864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DoubleToSmi) \ 74864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Drop) \ 75864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Dummy) \ 76864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(DummyUse) \ 77864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(FlooringDivByConstI) \ 78864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(FlooringDivByPowerOf2I) \ 79864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(FlooringDivI) \ 80864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ForInCacheArray) \ 81864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ForInPrepareMap) \ 82864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(FunctionLiteral) \ 83864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(GetCachedArrayIndex) \ 84864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Goto) \ 85864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(HasCachedArrayIndexAndBranch) \ 86864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(HasInstanceTypeAndBranch) \ 87864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(InnerAllocatedObject) \ 88864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(InstanceOf) \ 89864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(InstanceOfKnownGlobal) \ 90864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(InstructionGap) \ 91864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Integer32ToDouble) \ 92864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(InvokeFunction) \ 93864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(IsConstructCallAndBranch) \ 94864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(IsObjectAndBranch) \ 95864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(IsStringAndBranch) \ 96864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(IsSmiAndBranch) \ 97864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(IsUndetectableAndBranch) \ 98864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Label) \ 99864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LazyBailout) \ 100864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadContextSlot) \ 101864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadFieldByIndex) \ 102864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadFunctionPrototype) \ 103864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadGlobalCell) \ 104864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadGlobalGeneric) \ 105864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadKeyed) \ 106864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadKeyedGeneric) \ 107864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadNamedField) \ 108864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadNamedGeneric) \ 109864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(LoadRoot) \ 110864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MapEnumLength) \ 111864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathAbs) \ 112864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathClz32) \ 113864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathExp) \ 114864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathFloor) \ 115864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathLog) \ 116864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathMinMax) \ 117864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathPowHalf) \ 118864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathRound) \ 119864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MathSqrt) \ 120864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ModByConstI) \ 121864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ModByPowerOf2I) \ 122864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ModI) \ 123864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(MulI) \ 124864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(NumberTagD) \ 125864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(NumberTagI) \ 126864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(NumberTagU) \ 127864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(NumberUntagD) \ 128864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(OsrEntry) \ 129864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Parameter) \ 130864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Power) \ 131864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(PushArgument) \ 132864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(RegExpLiteral) \ 133864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Return) \ 134864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(SeqStringGetChar) \ 135864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(SeqStringSetChar) \ 136864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ShiftI) \ 137864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(SmiTag) \ 138864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(SmiUntag) \ 139864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StackCheck) \ 140864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreCodeEntry) \ 141864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreContextSlot) \ 142e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org V(StoreFrameContext) \ 143864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreGlobalCell) \ 144864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreKeyed) \ 145864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreKeyedGeneric) \ 146864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreNamedField) \ 147864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StoreNamedGeneric) \ 148864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StringAdd) \ 149864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StringCharCodeAt) \ 150864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StringCharFromCode) \ 151864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(StringCompareAndBranch) \ 152864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(SubI) \ 153864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(TaggedToI) \ 154864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ThisFunction) \ 155864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(ToFastProperties) \ 156864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(TransitionElementsKind) \ 157864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(TrapAllocationMemento) \ 158864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Typeof) \ 159864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(TypeofIsAndBranch) \ 160864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(Uint32ToDouble) \ 161864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(UnknownOSRValue) \ 162864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org V(WrapReceiver) 163864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 164864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 165864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 166864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual Opcode opcode() const V8_FINAL V8_OVERRIDE { \ 167864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return LInstruction::k##type; \ 168864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } \ 169864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE; \ 170864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE { \ 171864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return mnemonic; \ 172864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } \ 173864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org static L##type* cast(LInstruction* instr) { \ 174864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ASSERT(instr->Is##type()); \ 175864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return reinterpret_cast<L##type*>(instr); \ 176864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 177864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 178864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 179864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define DECLARE_HYDROGEN_ACCESSOR(type) \ 180864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org H##type* hydrogen() const { \ 181864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return H##type::cast(hydrogen_value()); \ 182864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 183864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 184864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 185864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInstruction : public ZoneObject { 186864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 187864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction() 188864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : environment_(NULL), 189864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org hydrogen_value_(NULL), 190864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bit_field_(IsCallBits::encode(false)) { 191864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 192864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 193864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual ~LInstruction() {} 194864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 195864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) = 0; 196864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual const char* Mnemonic() const = 0; 197864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintTo(StringStream* stream); 198864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 199864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintOutputOperandTo(StringStream* stream); 200864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 201864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org enum Opcode { 202864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Declare a unique enum value for each instruction. 203864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define DECLARE_OPCODE(type) k##type, 204864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 205864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org kNumberOfInstructions 206864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#undef DECLARE_OPCODE 207864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org }; 208864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 209864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual Opcode opcode() const = 0; 210864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 211864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Declare non-virtual type testers for all leaf IR classes. 212864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define DECLARE_PREDICATE(type) \ 213864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool Is##type() const { return opcode() == k##type; } 214864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 215864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#undef DECLARE_PREDICATE 216864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 217864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Declare virtual predicates for instructions that don't have 218864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // an opcode. 219864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool IsGap() const { return false; } 220864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 221864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool IsControl() const { return false; } 222864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 223864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void set_environment(LEnvironment* env) { environment_ = env; } 224864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LEnvironment* environment() const { return environment_; } 225864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool HasEnvironment() const { return environment_ != NULL; } 226864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 227864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 228864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPointerMap* pointer_map() const { return pointer_map_.get(); } 229864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool HasPointerMap() const { return pointer_map_.is_set(); } 230864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 231864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 232864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HValue* hydrogen_value() const { return hydrogen_value_; } 233864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 234864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) { } 235864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 236864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); } 237864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool IsCall() const { return IsCallBits::decode(bit_field_); } 238864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 239864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Interface to the register allocator and iterators. 240864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool ClobbersTemps() const { return IsCall(); } 241864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool ClobbersRegisters() const { return IsCall(); } 242864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const { 243864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return IsCall() || 244864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // We only have rudimentary X87Stack tracking, thus in general 245864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // cannot handle phi-nodes. 246864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org (IsControl()); 247864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 248864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 249864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasResult() const = 0; 250864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* result() const = 0; 251864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 252864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool HasDoubleRegisterResult(); 253864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool HasDoubleRegisterInput(); 254864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool IsDoubleInput(X87Register reg, LCodeGen* cgen); 255864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 256864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* FirstInput() { return InputAt(0); } 257864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* Output() { return HasResult() ? result() : NULL; } 258864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 259864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } 260864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 261864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#ifdef DEBUG 262864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void VerifyCall(); 263864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif 264864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 265864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 266864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Iterator support. 267864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org friend class InputIterator; 268864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int InputCount() = 0; 269864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* InputAt(int i) = 0; 270864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 271864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org friend class TempIterator; 272864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int TempCount() = 0; 273864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* TempAt(int i) = 0; 274864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 275864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org class IsCallBits: public BitField<bool, 0, 1> {}; 276864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 277864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LEnvironment* environment_; 278864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org SetOncePointer<LPointerMap> pointer_map_; 279864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HValue* hydrogen_value_; 280864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int bit_field_; 281864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 282864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 283864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 284864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// R = number of result operands (0 or 1). 285864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgtemplate<int R> 286864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTemplateResultInstruction : public LInstruction { 287864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 288864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Allow 0 or 1 output operands. 289864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org STATIC_ASSERT(R == 0 || R == 1); 290864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasResult() const V8_FINAL V8_OVERRIDE { 291864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return R != 0 && result() != NULL; 292864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 293864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void set_result(LOperand* operand) { results_[0] = operand; } 294864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* result() const { return results_[0]; } 295864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 296864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org protected: 297864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org EmbeddedContainer<LOperand*, R> results_; 298864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 299864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 300864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 301864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// R = number of result operands (0 or 1). 302864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// I = number of input operands. 303864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// T = number of temporary operands. 304864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgtemplate<int R, int I, int T> 305864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTemplateInstruction : public LTemplateResultInstruction<R> { 306864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org protected: 307864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org EmbeddedContainer<LOperand*, I> inputs_; 308864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org EmbeddedContainer<LOperand*, T> temps_; 309864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 310864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 311864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Iterator support. 312864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int InputCount() V8_FINAL V8_OVERRIDE { return I; } 313864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; } 314864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 315864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int TempCount() V8_FINAL V8_OVERRIDE { return T; } 316864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return temps_[i]; } 317864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 318864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 319864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 320864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LGap : public LTemplateInstruction<0, 0, 0> { 321864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 322864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LGap(HBasicBlock* block) : block_(block) { 323864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org parallel_moves_[BEFORE] = NULL; 324864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org parallel_moves_[START] = NULL; 325864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org parallel_moves_[END] = NULL; 326864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org parallel_moves_[AFTER] = NULL; 327864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 328864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 329864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Can't use the DECLARE-macro here because of sub-classes. 330864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool IsGap() const V8_FINAL V8_OVERRIDE { return true; } 331864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 332864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org static LGap* cast(LInstruction* instr) { 333864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ASSERT(instr->IsGap()); 334864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return reinterpret_cast<LGap*>(instr); 335864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 336864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 337864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool IsRedundant() const; 338864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 339864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* block() const { return block_; } 340864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 341864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org enum InnerPosition { 342864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org BEFORE, 343864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org START, 344864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org END, 345864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org AFTER, 346864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org FIRST_INNER_POSITION = BEFORE, 347864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LAST_INNER_POSITION = AFTER 348864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org }; 349864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 350864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) { 351864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org if (parallel_moves_[pos] == NULL) { 352864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org parallel_moves_[pos] = new(zone) LParallelMove(zone); 353864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 354864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return parallel_moves_[pos]; 355864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 356864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 357864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LParallelMove* GetParallelMove(InnerPosition pos) { 358864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return parallel_moves_[pos]; 359864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 360864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 361864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 362864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 363864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* block_; 364864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 365864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 366864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 367864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInstructionGap V8_FINAL : public LGap { 368864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 369864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 370864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 371864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 372864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return !IsRedundant(); 373864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 374864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 375864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 376864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 377864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 378864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 379864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LClobberDoubles V8_FINAL : public LTemplateInstruction<0, 0, 0> { 380864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 381864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LClobberDoubles(Isolate* isolate) { } 382864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 383864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const V8_OVERRIDE { 384864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return true; 385864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 386864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 387864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClobberDoubles, "clobber-d") 388864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 389864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 390864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 391864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LGoto V8_FINAL : public LTemplateInstruction<0, 0, 0> { 392864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 393864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LGoto(HBasicBlock* block) : block_(block) { } 394864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 395864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE; 396864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 397864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 398864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool IsControl() const V8_OVERRIDE { return true; } 399864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 400864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int block_id() const { return block_->block_id(); } 401864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const V8_OVERRIDE { 402864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false; 403864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 404864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 405864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool jumps_to_join() const { return block_->predecessors()->length() > 1; } 406864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 407864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 408864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* block_; 409864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 410864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 411864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 412864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> { 413864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 414864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 415864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 416864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 417864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 418864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> { 419864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 420864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDummy() { } 421864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 422864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 423864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 424864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 425864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> { 426864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 427864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDummyUse(LOperand* value) { 428864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 429864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 430864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 431864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 432864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 433864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 434864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDeoptimize V8_FINAL : public LTemplateInstruction<0, 0, 0> { 435864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 436e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org virtual bool IsControl() const V8_OVERRIDE { return true; } 437864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 438864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 439864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 440864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 441864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 442864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLabel V8_FINAL : public LGap { 443864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 444864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LLabel(HBasicBlock* block) 445864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : LGap(block), replacement_(NULL) { } 446864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 447864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 448864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false; 449864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 450864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Label, "label") 451864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 452864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 453864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 454864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int block_id() const { return block()->block_id(); } 455864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_loop_header() const { return block()->IsLoopHeader(); } 456864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_osr_entry() const { return block()->is_osr_entry(); } 457864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* label() { return &label_; } 458864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLabel* replacement() const { return replacement_; } 459864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void set_replacement(LLabel* label) { replacement_ = label; } 460864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool HasReplacement() const { return replacement_ != NULL; } 461864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 462864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 463864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label label_; 464864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLabel* replacement_; 465864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 466864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 467864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 468864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> { 469864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 470864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 471864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false; 472864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 473864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 474864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 475864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 476864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 477864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> { 478864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 479864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCallStub(LOperand* context) { 480864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 481864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 482864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 483864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 484864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 485864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 486864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallStub) 487864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 488864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 489864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 490864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> { 491864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 492864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 493864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false; 494864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 495864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 496864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 497864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 498864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 499864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgtemplate<int I, int T> 500864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LControlInstruction: public LTemplateInstruction<0, I, T> { 501864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 502864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 503864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 504864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool IsControl() const V8_FINAL V8_OVERRIDE { return true; } 505864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 506864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int SuccessorCount() { return hydrogen()->SuccessorCount(); } 507864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 508864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 509864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int TrueDestination(LChunk* chunk) { 510864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return chunk->LookupDestination(true_block_id()); 511864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 512864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int FalseDestination(LChunk* chunk) { 513864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return chunk->LookupDestination(false_block_id()); 514864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 515864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 516864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* TrueLabel(LChunk* chunk) { 517864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org if (true_label_ == NULL) { 518864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk)); 519864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 520864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return true_label_; 521864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 522864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* FalseLabel(LChunk* chunk) { 523864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org if (false_label_ == NULL) { 524864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk)); 525864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 526864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false_label_; 527864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 528864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 529864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org protected: 530864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int true_block_id() { return SuccessorAt(0)->block_id(); } 531864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int false_block_id() { return SuccessorAt(1)->block_id(); } 532864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 533864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 534864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HControlInstruction* hydrogen() { 535864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return HControlInstruction::cast(this->hydrogen_value()); 536864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 537864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 538864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* false_label_; 539864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* true_label_; 540864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 541864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 542864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 543864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LWrapReceiver V8_FINAL : public LTemplateInstruction<1, 2, 1> { 544864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 545864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LWrapReceiver(LOperand* receiver, 546864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function, 547864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp) { 548864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = receiver; 549864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = function; 550864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 551864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 552864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 553864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* receiver() { return inputs_[0]; } 554864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[1]; } 555864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 556864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 557864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 558864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 559864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 560864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 561864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 562864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LApplyArguments V8_FINAL : public LTemplateInstruction<1, 4, 0> { 563864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 564864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LApplyArguments(LOperand* function, 565864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* receiver, 566864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* length, 567864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* elements) { 568864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = function; 569864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = receiver; 570864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = length; 571864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[3] = elements; 572864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 573864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 574864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[0]; } 575864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* receiver() { return inputs_[1]; } 576864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* length() { return inputs_[2]; } 577864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* elements() { return inputs_[3]; } 578864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 579864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 580864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 581864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 582864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 583864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LAccessArgumentsAt V8_FINAL : public LTemplateInstruction<1, 3, 0> { 584864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 585864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 586864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = arguments; 587864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = length; 588864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = index; 589864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 590864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 591864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* arguments() { return inputs_[0]; } 592864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* length() { return inputs_[1]; } 593864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() { return inputs_[2]; } 594864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 595864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 596864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 597864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 598864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 599864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 600864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 601864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LArgumentsLength V8_FINAL : public LTemplateInstruction<1, 1, 0> { 602864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 603864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LArgumentsLength(LOperand* elements) { 604864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = elements; 605864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 606864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 607864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 608864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 609864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 610864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 611864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 612864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 613864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LArgumentsElements V8_FINAL : public LTemplateInstruction<1, 0, 0> { 614864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 615864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 616864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 617864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 618864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 619864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 620864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDebugBreak V8_FINAL : public LTemplateInstruction<0, 0, 0> { 621864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 622864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 623864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 624864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 625864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 626864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LModByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 627864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 628864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 629864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 630864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 631864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 632864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 633864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 634864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 635864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 636864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 637864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 638864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 639864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 640864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 641864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 642864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 643864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 644864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LModByConstI V8_FINAL : public LTemplateInstruction<1, 1, 2> { 645864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 646864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LModByConstI(LOperand* dividend, 647864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor, 648864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1, 649864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2) { 650864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 651864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 652864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp1; 653864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 654864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 655864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 656864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 657864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 658864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 659864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 660864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 661864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 662864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 663864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 664864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 665864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 666864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 667864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 668864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 669864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LModI V8_FINAL : public LTemplateInstruction<1, 2, 1> { 670864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 671864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LModI(LOperand* left, LOperand* right, LOperand* temp) { 672864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 673864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 674864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 675864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 676864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 677864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 678864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 679864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 680864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 681864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 682864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 683864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 684864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 685864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 686864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 687864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 688864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 689864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 690864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 691864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 692864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 693864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 694864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 695864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 696864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 697864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 698864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 699864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 700864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 701864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 702864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 703864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 704864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 2> { 705864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 706864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LDivByConstI(LOperand* dividend, 707864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor, 708864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1, 709864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2) { 710864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 711864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 712864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp1; 713864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 714864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 715864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 716864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 717864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 718864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 719864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 720864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 721864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 722864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 723864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 724864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 725864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 726864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 727864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 728864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 729864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> { 730864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 731864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 732864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 733864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = divisor; 734864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 735864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 736864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 737864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 738864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 739864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 740864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 741864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 742864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 743864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 744864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 745864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 746864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LFlooringDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 747864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 748864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 749864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 750864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 751864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 752864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 753864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 754864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 755864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 756864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 757864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "flooring-div-by-power-of-2-i") 758864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 759864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 760864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 761864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 762864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 763864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 764864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 765864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LFlooringDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 3> { 766864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 767864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LFlooringDivByConstI(LOperand* dividend, 768864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor, 769864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1, 770864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2, 771864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp3) { 772864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 773864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org divisor_ = divisor; 774864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp1; 775864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 776864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[2] = temp3; 777864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 778864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 779864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 780864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor() const { return divisor_; } 781864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 782864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 783864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp3() { return temps_[2]; } 784864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 785864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 786864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 787864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 788864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 789864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t divisor_; 790864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 791864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 792864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 793864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LFlooringDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> { 794864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 795864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LFlooringDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 796864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = dividend; 797864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = divisor; 798864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 799864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 800864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 801864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 802864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 803864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 804864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 805864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 806864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 807864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 808864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 809864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 810864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMulI V8_FINAL : public LTemplateInstruction<1, 2, 1> { 811864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 812864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LMulI(LOperand* left, LOperand* right, LOperand* temp) { 813864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 814864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 815864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 816864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 817864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 818864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 819864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 820864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 821864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 822864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 823864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mul) 824864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 825864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 826864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 827864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCompareNumericAndBranch V8_FINAL : public LControlInstruction<2, 0> { 828864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 829864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCompareNumericAndBranch(LOperand* left, LOperand* right) { 830864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 831864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 832864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 833864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 834864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 835864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 836864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 837864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 838864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "compare-numeric-and-branch") 839864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 840864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 841864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 842864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_double() const { 843864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->representation().IsDouble(); 844864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 845864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 846864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 847864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 848864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 849864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 850864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathFloor V8_FINAL : public LTemplateInstruction<1, 1, 0> { 851864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 852864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMathFloor(LOperand* value) { 853864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 854864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 855864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 856864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 857864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 858864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 859864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 860864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 861864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 862864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 863864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 0> { 864864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 865864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMathRound(LOperand* value) { 866864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 867864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 868864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 869864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 870864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 871864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 872864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 873864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 874864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 875864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 876864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> { 877864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 878864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LMathAbs(LOperand* context, LOperand* value) { 879864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = context; 880864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 881864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 882864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 883864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[1]; } 884864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 885864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 886864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 887864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 888864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 889864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 890864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 891864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> { 892864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 893864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMathLog(LOperand* value) { 894864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 895864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 896864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 897864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 898864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 899864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 900864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 901864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 902864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 903864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathClz32 V8_FINAL : public LTemplateInstruction<1, 1, 0> { 904864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 905864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMathClz32(LOperand* value) { 906864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 907864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 908864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 909864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 910864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 911864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 912864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 913864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 914864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 915864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathExp V8_FINAL : public LTemplateInstruction<1, 1, 2> { 916864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 917864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LMathExp(LOperand* value, 918864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1, 919864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2) { 920864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 921864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp1; 922864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 923864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ExternalReference::InitializeMathExpData(); 924864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 925864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 926864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 927864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 928864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 929864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 930864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 931864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 932864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 933864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 934864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathSqrt V8_FINAL : public LTemplateInstruction<1, 1, 0> { 935864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 936864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMathSqrt(LOperand* value) { 937864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 938864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 939864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 940864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 941864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 942864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 943864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 944864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 945864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 946864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 1, 1> { 947864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 948864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LMathPowHalf(LOperand* value, LOperand* temp) { 949864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 950864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 951864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 952864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 953864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 954864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 955864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 956864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 957864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 958864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 959864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 960864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCmpObjectEqAndBranch V8_FINAL : public LControlInstruction<2, 0> { 961864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 962864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 963864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 964864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 965864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 966864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 967864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 968864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 969864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 970864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 971864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 972864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 973864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 974864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCmpHoleAndBranch V8_FINAL : public LControlInstruction<1, 0> { 975864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 976864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCmpHoleAndBranch(LOperand* object) { 977864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = object; 978864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 979864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 980864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 981864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 982864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 983864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 984864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 985864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 986864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 987864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCompareMinusZeroAndBranch V8_FINAL : public LControlInstruction<1, 1> { 988864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 989864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) { 990864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 991864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 992864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 993864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 994864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 995864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 996864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 997864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch, 998864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "cmp-minus-zero-and-branch") 999864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch) 1000864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1001864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1002864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1003864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LIsObjectAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1004864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1005864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LIsObjectAndBranch(LOperand* value, LOperand* temp) { 1006864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1007864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1008864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1009864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1010864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1011864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1012864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1013864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 1014864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1015864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1016864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1017864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1018864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1019864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LIsStringAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1020864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1021864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LIsStringAndBranch(LOperand* value, LOperand* temp) { 1022864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1023864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1024864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1025864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1026864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1027864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1028864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1029864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 1030864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 1031864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1032864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1033864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1034864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1035864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1036864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LIsSmiAndBranch V8_FINAL : public LControlInstruction<1, 0> { 1037864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1038864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LIsSmiAndBranch(LOperand* value) { 1039864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1040864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1041864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1042864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1043864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1044864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 1045864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 1046864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1047864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1048864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1049864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1050864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1051864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LIsUndetectableAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1052864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1053864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 1054864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1055864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1056864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1057864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1058864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1059864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1060864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1061864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 1062864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "is-undetectable-and-branch") 1063864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 1064864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1065864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1066864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1067864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1068864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1069864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> { 1070864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1071864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) { 1072864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1073864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = left; 1074864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = right; 1075864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1076864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1077864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[1]; } 1078864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[1]; } 1079864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[2]; } 1080864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1081864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 1082864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "string-compare-and-branch") 1083864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 1084864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1085864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1086864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1087864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 1088864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1089864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1090864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1091864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LHasInstanceTypeAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1092864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1093864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { 1094864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1095864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1096864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1097864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1098864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1099864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1100864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1101864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 1102864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "has-instance-type-and-branch") 1103864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 1104864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1105864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1106864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1107864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1108864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1109864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LGetCachedArrayIndex V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1110864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1111864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LGetCachedArrayIndex(LOperand* value) { 1112864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1113864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1114864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1115864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1116864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1117864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 1118864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 1119864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1120864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1121864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1122864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LHasCachedArrayIndexAndBranch V8_FINAL 1123864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : public LControlInstruction<1, 0> { 1124864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1125864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 1126864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1127864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1128864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1129864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1130864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1131864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 1132864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "has-cached-array-index-and-branch") 1133864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1134864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1135864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1136864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1137864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1138864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LIsConstructCallAndBranch V8_FINAL : public LControlInstruction<0, 1> { 1139864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1140864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LIsConstructCallAndBranch(LOperand* temp) { 1141864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1142864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1143864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1144864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1145864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1146864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 1147864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "is-construct-call-and-branch") 1148864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1149864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1150864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1151864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LClassOfTestAndBranch V8_FINAL : public LControlInstruction<1, 2> { 1152864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1153864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { 1154864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1155864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1156864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 1157864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1158864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1159864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1160864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1161864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 1162864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1163864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1164864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "class-of-test-and-branch") 1165864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1166864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1167864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1168864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1169864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1170864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1171864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1172864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1173864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCmpT(LOperand* context, LOperand* left, LOperand* right) { 1174864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1175864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = left; 1176864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = right; 1177864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1178864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1179864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 1180864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1181864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1182864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1183864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return hydrogen()->token(); } 1184864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1185864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1186864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1187864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1188864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1189864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { 1190864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1191864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = left; 1192864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = right; 1193864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1194864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1195864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1196864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1197864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 1198864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1199864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1200864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1201864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> { 1202864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1203864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { 1204864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1205864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = value; 1206864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1207864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1208864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1209864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1210864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[1]; } 1211864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1212864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1213864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 1214864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "instance-of-known-global") 1215864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 1216864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1217864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<JSFunction> function() const { return hydrogen()->function(); } 1218864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { 1219864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return lazy_deopt_env_; 1220864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1221864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment( 1222864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LEnvironment* env) V8_OVERRIDE { 1223864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org lazy_deopt_env_ = env; 1224864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1225864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1226864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1227864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LEnvironment* lazy_deopt_env_; 1228864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1229864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1230864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1231864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LBoundsCheck V8_FINAL : public LTemplateInstruction<0, 2, 0> { 1232864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1233864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LBoundsCheck(LOperand* index, LOperand* length) { 1234864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = index; 1235864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = length; 1236864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1237864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1238864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() { return inputs_[0]; } 1239864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* length() { return inputs_[1]; } 1240864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1241864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1242864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 1243864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1244864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1245864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1246864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LBitI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1247864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1248864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LBitI(LOperand* left, LOperand* right) { 1249864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1250864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1251864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1252864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1253864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1254864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1255864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1256864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 1257864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Bitwise) 1258864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1259864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return hydrogen()->op(); } 1260864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1261864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1262864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1263864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LShiftI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1264864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1265864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 1266864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : op_(op), can_deopt_(can_deopt) { 1267864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1268864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1269864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1270864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1271864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1272864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1273864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1274864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 1275864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1276864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return op_; } 1277864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool can_deopt() const { return can_deopt_; } 1278864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1279864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1280864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op_; 1281864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool can_deopt_; 1282864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1283864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1284864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1285864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LSubI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1286864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1287864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LSubI(LOperand* left, LOperand* right) { 1288864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1289864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1290864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1291864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1292864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1293864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1294864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1295864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 1296864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Sub) 1297864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1298864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1299864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1300864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstantI V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1301864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1302864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 1303864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1304864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1305864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int32_t value() const { return hydrogen()->Integer32Value(); } 1306864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1307864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1308864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1309864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstantS V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1310864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1311864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 1312864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1313864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1314864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 1315864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1316864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1317864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1318864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstantD V8_FINAL : public LTemplateInstruction<1, 0, 1> { 1319864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1320864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LConstantD(LOperand* temp) { 1321864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1322864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1323864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1324864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1325864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1326864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 1327864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1328864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1329864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org double value() const { return hydrogen()->DoubleValue(); } 1330864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1331864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1332864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1333864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstantE V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1334864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1335864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 1336864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1337864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1338864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ExternalReference value() const { 1339864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->ExternalReferenceValue(); 1340864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1341864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1342864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1343864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1344864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1345864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1346864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1347864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1348864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1349864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Object> value(Isolate* isolate) const { 1350864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->handle(isolate); 1351864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1352864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1353864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1354864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1355864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LBranch V8_FINAL : public LControlInstruction<1, 1> { 1356864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1357864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LBranch(LOperand* value, LOperand* temp) { 1358864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1359864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1360864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1361864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1362864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1363864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1364864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1365864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 1366864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Branch) 1367864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1368864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1369864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1370864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1371864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1372864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCmpMapAndBranch V8_FINAL : public LControlInstruction<1, 0> { 1373864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1374864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCmpMapAndBranch(LOperand* value) { 1375864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1376864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1377864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1378864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1379864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1380864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 1381864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1382864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1383864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Map> map() const { return hydrogen()->map().handle(); } 1384864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1385864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1386864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1387864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMapEnumLength V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1388864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1389864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LMapEnumLength(LOperand* value) { 1390864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1391864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1392864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1393864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1394864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1395864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length") 1396864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1397864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1398864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1399864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDateField V8_FINAL : public LTemplateInstruction<1, 1, 1> { 1400864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1401864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LDateField(LOperand* date, LOperand* temp, Smi* index) 1402864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : index_(index) { 1403864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = date; 1404864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1405864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1406864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1407864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* date() { return inputs_[0]; } 1408864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1409864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1410864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field") 1411864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DateField) 1412864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1413864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Smi* index() const { return index_; } 1414864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1415864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1416864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Smi* index_; 1417864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1418864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1419864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1420864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LSeqStringGetChar V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1421864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1422864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LSeqStringGetChar(LOperand* string, LOperand* index) { 1423864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = string; 1424864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = index; 1425864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1426864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1427864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* string() const { return inputs_[0]; } 1428864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() const { return inputs_[1]; } 1429864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1430864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 1431864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 1432864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1433864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1434864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1435864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LSeqStringSetChar V8_FINAL : public LTemplateInstruction<1, 4, 0> { 1436864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1437864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LSeqStringSetChar(LOperand* context, 1438864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* string, 1439864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index, 1440864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value) { 1441864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1442864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = string; 1443864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = index; 1444864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[3] = value; 1445864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1446864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1447864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* string() { return inputs_[1]; } 1448864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() { return inputs_[2]; } 1449864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[3]; } 1450864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1451864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 1452864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 1453864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1454864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1455864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1456864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1457864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1458864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LAddI(LOperand* left, LOperand* right) { 1459864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1460864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1461864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1462864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1463864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1464864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1465864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1466864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org static bool UseLea(HAdd* add) { 1467864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return !add->CheckFlag(HValue::kCanOverflow) && 1468864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org add->BetterLeftOperand()->UseCount() > 1; 1469864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1470864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1471864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1472864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Add) 1473864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1474864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1475864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1476864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LMathMinMax V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1477864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1478864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LMathMinMax(LOperand* left, LOperand* right) { 1479864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1480864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1481864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1482864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1483864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1484864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1485864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1486864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 1487864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 1488864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1489864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1490864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1491864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LPower V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1492864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1493864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPower(LOperand* left, LOperand* right) { 1494864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1495864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1496864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1497864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1498864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1499864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1500864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1501864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1502864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Power) 1503864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1504864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1505864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1506864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LArithmeticD V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1507864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1508864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 1509864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : op_(op) { 1510864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = left; 1511864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = right; 1512864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1513864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1514864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[0]; } 1515864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[1]; } 1516864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1517864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return op_; } 1518864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1519864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual Opcode opcode() const V8_OVERRIDE { 1520864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return LInstruction::kArithmeticD; 1521864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1522864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1523864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual const char* Mnemonic() const V8_OVERRIDE; 1524864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1525864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1526864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op_; 1527864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1528864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1529864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1530864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1531864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1532864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LArithmeticT(Token::Value op, 1533864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context, 1534864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left, 1535864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right) 1536864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : op_(op) { 1537864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1538864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = left; 1539864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = right; 1540864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1541864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1542864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1543864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[1]; } 1544864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[2]; } 1545864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1546864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual Opcode opcode() const V8_OVERRIDE { 1547864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return LInstruction::kArithmeticT; 1548864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1549864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1550864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual const char* Mnemonic() const V8_OVERRIDE; 1551864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1552864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op() const { return op_; } 1553864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1554864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1555864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Token::Value op_; 1556864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1557864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1558864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1559864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> { 1560864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1561864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LReturn(LOperand* value, 1562864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context, 1563864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* parameter_count) { 1564864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1565864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = context; 1566864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = parameter_count; 1567864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1568864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1569864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool has_constant_parameter_count() { 1570864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return parameter_count()->IsConstantOperand(); 1571864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1572864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LConstantOperand* constant_parameter_count() { 1573864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ASSERT(has_constant_parameter_count()); 1574864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return LConstantOperand::cast(parameter_count()); 1575864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1576864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* parameter_count() { return inputs_[2]; } 1577864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1578864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1579864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Return) 1580864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1581864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1582864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1583864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1584864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1585864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LLoadNamedField(LOperand* object) { 1586864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = object; 1587864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1588864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1589864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 1590864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1591864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1592864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1593864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1594864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1595864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1596864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1597864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1598864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadNamedGeneric(LOperand* context, LOperand* object) { 1599864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1600864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = object; 1601864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1602864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1603864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1604864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[1]; } 1605864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1606864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1607864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1608864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1609864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1610864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1611864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1612864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1613864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 1> { 1614864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1615864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadFunctionPrototype(LOperand* function, LOperand* temp) { 1616864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = function; 1617864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1618864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1619864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1620864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[0]; } 1621864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1622864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1623864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1624864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1625864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1626864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1627864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1628864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadRoot V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1629864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1630864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 1631864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 1632864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1633864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Heap::RootListIndex index() const { return hydrogen()->index(); } 1634864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1635864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1636864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1637864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1638864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1639864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadKeyed(LOperand* elements, LOperand* key) { 1640864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = elements; 1641864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = key; 1642864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1643864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 1644864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* key() { return inputs_[1]; } 1645864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ElementsKind elements_kind() const { 1646864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->elements_kind(); 1647864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1648864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_external() const { 1649864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->is_external(); 1650864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1651864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_fixed_typed_array() const { 1652864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 1653864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1654864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_typed_elements() const { 1655864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return is_external() || is_fixed_typed_array(); 1656864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1657864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1658864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1659864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 1660864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1661864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1662864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 1663864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool key_is_smi() { 1664864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->key()->representation().IsTagged(); 1665864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1666864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1667864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1668864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1669864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orginline static bool ExternalArrayOpRequiresTemp( 1670864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Representation key_representation, 1671864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ElementsKind elements_kind) { 1672864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Operations that require the key to be divided by two to be converted into 1673864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // an index cannot fold the scale operation into a load and need an extra 1674864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // temp register to do the work. 1675864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return key_representation.IsSmi() && 1676864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org (elements_kind == EXTERNAL_INT8_ELEMENTS || 1677864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org elements_kind == EXTERNAL_UINT8_ELEMENTS || 1678864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS || 1679864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org elements_kind == UINT8_ELEMENTS || 1680864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org elements_kind == INT8_ELEMENTS || 1681864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org elements_kind == UINT8_CLAMPED_ELEMENTS); 1682864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org} 1683864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1684864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1685864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1686864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1687864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) { 1688864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1689864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = obj; 1690864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = key; 1691864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1692864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1693864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1694864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[1]; } 1695864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* key() { return inputs_[2]; } 1696864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1697864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1698864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1699864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1700864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1701864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1702864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1703864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 1704864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1705864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1706864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1707864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1708864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1709864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1710864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadGlobalGeneric(LOperand* context, LOperand* global_object) { 1711864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1712864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = global_object; 1713864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1714864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1715864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1716864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* global_object() { return inputs_[1]; } 1717864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1718864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 1719864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 1720864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1721864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1722864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool for_typeof() const { return hydrogen()->for_typeof(); } 1723864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1724864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1725864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1726864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1727864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1728864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LStoreGlobalCell(LOperand* value) { 1729864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1730864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1731864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1732864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1733864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1734864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 1735864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 1736864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1737864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1738864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1739864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1740864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1741864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LLoadContextSlot(LOperand* context) { 1742864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1743864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1744864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1745864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1746864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1747864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1748864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1749864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1750864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int slot_index() { return hydrogen()->slot_index(); } 1751864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1752864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1753864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1754864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1755864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1756864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreContextSlot V8_FINAL : public LTemplateInstruction<0, 2, 1> { 1757864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1758864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) { 1759864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1760864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = value; 1761864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 1762864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1763864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1764864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1765864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[1]; } 1766864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 1767864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1768864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 1769864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 1770864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1771864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int slot_index() { return hydrogen()->slot_index(); } 1772864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1773864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1774864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1775864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1776864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1777864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LPushArgument V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1778864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1779864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LPushArgument(LOperand* value) { 1780864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 1781864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1782864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1783864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 1784864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1785864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1786864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1787864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1788864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1789864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDrop V8_FINAL : public LTemplateInstruction<0, 0, 0> { 1790864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1791864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDrop(int count) : count_(count) { } 1792864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1793864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int count() const { return count_; } 1794864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1795864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 1796864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1797864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1798864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int count_; 1799864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1800864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1801864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 18023ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass LStoreCodeEntry V8_FINAL: public LTemplateInstruction<0, 2, 0> { 1803864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1804864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreCodeEntry(LOperand* function, LOperand* code_object) { 1805864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = function; 18063ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org inputs_[1] = code_object; 1807864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1808864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1809864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[0]; } 18103ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org LOperand* code_object() { return inputs_[1]; } 1811864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1812864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 1813864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1814864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 1815864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 1816864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1817864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1818864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1819864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInnerAllocatedObject V8_FINAL: public LTemplateInstruction<1, 2, 0> { 1820864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1821864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 1822864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = base_object; 1823864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = offset; 1824864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1825864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1826864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* base_object() const { return inputs_[0]; } 1827864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* offset() const { return inputs_[1]; } 1828864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1829864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream); 1830864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1831864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 1832864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1833864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1834864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1835864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LThisFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1836864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1837864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 1838864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 1839864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1840864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1841864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1842864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LContext V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1843864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1844864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Context, "context") 1845864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Context) 1846864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1847864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1848864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1849864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1850864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1851864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDeclareGlobals(LOperand* context) { 1852864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1853864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1854864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1855864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1856864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1857864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 1858864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 1859864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1860864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1861864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1862864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallJSFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1863864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1864864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCallJSFunction(LOperand* function) { 1865864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = function; 1866864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1867864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1868864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[0]; } 1869864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1870864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") 1871864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) 1872864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1873864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1874864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1875864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1876864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1877864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1878864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1879864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallWithDescriptor V8_FINAL : public LTemplateResultInstruction<1> { 1880864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1881864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCallWithDescriptor(const CallInterfaceDescriptor* descriptor, 1882196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org const ZoneList<LOperand*>& operands, 1883864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Zone* zone) 1884864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : inputs_(descriptor->environment_length() + 1, zone) { 1885864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ASSERT(descriptor->environment_length() + 1 == operands.length()); 1886864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_.AddAll(operands, zone); 1887864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1888864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1889864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* target() const { return inputs_[0]; } 1890864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1891864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 1892864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 1893864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 1894864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1895864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1896864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1897864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1898864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1899864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ZoneList<LOperand*> inputs_; 1900864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1901864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Iterator support. 1902864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int InputCount() V8_FINAL V8_OVERRIDE { return inputs_.length(); } 1903864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; } 1904864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1905864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual int TempCount() V8_FINAL V8_OVERRIDE { return 0; } 1906864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return NULL; } 1907864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1908864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1909864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1910864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1911864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1912864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInvokeFunction(LOperand* context, LOperand* function) { 1913864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1914864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = function; 1915864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1916864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1917864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1918864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[1]; } 1919864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1920864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 1921864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1922864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1923864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1924864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1925864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1926864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1927864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1928864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1929864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1930864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1931864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCallFunction(LOperand* context, LOperand* function) { 1932864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1933864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = function; 1934864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1935864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1936864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1937864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* function() { return inputs_[1]; } 1938864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1939864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1940864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1941864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1942864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1943864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1944864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1945864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1946864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1947864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1948864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCallNew(LOperand* context, LOperand* constructor) { 1949864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1950864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = constructor; 1951864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1952864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1953864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1954864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 1955864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1956864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1957864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNew) 1958864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1959864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1960864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1961864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1962864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1963864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1964864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1965864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1966864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1967864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCallNewArray(LOperand* context, LOperand* constructor) { 1968864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1969864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = constructor; 1970864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1971864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1972864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1973864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 1974864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1975864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 1976864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 1977864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1978864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1979864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1980864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1981864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 1982864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1983864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1984864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1985864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 1986864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCallRuntime(LOperand* context) { 1987864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 1988864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1989864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1990864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 1991864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1992864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1993864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1994864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1995864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const V8_OVERRIDE { 1996864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return true; 1997864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 1998864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 1999864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org const Runtime::Function* function() const { return hydrogen()->function(); } 2000864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int arity() const { return hydrogen()->argument_count(); } 2001864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2002864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2003864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2004864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2005864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2006864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LInteger32ToDouble(LOperand* value) { 2007864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2008864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2009864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2010864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2011864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2012864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 2013864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2014864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2015864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2016864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LUint32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2017864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2018864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LUint32ToDouble(LOperand* value) { 2019864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2020864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2021864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2022864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2023864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2024864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 2025864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2026864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2027864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2028864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LNumberTagI V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2029864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2030864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LNumberTagI(LOperand* value, LOperand* temp) { 2031864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2032864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2033864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2034864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2035864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2036864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2037864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2038864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 2039864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2040864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2041864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2042864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LNumberTagU V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2043864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2044864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LNumberTagU(LOperand* value, LOperand* temp) { 2045864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2046864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2047864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2048864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2049864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2050864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2051864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2052864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 2053864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2054864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2055864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2056864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LNumberTagD V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2057864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2058864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LNumberTagD(LOperand* value, LOperand* temp) { 2059864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2060864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2061864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2062864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2063864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2064864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2065864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2066864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 2067864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2068864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2069864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2070864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2071864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Sometimes truncating conversion from a tagged value to an int32. 2072864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDoubleToI V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2073864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2074864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDoubleToI(LOperand* value) { 2075864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2076864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2077864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2078864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2079864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2080864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 2081864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2082864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2083864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2084864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2085864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2086864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2087864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDoubleToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2088864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2089864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDoubleToSmi(LOperand* value) { 2090864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2091864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2092864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2093864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2094864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2095864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 2096864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2097864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2098864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2099864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2100864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Truncating conversion from a tagged value to an int32. 2101864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTaggedToI V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2102864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2103864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LTaggedToI(LOperand* value) { 2104864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2105864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2106864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2107864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2108864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2109864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 2110864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2111864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2112864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2113864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2114864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2115864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2116864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LSmiTag V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2117864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2118864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LSmiTag(LOperand* value) { 2119864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2120864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2121864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2122864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2123864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2124864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 2125864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2126864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2127864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2128864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2129864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LNumberUntagD V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2130864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2131864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LNumberUntagD(LOperand* value, LOperand* temp) { 2132864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2133864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2134864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2135864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2136864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2137864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2138864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2139864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 2140864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change); 2141864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2142864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2143864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2144864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LSmiUntag V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2145864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2146864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LSmiUntag(LOperand* value, bool needs_check) 2147864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : needs_check_(needs_check) { 2148864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2149864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2150864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2151864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2152864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2153864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 2154864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2155864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool needs_check() const { return needs_check_; } 2156864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2157864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 2158864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool needs_check_; 2159864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2160864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2161864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2162864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreNamedField V8_FINAL : public LTemplateInstruction<0, 2, 2> { 2163864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2164864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreNamedField(LOperand* obj, 2165864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* val, 2166864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp, 2167864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp_map) { 2168864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = obj; 2169864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = val; 2170864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2171864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp_map; 2172864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2173864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2174864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 2175864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[1]; } 2176864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2177864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp_map() { return temps_[1]; } 2178864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2179864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 2180864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 2181864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2182864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2183864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2184864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2185864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2186864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { 2187864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2188864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { 2189864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2190864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = object; 2191864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = value; 2192864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2193864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2194864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2195864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[1]; } 2196864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[2]; } 2197864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2198864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 2199864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 2200864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2201864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2202864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 2203864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2204864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2205864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2206864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2207864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreKeyed V8_FINAL : public LTemplateInstruction<0, 3, 0> { 2208864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2209864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreKeyed(LOperand* obj, LOperand* key, LOperand* val) { 2210864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = obj; 2211864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = key; 2212864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = val; 2213864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2214864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2215864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_external() const { return hydrogen()->is_external(); } 2216864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_fixed_typed_array() const { 2217864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 2218864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2219864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_typed_elements() const { 2220864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return is_external() || is_fixed_typed_array(); 2221864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2222864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* elements() { return inputs_[0]; } 2223864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* key() { return inputs_[1]; } 2224864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[2]; } 2225864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ElementsKind elements_kind() const { 2226864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->elements_kind(); 2227864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2228864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2229864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 2230864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 2231864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2232864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2233864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 2234864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 2235864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2236864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2237864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2238864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> { 2239864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2240864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStoreKeyedGeneric(LOperand* context, 2241864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object, 2242864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* key, 2243864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value) { 2244864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2245864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = object; 2246864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = key; 2247864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[3] = value; 2248864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2249864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2250864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2251864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[1]; } 2252864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* key() { return inputs_[2]; } 2253864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[3]; } 2254864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2255864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 2256864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 2257864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2258864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2259864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2260864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2261864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2262864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2263864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2264864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 2> { 2265864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2266864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LTransitionElementsKind(LOperand* object, 2267864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context, 2268864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* new_map_temp, 2269864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp) { 2270864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = object; 2271864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = context; 2272864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = new_map_temp; 2273864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp; 2274864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2275864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2276864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[1]; } 2277864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 2278864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* new_map_temp() { return temps_[0]; } 2279864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[1]; } 2280864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2281864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 2282864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "transition-elements-kind") 2283864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 2284864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2285864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2286864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2287864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2288864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<Map> transitioned_map() { 2289864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return hydrogen()->transitioned_map().handle(); 2290864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2291864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ElementsKind from_kind() { return hydrogen()->from_kind(); } 2292864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ElementsKind to_kind() { return hydrogen()->to_kind(); } 2293864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2294864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2295864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2296864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTrapAllocationMemento V8_FINAL : public LTemplateInstruction<0, 1, 1> { 2297864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2298864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LTrapAllocationMemento(LOperand* object, 2299864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp) { 2300864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = object; 2301864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2302864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2303864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2304864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 2305864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2306864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2307864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 2308864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "trap-allocation-memento") 2309864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2310864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2311864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2312864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> { 2313864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2314864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 2315864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2316864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = left; 2317864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = right; 2318864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2319864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2320864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2321864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* left() { return inputs_[1]; } 2322864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* right() { return inputs_[2]; } 2323864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2324864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 2325864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringAdd) 2326864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2327864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2328864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2329864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> { 2330864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2331864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 2332864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2333864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = string; 2334864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[2] = index; 2335864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2336864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2337864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2338864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* string() { return inputs_[1]; } 2339864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() { return inputs_[2]; } 2340864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2341864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 2342864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 2343864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2344864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2345864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2346864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2347864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2348864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LStringCharFromCode(LOperand* context, LOperand* char_code) { 2349864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2350864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = char_code; 2351864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2352864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2353864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2354864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* char_code() { return inputs_[1]; } 2355864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2356864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2357864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 2358864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2359864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2360864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2361864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2362864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2363864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCheckValue(LOperand* value) { 2364864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2365864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2366864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2367864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2368864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2369864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 2370864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckValue) 2371864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2372864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2373864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2374864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckInstanceType V8_FINAL : public LTemplateInstruction<0, 1, 1> { 2375864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2376864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCheckInstanceType(LOperand* value, LOperand* temp) { 2377864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2378864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2379864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2380864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2381864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2382864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2383864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2384864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 2385864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 2386864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2387864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2388864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2389864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckMaps V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2390864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2391864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCheckMaps(LOperand* value = NULL) { 2392864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2393864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2394864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2395864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2396864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2397864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 2398864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 2399864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2400864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2401864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2402864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2403864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2404864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCheckSmi(LOperand* value) { 2405864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2406864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2407864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2408864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2409864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2410864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 2411864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2412864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2413864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2414864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LClampDToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2415864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2416864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LClampDToUint8(LOperand* value) { 2417864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2418864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2419864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2420864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 2421864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2422864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 2423864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2424864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2425864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2426864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LClampIToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2427864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2428864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LClampIToUint8(LOperand* value) { 2429864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2430864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2431864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2432864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 2433864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2434864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 2435864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2436864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2437864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2438864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org// Truncating conversion from a tagged value to an int32. 2439864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LClampTToUint8NoSSE2 V8_FINAL : public LTemplateInstruction<1, 1, 3> { 2440864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2441864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LClampTToUint8NoSSE2(LOperand* unclamped, 2442864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp1, 2443864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp2, 2444864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp3) { 2445864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = unclamped; 2446864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp1; 2447864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[1] = temp2; 2448864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[2] = temp3; 2449864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2450864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2451864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* unclamped() { return inputs_[0]; } 2452864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* scratch() { return temps_[0]; } 2453864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* scratch2() { return temps_[1]; } 2454864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* scratch3() { return temps_[2]; } 2455864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2456864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8NoSSE2, 2457864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "clamp-t-to-uint8-nosse2") 2458864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2459864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2460864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2461864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2462864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckNonSmi V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2463864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2464864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LCheckNonSmi(LOperand* value) { 2465864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2466864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2467864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2468864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2469864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2470864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 2471864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 2472864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2473864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2474864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2475864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LDoubleBits V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2476864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2477864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LDoubleBits(LOperand* value) { 2478864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2479864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2480864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2481864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2482864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2483864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 2484864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 2485864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2486864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2487864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2488864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LConstructDouble V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2489864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2490864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LConstructDouble(LOperand* hi, LOperand* lo) { 2491864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = hi; 2492864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = lo; 2493864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2494864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2495864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* hi() { return inputs_[0]; } 2496864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* lo() { return inputs_[1]; } 2497864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2498864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double") 2499864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2500864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2501864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2502864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 1> { 2503864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2504864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LAllocate(LOperand* context, LOperand* size, LOperand* temp) { 2505864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2506864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = size; 2507864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org temps_[0] = temp; 2508864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2509864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2510864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2511864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* size() { return inputs_[1]; } 2512864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* temp() { return temps_[0]; } 2513864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2514864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 2515864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Allocate) 2516864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2517864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2518864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2519864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2520864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2521864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LRegExpLiteral(LOperand* context) { 2522864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2523864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2524864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2525864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2526864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2527864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 2528864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 2529864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2530864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2531864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2532864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2533864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2534864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LFunctionLiteral(LOperand* context) { 2535864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2536864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2537864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2538864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2539864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2540864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 2541864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 2542864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2543864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2544864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2545864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2546864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2547864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LToFastProperties(LOperand* value) { 2548864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2549864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2550864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2551864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2552864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2553864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 2554864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 2555864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2556864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2557864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2558864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2559864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2560864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LTypeof(LOperand* context, LOperand* value) { 2561864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2562864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = value; 2563864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2564864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2565864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2566864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[1]; } 2567864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2568864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2569864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2570864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2571864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2572864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> { 2573864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2574864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LTypeofIsAndBranch(LOperand* value) { 2575864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2576864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2577864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2578864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2579864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2580864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 2581864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 2582864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2583864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Handle<String> type_literal() { return hydrogen()->type_literal(); } 2584864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2585864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2586864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2587864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2588864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2589864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LOsrEntry V8_FINAL : public LTemplateInstruction<0, 0, 0> { 2590864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2591864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 2592864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return false; 2593864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2594864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2595864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2596864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2597864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2598864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2599864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2600864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LStackCheck(LOperand* context) { 2601864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2602864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2603864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2604864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2605864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2606864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 2607864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(StackCheck) 2608864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2609864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label* done_label() { return &done_label_; } 2610864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2611864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 2612864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Label done_label_; 2613864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2614864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2615864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2616864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2617864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2618864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LForInPrepareMap(LOperand* context, LOperand* object) { 2619864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = context; 2620864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = object; 2621864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2622864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2623864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2624864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[1]; } 2625864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2626864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 2627864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2628864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2629864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2630864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2631864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2632864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org explicit LForInCacheArray(LOperand* map) { 2633864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = map; 2634864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2635864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2636864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* map() { return inputs_[0]; } 2637864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2638864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 2639864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2640864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int idx() { 2641864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org return HForInCacheArray::cast(this->hydrogen_value())->idx(); 2642864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2643864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2644864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2645864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2646864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LCheckMapValue V8_FINAL : public LTemplateInstruction<0, 2, 0> { 2647864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2648864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LCheckMapValue(LOperand* value, LOperand* map) { 2649864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = value; 2650864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = map; 2651864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2652864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2653864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2654864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* map() { return inputs_[1]; } 2655864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2656864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 2657864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2658864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2659864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2660864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LLoadFieldByIndex V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2661864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2662864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LLoadFieldByIndex(LOperand* object, LOperand* index) { 2663864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[0] = object; 2664864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org inputs_[1] = index; 2665864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org } 2666864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2667864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* object() { return inputs_[0]; } 2668864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* index() { return inputs_[1]; } 2669864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2670864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 2671864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2672864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2673864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2674e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.orgclass LStoreFrameContext: public LTemplateInstruction<0, 1, 0> { 2675e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org public: 2676e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org explicit LStoreFrameContext(LOperand* context) { 2677e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org inputs_[0] = context; 2678e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org } 2679e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2680e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2681e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2682e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext, "store-frame-context") 2683e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org}; 2684e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2685e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2686e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.orgclass LAllocateBlockContext: public LTemplateInstruction<1, 2, 0> { 2687e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org public: 2688e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LAllocateBlockContext(LOperand* context, LOperand* function) { 2689e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org inputs_[0] = context; 2690e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org inputs_[1] = function; 2691e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org } 2692e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2693e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LOperand* context() { return inputs_[0]; } 2694e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LOperand* function() { return inputs_[1]; } 2695e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2696e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); } 2697e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2698e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context") 2699e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext) 2700e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org}; 2701e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2702e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org 2703864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LChunkBuilder; 2704864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LPlatformChunk V8_FINAL : public LChunk { 2705864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2706864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPlatformChunk(CompilationInfo* info, HGraph* graph) 2707864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : LChunk(info, graph), 2708864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org num_double_slots_(0) { } 2709864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2710864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int GetNextSpillIndex(RegisterKind kind); 2711864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* GetNextSpillSlot(RegisterKind kind); 2712864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2713864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int num_double_slots() const { return num_double_slots_; } 2714864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2715864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 2716864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int num_double_slots_; 2717864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2718864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2719864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2720864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgclass LChunkBuilder V8_FINAL : public LChunkBuilderBase { 2721864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org public: 2722864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2723864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org : LChunkBuilderBase(graph->zone()), 2724864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org chunk_(NULL), 2725864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org info_(info), 2726864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org graph_(graph), 2727864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org status_(UNUSED), 2728864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org current_instruction_(NULL), 2729864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org current_block_(NULL), 2730864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org next_block_(NULL), 2731864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org allocator_(allocator) { } 2732864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2733864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Isolate* isolate() const { return graph_->isolate(); } 2734864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2735864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Build the sequence for the graph. 2736864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPlatformChunk* Build(); 2737864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2738864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Declare methods that deal with the individual node types. 2739864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 2740864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 2741864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#undef DECLARE_DO 2742864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2743864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathFloor(HUnaryMathOperation* instr); 2744864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathRound(HUnaryMathOperation* instr); 2745864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathAbs(HUnaryMathOperation* instr); 2746864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathLog(HUnaryMathOperation* instr); 2747864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathExp(HUnaryMathOperation* instr); 2748864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathSqrt(HUnaryMathOperation* instr); 2749864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathPowHalf(HUnaryMathOperation* instr); 2750864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoMathClz32(HUnaryMathOperation* instr); 2751864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoDivByPowerOf2I(HDiv* instr); 2752864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoDivByConstI(HDiv* instr); 2753864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoDivI(HDiv* instr); 2754864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoModByPowerOf2I(HMod* instr); 2755864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoModByConstI(HMod* instr); 2756864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoModI(HMod* instr); 2757864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 2758864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 2759864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 2760864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2761864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org private: 2762864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org enum Status { 2763864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org UNUSED, 2764864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org BUILDING, 2765864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DONE, 2766864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org ABORTED 2767864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org }; 2768864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2769864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPlatformChunk* chunk() const { return chunk_; } 2770864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org CompilationInfo* info() const { return info_; } 2771864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HGraph* graph() const { return graph_; } 2772864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2773864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_unused() const { return status_ == UNUSED; } 2774864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_building() const { return status_ == BUILDING; } 2775864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_done() const { return status_ == DONE; } 2776864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org bool is_aborted() const { return status_ == ABORTED; } 2777864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2778864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void Abort(BailoutReason reason); 2779864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2780864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Methods for getting operands for Use / Define / Temp. 2781864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LUnallocated* ToUnallocated(Register reg); 2782864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LUnallocated* ToUnallocated(X87Register reg); 2783864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2784864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Methods for setting up define-use relationships. 2785864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 2786864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 2787864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2788864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // A value that is guaranteed to be allocated to a register. 2789864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Operand created by UseRegister is guaranteed to be live until the end of 2790864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // instruction. This means that register allocator will not reuse it's 2791864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // register for any other operand inside instruction. 2792864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Operand created by UseRegisterAtStart is guaranteed to be live only at 2793864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // instruction start. Register allocator is free to assign the same register 2794864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // to some other operand used inside instruction (i.e. temporary or 2795864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // output). 2796864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegister(HValue* value); 2797864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 2798864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2799864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a register that may be trashed. 2800864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 2801864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2802864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a register or stack slot. 2803864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value); 2804864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 2805864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2806864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a register, stack slot or a constant operand. 2807864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 2808864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 2809864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2810864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a fixed register or a constant operand. 2811864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseFixedOrConstant(HValue* value, 2812864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Register fixed_register); 2813864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2814864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a register or a constant operand. 2815864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 2816864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 2817864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2818864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in a constant operand. 2819864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* UseConstant(HValue* value); 2820864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2821864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // An input operand in register, stack slot or a constant operand. 2822864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Will not be moved to a register even if one is freely available. 2823864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) V8_OVERRIDE; 2824864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2825864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Temporary operand that must be in a register. 2826864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LUnallocated* TempRegister(); 2827864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org MUST_USE_RESULT LOperand* FixedTemp(Register reg); 2828864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2829864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Methods for setting up define-use relationships. 2830864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Return the same instruction that they are passed. 2831864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* Define(LTemplateResultInstruction<1>* instr, 2832864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LUnallocated* result); 2833864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); 2834864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, 2835864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org int index); 2836864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr); 2837864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr, 2838864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Register reg); 2839864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DefineX87TOS(LTemplateResultInstruction<1>* instr); 2840864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Assigns an environment to an instruction. An instruction which can 2841864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // deoptimize must have an environment. 2842864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* AssignEnvironment(LInstruction* instr); 2843864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Assigns a pointer map to an instruction. An instruction which can 2844864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // trigger a GC or a lazy deoptimization must have a pointer map. 2845864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* AssignPointerMap(LInstruction* instr); 2846864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2847864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 2848864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2849864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* GetSeqStringSetCharOperand(HSeqStringSetChar* instr); 2850864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2851864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // Marks a call for the register allocator. Assigns a pointer map to 2852864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // support GC and lazy deoptimization. Assigns an environment to support 2853864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org // eager deoptimization if CAN_DEOPTIMIZE_EAGERLY. 2854864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* MarkAsCall( 2855864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* instr, 2856864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HInstruction* hinstr, 2857864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 2858864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2859864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void VisitInstruction(HInstruction* current); 2860864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void AddInstruction(LInstruction* instr, HInstruction* current); 2861864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2862864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 2863864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 2864864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoArithmeticD(Token::Value op, 2865864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HArithmeticBinaryOperation* instr); 2866864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LInstruction* DoArithmeticT(Token::Value op, 2867864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBinaryOperation* instr); 2868864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2869864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LOperand* GetStoreKeyedValueOperand(HStoreKeyed* instr); 2870864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2871864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LPlatformChunk* chunk_; 2872864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org CompilationInfo* info_; 2873864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HGraph* const graph_; 2874864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org Status status_; 2875864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HInstruction* current_instruction_; 2876864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* current_block_; 2877864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org HBasicBlock* next_block_; 2878864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org LAllocator* allocator_; 2879864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2880864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2881864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org}; 2882864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2883864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#undef DECLARE_HYDROGEN_ACCESSOR 2884864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#undef DECLARE_CONCRETE_INSTRUCTION 2885864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2886864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org} } // namespace v8::internal 2887864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org 2888864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org#endif // V8_X87_LITHIUM_X87_H_ 2889