1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 47516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 57516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#ifndef V8_MIPS_LITHIUM_MIPS_H_ 67516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#define V8_MIPS_LITHIUM_MIPS_H_ 77516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/hydrogen.h" 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium.h" 104b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/lithium-allocator.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/safepoint-table.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/utils.h" 137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgnamespace v8 { 157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgnamespace internal { 167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 17c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Forward declarations. 18c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgclass LCodeGen; 19c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 20dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ 21dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AccessArgumentsAt) \ 22dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AddI) \ 23dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Allocate) \ 24dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(AllocateBlockContext) \ 25dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ApplyArguments) \ 26dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArgumentsElements) \ 27dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArgumentsLength) \ 28dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArithmeticD) \ 29dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ArithmeticT) \ 30dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(BitI) \ 31dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(BoundsCheck) \ 32dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Branch) \ 33dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallJSFunction) \ 34dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallWithDescriptor) \ 35dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallFunction) \ 36dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallNew) \ 37dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallNewArray) \ 38dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallRuntime) \ 39dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CallStub) \ 40dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckInstanceType) \ 41dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckMaps) \ 42dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckMapValue) \ 43dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckNonSmi) \ 44dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckSmi) \ 45dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CheckValue) \ 46dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampDToUint8) \ 47dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampIToUint8) \ 48dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClampTToUint8) \ 49dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ClassOfTestAndBranch) \ 50dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CompareMinusZeroAndBranch) \ 51dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CompareNumericAndBranch) \ 52dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpObjectEqAndBranch) \ 53dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpHoleAndBranch) \ 54dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpMapAndBranch) \ 55dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(CmpT) \ 56dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantD) \ 57dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantE) \ 58dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantI) \ 59dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantS) \ 60dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstantT) \ 61dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ConstructDouble) \ 62dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Context) \ 63dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DateField) \ 64dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DebugBreak) \ 65dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DeclareGlobals) \ 66dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Deoptimize) \ 67dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivByConstI) \ 68dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivByPowerOf2I) \ 69dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DivI) \ 70dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToI) \ 71dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleBits) \ 72dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToSmi) \ 73dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Drop) \ 74dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Dummy) \ 75dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DummyUse) \ 76dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivByConstI) \ 77dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivByPowerOf2I) \ 78dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FlooringDivI) \ 79dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ForInCacheArray) \ 80dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ForInPrepareMap) \ 81dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(FunctionLiteral) \ 82dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(GetCachedArrayIndex) \ 83dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Goto) \ 84dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(HasCachedArrayIndexAndBranch) \ 85dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(HasInstanceTypeAndBranch) \ 86dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InnerAllocatedObject) \ 87dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstanceOf) \ 88dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstanceOfKnownGlobal) \ 89dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InstructionGap) \ 90dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Integer32ToDouble) \ 91dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(InvokeFunction) \ 92dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsConstructCallAndBranch) \ 93dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsObjectAndBranch) \ 94dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsStringAndBranch) \ 95dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsSmiAndBranch) \ 96dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(IsUndetectableAndBranch) \ 97dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Label) \ 98dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LazyBailout) \ 99dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadContextSlot) \ 100dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadRoot) \ 101dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadFieldByIndex) \ 102dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadFunctionPrototype) \ 103dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadGlobalCell) \ 104dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadGlobalGeneric) \ 105dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadKeyed) \ 106dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadKeyedGeneric) \ 107dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadNamedField) \ 108dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(LoadNamedGeneric) \ 109dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MapEnumLength) \ 110dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathAbs) \ 111dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathExp) \ 112dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathClz32) \ 113dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathFloor) \ 114dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathFround) \ 115dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathLog) \ 116dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathMinMax) \ 117dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathPowHalf) \ 118dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathRound) \ 119dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathSqrt) \ 120dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModByConstI) \ 121dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModByPowerOf2I) \ 122dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ModI) \ 123dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MulI) \ 124dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MultiplyAddD) \ 125dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagD) \ 126dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagI) \ 127dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagU) \ 128dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberUntagD) \ 129dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(OsrEntry) \ 130dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Parameter) \ 131dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Power) \ 132dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(PushArgument) \ 133dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(RegExpLiteral) \ 134dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Return) \ 135dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringGetChar) \ 136dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringSetChar) \ 137dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ShiftI) \ 138dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiTag) \ 139dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiUntag) \ 140dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StackCheck) \ 141dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreCodeEntry) \ 142dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreContextSlot) \ 143dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreFrameContext) \ 144dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreGlobalCell) \ 145dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyed) \ 146dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyedGeneric) \ 147dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedField) \ 148dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedGeneric) \ 149dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringAdd) \ 150dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharCodeAt) \ 151dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharFromCode) \ 152dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCompareAndBranch) \ 153dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SubI) \ 154dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TaggedToI) \ 155e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org V(TailCallThroughMegamorphicCache) \ 156dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ThisFunction) \ 157dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ToFastProperties) \ 158dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TransitionElementsKind) \ 159dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TrapAllocationMemento) \ 160dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Typeof) \ 161dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TypeofIsAndBranch) \ 162dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Uint32ToDouble) \ 163dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(UnknownOSRValue) \ 164c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org V(WrapReceiver) 165c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 16632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 167ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const FINAL OVERRIDE { \ 16832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return LInstruction::k##type; \ 16932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } \ 170ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) FINAL OVERRIDE; \ 171ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const FINAL OVERRIDE { \ 17232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return mnemonic; \ 17332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } \ 17432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org static L##type* cast(LInstruction* instr) { \ 175e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr->Is##type()); \ 17632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return reinterpret_cast<L##type*>(instr); \ 177c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 178c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 179c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 180c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_HYDROGEN_ACCESSOR(type) \ 181c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org H##type* hydrogen() const { \ 182c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return H##type::cast(hydrogen_value()); \ 183c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 184c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 185c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 18632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LInstruction : public ZoneObject { 187c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 188c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction() 189594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org : environment_(NULL), 190594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org hydrogen_value_(NULL), 191594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bit_field_(IsCallBits::encode(false)) { 192594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org } 193594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 19432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org virtual ~LInstruction() {} 195c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 196c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual void CompileToNative(LCodeGen* generator) = 0; 197c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual const char* Mnemonic() const = 0; 198c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual void PrintTo(StringStream* stream); 19988d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org virtual void PrintDataTo(StringStream* stream); 20088d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org virtual void PrintOutputOperandTo(StringStream* stream); 201c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 202c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org enum Opcode { 203c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Declare a unique enum value for each instruction. 204c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_OPCODE(type) k##type, 205c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 206c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org kNumberOfInstructions 207c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_OPCODE 208c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org }; 209c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 210c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual Opcode opcode() const = 0; 211c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 212c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Declare non-virtual type testers for all leaf IR classes. 213c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_PREDICATE(type) \ 214c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool Is##type() const { return opcode() == k##type; } 215c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 216c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_PREDICATE 217c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 218c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Declare virtual predicates for instructions that don't have 219c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // an opcode. 220c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual bool IsGap() const { return false; } 221c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 222c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual bool IsControl() const { return false; } 223c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Try deleting this instruction if possible. 2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual bool TryDelete() { return false; } 2267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 227c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_environment(LEnvironment* env) { environment_ = env; } 228c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LEnvironment* environment() const { return environment_; } 229c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool HasEnvironment() const { return environment_ != NULL; } 230c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 231c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 232c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LPointerMap* pointer_map() const { return pointer_map_.get(); } 233c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool HasPointerMap() const { return pointer_map_.is_set(); } 234c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 235c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 236c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HValue* hydrogen_value() const { return hydrogen_value_; } 237c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2381044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) { } 239c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 240594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); } 241594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool IsCall() const { return IsCallBits::decode(bit_field_); } 242c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 243c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Interface to the register allocator and iterators. 244594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool ClobbersTemps() const { return IsCall(); } 245594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool ClobbersRegisters() const { return IsCall(); } 246a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const { 247a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org return IsCall(); 248a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org } 24959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 25059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org // Interface to the register allocator and iterators. 251594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool IsMarkedAsCall() const { return IsCall(); } 252c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 253c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual bool HasResult() const = 0; 254d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org virtual LOperand* result() const = 0; 255c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 256c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* FirstInput() { return InputAt(0); } 257c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* Output() { return HasResult() ? result() : NULL; } 258c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 25932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } 26032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 261c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#ifdef DEBUG 262c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void VerifyCall(); 263c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#endif 264c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual int InputCount() = 0; 2667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual LOperand* InputAt(int i) = 0; 2677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 268c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 26946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Iterator interface. 27046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org friend class InputIterator; 27146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 272c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org friend class TempIterator; 273c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org virtual int TempCount() = 0; 274c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org virtual LOperand* TempAt(int i) = 0; 275c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 276594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class IsCallBits: public BitField<bool, 0, 1> {}; 277594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 278c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LEnvironment* environment_; 279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org SetOncePointer<LPointerMap> pointer_map_; 280c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HValue* hydrogen_value_; 281594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org int bit_field_; 282c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 283c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 284c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 285c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// R = number of result operands (0 or 1). 28626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R> 28726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateResultInstruction : public LInstruction { 288c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 289c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Allow 0 or 1 output operands. 290c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org STATIC_ASSERT(R == 0 || R == 1); 291ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasResult() const FINAL OVERRIDE { 29232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return R != 0 && result() != NULL; 29332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 294c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_result(LOperand* operand) { results_[0] = operand; } 295d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org LOperand* result() const { return results_[0]; } 296c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 297c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org protected: 298c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org EmbeddedContainer<LOperand*, R> results_; 29926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org}; 30026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 30126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 30226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// R = number of result operands (0 or 1). 30326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// I = number of input operands. 30426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// T = number of temporary operands. 30526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R, int I, int T> 30626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateInstruction : public LTemplateResultInstruction<R> { 30726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org protected: 308c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org EmbeddedContainer<LOperand*, I> inputs_; 309c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org EmbeddedContainer<LOperand*, T> temps_; 31046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 31146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org private: 31226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Iterator support. 313ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return I; } 314ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 315c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 316ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return T; } 317ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return temps_[i]; } 318c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 319c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 320c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 32132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LGap : public LTemplateInstruction<0, 0, 0> { 322c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 323c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LGap(HBasicBlock* block) 324c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : block_(block) { 325c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org parallel_moves_[BEFORE] = NULL; 326c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org parallel_moves_[START] = NULL; 327c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org parallel_moves_[END] = NULL; 328c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org parallel_moves_[AFTER] = NULL; 329c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 330c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 331c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Can't use the DECLARE-macro here because of sub-classes. 332ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsGap() const FINAL OVERRIDE { return true; } 333ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 334c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org static LGap* cast(LInstruction* instr) { 335e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr->IsGap()); 336c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return reinterpret_cast<LGap*>(instr); 337c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 338c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 339c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool IsRedundant() const; 340c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 341c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HBasicBlock* block() const { return block_; } 342c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 343c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org enum InnerPosition { 344c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org BEFORE, 345c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org START, 346c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org END, 347c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org AFTER, 348c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org FIRST_INNER_POSITION = BEFORE, 349c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LAST_INNER_POSITION = AFTER 350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org }; 351c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 3527028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) { 3537028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org if (parallel_moves_[pos] == NULL) { 3547028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org parallel_moves_[pos] = new(zone) LParallelMove(zone); 3557028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org } 356c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return parallel_moves_[pos]; 357c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 358c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 359c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LParallelMove* GetParallelMove(InnerPosition pos) { 360c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return parallel_moves_[pos]; 361c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 362c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 363c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 364c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 365c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HBasicBlock* block_; 366c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 367c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 368c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 369ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstructionGap FINAL : public LGap { 370c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 371c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 372c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 373ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 37432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return !IsRedundant(); 37532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org } 37632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 377c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 378c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 379c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 380c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 381ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGoto FINAL : public LTemplateInstruction<0, 0, 0> { 382c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 383d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org explicit LGoto(HBasicBlock* block) : block_(block) { } 384c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 385ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE; 386c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 387ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 388ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 389c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 390d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org int block_id() const { return block_->block_id(); } 391c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 392c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 393d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org HBasicBlock* block_; 394c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 395c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 396c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 397ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> { 398c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 399c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LLazyBailout() : gap_instructions_size_(0) { } 400c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 401c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 402c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 403c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_gap_instructions_size(int gap_instructions_size) { 404c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org gap_instructions_size_ = gap_instructions_size; 405c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 406c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int gap_instructions_size() { return gap_instructions_size_; } 407c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 408c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 409c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int gap_instructions_size_; 410c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 411c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 412c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 413ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummy FINAL : public LTemplateInstruction<1, 0, 0> { 414935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org public: 4155e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org LDummy() {} 416935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 417935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org}; 418935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 419935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 420ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummyUse FINAL : public LTemplateInstruction<1, 1, 0> { 42146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org public: 42246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org explicit LDummyUse(LOperand* value) { 42346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org inputs_[0] = value; 42446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 42546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 42646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org}; 42746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 42846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 429ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> { 430c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 431ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 432c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 433c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 434c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 435c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 436c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 437ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLabel FINAL : public LGap { 438c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 439c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LLabel(HBasicBlock* block) 440c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : LGap(block), replacement_(NULL) { } 441c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 442ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 44332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 44432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 445c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Label, "label") 446c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 447ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 448c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 449c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int block_id() const { return block()->block_id(); } 450c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool is_loop_header() const { return block()->IsLoopHeader(); } 45132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool is_osr_entry() const { return block()->is_osr_entry(); } 452c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Label* label() { return &label_; } 453c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LLabel* replacement() const { return replacement_; } 454c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void set_replacement(LLabel* label) { replacement_ = label; } 455c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool HasReplacement() const { return replacement_ != NULL; } 456c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 457c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 458c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Label label_; 459c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LLabel* replacement_; 460c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 461c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 463ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LParameter FINAL : public LTemplateInstruction<1, 0, 0> { 464c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 465ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 46632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 46732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 468c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 469c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 470c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 471c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 472ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallStub FINAL : public LTemplateInstruction<1, 1, 0> { 473c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 474fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LCallStub(LOperand* context) { 475fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 476fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 477fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 478fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 479fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 480c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 481c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallStub) 482c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 483c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 484c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 485e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.orgclass LTailCallThroughMegamorphicCache FINAL 486e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org : public LTemplateInstruction<0, 3, 0> { 487e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org public: 488e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org explicit LTailCallThroughMegamorphicCache(LOperand* context, 489e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver, 490e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name) { 491e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[0] = context; 492e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[1] = receiver; 493e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[2] = name; 494e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org } 495e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 496e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* context() { return inputs_[0]; } 497e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver() { return inputs_[1]; } 498e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name() { return inputs_[2]; } 499e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 500e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache, 501e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org "tail-call-through-megamorphic-cache") 502e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TailCallThroughMegamorphicCache) 503e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org}; 504e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 505e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 506ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> { 507c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 508ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 50932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 51032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 511c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 512c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 513c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 514c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 515c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgtemplate<int I, int T> 51632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LControlInstruction : public LTemplateInstruction<0, I, T> { 517c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 5181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 5191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 520ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const FINAL OVERRIDE { return true; } 521c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 522c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int SuccessorCount() { return hydrogen()->SuccessorCount(); } 523c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 5241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int TrueDestination(LChunk* chunk) { 5261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return chunk->LookupDestination(true_block_id()); 5271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int FalseDestination(LChunk* chunk) { 5291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return chunk->LookupDestination(false_block_id()); 5301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* TrueLabel(LChunk* chunk) { 5331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (true_label_ == NULL) { 5341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk)); 5351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return true_label_; 5371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* FalseLabel(LChunk* chunk) { 5391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (false_label_ == NULL) { 5401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk)); 5411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return false_label_; 5431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org protected: 5461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int true_block_id() { return SuccessorAt(0)->block_id(); } 5471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int false_block_id() { return SuccessorAt(1)->block_id(); } 548c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 549c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 550c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HControlInstruction* hydrogen() { 551c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return HControlInstruction::cast(this->hydrogen_value()); 552c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 5531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* false_label_; 5551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* true_label_; 556c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 557c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 558c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 559ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LWrapReceiver FINAL : public LTemplateInstruction<1, 2, 0> { 5602c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org public: 5612c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org LWrapReceiver(LOperand* receiver, LOperand* function) { 5622c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org inputs_[0] = receiver; 5632c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org inputs_[1] = function; 5642c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org } 5652c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 5662c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 56757a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 5682c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 5692c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org LOperand* receiver() { return inputs_[0]; } 5702c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org LOperand* function() { return inputs_[1]; } 5712c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org}; 5722c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 5732c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 574ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LApplyArguments FINAL : public LTemplateInstruction<1, 4, 0> { 575c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 576c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LApplyArguments(LOperand* function, 577c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* receiver, 578c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* length, 579c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* elements) { 580c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = function; 581c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = receiver; 582c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[2] = length; 583c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[3] = elements; 584c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 585c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 586c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 587c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 588c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* function() { return inputs_[0]; } 589c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* receiver() { return inputs_[1]; } 590c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* length() { return inputs_[2]; } 591c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* elements() { return inputs_[3]; } 592c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 593c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 594c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 595ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAccessArgumentsAt FINAL : public LTemplateInstruction<1, 3, 0> { 596c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 597c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 598c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = arguments; 599c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = length; 600c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[2] = index; 601c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 602c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 603c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 604c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 605c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* arguments() { return inputs_[0]; } 606c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* length() { return inputs_[1]; } 607c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* index() { return inputs_[2]; } 608c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 609ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 610c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 611c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 612c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 613ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> { 614c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 615c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LArgumentsLength(LOperand* elements) { 616c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = elements; 617c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 618c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 619c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* elements() { return inputs_[0]; } 620c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 621c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 622c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 623c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 624c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 625ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsElements FINAL : public LTemplateInstruction<1, 0, 0> { 626c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 627c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 62828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 629c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 630c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 631c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 632ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 633c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 634ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 635ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 636ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org divisor_ = divisor; 637c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 638c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 639ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 640ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor() const { return divisor_; } 641ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 642ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 643ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 644ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 645ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private: 646ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor_; 647ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 648ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 649ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 650ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByConstI FINAL : public LTemplateInstruction<1, 1, 0> { 65100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public: 65200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LModByConstI(LOperand* dividend, int32_t divisor) { 65300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org inputs_[0] = dividend; 65400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org divisor_ = divisor; 65500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org } 65600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 65700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 65800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor() const { return divisor_; } 65900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 66000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 66100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 66200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 66300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private: 66400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor_; 66500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org}; 66600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 66700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 668ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModI FINAL : public LTemplateInstruction<1, 2, 3> { 669ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 670c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LModI(LOperand* left, 671ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* right) { 672c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 673c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 674c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 675c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 676c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 677c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 678c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 679c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 680c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 681c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 682c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 683c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 684ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 68500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public: 68600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 68700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org inputs_[0] = dividend; 68800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org divisor_ = divisor; 68900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org } 69000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 69100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 69200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor() const { return divisor_; } 69300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 69400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 69500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 69600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 69700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private: 69800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor_; 69900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org}; 70000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 70100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 702ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByConstI FINAL : public LTemplateInstruction<1, 1, 0> { 70300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public: 70400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LDivByConstI(LOperand* dividend, int32_t divisor) { 70500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org inputs_[0] = dividend; 70600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org divisor_ = divisor; 70700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org } 70800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 70900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 71000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor() const { return divisor_; } 71100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 71200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 71300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 71400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 71500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private: 71600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org int32_t divisor_; 71700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org}; 71800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 71900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org 720ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivI FINAL : public LTemplateInstruction<1, 2, 1> { 721c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 7225e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 7234edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org inputs_[0] = dividend; 7244edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org inputs_[1] = divisor; 7255e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org temps_[0] = temp; 726c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 727c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 7284edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 7294edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 7305e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org LOperand* temp() { return temps_[0]; } 731c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 732c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 733ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 734ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 735ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 736ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 737ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 738ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 739bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 740ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 741bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org divisor_ = divisor; 742ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 743ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 744ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 745bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor() { return divisor_; } 746bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 747bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 748bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org "flooring-div-by-power-of-2-i") 749bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 750bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 751bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private: 752bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor_; 753bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org}; 754bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 755bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 756ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByConstI FINAL : public LTemplateInstruction<1, 1, 2> { 757bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org public: 758fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { 759bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org inputs_[0] = dividend; 760bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org divisor_ = divisor; 761fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org temps_[0] = temp; 762bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org } 763bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 764bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 765bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor() const { return divisor_; } 766fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org LOperand* temp() { return temps_[0]; } 767ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 768ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 769ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 770bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 771bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private: 772bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor_; 773c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 774c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 775c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 776ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivI FINAL : public LTemplateInstruction<1, 2, 0> { 7774edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org public: 7784edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LFlooringDivI(LOperand* dividend, LOperand* divisor) { 7794edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org inputs_[0] = dividend; 7804edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org inputs_[1] = divisor; 7814edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org } 7824edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 7834edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 7844edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 7854edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 7864edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 7874edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 7884edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org}; 7894edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 7904edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 791ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMulI FINAL : public LTemplateInstruction<1, 2, 0> { 792c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 793c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org LMulI(LOperand* left, LOperand* right) { 794c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 795c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 796c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 797c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 798c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 799c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 800c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 801c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 802c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mul) 803c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 804c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 805c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 80659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org// Instruction for computing multiplier * multiplicand + addend. 807ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMultiplyAddD FINAL : public LTemplateInstruction<1, 3, 0> { 80859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org public: 80959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LMultiplyAddD(LOperand* addend, LOperand* multiplier, 81059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LOperand* multiplicand) { 81159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org inputs_[0] = addend; 81259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org inputs_[1] = multiplier; 81359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org inputs_[2] = multiplicand; 81459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org } 81559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 81659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LOperand* addend() { return inputs_[0]; } 81759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LOperand* multiplier() { return inputs_[1]; } 81859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LOperand* multiplicand() { return inputs_[2]; } 81959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 82059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d") 82159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org}; 82259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 82359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 824ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> { 8254e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org public: 8264e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 8274e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org}; 8284e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 8294e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 830ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareNumericAndBranch FINAL : public LControlInstruction<2, 0> { 831c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 832e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org LCompareNumericAndBranch(LOperand* left, LOperand* right) { 833c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 834c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 835c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 836c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 837c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 838c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 839c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 840e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 841e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org "compare-numeric-and-branch") 842e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 843c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 844c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return hydrogen()->token(); } 845c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool is_double() const { 8468e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org return hydrogen()->representation().IsDouble(); 847c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 848c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 849ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 850c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 851c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 852c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 853ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFloor FINAL : public LTemplateInstruction<1, 1, 1> { 854c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 855e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LMathFloor(LOperand* value, LOperand* temp) { 856c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 857c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 858c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 859c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 860c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 861c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 862c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 863e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 864c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 865e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 866c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 867e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 868ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathRound FINAL : public LTemplateInstruction<1, 1, 1> { 869e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 870e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LMathRound(LOperand* value, LOperand* temp) { 871e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 872e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org temps_[0] = temp; 873e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 874e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 875e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 876e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* temp() { return temps_[0]; } 877e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 878e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 879e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 880e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 881e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 882e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 883ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFround FINAL : public LTemplateInstruction<1, 1, 0> { 884dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org public: 885dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org explicit LMathFround(LOperand* value) { inputs_[0] = value; } 886dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 887dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LOperand* value() { return inputs_[0]; } 888dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 8897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") 890dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org}; 891dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 892dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 893ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathAbs FINAL : public LTemplateInstruction<1, 2, 0> { 894e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 895fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LMathAbs(LOperand* context, LOperand* value) { 896fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = context; 897e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 898e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 899e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 900fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[1]; } 901e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 902e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 903e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 904e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 905e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 906e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 907e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 908ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathLog FINAL : public LTemplateInstruction<1, 1, 0> { 909e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 910e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathLog(LOperand* value) { 911e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 912e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 913e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 914e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 915e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 916e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 917e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 918e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 919e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 920ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathClz32 FINAL : public LTemplateInstruction<1, 1, 0> { 921f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org public: 922f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org explicit LMathClz32(LOperand* value) { 923f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org inputs_[0] = value; 924f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 925f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 926f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org LOperand* value() { return inputs_[0]; } 927f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 928f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 929f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org}; 930f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 931f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 932ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathExp FINAL : public LTemplateInstruction<1, 1, 3> { 93383130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org public: 93483130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LMathExp(LOperand* value, 93583130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* double_temp, 93683130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* temp1, 93783130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* temp2) { 93883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org inputs_[0] = value; 93983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org temps_[0] = temp1; 94083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org temps_[1] = temp2; 94183130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org temps_[2] = double_temp; 94283130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org ExternalReference::InitializeMathExpData(); 94383130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org } 94483130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 94583130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 94683130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* temp1() { return temps_[0]; } 94783130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* temp2() { return temps_[1]; } 94883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org LOperand* double_temp() { return temps_[2]; } 94983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 95083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 951e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 95283130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 953e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 954ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathSqrt FINAL : public LTemplateInstruction<1, 1, 0> { 955e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 956e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathSqrt(LOperand* value) { 957e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 958e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 959e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 960e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 961e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 962e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 963e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 964e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 965e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 966ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathPowHalf FINAL : public LTemplateInstruction<1, 1, 1> { 967e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 968e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LMathPowHalf(LOperand* value, LOperand* temp) { 969e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 970e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org temps_[0] = temp; 971e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 972e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 973e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 974e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* temp() { return temps_[0]; } 975e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 976e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 97783130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org}; 97883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 97983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 980ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpObjectEqAndBranch FINAL : public LControlInstruction<2, 0> { 981c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 982c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 983c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 984c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 985c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 986c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 987c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 988c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 989c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 990c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 991c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch) 992c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 993c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 994c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 995ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpHoleAndBranch FINAL : public LControlInstruction<1, 0> { 996c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com public: 997c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com explicit LCmpHoleAndBranch(LOperand* object) { 998c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com inputs_[0] = object; 999c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com } 1000c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com 1001c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com LOperand* object() { return inputs_[0]; } 1002c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com 1003c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 1004c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 1005c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com}; 1006c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com 1007c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com 1008ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareMinusZeroAndBranch FINAL : public LControlInstruction<1, 1> { 10090cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org public: 10100cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) { 10110cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org inputs_[0] = value; 10120cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org temps_[0] = temp; 10130cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org } 10140cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10150cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org LOperand* value() { return inputs_[0]; } 10160cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org LOperand* temp() { return temps_[0]; } 10170cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10180cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch, 10190cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org "cmp-minus-zero-and-branch") 10200cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch) 10210cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org}; 10220cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10230cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 1024ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsObjectAndBranch FINAL : public LControlInstruction<1, 1> { 1025c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1026c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LIsObjectAndBranch(LOperand* value, LOperand* temp) { 1027c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1028c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1029c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1030c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1031c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1032c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1033c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1034c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 1035c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) 1036c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1037c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual void PrintDataTo(StringStream* stream); 1038c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1039c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1040c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1041ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsStringAndBranch FINAL : public LControlInstruction<1, 1> { 1042f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org public: 1043f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org LIsStringAndBranch(LOperand* value, LOperand* temp) { 1044f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org inputs_[0] = value; 1045f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org temps_[0] = temp; 1046f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org } 1047f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1048c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1049c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1050c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1051f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 1052f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 1053f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1054ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1055f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org}; 1056f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1057f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1058ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> { 1059c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1060c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LIsSmiAndBranch(LOperand* value) { 1061c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1062c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1063c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1064c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1065c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1066c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 1067c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 1068c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1069ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1070c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1071c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1072c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1073ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> { 1074c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1075c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 1076c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1077c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1078c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1079c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1080c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1081c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1082c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1083c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 1084c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "is-undetectable-and-branch") 1085c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 1086c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1087ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1088c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1089c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1090c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1091ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> { 1092f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org public: 1093fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) { 1094fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1095fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = left; 1096fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = right; 1097f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org } 1098f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1099fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1100fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left() { return inputs_[1]; } 1101fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right() { return inputs_[2]; } 1102c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1103f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 1104f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org "string-compare-and-branch") 1105f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 1106f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1107f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org Token::Value op() const { return hydrogen()->token(); } 1108f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1109ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1110f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org}; 1111f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1112f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1113ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> { 1114c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1115c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LHasInstanceTypeAndBranch(LOperand* value) { 1116c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1117c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1118c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1119c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1120c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1121c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 1122c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "has-instance-type-and-branch") 1123c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 1124c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1125ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1126c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1127c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1128c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1129ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> { 1130c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1131c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LGetCachedArrayIndex(LOperand* value) { 1132c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1133c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1134c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1135c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1136c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1137c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 1138c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 1139c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1140c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1141c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1142ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasCachedArrayIndexAndBranch FINAL 114332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org : public LControlInstruction<1, 0> { 1144c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1145c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 1146c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1147c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1148c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1149c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1150c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1151c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 1152c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "has-cached-array-index-and-branch") 1153c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 1154c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1155ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1156c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1157c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1158c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1159ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClassOfTestAndBranch FINAL : public LControlInstruction<1, 1> { 1160c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1161c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LClassOfTestAndBranch(LOperand* value, LOperand* temp) { 1162c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1163c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1164c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1165c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1166c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1167c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1168c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1169c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1170c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "class-of-test-and-branch") 1171c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1172c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1173ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1174c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1175c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1176c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1177ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpT FINAL : public LTemplateInstruction<1, 3, 0> { 1178c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1179fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LCmpT(LOperand* context, LOperand* left, LOperand* right) { 1180fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1181fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = left; 1182fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = right; 1183c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1184c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1185fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1186fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left() { return inputs_[1]; } 1187fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right() { return inputs_[2]; } 1188c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1189c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 1190c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1191c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1192c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return hydrogen()->token(); } 1193c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1194c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1195c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1196ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOf FINAL : public LTemplateInstruction<1, 3, 0> { 1197c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1198fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { 1199fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1200fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = left; 1201fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = right; 1202c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1203c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1204fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1205fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left() { return inputs_[1]; } 1206fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right() { return inputs_[2]; } 1207c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1208c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 1209c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1210c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1211c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1212ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOfKnownGlobal FINAL : public LTemplateInstruction<1, 2, 1> { 1213c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1214fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { 1215fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1216fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = value; 1217c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1218c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1219c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1220fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1221fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* value() { return inputs_[1]; } 1222c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1223c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1224c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 1225c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "instance-of-known-global") 1226c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 1227c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1228c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Handle<JSFunction> function() const { return hydrogen()->function(); } 12291044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { 12301044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org return lazy_deopt_env_; 12311044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 123232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment( 1233ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org LEnvironment* env) OVERRIDE { 12341044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org lazy_deopt_env_ = env; 12351044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 12361044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 12371044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org private: 12381044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org LEnvironment* lazy_deopt_env_; 1239c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1240c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1241c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1242ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBoundsCheck FINAL : public LTemplateInstruction<0, 2, 0> { 1243c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1244c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LBoundsCheck(LOperand* index, LOperand* length) { 1245c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = index; 1246c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = length; 1247c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1248c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1249c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* index() { return inputs_[0]; } 1250c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* length() { return inputs_[1]; } 1251c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1252c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1253129d398d682e6ca3910808c913212ce532f1e155danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 1254c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1255c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1256c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1257ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBitI FINAL : public LTemplateInstruction<1, 2, 0> { 1258c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1259c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LBitI(LOperand* left, LOperand* right) { 1260c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1261c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1262c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1263c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1264c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1265c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1266c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1267c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return hydrogen()->op(); } 1268c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1269c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 1270c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Bitwise) 1271c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1272c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1273c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1274ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LShiftI FINAL : public LTemplateInstruction<1, 2, 0> { 1275c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1276c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 1277c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : op_(op), can_deopt_(can_deopt) { 1278c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1280c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1281c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1282c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return op_; } 1283c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1284c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1285c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool can_deopt() const { return can_deopt_; } 1286c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1287c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 1288c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1289c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 1290c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op_; 1291c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool can_deopt_; 1292c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1293c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1294c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1295ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSubI FINAL : public LTemplateInstruction<1, 2, 0> { 1296c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1297c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LSubI(LOperand* left, LOperand* right) { 1298c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1299c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1300c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1301c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1302c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1303c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1304c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1305c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 1306c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Sub) 1307c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1308c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1309c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1310ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantI FINAL : public LTemplateInstruction<1, 0, 0> { 1311c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1312c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 1313c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1314c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1315c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int32_t value() const { return hydrogen()->Integer32Value(); } 1316c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1317c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1318c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1319ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantS FINAL : public LTemplateInstruction<1, 0, 0> { 1320b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org public: 1321b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 1322b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1323b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1324b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 1325b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org}; 1326b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1327b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1328ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantD FINAL : public LTemplateInstruction<1, 0, 0> { 1329c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1330c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 1331c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1332c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1333c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org double value() const { return hydrogen()->DoubleValue(); } 1334c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1335c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1336c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1337ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantE FINAL : public LTemplateInstruction<1, 0, 0> { 1338d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org public: 1339d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 1340d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1341d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1342d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org ExternalReference value() const { 1343d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return hydrogen()->ExternalReferenceValue(); 1344d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } 1345d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}; 1346d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1347d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1348ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantT FINAL : public LTemplateInstruction<1, 0, 0> { 1349c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1351c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1352c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 13538b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com Handle<Object> value(Isolate* isolate) const { 13548b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com return hydrogen()->handle(isolate); 13558b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com } 1356c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1357c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1358c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1359ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBranch FINAL : public LControlInstruction<1, 0> { 1360c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1361c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LBranch(LOperand* value) { 1362c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1363c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1364c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1365c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1366c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1367c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 1368c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Branch) 1369c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1370ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1371c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1372c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1373c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1374ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpMapAndBranch FINAL : public LControlInstruction<1, 1> { 1375c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1376c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LCmpMapAndBranch(LOperand* value, LOperand* temp) { 1377c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1378c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1379c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1380c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1381c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1382c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1383c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1384c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 1385c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1386c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1387528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> map() const { return hydrogen()->map().handle(); } 1388c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1389c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1390c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1391ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMapEnumLength FINAL : public LTemplateInstruction<1, 1, 0> { 139278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public: 139378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org explicit LMapEnumLength(LOperand* value) { 139478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org inputs_[0] = value; 139578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org } 139678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 1397c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1398c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 139978502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length") 140078502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org}; 140178502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 140278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 1403ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDateField FINAL : public LTemplateInstruction<1, 1, 1> { 1404154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org public: 1405154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org LDateField(LOperand* date, LOperand* temp, Smi* index) : index_(index) { 1406154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org inputs_[0] = date; 1407154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org temps_[0] = temp; 1408154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org } 1409154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 1410c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* date() { return inputs_[0]; } 1411c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1412c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org Smi* index() const { return index_; } 1413c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 14143d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field") 14153d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DateField) 1416154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 1417154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org private: 1418154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org Smi* index_; 1419154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org}; 1420154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 1421154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 1422ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringGetChar FINAL : public LTemplateInstruction<1, 2, 0> { 1423e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org public: 1424e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LSeqStringGetChar(LOperand* string, LOperand* index) { 1425e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org inputs_[0] = string; 1426e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org inputs_[1] = index; 1427e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org } 1428e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1429e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* string() const { return inputs_[0]; } 1430e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* index() const { return inputs_[1]; } 1431e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1432e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 1433e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 1434e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org}; 1435e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1436e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1437ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringSetChar FINAL : public LTemplateInstruction<1, 4, 0> { 1438a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org public: 14399af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LSeqStringSetChar(LOperand* context, 14409af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* string, 1441a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org LOperand* index, 1442e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* value) { 14439af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[0] = context; 14449af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[1] = string; 14459af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[2] = index; 14469af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[3] = value; 1447a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 1448a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 14499af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* string() { return inputs_[1]; } 14509af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* index() { return inputs_[2]; } 14519af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* value() { return inputs_[3]; } 1452a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 1453a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 1454a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 1455a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org}; 1456a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 1457a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 1458ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAddI FINAL : public LTemplateInstruction<1, 2, 0> { 1459c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1460c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LAddI(LOperand* left, LOperand* right) { 1461c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1463c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1464c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1465c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1466c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1467c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1468c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1469c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Add) 1470c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1471c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1472c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1473ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathMinMax FINAL : public LTemplateInstruction<1, 2, 0> { 1474471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org public: 1475471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org LMathMinMax(LOperand* left, LOperand* right) { 1476471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org inputs_[0] = left; 1477471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org inputs_[1] = right; 1478471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org } 1479471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 1480c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1481c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1482c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1483e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 1484471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 1485471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org}; 1486471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 1487471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 1488ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPower FINAL : public LTemplateInstruction<1, 2, 0> { 1489c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1490c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LPower(LOperand* left, LOperand* right) { 1491c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1492c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1493c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1494c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1495c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1496c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1497c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1498c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1499c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Power) 1500c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1501c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1502c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1503ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticD FINAL : public LTemplateInstruction<1, 2, 0> { 1504c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1505c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 1506c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : op_(op) { 1507c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = left; 1508c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = right; 1509c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1510c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1511c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return op_; } 1512c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* left() { return inputs_[0]; } 1513c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* right() { return inputs_[1]; } 1514c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1515ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const OVERRIDE { 151632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return LInstruction::kArithmeticD; 151732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 1518ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1519ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 1520c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1521c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 1522c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op_; 1523c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1524c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1525c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1526ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> { 1527c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1528fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LArithmeticT(Token::Value op, 1529fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context, 1530fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left, 1531fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right) 1532c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : op_(op) { 1533fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1534fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = left; 1535fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = right; 1536c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1537c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1538fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1539fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left() { return inputs_[1]; } 1540fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right() { return inputs_[2]; } 1541c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org Token::Value op() const { return op_; } 1542c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1543ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const FINAL { return LInstruction::kArithmeticT; } 1544ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1545ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 1546c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1547c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 1548c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op_; 1549c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1550c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1551c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1552ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LReturn FINAL : public LTemplateInstruction<0, 3, 0> { 1553c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1554fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) { 1555c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1556fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = context; 1557fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = parameter_count; 1558c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1559c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1560c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1561c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 15626e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org bool has_constant_parameter_count() { 15636e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return parameter_count()->IsConstantOperand(); 15646e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org } 15656e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org LConstantOperand* constant_parameter_count() { 1566e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(has_constant_parameter_count()); 15676e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return LConstantOperand::cast(parameter_count()); 15686e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org } 1569fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* parameter_count() { return inputs_[2]; } 15706e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 1571c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1572c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1573c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1574c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1575ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedField FINAL : public LTemplateInstruction<1, 1, 0> { 1576c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1577c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LLoadNamedField(LOperand* object) { 1578c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = object; 1579c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1580c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1581c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* object() { return inputs_[0]; } 1582c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1583c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1584c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1585c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1586c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1587c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1588ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 1589c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 15909d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { 1591fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1592fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = object; 15939d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 1594c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1595c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1596fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1597fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* object() { return inputs_[1]; } 15989d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 1599c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1600c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1601c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1602c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1603c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1604c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1605c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1606c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1607ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFunctionPrototype FINAL : public LTemplateInstruction<1, 1, 0> { 1608c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1609c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LLoadFunctionPrototype(LOperand* function) { 1610c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = function; 1611c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1612c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1613c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* function() { return inputs_[0]; } 1614c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1615c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1616c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1617c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1618c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1619c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1620ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadRoot FINAL : public LTemplateInstruction<1, 0, 0> { 1621528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org public: 1622528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 1623528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 1624528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1625528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Heap::RootListIndex index() const { return hydrogen()->index(); } 1626528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org}; 1627528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1628528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1629ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyed FINAL : public LTemplateInstruction<1, 2, 0> { 1630c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1631e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org LLoadKeyed(LOperand* elements, LOperand* key) { 1632c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = elements; 1633c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = key; 1634c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1635c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1636c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* elements() { return inputs_[0]; } 1637c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* key() { return inputs_[1]; } 1638e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org ElementsKind elements_kind() const { 1639e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return hydrogen()->elements_kind(); 1640c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1641e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org bool is_external() const { 1642e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return hydrogen()->is_external(); 1643c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 16445c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_fixed_typed_array() const { 16455c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 16465c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 16475c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_typed_elements() const { 16485c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return is_external() || is_fixed_typed_array(); 16495c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 1650c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1651e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1652e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 1653c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 16548e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org virtual void PrintDataTo(StringStream* stream); 1655fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 1656c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1657c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1658c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1659ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> { 1660c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 16619d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, 16629d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 1663fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1664fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = object; 1665fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = key; 16669d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 1667c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1668c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1669fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1670fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* object() { return inputs_[1]; } 1671fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* key() { return inputs_[2]; } 16729d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 1673c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1674c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 16759d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) 1676c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1677c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1678c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1679ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalCell FINAL : public LTemplateInstruction<1, 0, 0> { 1680c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1681c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 1682c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1683c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1684c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1685c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1686ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 1687c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 16889d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadGlobalGeneric(LOperand* context, LOperand* global_object, 16899d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 1690fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1691fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = global_object; 16929d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 1693c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1694c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1695fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1696fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* global_object() { return inputs_[1]; } 16979d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 1698c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1699c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 1700c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 1701c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1702c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1703c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool for_typeof() const { return hydrogen()->for_typeof(); } 1704c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1705c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1706c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1707ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreGlobalCell FINAL : public LTemplateInstruction<0, 1, 1> { 1708c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1709c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LStoreGlobalCell(LOperand* value, LOperand* temp) { 1710c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1711c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 1712c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1713c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1714c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1715c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 1716c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1717c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 1718c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 1719c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1720c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1721c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1722ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadContextSlot FINAL : public LTemplateInstruction<1, 1, 0> { 1723c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1724c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LLoadContextSlot(LOperand* context) { 1725c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = context; 1726c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1727c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1728c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* context() { return inputs_[0]; } 1729c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1730c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1731c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1732c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1733c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int slot_index() { return hydrogen()->slot_index(); } 1734c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1735c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org virtual void PrintDataTo(StringStream* stream); 1736c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1737c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1738c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1739ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 0> { 1740c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1741c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LStoreContextSlot(LOperand* context, LOperand* value) { 1742c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = context; 1743c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = value; 1744c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1745c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1746c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* context() { return inputs_[0]; } 1747c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[1]; } 1748c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1749c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 1750c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 1751c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1752c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int slot_index() { return hydrogen()->slot_index(); } 1753c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1754ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1755c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1756c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1757c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1758ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> { 1759c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1760c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LPushArgument(LOperand* value) { 1761c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 1762c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1763c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1764c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1765c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1766c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1767c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1768c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1769c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1770ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDrop FINAL : public LTemplateInstruction<0, 0, 0> { 177128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org public: 177228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org explicit LDrop(int count) : count_(count) { } 177328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 177428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org int count() const { return count_; } 177528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 177628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 177728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 177828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org private: 177928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org int count_; 178028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org}; 178128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 178228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 1783ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> { 1784662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org public: 1785662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org LStoreCodeEntry(LOperand* function, LOperand* code_object) { 1786662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org inputs_[0] = function; 17873ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org inputs_[1] = code_object; 1788662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org } 1789662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1790662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org LOperand* function() { return inputs_[0]; } 17913ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org LOperand* code_object() { return inputs_[1]; } 1792662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1793662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org virtual void PrintDataTo(StringStream* stream); 1794662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1795662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 1796662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 1797662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org}; 1798662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1799662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1800ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> { 18014c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org public: 1802ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 18034c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org inputs_[0] = base_object; 1804ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org inputs_[1] = offset; 18054c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org } 18064c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org 1807ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LOperand* base_object() const { return inputs_[0]; } 1808ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LOperand* offset() const { return inputs_[1]; } 18094c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org 1810ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 18114c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org 1812ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 18134c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org}; 18144c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org 18154c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org 1816ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> { 1817c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1818c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 1819c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 1820c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1821c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1822c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1823ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LContext FINAL : public LTemplateInstruction<1, 0, 0> { 1824c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1825c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Context, "context") 18267c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org DECLARE_HYDROGEN_ACCESSOR(Context) 1827c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1828c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1829c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1830ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeclareGlobals FINAL : public LTemplateInstruction<0, 1, 0> { 1831f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org public: 1832fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LDeclareGlobals(LOperand* context) { 1833fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1834fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 1835fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1836fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1837fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1838f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 1839f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 1840f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org}; 1841f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 1842f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 1843ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallJSFunction FINAL : public LTemplateInstruction<1, 1, 0> { 1844c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 184526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org explicit LCallJSFunction(LOperand* function) { 184626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_[0] = function; 1847c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1848c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 184926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* function() { return inputs_[0]; } 1850c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 185126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") 185226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) 1853c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1854ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1855c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1856c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1857c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1858c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1859c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1860ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> { 1861c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 18629aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org LCallWithDescriptor(CallInterfaceDescriptor descriptor, 1863ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org const ZoneList<LOperand*>& operands, Zone* zone) 1864ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org : descriptor_(descriptor), 18659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org inputs_(descriptor.GetRegisterParameterCount() + 1, zone) { 18669aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DCHECK(descriptor.GetRegisterParameterCount() + 1 == operands.length()); 186726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_.AddAll(operands, zone); 1868c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 1869c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 187026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* target() const { return inputs_[0]; } 1871c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 18729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org const CallInterfaceDescriptor descriptor() { return descriptor_; } 187326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 187426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org private: 187526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 187626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 1877c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1878ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1879c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1880c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1881c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 18829aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallInterfaceDescriptor descriptor_; 188326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org ZoneList<LOperand*> inputs_; 188426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 188526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Iterator support. 1886ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return inputs_.length(); } 1887ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 188826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 1889ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return 0; } 1890ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return NULL; } 189126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org}; 1892c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1893c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1894ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> { 1895c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 189626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInvokeFunction(LOperand* context, LOperand* function) { 1897fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 189826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_[1] = function; 1899fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 1900fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1901fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 190226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* function() { return inputs_[1]; } 1903fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 190426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 190526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1906c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1907ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1908c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1909c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1910c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1911c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1912c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1913ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> { 1914c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1915fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LCallFunction(LOperand* context, LOperand* function) { 1916fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1917fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = function; 1918c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org } 1919c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 1920fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1921fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* function() { return inputs_[1]; } 1922c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1923c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1924c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1925c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1926c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1927c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1928c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1929c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1930ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNew FINAL : public LTemplateInstruction<1, 2, 0> { 1931c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1932fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LCallNew(LOperand* context, LOperand* constructor) { 1933fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1934fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = constructor; 19357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 1936c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1937fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1938fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* constructor() { return inputs_[1]; } 1939c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1940c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1941c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNew) 1942c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1943ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1944c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1945c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1946c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1947c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1948c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1949ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> { 1950750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public: 1951fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LCallNewArray(LOperand* context, LOperand* constructor) { 1952fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1953fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = constructor; 1954750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org } 1955750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1956fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1957fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* constructor() { return inputs_[1]; } 1958750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1959750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 1960750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 1961750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1962ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1963750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1964750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1965750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 1966750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1967750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1968ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> { 1969c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1970fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LCallRuntime(LOperand* context) { 1971fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 1972fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 1973fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1974fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 1975fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1976c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1977c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1978c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1979ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE { 1980fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org return save_doubles() == kDontSaveFPRegs; 1981fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 1982fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 1983c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org const Runtime::Function* function() const { return hydrogen()->function(); } 1984c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org int arity() const { return hydrogen()->argument_count(); } 1985fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } 1986c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1987c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1988c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 1989ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 1990c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 1991c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LInteger32ToDouble(LOperand* value) { 1992c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 19937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 19947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1995c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 1996c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 1997c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 1998c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 1999c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2000c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2001ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUint32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 200278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public: 200378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org explicit LUint32ToDouble(LOperand* value) { 200478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org inputs_[0] = value; 200578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org } 200678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 2007c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2008c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 200978502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 201078502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org}; 201178502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 201278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 2013ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagI FINAL : public LTemplateInstruction<1, 1, 2> { 2014c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2015bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) { 2016c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 2017bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[0] = temp1; 2018bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[1] = temp2; 20197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 20207516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2021c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2022bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp1() { return temps_[0]; } 2023bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp2() { return temps_[1]; } 2024c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2025c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 2026c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2027c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2028c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2029ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagU FINAL : public LTemplateInstruction<1, 1, 2> { 203078502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public: 2031bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) { 203278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org inputs_[0] = value; 2033bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[0] = temp1; 2034bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[1] = temp2; 203578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org } 203678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 2037c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2038bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp1() { return temps_[0]; } 2039bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp2() { return temps_[1]; } 2040c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 204178502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 204278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org}; 204378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 204478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org 2045ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagD FINAL : public LTemplateInstruction<1, 1, 2> { 2046c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2047c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) { 2048c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 2049c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org temps_[0] = temp; 2050c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[1] = temp2; 20517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 20527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2053c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2054c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2055c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp2() { return temps_[1]; } 2056c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2057c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 20587c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2059c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2060c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 20617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2062ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToSmi FINAL : public LTemplateInstruction<1, 1, 0> { 2063a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org public: 20648fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org explicit LDoubleToSmi(LOperand* value) { 2065a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org inputs_[0] = value; 2066a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org } 2067a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2068a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2069a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2070a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 2071a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2072a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2073a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2074a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org}; 2075a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2076a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2077c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Sometimes truncating conversion from a tagged value to an int32. 2078ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToI FINAL : public LTemplateInstruction<1, 1, 0> { 2079c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 20808fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org explicit LDoubleToI(LOperand* value) { 2081c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 20827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 20837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2084c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2085c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2086c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 2087c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2088c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2089c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2090c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2091c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2092c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2093c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Truncating conversion from a tagged value to an int32. 2094ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTaggedToI FINAL : public LTemplateInstruction<1, 1, 2> { 2095c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2096c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LTaggedToI(LOperand* value, 2097c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp, 20988fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org LOperand* temp2) { 2099c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 2100c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org temps_[0] = temp; 2101c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[1] = temp2; 21027516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2104c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2105c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2106c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp2() { return temps_[1]; } 2107c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2108c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 2109528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2110c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2111c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2112c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2113c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 21147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2115ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiTag FINAL : public LTemplateInstruction<1, 1, 0> { 2116c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2117c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LSmiTag(LOperand* value) { 2118c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 21197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21207516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2121c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2122c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2123c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 2124381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2125c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 21267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2127c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2128ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberUntagD FINAL : public LTemplateInstruction<1, 1, 0> { 2129c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2130c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LNumberUntagD(LOperand* value) { 2131c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 21327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2134c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2135c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2136c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 2137c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2138c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2139c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2140c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2141ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiUntag FINAL : public LTemplateInstruction<1, 1, 0> { 2142c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2143c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LSmiUntag(LOperand* value, bool needs_check) 2144c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org : needs_check_(needs_check) { 2145c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 21467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2148c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2149c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool needs_check() const { return needs_check_; } 2150c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2151c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 2152c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2153c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 2154c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org bool needs_check_; 2155c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2156c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2157c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2158ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedField FINAL : public LTemplateInstruction<0, 2, 1> { 2159c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2160c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 2161c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[0] = object; 2162c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[1] = value; 216337141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org temps_[0] = temp; 21647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2166c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* object() { return inputs_[0]; } 2167c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[1]; } 2168c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2169c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2170c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 2171c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 2172c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2173ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2174c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2175f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Representation representation() const { 2176f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return hydrogen()->field_representation(); 2177f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org } 2178c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2179c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2180c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2181ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> { 2182c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2183fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { 2184fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2185fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = object; 2186fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = value; 21877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 21887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2189fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2190fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* object() { return inputs_[1]; } 2191fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* value() { return inputs_[2]; } 2192c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2193c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 2194c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 2195c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2196ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2197c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2198c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 2199486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2200c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2201c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2202c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2203ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> { 2204c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2205e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { 2206c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[0] = object; 2207c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[1] = key; 2208c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[2] = value; 22097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 22107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2211e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org bool is_external() const { return hydrogen()->is_external(); } 22125c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_fixed_typed_array() const { 22135c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 22145c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 22155c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_typed_elements() const { 22165c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return is_external() || is_fixed_typed_array(); 22175c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 2218c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* elements() { return inputs_[0]; } 2219c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* key() { return inputs_[1]; } 2220c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[2]; } 2221e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org ElementsKind elements_kind() const { 2222e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return hydrogen()->elements_kind(); 2223e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org } 2224c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2225e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 2226e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 2227c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2228ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2229fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 2230fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 2231c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2232c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2233c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2234ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> { 2235c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2236fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LStoreKeyedGeneric(LOperand* context, 2237fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* obj, 2238fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* key, 2239fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* value) { 2240fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2241fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = obj; 2242fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = key; 2243fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[3] = value; 22447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 22457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2246fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2247fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* object() { return inputs_[1]; } 2248fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* key() { return inputs_[2]; } 2249fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* value() { return inputs_[3]; } 2250c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2251c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 2252c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 2253c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2254ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2255c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2256486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2257c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2258c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2259c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2260ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 1> { 2261c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2262c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LTransitionElementsKind(LOperand* object, 2263fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context, 2264d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org LOperand* new_map_temp) { 2265c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = object; 2266fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = context; 2267c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = new_map_temp; 22687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 22697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2270fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[1]; } 2271c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* object() { return inputs_[0]; } 2272c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* new_map_temp() { return temps_[0]; } 2273c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2274c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 2275c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "transition-elements-kind") 2276c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 2277c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2278ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2280528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2281528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> transitioned_map() { 2282528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return hydrogen()->transitioned_map().handle(); 2283528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } 2284003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ElementsKind from_kind() { return hydrogen()->from_kind(); } 2285003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ElementsKind to_kind() { return hydrogen()->to_kind(); } 22867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org}; 22877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 22887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2289ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTrapAllocationMemento FINAL : public LTemplateInstruction<0, 1, 1> { 22907c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org public: 22917c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LTrapAllocationMemento(LOperand* object, 22927c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* temp) { 22937c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org inputs_[0] = object; 22947c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org temps_[0] = temp; 22957c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org } 22967c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 22977c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* object() { return inputs_[0]; } 22987c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* temp() { return temps_[0]; } 22997c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 23007c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 23017c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org "trap-allocation-memento") 23027c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}; 23037c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 23047c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 2305ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringAdd FINAL : public LTemplateInstruction<1, 3, 0> { 23067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public: 2307fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 2308fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2309fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = left; 2310fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = right; 23117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 23127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2313fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2314fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* left() { return inputs_[1]; } 2315fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* right() { return inputs_[2]; } 2316c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2317c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 2318c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringAdd) 2319c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2320c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 23217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2322c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2323ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharCodeAt FINAL : public LTemplateInstruction<1, 3, 0> { 2324c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2325fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 2326fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2327fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = string; 2328fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[2] = index; 23297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 23307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2331fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2332fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* string() { return inputs_[1]; } 2333fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* index() { return inputs_[2]; } 2334c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2335c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 2336c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 2337c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2338c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2339c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2340ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharFromCode FINAL : public LTemplateInstruction<1, 2, 0> { 2341c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2342fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { 2343fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2344fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = char_code; 23457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 2346c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2347fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2348fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* char_code() { return inputs_[1]; } 2349c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2351c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 23527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org}; 23537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 23547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2355ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckValue FINAL : public LTemplateInstruction<0, 1, 0> { 23567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public: 23571f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org explicit LCheckValue(LOperand* value) { 2358c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 23597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 23607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2361c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 236264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 23631f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 23641f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckValue) 2365c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2366c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2367c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2368ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckInstanceType FINAL : public LTemplateInstruction<0, 1, 0> { 2369c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2370c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LCheckInstanceType(LOperand* value) { 2371c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 23727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 2373c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2374c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2375c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2376c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 2377c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 2378c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2379c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2380c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2381ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMaps FINAL : public LTemplateInstruction<0, 1, 0> { 2382c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2383af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org explicit LCheckMaps(LOperand* value = NULL) { 2384c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 23857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 23867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2387c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2388c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 23891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 23901456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 2391c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2392c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2393c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2394ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckSmi FINAL : public LTemplateInstruction<1, 1, 0> { 2395c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2396c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LCheckSmi(LOperand* value) { 2397c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 23987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 2399c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2400c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2401c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2402c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 24037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org}; 24047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 24057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2406ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckNonSmi FINAL : public LTemplateInstruction<0, 1, 0> { 24077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public: 2408c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LCheckNonSmi(LOperand* value) { 2409c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 2410c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org } 2411c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2412c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2413c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2414c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 24151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 2416c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2417c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 24187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2419ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampDToUint8 FINAL : public LTemplateInstruction<1, 1, 1> { 2420c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2421c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LClampDToUint8(LOperand* unclamped, LOperand* temp) { 2422c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[0] = unclamped; 2423c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 24247516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 24257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2426c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* unclamped() { return inputs_[0]; } 2427c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2428c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2429c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 2430c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2431c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2432c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2433ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampIToUint8 FINAL : public LTemplateInstruction<1, 1, 0> { 2434c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2435c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org explicit LClampIToUint8(LOperand* unclamped) { 2436c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[0] = unclamped; 24377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 24387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2439c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* unclamped() { return inputs_[0]; } 2440c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2441c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 2442c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2443c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2444c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2445ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampTToUint8 FINAL : public LTemplateInstruction<1, 1, 1> { 2446c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2447c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LClampTToUint8(LOperand* unclamped, LOperand* temp) { 2448c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org inputs_[0] = unclamped; 2449c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 24507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 24517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2452c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LOperand* unclamped() { return inputs_[0]; } 2453c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2454c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2455c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 2456c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2457c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2458c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2459ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleBits FINAL : public LTemplateInstruction<1, 1, 0> { 2460ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 2461ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org explicit LDoubleBits(LOperand* value) { 2462ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = value; 2463ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2464ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2465ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2466ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2467ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 2468ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 2469ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 2470ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2471ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2472ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstructDouble FINAL : public LTemplateInstruction<1, 2, 0> { 2473ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 2474ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LConstructDouble(LOperand* hi, LOperand* lo) { 2475ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = hi; 2476ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[1] = lo; 2477ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2478ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2479ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* hi() { return inputs_[0]; } 2480ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* lo() { return inputs_[1]; } 2481ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2482ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double") 2483ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 2484ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2485ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2486ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAllocate FINAL : public LTemplateInstruction<1, 2, 2> { 24877c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org public: 2488fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LAllocate(LOperand* context, 2489fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* size, 2490fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* temp1, 2491fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* temp2) { 2492fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 24937c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org inputs_[1] = size; 24947c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org temps_[0] = temp1; 24957c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org temps_[1] = temp2; 24967c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org } 24977c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 2498fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 24997c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* size() { return inputs_[1]; } 25007c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* temp1() { return temps_[0]; } 25017c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org LOperand* temp2() { return temps_[1]; } 25027c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 25037c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 25047c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org DECLARE_HYDROGEN_ACCESSOR(Allocate) 25057c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}; 25067c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 25077c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 2508ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LRegExpLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 2509c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2510fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LRegExpLiteral(LOperand* context) { 2511fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2512fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 2513fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2514fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2515fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2516c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 2517c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 2518c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2519c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2520c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2521ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFunctionLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 2522c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2523fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LFunctionLiteral(LOperand* context) { 2524fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2525fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 2526fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2527fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2528fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2529c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 2530c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 2531c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2532c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2533c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2534ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LToFastProperties FINAL : public LTemplateInstruction<1, 1, 0> { 2535c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2536c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LToFastProperties(LOperand* value) { 2537c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 25387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 25397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2540c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2541c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2542c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 2543c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 2544c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2545c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2546c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2547ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeof FINAL : public LTemplateInstruction<1, 2, 0> { 2548c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2549fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LTypeof(LOperand* context, LOperand* value) { 2550fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2551fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = value; 25527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 25537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2554fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2555fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* value() { return inputs_[1]; } 2556c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2557c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2558c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2559c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2560c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2561ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeofIsAndBranch FINAL : public LControlInstruction<1, 0> { 2562c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2563c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LTypeofIsAndBranch(LOperand* value) { 2564c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org inputs_[0] = value; 25657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 25667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2567c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2568c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2569c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 2570c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 2571c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2572c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Handle<String> type_literal() { return hydrogen()->type_literal(); } 2573c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2574ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2575c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2576c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2577c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2578ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> { 2579c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2580c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org explicit LIsConstructCallAndBranch(LOperand* temp) { 2581c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org temps_[0] = temp; 25827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 25837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2584c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org LOperand* temp() { return temps_[0]; } 2585c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org 2586c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 2587c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org "is-construct-call-and-branch") 2588c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2589c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 25907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2591ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> { 2592c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 25931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org LOsrEntry() {} 2594c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2595ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 259632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 259732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 2598c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2599c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2600c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2601c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2602ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> { 2603c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 2604fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org explicit LStackCheck(LOperand* context) { 2605fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2606fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 2607fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2608fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2609fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2610c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 2611c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(StackCheck) 2612c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2613c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Label* done_label() { return &done_label_; } 2614c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2615c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 2616c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Label done_label_; 2617c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org}; 2618c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2619c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2620ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInPrepareMap FINAL : public LTemplateInstruction<1, 2, 0> { 2621812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public: 2622fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LForInPrepareMap(LOperand* context, LOperand* object) { 2623fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[0] = context; 2624fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org inputs_[1] = object; 2625812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org } 2626812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2627fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* context() { return inputs_[0]; } 2628fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org LOperand* object() { return inputs_[1]; } 2629812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2630812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 2631812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org}; 2632812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2633812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2634ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInCacheArray FINAL : public LTemplateInstruction<1, 1, 0> { 2635812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public: 263689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org explicit LForInCacheArray(LOperand* map) { 2637812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org inputs_[0] = map; 2638812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org } 2639812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2640812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LOperand* map() { return inputs_[0]; } 2641812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2642812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 2643812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2644812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org int idx() { 2645812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org return HForInCacheArray::cast(this->hydrogen_value())->idx(); 2646812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org } 2647812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org}; 2648812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2649812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2650ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMapValue FINAL : public LTemplateInstruction<0, 2, 0> { 2651812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public: 2652812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LCheckMapValue(LOperand* value, LOperand* map) { 2653812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org inputs_[0] = value; 2654812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org inputs_[1] = map; 2655812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org } 2656812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2657812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LOperand* value() { return inputs_[0]; } 2658812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LOperand* map() { return inputs_[1]; } 2659812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2660812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 2661812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org}; 2662812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2663812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2664ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFieldByIndex FINAL : public LTemplateInstruction<1, 2, 0> { 2665812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public: 2666812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LLoadFieldByIndex(LOperand* object, LOperand* index) { 2667812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org inputs_[0] = object; 2668812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org inputs_[1] = index; 2669812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org } 2670812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2671812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LOperand* object() { return inputs_[0]; } 2672812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org LOperand* index() { return inputs_[1]; } 2673812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2674812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 2675812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org}; 2676812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 2677812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 26781e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LStoreFrameContext: public LTemplateInstruction<0, 1, 0> { 26791e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public: 26801e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org explicit LStoreFrameContext(LOperand* context) { 26811e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[0] = context; 26821e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } 26831e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 26841e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 26851e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 26861e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext, "store-frame-context") 26871e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org}; 26881e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 26891e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 26901e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LAllocateBlockContext: public LTemplateInstruction<1, 2, 0> { 26911e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public: 26921e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LAllocateBlockContext(LOperand* context, LOperand* function) { 26931e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[0] = context; 26941e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[1] = function; 26951e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } 26961e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 26971e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 26981e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* function() { return inputs_[1]; } 26991e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27001e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); } 27011e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27021e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context") 27031e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext) 27041e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org}; 27051e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27061e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 2707c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgclass LChunkBuilder; 2708ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPlatformChunk FINAL : public LChunk { 2709c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public: 271028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org LPlatformChunk(CompilationInfo* info, HGraph* graph) 271128583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org : LChunk(info, graph) { } 2712c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2713c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org int GetNextSpillIndex(RegisterKind kind); 2714c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org LOperand* GetNextSpillSlot(RegisterKind kind); 27157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org}; 27167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 27177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2718ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LChunkBuilder FINAL : public LChunkBuilderBase { 27197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public: 2720c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2721b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org : LChunkBuilderBase(info, graph), 2722c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org current_instruction_(NULL), 2723c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org current_block_(NULL), 2724c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org next_block_(NULL), 2725b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org allocator_(allocator) {} 2726a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 27277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Build the sequence for the graph. 272828583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org LPlatformChunk* Build(); 27297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 27307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Declare methods that deal with the individual node types. 2731c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 27327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 27337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#undef DECLARE_DO 27347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 273559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend); 273659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 2737b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org static bool HasMagicNumberForDivisor(int32_t divisor); 2738b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org 2739e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathFloor(HUnaryMathOperation* instr); 2740e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathRound(HUnaryMathOperation* instr); 2741dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LInstruction* DoMathFround(HUnaryMathOperation* instr); 2742e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathAbs(HUnaryMathOperation* instr); 2743e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathLog(HUnaryMathOperation* instr); 2744e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathExp(HUnaryMathOperation* instr); 2745e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathSqrt(HUnaryMathOperation* instr); 2746e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathPowHalf(HUnaryMathOperation* instr); 2747f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org LInstruction* DoMathClz32(HUnaryMathOperation* instr); 274800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LInstruction* DoDivByPowerOf2I(HDiv* instr); 274900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LInstruction* DoDivByConstI(HDiv* instr); 27504edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LInstruction* DoDivI(HDiv* instr); 2751ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoModByPowerOf2I(HMod* instr); 275200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org LInstruction* DoModByConstI(HMod* instr); 2753ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoModI(HMod* instr); 2754bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 2755ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 27564edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 2757e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2758c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private: 2759c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Methods for getting operands for Use / Define / Temp. 2760c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LUnallocated* ToUnallocated(Register reg); 2761c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LUnallocated* ToUnallocated(DoubleRegister reg); 2762c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2763c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Methods for setting up define-use relationships. 2764c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 2765c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 2766c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 2767c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DoubleRegister fixed_register); 2768c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2769c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // A value that is guaranteed to be allocated to a register. 2770c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Operand created by UseRegister is guaranteed to be live until the end of 2771c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // instruction. This means that register allocator will not reuse it's 2772c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // register for any other operand inside instruction. 2773c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Operand created by UseRegisterAtStart is guaranteed to be live only at 2774c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // instruction start. Register allocator is free to assign the same register 2775c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // to some other operand used inside instruction (i.e. temporary or 2776c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // output). 2777c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseRegister(HValue* value); 2778c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 2779c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2780c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // An input operand in a register that may be trashed. 2781c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 2782c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2783c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // An input operand in a register or stack slot. 2784c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* Use(HValue* value); 2785c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 2786c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2787c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // An input operand in a register, stack slot or a constant operand. 2788c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 2789c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 2790c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2791c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // An input operand in a register or a constant operand. 2792c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 2793c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 2794c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2795f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org // An input operand in a constant operand. 2796f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org MUST_USE_RESULT LOperand* UseConstant(HValue* value); 2797f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2798c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // An input operand in register, stack slot or a constant operand. 2799c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Will not be moved to a register even if one is freely available. 2800ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE; 2801c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2802c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Temporary operand that must be in a register. 2803c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LUnallocated* TempRegister(); 2804d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org MUST_USE_RESULT LUnallocated* TempDoubleRegister(); 2805c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* FixedTemp(Register reg); 2806c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); 2807c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2808c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Methods for setting up define-use relationships. 2809c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Return the same instruction that they are passed. 281026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* Define(LTemplateResultInstruction<1>* instr, 281126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LUnallocated* result); 281226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); 281326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, 281426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org int index); 281526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr); 281626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr, 281726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org Register reg); 281826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr, 281926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DoubleRegister reg); 2820c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* AssignEnvironment(LInstruction* instr); 2821c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* AssignPointerMap(LInstruction* instr); 2822c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2823c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 2824c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2825c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // By default we assume that instruction sequences generated for calls 2826c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // cannot deoptimize eagerly and we do not attach environment to this 2827c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // instruction. 2828c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* MarkAsCall( 2829c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* instr, 2830c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HInstruction* hinstr, 2831c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 2832c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2833c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void VisitInstruction(HInstruction* current); 2834011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org void AddInstruction(LInstruction* instr, HInstruction* current); 2835c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2836c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 2837c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* DoBit(Token::Value op, HBitwiseBinaryOperation* instr); 2838c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 2839c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* DoArithmeticD(Token::Value op, 2840c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HArithmeticBinaryOperation* instr); 2841c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LInstruction* DoArithmeticT(Token::Value op, 2842528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org HBinaryOperation* instr); 2843c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 2844c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HInstruction* current_instruction_; 2845c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HBasicBlock* current_block_; 2846c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HBasicBlock* next_block_; 2847c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LAllocator* allocator_; 2848c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 28497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 28507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org}; 28517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2852c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_HYDROGEN_ACCESSOR 2853c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_CONCRETE_INSTRUCTION 28547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 28557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} } // namespace v8::internal 28567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 28577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#endif // V8_MIPS_LITHIUM_MIPS_H_ 2858