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. 4a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#ifndef V8_X64_LITHIUM_X64_H_ 6a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#define V8_X64_LITHIUM_X64_H_ 7a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@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" 13a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 14a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgnamespace v8 { 15a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgnamespace internal { 16a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 17a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Forward declarations. 18a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass LCodeGen; 19c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@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(DoubleBits) \ 71dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToI) \ 72dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DoubleToSmi) \ 73dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Drop) \ 74dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(DummyUse) \ 75dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Dummy) \ 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(MathClz32) \ 112dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(MathExp) \ 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(NumberTagD) \ 125dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagI) \ 126dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberTagU) \ 127dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(NumberUntagD) \ 128dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(OsrEntry) \ 129dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Parameter) \ 130dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Power) \ 131dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(PushArgument) \ 132dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(RegExpLiteral) \ 133dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Return) \ 134dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringGetChar) \ 135dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SeqStringSetChar) \ 136dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ShiftI) \ 137dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiTag) \ 138dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SmiUntag) \ 139dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StackCheck) \ 140dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreCodeEntry) \ 141dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreContextSlot) \ 142dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreFrameContext) \ 143dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreGlobalCell) \ 144dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyed) \ 145dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreKeyedGeneric) \ 146dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedField) \ 147dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StoreNamedGeneric) \ 148dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringAdd) \ 149dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharCodeAt) \ 150dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCharFromCode) \ 151dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(StringCompareAndBranch) \ 152dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(SubI) \ 153dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TaggedToI) \ 154e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org V(TailCallThroughMegamorphicCache) \ 155dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ThisFunction) \ 156dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(ToFastProperties) \ 157dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TransitionElementsKind) \ 158dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TrapAllocationMemento) \ 159dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Typeof) \ 160dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(TypeofIsAndBranch) \ 161dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(Uint32ToDouble) \ 162dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org V(UnknownOSRValue) \ 163c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org V(WrapReceiver) 164c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 165c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@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); \ 177c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 178c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 179c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 180c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org#define DECLARE_HYDROGEN_ACCESSOR(type) \ 181c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org H##type* hydrogen() const { \ 182c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return H##type::cast(hydrogen_value()); \ 183c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 184c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 185a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 18632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LInstruction : public ZoneObject { 187a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 188c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@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 } 19383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 19432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org virtual ~LInstruction() {} 195c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 196c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org virtual void CompileToNative(LCodeGen* generator) = 0; 197c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org virtual const char* Mnemonic() const = 0; 198c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org virtual void PrintTo(StringStream* stream); 19988d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org virtual void PrintDataTo(StringStream* stream); 20088d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org virtual void PrintOutputOperandTo(StringStream* stream); 201c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2028e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org enum Opcode { 2038e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Declare a unique enum value for each instruction. 2048e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org#define DECLARE_OPCODE(type) k##type, 2058e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 2068e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org kNumberOfInstructions 2078e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org#undef DECLARE_OPCODE 2088e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org }; 2098e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 2108e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org virtual Opcode opcode() const = 0; 2118e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 2128e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Declare non-virtual type testers for all leaf IR classes. 2138e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org#define DECLARE_PREDICATE(type) \ 2148e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org bool Is##type() const { return opcode() == k##type; } 2158e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 2168e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org#undef DECLARE_PREDICATE 2178e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 2188e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Declare virtual predicates for instructions that don't have 2198e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // an opcode. 2208e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org virtual bool IsGap() const { return false; } 2210511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 222c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org virtual bool IsControl() const { return false; } 223c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Try deleting this instruction if possible. 2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual bool TryDelete() { return false; } 2267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 22783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org void set_environment(LEnvironment* env) { environment_ = env; } 22883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org LEnvironment* environment() const { return environment_; } 22983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org bool HasEnvironment() const { return environment_ != NULL; } 230c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 231c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 232c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LPointerMap* pointer_map() const { return pointer_map_.get(); } 233c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool HasPointerMap() const { return pointer_map_.is_set(); } 234c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 235c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 236c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HValue* hydrogen_value() const { return hydrogen_value_; } 237c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 238594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); } 239594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool IsCall() const { return IsCallBits::decode(bit_field_); } 2401044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 241a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org // Interface to the register allocator and iterators. 242594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool ClobbersTemps() const { return IsCall(); } 243594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool ClobbersRegisters() const { return IsCall(); } 244a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const { 245a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org return IsCall(); 246a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org } 247a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 2481044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) { } 24983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 25083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // Interface to the register allocator and iterators. 251594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool IsMarkedAsCall() const { return IsCall(); } 25283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 25383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org virtual bool HasResult() const = 0; 254d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org virtual LOperand* result() const = 0; 25583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 25683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org LOperand* FirstInput() { return InputAt(0); } 25783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org LOperand* Output() { return HasResult() ? result() : NULL; } 25883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 25932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } 26032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 261895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org virtual bool MustSignExtendResult(LPlatformChunk* chunk) const { 262895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return false; 263895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org } 264895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 26583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org#ifdef DEBUG 26683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org void VerifyCall(); 26783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org#endif 26883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 2697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual int InputCount() = 0; 2707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual LOperand* InputAt(int i) = 0; 2717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 272c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 27346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Iterator support. 27446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org friend class InputIterator; 27546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 27656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org friend class TempIterator; 27756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org virtual int TempCount() = 0; 27856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org virtual LOperand* TempAt(int i) = 0; 27956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 280594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class IsCallBits: public BitField<bool, 0, 1> {}; 281594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 28283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org LEnvironment* environment_; 283c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org SetOncePointer<LPointerMap> pointer_map_; 284c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HValue* hydrogen_value_; 285594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org int bit_field_; 286c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 287c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 288c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2890a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// R = number of result operands (0 or 1). 29026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R> 29126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateResultInstruction : public LInstruction { 292c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 293c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Allow 0 or 1 output operands. 294c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org STATIC_ASSERT(R == 0 || R == 1); 295ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasResult() const FINAL OVERRIDE { 29632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return R != 0 && result() != NULL; 29732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 2980511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com void set_result(LOperand* operand) { results_[0] = operand; } 299d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org LOperand* result() const { return results_[0]; } 300c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 301895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org virtual bool MustSignExtendResult( 302ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org LPlatformChunk* chunk) const FINAL OVERRIDE; 303895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3040511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com protected: 3056d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org EmbeddedContainer<LOperand*, R> results_; 30626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org}; 30726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 30826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 30926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// R = number of result operands (0 or 1). 31026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// I = number of input operands. 31126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// T = number of temporary operands. 31226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R, int I, int T> 31326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateInstruction : public LTemplateResultInstruction<R> { 31426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org protected: 3156d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org EmbeddedContainer<LOperand*, I> inputs_; 3166d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org EmbeddedContainer<LOperand*, T> temps_; 31746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 31846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org private: 31956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org // Iterator support. 320ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return I; } 321ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 32256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 323ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return T; } 324ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return temps_[i]; } 325c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 326c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 327c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 32832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LGap : public LTemplateInstruction<0, 0, 0> { 329c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 330c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org explicit LGap(HBasicBlock* block) 331c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org : block_(block) { 332c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org parallel_moves_[BEFORE] = NULL; 333c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org parallel_moves_[START] = NULL; 334c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org parallel_moves_[END] = NULL; 335c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org parallel_moves_[AFTER] = NULL; 336c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 337c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 3388e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Can't use the DECLARE-macro here because of sub-classes. 339ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsGap() const FINAL OVERRIDE { return true; } 340ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 3418e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static LGap* cast(LInstruction* instr) { 342e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr->IsGap()); 3438e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org return reinterpret_cast<LGap*>(instr); 3448e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org } 345c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 346c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool IsRedundant() const; 347c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 348c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HBasicBlock* block() const { return block_; } 349c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 350c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org enum InnerPosition { 351c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org BEFORE, 352c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org START, 353c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org END, 354c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org AFTER, 355c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org FIRST_INNER_POSITION = BEFORE, 356c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LAST_INNER_POSITION = AFTER 357c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org }; 358c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 3597028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org LParallelMove* GetOrCreateParallelMove(InnerPosition pos, 3607028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org Zone* zone) { 3617028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org if (parallel_moves_[pos] == NULL) { 3627028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org parallel_moves_[pos] = new(zone) LParallelMove(zone); 3637028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org } 364c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return parallel_moves_[pos]; 365c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 366c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 367c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LParallelMove* GetParallelMove(InnerPosition pos) { 368c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return parallel_moves_[pos]; 369c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 370c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 371c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 372c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 373c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HBasicBlock* block_; 374c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 375c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 376c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 377ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstructionGap FINAL : public LGap { 3788e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org public: 3798e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 3808e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 381ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 38232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return !IsRedundant(); 38332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org } 38432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 3858e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 3868e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org}; 3878e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3888e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 389ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGoto FINAL : public LTemplateInstruction<0, 0, 0> { 390c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 391d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org explicit LGoto(HBasicBlock* block) : block_(block) { } 392c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 393ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE; 394c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 395ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 396ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 397c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 398d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org int block_id() const { return block_->block_id(); } 399c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 400c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 401d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org HBasicBlock* block_; 402c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 403c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 404c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 405ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> { 406c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 407c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LLazyBailout() : gap_instructions_size_(0) { } 408c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 409c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 410c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 411c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void set_gap_instructions_size(int gap_instructions_size) { 412c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org gap_instructions_size_ = gap_instructions_size; 413c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 414c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int gap_instructions_size() { return gap_instructions_size_; } 415c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 416c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 417c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int gap_instructions_size_; 418c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 419c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 420c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 421ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummy FINAL : public LTemplateInstruction<1, 0, 0> { 422935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org public: 4235e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org LDummy() {} 424935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 425935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org}; 426935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 427935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 428ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDummyUse FINAL : public LTemplateInstruction<1, 1, 0> { 42946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org public: 43046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org explicit LDummyUse(LOperand* value) { 43146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org inputs_[0] = value; 43246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 43346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 43446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org}; 43546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 43646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 437ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> { 438c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 439ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const OVERRIDE { return true; } 440c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 441c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 442c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 443c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 444c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 445ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLabel FINAL : public LGap { 446c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 447c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org explicit LLabel(HBasicBlock* block) 448c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org : LGap(block), replacement_(NULL) { } 449c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 450ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 45132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 45232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 453c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Label, "label") 454c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 455ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 456c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 457c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int block_id() const { return block()->block_id(); } 458c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool is_loop_header() const { return block()->IsLoopHeader(); } 45932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool is_osr_entry() const { return block()->is_osr_entry(); } 460c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Label* label() { return &label_; } 461c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LLabel* replacement() const { return replacement_; } 462c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void set_replacement(LLabel* label) { replacement_ = label; } 463c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool HasReplacement() const { return replacement_ != NULL; } 464c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 465c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 466c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Label label_; 467c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LLabel* replacement_; 468c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 469c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 470c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 471ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LParameter FINAL : public LTemplateInstruction<1, 0, 0> { 472c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 473ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 47432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 47532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 476c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 477c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 478c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 479c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 480ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallStub FINAL : public LTemplateInstruction<1, 1, 0> { 481c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 482935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LCallStub(LOperand* context) { 483935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 484935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 485935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 486935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 487935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 488c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 489c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallStub) 490c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 491c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 492c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 493e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.orgclass LTailCallThroughMegamorphicCache FINAL 494e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org : public LTemplateInstruction<0, 3, 0> { 495e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org public: 496e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org explicit LTailCallThroughMegamorphicCache(LOperand* context, 497e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver, 498e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name) { 499e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[0] = context; 500e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[1] = receiver; 501e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org inputs_[2] = name; 502e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org } 503e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 504e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* context() { return inputs_[0]; } 505e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* receiver() { return inputs_[1]; } 506e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org LOperand* name() { return inputs_[2]; } 507e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 508e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache, 509e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org "tail-call-through-megamorphic-cache") 510e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(TailCallThroughMegamorphicCache) 511e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org}; 512e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 513e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 514ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> { 515c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 516ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 51732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 51832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 519c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 520c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 521c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 522c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 5230a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.orgtemplate<int I, int T> 52432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LControlInstruction : public LTemplateInstruction<0, I, T> { 525c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 5261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 5271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 528ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool IsControl() const FINAL OVERRIDE { return true; } 529c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 5304f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org int SuccessorCount() { return hydrogen()->SuccessorCount(); } 5314f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 5321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int TrueDestination(LChunk* chunk) { 5341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return chunk->LookupDestination(true_block_id()); 5351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int FalseDestination(LChunk* chunk) { 5371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return chunk->LookupDestination(false_block_id()); 5381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* TrueLabel(LChunk* chunk) { 5411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (true_label_ == NULL) { 5421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk)); 5431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return true_label_; 5451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* FalseLabel(LChunk* chunk) { 5471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (false_label_ == NULL) { 5481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk)); 5491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return false_label_; 5511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 5521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org protected: 5541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int true_block_id() { return SuccessorAt(0)->block_id(); } 5551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int false_block_id() { return SuccessorAt(1)->block_id(); } 556c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 5570511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com private: 5584f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org HControlInstruction* hydrogen() { 5594f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org return HControlInstruction::cast(this->hydrogen_value()); 5604f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org } 5611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 5621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* false_label_; 5631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Label* true_label_; 564c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 565c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 566c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 567ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LWrapReceiver FINAL : public LTemplateInstruction<1, 2, 0> { 568154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org public: 569154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org LWrapReceiver(LOperand* receiver, LOperand* function) { 570154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org inputs_[0] = receiver; 571154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org inputs_[1] = function; 572154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org } 573154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 574154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org LOperand* receiver() { return inputs_[0]; } 575154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org LOperand* function() { return inputs_[1]; } 57656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 57756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 57857a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 579154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org}; 580154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 581154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org 582ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LApplyArguments FINAL : public LTemplateInstruction<1, 4, 0> { 583c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 584c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LApplyArguments(LOperand* function, 585c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LOperand* receiver, 586c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LOperand* length, 587c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LOperand* elements) { 5880511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = function; 5890511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = receiver; 5900511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[2] = length; 5910511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[3] = elements; 592c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 593c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 5940511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* function() { return inputs_[0]; } 5950511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* receiver() { return inputs_[1]; } 5960511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* length() { return inputs_[2]; } 5970511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* elements() { return inputs_[3]; } 59856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 59956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 600c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 601c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 602c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 603ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAccessArgumentsAt FINAL : public LTemplateInstruction<1, 3, 0> { 604c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 605c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 6060511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = arguments; 6070511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = length; 6080511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[2] = index; 609c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 610c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 6110511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* arguments() { return inputs_[0]; } 6120511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* length() { return inputs_[1]; } 6130511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* index() { return inputs_[2]; } 614c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 61556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 61656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 617ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 618c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 619c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 620c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 621ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> { 622c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 6230511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LArgumentsLength(LOperand* elements) { 6240511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = elements; 6250511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 626c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 62756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* elements() { return inputs_[0]; } 62856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 629c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 630c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 631c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 632c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 633ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArgumentsElements FINAL : public LTemplateInstruction<1, 0, 0> { 634c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 635c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 63628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 637c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 638c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 639c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 640ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 641ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 642ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 643ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 644ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org divisor_ = divisor; 645ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 646ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 647ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 648ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor() const { return divisor_; } 649ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 650ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 651ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 652ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 653ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private: 654ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor_; 655ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 656ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 657ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 658ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModByConstI FINAL : public LTemplateInstruction<1, 1, 2> { 659bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org public: 660bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LModByConstI(LOperand* dividend, 661bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor, 662bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1, 663bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp2) { 664bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org inputs_[0] = dividend; 665bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org divisor_ = divisor; 666bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[0] = temp1; 667bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[1] = temp2; 668bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org } 669bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 670bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 671bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor() const { return divisor_; } 672bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 673bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 674bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 675bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 676bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 677bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 678bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private: 679bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor_; 680bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org}; 681bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 682bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 683ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LModI FINAL : public LTemplateInstruction<1, 2, 1> { 684c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 6850511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LModI(LOperand* left, LOperand* right, LOperand* temp) { 6860511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 6870511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 6880511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 6890511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 690c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 69156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 69256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 69356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 69456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 695c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 696c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mod) 697c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 698c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 699c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 700ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 701ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 702ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 703ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 704ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org divisor_ = divisor; 705ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 706ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 707ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 708ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor() const { return divisor_; } 709ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 710ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 711ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 712ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 713ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private: 714ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor_; 715ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 716ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 717ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 718ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivByConstI FINAL : public LTemplateInstruction<1, 1, 2> { 719bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org public: 720bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LDivByConstI(LOperand* dividend, 721bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor, 722bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1, 723bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp2) { 724bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org inputs_[0] = dividend; 725bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org divisor_ = divisor; 726bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[0] = temp1; 727bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[1] = temp2; 728bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org } 729bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 730bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 731bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor() const { return divisor_; } 732bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 733bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 734bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 735bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 736bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Div) 737bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 738bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private: 739bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor_; 740bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org}; 741bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 742bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 743ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDivI FINAL : public LTemplateInstruction<1, 2, 1> { 744c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 745ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 746ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org inputs_[0] = dividend; 747ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org inputs_[1] = divisor; 7480511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 7490511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 750c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 751ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 752ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 75356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 75456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 755c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 756ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 757c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 758c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 759c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 760ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> { 761d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org public: 762ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 763ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 764ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org divisor_ = divisor; 765ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 766ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 767ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 768ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor() const { return divisor_; } 769ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 770ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 771ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org "flooring-div-by-power-of-2-i") 772ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 773ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 774ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private: 775ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor_; 776ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 777ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 778ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 779ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivByConstI FINAL : public LTemplateInstruction<1, 1, 3> { 780ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 781bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LFlooringDivByConstI(LOperand* dividend, 782bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org int32_t divisor, 783bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1, 7847010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org LOperand* temp2, 7857010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org LOperand* temp3) { 786ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = dividend; 787ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org divisor_ = divisor; 788bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[0] = temp1; 789bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org temps_[1] = temp2; 7907010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org temps_[2] = temp3; 791d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org } 792d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org 793ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 794ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor() const { return divisor_; } 795bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 7967010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 7977010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org LOperand* temp3() { return temps_[2]; } 79856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 799ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 800d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 801ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 802ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private: 803ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org int32_t divisor_; 804d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org}; 805d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org 806d2899aa30a5af82205029034f7a491d49c48fc68yangguo@chromium.org 807ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFlooringDivI FINAL : public LTemplateInstruction<1, 2, 1> { 808ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org public: 809ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LFlooringDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 810ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org inputs_[0] = dividend; 811ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org inputs_[1] = divisor; 812ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org temps_[0] = temp; 813ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org } 814ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org 815ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LOperand* dividend() { return inputs_[0]; } 816ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LOperand* divisor() { return inputs_[1]; } 817ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LOperand* temp() { return temps_[0]; } 818ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org 819ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 820ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 821ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org}; 822ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org 823ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org 824ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMulI FINAL : public LTemplateInstruction<1, 2, 0> { 825c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 826d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com LMulI(LOperand* left, LOperand* right) { 8270511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 8280511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 8290511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 830c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 83156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 83256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 83356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 834c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 835c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(Mul) 836c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 837c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 838c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 839ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareNumericAndBranch FINAL : public LControlInstruction<2, 0> { 840c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 841e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org LCompareNumericAndBranch(LOperand* left, LOperand* right) { 8420511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 8430511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 8440511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 845c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 84656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 84756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 84856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 849e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 850e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org "compare-numeric-and-branch") 851e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 852c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 8530511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com Token::Value op() const { return hydrogen()->token(); } 8540511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com bool is_double() const { 855fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return hydrogen()->representation().IsDouble(); 8560511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 857c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 858ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 859c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 860c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 861c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 862ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFloor FINAL : public LTemplateInstruction<1, 1, 0> { 863c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 864e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathFloor(LOperand* value) { 8650511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 8660511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 867c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 86856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 86956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 870e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 871c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 872e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 873c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 874e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 875ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathRound FINAL : public LTemplateInstruction<1, 1, 1> { 876e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 877dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LMathRound(LOperand* value, LOperand* temp) { 878e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 879381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org temps_[0] = temp; 880e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 881e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 882e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 883381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org LOperand* temp() { return temps_[0]; } 884e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 885e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 886e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 887e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 888e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 889e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 890ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathFround FINAL : public LTemplateInstruction<1, 1, 0> { 891dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org public: 892dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org explicit LMathFround(LOperand* value) { inputs_[0] = value; } 893dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 894dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LOperand* value() { return inputs_[0]; } 895dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 8967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") 897dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org}; 898dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 899dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 900ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathAbs FINAL : public LTemplateInstruction<1, 2, 0> { 901e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 902935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LMathAbs(LOperand* context, LOperand* value) { 903935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = context; 904e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 905e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 906e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 907935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[1]; } 908e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 909e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 910e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 911e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 912e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 913e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 914e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 915ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathLog FINAL : public LTemplateInstruction<1, 1, 0> { 916e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 917e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathLog(LOperand* value) { 918e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 919e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 920e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 921e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 922e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 923e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 924e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 925e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 926e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 927ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathClz32 FINAL : public LTemplateInstruction<1, 1, 0> { 928f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org public: 929f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org explicit LMathClz32(LOperand* value) { 930f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org inputs_[0] = value; 931f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 932f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 933f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org LOperand* value() { return inputs_[0]; } 934f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 935f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 936f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org}; 937f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 938f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 939ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathExp FINAL : public LTemplateInstruction<1, 1, 2> { 9401f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org public: 9411f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org LMathExp(LOperand* value, LOperand* temp1, LOperand* temp2) { 9421f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org inputs_[0] = value; 9431f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org temps_[0] = temp1; 9441f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org temps_[1] = temp2; 9451f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org ExternalReference::InitializeMathExpData(); 9461f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 9471f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 9481f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org LOperand* value() { return inputs_[0]; } 9491f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org LOperand* temp1() { return temps_[0]; } 9501f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org LOperand* temp2() { return temps_[1]; } 9511f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 9521f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 953e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 9541f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 955e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 956ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathSqrt FINAL : public LTemplateInstruction<1, 1, 0> { 957e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 958e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathSqrt(LOperand* value) { 959e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 960e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 961e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 962e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 963e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 964e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 965e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 966e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 967e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 968ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathPowHalf FINAL : public LTemplateInstruction<1, 1, 0> { 969e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 970e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org explicit LMathPowHalf(LOperand* value) { 971e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org inputs_[0] = value; 972e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 973e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 974e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LOperand* value() { return inputs_[0]; } 975e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 976e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 9771f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org}; 9781f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 9791f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 980ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpObjectEqAndBranch FINAL : public LControlInstruction<2, 0> { 981c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 982ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 9830511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 9840511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 9850511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 986c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 98756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 98856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 98956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 990c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 991c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org}; 992c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org 993c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org 994ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpHoleAndBranch FINAL : public LControlInstruction<1, 0> { 995c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org public: 996c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org explicit LCmpHoleAndBranch(LOperand* object) { 997c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org inputs_[0] = object; 998c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org } 999c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org 1000c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org LOperand* object() { return inputs_[0]; } 1001c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org 1002c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 1003c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 10047304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org}; 10057304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 10067304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 1007ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCompareMinusZeroAndBranch FINAL : public LControlInstruction<1, 0> { 10080cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org public: 10090cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org explicit LCompareMinusZeroAndBranch(LOperand* value) { 10100cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org inputs_[0] = value; 10110cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org } 10120cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10130cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org LOperand* value() { return inputs_[0]; } 10140cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10150cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch, 10160cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org "cmp-minus-zero-and-branch") 10170cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch) 10180cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org}; 10190cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10200cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 10210cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 1022ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsObjectAndBranch FINAL : public LControlInstruction<1, 0> { 1023c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 10240ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org explicit LIsObjectAndBranch(LOperand* value) { 10250511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 10260511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1027c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 102856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 102956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1030c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 10314f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) 1032c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1033ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1034c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1035c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1036c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1037ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsStringAndBranch FINAL : public LControlInstruction<1, 1> { 10380ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry public: 10390ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry explicit LIsStringAndBranch(LOperand* value, LOperand* temp) { 10400ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry inputs_[0] = value; 10410ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry temps_[0] = temp; 10420ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 10430ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 104456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 104556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 104656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 10470ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 10480ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 10490ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1050ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 10510ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 10520ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 10530ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1054ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> { 1055c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 10560511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LIsSmiAndBranch(LOperand* value) { 10570511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 10580511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1059c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 106056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 106156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1062c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 10634f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 1064c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1065ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1066c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1067c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1068c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1069ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> { 10707304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org public: 10717304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 10727304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org inputs_[0] = value; 10737304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org temps_[0] = temp; 10747304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org } 10757304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 107656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 107756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 107856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 10797304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 10807304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org "is-undetectable-and-branch") 10814f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 10827304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 1083ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 10847304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org}; 10857304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 10867304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 1087ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> { 10880ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry public: 1089935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LStringCompareAndBranch(LOperand* context, 1090935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left, 1091935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right) { 1092935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1093935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = left; 1094935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = right; 10950ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 10960ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1097935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1098935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left() { return inputs_[1]; } 1099935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right() { return inputs_[2]; } 110056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 11010ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 11020ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry "string-compare-and-branch") 11030ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 11040ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1105ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 11060ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 11070ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry Token::Value op() const { return hydrogen()->token(); } 11080ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 11090ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 11100ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1111ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> { 1112c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 11130a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org explicit LHasInstanceTypeAndBranch(LOperand* value) { 11140511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 11150511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1116c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 111756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 111856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1119c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 1120c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org "has-instance-type-and-branch") 11214f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 1122c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1123ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1124c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1125c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1126c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1127ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> { 11288f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org public: 11298f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org explicit LGetCachedArrayIndex(LOperand* value) { 11308f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org inputs_[0] = value; 11318f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org } 11328f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 113356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 113456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 11358f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 11368f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 11378f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org}; 11388f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 11398f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 1140ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LHasCachedArrayIndexAndBranch FINAL 114132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org : public LControlInstruction<1, 0> { 1142c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 11430511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 11440511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 11450511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1146c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 114756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 114856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1149c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 1150c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org "has-cached-array-index-and-branch") 11514f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 1152c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1153ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1154c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1155c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1156c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1157ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClassOfTestAndBranch FINAL : public LControlInstruction<1, 2> { 1158c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1159c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { 11600511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 11610511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 1162c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com temps_[1] = temp2; 11630511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1164c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 116556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 116656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 116756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp2() { return temps_[1]; } 116856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1169c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1170c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org "class-of-test-and-branch") 11714f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1172c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1173ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1174c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1175c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1176c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1177ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpT FINAL : public LTemplateInstruction<1, 3, 0> { 1178c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1179935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LCmpT(LOperand* context, LOperand* left, LOperand* right) { 1180935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1181935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = left; 1182935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = right; 11830511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1184c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1185935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1186935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left() { return inputs_[1]; } 1187935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right() { return inputs_[2]; } 118856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1189c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 11904f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1191c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1192c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op() const { return hydrogen()->token(); } 1193c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1194c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1195c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1196ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOf FINAL : public LTemplateInstruction<1, 3, 0> { 1197c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1198935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { 1199935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1200935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = left; 1201935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = right; 12020511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1203c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1204935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1205935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left() { return inputs_[1]; } 1206935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right() { return inputs_[2]; } 120756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1208c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 1209c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1210c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1211c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1212ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInstanceOfKnownGlobal FINAL : public LTemplateInstruction<1, 2, 1> { 1213c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1214935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { 1215935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1216935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = value; 12174d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org temps_[0] = temp; 12180511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1219c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1220935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1221935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* value() { return inputs_[1]; } 122256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 122356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1224c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 1225c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org "instance-of-known-global") 1226c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 1227c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1228c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@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_; 1239c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1240c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1241c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1242ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBoundsCheck FINAL : public LTemplateInstruction<0, 2, 0> { 1243c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 12440511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LBoundsCheck(LOperand* index, LOperand* length) { 12450511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = index; 12460511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = length; 12470511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1248c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 12490511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* index() { return inputs_[0]; } 12500511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* length() { return inputs_[1]; } 1251c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1252c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1253304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 1254c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1255c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1256c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1257ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBitI FINAL : public LTemplateInstruction<1, 2, 0> { 1258c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1259c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org LBitI(LOperand* left, LOperand* right) { 12600511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 12610511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 12620511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1263c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 126456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 126556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 126656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1267c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org Token::Value op() const { return hydrogen()->op(); } 12682ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org bool IsInteger32() const { 12692ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return hydrogen()->representation().IsInteger32(); 12702ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org } 1271c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1272c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 1273c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Bitwise) 1274c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1275c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1276c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1277ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LShiftI FINAL : public LTemplateInstruction<1, 2, 0> { 1278c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1279c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 12800511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com : op_(op), can_deopt_(can_deopt) { 12810511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 12820511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 12830511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1284c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1285c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op() const { return op_; } 128656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 128756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 1288c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool can_deopt() const { return can_deopt_; } 1289c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1290c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 1291c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1292c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 1293c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op_; 1294c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool can_deopt_; 1295c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1296c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1297c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1298ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSubI FINAL : public LTemplateInstruction<1, 2, 0> { 1299c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 13000511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LSubI(LOperand* left, LOperand* right) { 13010511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 13020511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 13030511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1304c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 130556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 130656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 130756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1308c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 1309c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(Sub) 1310c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1311c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1312c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1313ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantI FINAL : public LTemplateInstruction<1, 0, 0> { 1314c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1315c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 1316d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com DECLARE_HYDROGEN_ACCESSOR(Constant) 1317c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1318d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com int32_t value() const { return hydrogen()->Integer32Value(); } 1319c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1320c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1321c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1322ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantS FINAL : public LTemplateInstruction<1, 0, 0> { 1323b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org public: 1324b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 1325b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1326b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1327b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 1328b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org}; 1329b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1330b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 1331ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantD FINAL : public LTemplateInstruction<1, 0, 1> { 1332c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1333d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com explicit LConstantD(LOperand* temp) { 13340511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 13350511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 133656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 133756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 133856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1339c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 1340d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com DECLARE_HYDROGEN_ACCESSOR(Constant) 1341c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1342d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com double value() const { return hydrogen()->DoubleValue(); } 1343c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1344c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1345c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1346ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantE FINAL : public LTemplateInstruction<1, 0, 0> { 1347d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org public: 1348d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 1349d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Constant) 1350d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1351d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org ExternalReference value() const { 1352d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return hydrogen()->ExternalReferenceValue(); 1353d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } 1354d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}; 1355d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1356d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 1357ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstantT FINAL : public LTemplateInstruction<1, 0, 0> { 1358c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1359c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1360d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com DECLARE_HYDROGEN_ACCESSOR(Constant) 1361c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1362639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Handle<Object> value(Isolate* isolate) const { 1363639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org return hydrogen()->handle(isolate); 1364639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 1365c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1366c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1367c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1368ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LBranch FINAL : public LControlInstruction<1, 0> { 1369c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 13700511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LBranch(LOperand* value) { 13710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 13720511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1373c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 137456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 137556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1376c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 13774f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(Branch) 1378c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1379ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1380c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1381c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1382c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1383ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> { 13844e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org public: 13854e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 13864e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org}; 13874e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 13884e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 1389ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCmpMapAndBranch FINAL : public LControlInstruction<1, 0> { 1390c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 13910511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LCmpMapAndBranch(LOperand* value) { 13920511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 13930511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1394c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 139556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 139656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1397c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 13980a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1399c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1400528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> map() const { return hydrogen()->map().handle(); } 1401c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1402c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1403c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1404ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMapEnumLength FINAL : public LTemplateInstruction<1, 1, 0> { 1405355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org public: 1406355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org explicit LMapEnumLength(LOperand* value) { 1407355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org inputs_[0] = value; 1408355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org } 1409355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 141056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 141156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1412355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length") 1413355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org}; 1414355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 1415355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 1416ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDateField FINAL : public LTemplateInstruction<1, 1, 0> { 14174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org public: 14184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org LDateField(LOperand* date, Smi* index) : index_(index) { 14194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org inputs_[0] = date; 14204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org } 14214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 142256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* date() { return inputs_[0]; } 142356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org Smi* index() const { return index_; } 142456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 14253d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field") 14263d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DateField) 14274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 14284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org private: 14294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org Smi* index_; 14304efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org}; 14314efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 14324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 1433ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringGetChar FINAL : public LTemplateInstruction<1, 2, 0> { 1434e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org public: 1435e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LSeqStringGetChar(LOperand* string, LOperand* index) { 1436e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org inputs_[0] = string; 1437e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org inputs_[1] = index; 1438e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org } 1439e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1440e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* string() const { return inputs_[0]; } 1441e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* index() const { return inputs_[1]; } 1442e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1443e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 1444e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 1445e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org}; 1446e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1447e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org 1448ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSeqStringSetChar FINAL : public LTemplateInstruction<1, 4, 0> { 144932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org public: 14509af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LSeqStringSetChar(LOperand* context, 14519af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* string, 145232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org LOperand* index, 1453e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org LOperand* value) { 14549af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[0] = context; 14559af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[1] = string; 14569af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[2] = index; 14579af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org inputs_[3] = value; 145832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org } 145932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 14609af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* string() { return inputs_[1]; } 14619af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* index() { return inputs_[2]; } 14629af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org LOperand* value() { return inputs_[3]; } 146332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 146432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 146532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 146632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org}; 146732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 146832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 1469ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAddI FINAL : public LTemplateInstruction<1, 2, 0> { 1470c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 14710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LAddI(LOperand* left, LOperand* right) { 14720511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 14730511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 14740511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1475c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 147656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 147756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 147856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1479906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org static bool UseLea(HAdd* add) { 1480906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org return !add->CheckFlag(HValue::kCanOverflow) && 1481906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org add->BetterLeftOperand()->UseCount() > 1; 1482906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org } 1483906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 1484c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1485c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(Add) 1486c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1487c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1488c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1489ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LMathMinMax FINAL : public LTemplateInstruction<1, 2, 0> { 1490471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org public: 1491471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org LMathMinMax(LOperand* left, LOperand* right) { 1492471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org inputs_[0] = left; 1493471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org inputs_[1] = right; 1494471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org } 1495471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 149656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 149756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 149856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1499e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 1500471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 1501471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org}; 1502471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 1503471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 1504ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPower FINAL : public LTemplateInstruction<1, 2, 0> { 1505c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 15060511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LPower(LOperand* left, LOperand* right) { 15070511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 15080511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 15090511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1510c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 151156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 151256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 151356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1514c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1515c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(Power) 1516c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1517c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1518c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1519ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticD FINAL : public LTemplateInstruction<1, 2, 0> { 1520c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1521c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 15220511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com : op_(op) { 15230511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = left; 15240511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = right; 15250511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1526c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1527c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op() const { return op_; } 152856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* left() { return inputs_[0]; } 152956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* right() { return inputs_[1]; } 1530c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1531ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const OVERRIDE { 153232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return LInstruction::kArithmeticD; 153332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 1534ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1535ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 1536c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1537c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 1538c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op_; 1539c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1540c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1541c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1542ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> { 1543c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1544935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LArithmeticT(Token::Value op, 1545935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context, 1546935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left, 1547935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right) 15480511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com : op_(op) { 1549935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1550935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = left; 1551935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = right; 15520511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1553c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 155456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org Token::Value op() const { return op_; } 1555935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1556935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left() { return inputs_[1]; } 1557935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right() { return inputs_[2]; } 155856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1559ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual Opcode opcode() const OVERRIDE { 156032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return LInstruction::kArithmeticT; 156132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 1562ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void CompileToNative(LCodeGen* generator) OVERRIDE; 1563ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual const char* Mnemonic() const OVERRIDE; 1564c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1565c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 1566c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Token::Value op_; 1567c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1568c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1569c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1570ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LReturn FINAL : public LTemplateInstruction<0, 3, 0> { 1571c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1572935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LReturn(LOperand* value, 1573935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context, 1574935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* parameter_count) { 15750511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 1576935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = context; 1577935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = parameter_count; 15780511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1579c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 158056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 1581935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[1]; } 158256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 15836e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org bool has_constant_parameter_count() { 15846e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return parameter_count()->IsConstantOperand(); 15856e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org } 15866e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org LConstantOperand* constant_parameter_count() { 1587e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(has_constant_parameter_count()); 15886e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return LConstantOperand::cast(parameter_count()); 15896e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org } 1590935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* parameter_count() { return inputs_[2]; } 15916e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 1592c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1593ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Return) 1594c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1595c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1596c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1597ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedField FINAL : public LTemplateInstruction<1, 1, 0> { 1598c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 159957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org explicit LLoadNamedField(LOperand* object) { 16000511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = object; 16010511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1602c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 160356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* object() { return inputs_[0]; } 160456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1605c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1606c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1607c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1608c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1609c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1610ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadNamedGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 1611c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 16129d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org explicit LLoadNamedGeneric(LOperand* context, LOperand* object, 16139d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 1614935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1615935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = object; 16169d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 16170511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1618c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1619c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1620c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1621c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1622935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1623935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object() { return inputs_[1]; } 16249d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 16259d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org 1626c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1627c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1628c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1629c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1630ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFunctionPrototype FINAL : public LTemplateInstruction<1, 1, 0> { 1631c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1632496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org explicit LLoadFunctionPrototype(LOperand* function) { 16330511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = function; 16340511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1635c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1636c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1637c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1638c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 16390511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LOperand* function() { return inputs_[0]; } 1640c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1641c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1642c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1643ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadRoot FINAL : public LTemplateInstruction<1, 0, 0> { 1644528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org public: 1645528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 1646528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 1647528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1648528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Heap::RootListIndex index() const { return hydrogen()->index(); } 1649528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org}; 1650528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1651528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 165270d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.orginline static bool ExternalArrayOpRequiresTemp( 165370d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org Representation key_representation, 165470d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org ElementsKind elements_kind) { 165570d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org // Operations that require the key to be divided by two to be converted into 165670d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org // an index cannot fold the scale operation into a load and need an extra 165770d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org // temp register to do the work. 165870d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org return SmiValuesAre31Bits() && key_representation.IsSmi() && 165970d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org (elements_kind == EXTERNAL_INT8_ELEMENTS || 166070d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org elements_kind == EXTERNAL_UINT8_ELEMENTS || 166170d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS || 166270d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org elements_kind == UINT8_ELEMENTS || 166370d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org elements_kind == INT8_ELEMENTS || 166470d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org elements_kind == UINT8_CLAMPED_ELEMENTS); 166570d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org} 166670d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org 166770d11c79c7833b9ab1ee185625fcf707b9480a40machenbach@chromium.org 1668ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyed FINAL : public LTemplateInstruction<1, 2, 0> { 1669c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1670e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org LLoadKeyed(LOperand* elements, LOperand* key) { 16710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = elements; 16720511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = key; 16730511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1674c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1675e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1676e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 1677c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1678e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org bool is_external() const { 1679e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org return hydrogen()->is_external(); 1680717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org } 16815c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_fixed_typed_array() const { 16825c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 16835c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 16845c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_typed_elements() const { 16855c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return is_external() || is_fixed_typed_array(); 16865c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 1687717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org LOperand* elements() { return inputs_[0]; } 1688717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org LOperand* key() { return inputs_[1]; } 1689ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1690fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 169183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org ElementsKind elements_kind() const { 16926d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org return hydrogen()->elements_kind(); 16937979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org } 1694496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org}; 1695496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 1696496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 1697ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> { 1698c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 16999d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key, 17009d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 1701935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1702935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = obj; 1703935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = key; 17049d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 17050511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1706c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1707c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 17089d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) 1709c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1710935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1711935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object() { return inputs_[1]; } 1712935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* key() { return inputs_[2]; } 17139d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 1714c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1715c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1716c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1717ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalCell FINAL : public LTemplateInstruction<1, 0, 0> { 1718c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1719c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 1720c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1721c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org}; 1722c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 1723c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 1724ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> { 1725c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org public: 17269d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org explicit LLoadGlobalGeneric(LOperand* context, LOperand* global_object, 17279d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* vector) { 1728935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1729935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = global_object; 17309d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org temps_[0] = vector; 1731c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 1732c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 1733c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 1734c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 1735c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 1736935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1737935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* global_object() { return inputs_[1]; } 17389d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org LOperand* temp_vector() { return temps_[0]; } 17399d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org 1740c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 1741c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org bool for_typeof() const { return hydrogen()->for_typeof(); } 1742c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1743c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1744c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1745ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreGlobalCell FINAL : public LTemplateInstruction<0, 1, 1> { 1746c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1747e78f9fcf40d01605c74cacb606ccabae36ba46bddanno@chromium.org explicit LStoreGlobalCell(LOperand* value, LOperand* temp) { 17480511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 1749e78f9fcf40d01605c74cacb606ccabae36ba46bddanno@chromium.org temps_[0] = temp; 17500511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1751c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 175256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 175356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 175456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 175574f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 175674f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 175774f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org}; 175874f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org 175974f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org 1760ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadContextSlot FINAL : public LTemplateInstruction<1, 1, 0> { 1761c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 176283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org explicit LLoadContextSlot(LOperand* context) { 176383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org inputs_[0] = context; 176483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org } 176583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 176656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* context() { return inputs_[0]; } 176756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1768c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1769c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1770c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 17710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com int slot_index() { return hydrogen()->slot_index(); } 1772c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1773ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1774c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1775c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1776c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1777ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 1> { 17783a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org public: 17798f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) { 17803a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org inputs_[0] = context; 17813a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org inputs_[1] = value; 17828f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org temps_[0] = temp; 17833a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 17843a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 178556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* context() { return inputs_[0]; } 178656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[1]; } 178756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 178856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 17893a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 17903a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 17913a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 17923a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org int slot_index() { return hydrogen()->slot_index(); } 17933a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 1794ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 17953a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org}; 17963a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 17973a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 1798ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> { 1799c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 18000511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LPushArgument(LOperand* value) { 18010511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 18020511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1803c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 180456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 180556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1806c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1807c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1808c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1809c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1810ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDrop FINAL : public LTemplateInstruction<0, 0, 0> { 181128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org public: 181228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org explicit LDrop(int count) : count_(count) { } 181328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 181428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org int count() const { return count_; } 181528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 181628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 181728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 181828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org private: 181928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org int count_; 182028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org}; 182128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 182228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 1823ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> { 1824662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org public: 1825662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org LStoreCodeEntry(LOperand* function, LOperand* code_object) { 1826662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org inputs_[0] = function; 18273ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org inputs_[1] = code_object; 1828662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org } 1829662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1830662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org LOperand* function() { return inputs_[0]; } 18313ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org LOperand* code_object() { return inputs_[1]; } 1832662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1833662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org virtual void PrintDataTo(StringStream* stream); 1834662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1835662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 1836662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 1837662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org}; 1838662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1839662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1840ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> { 18412bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org public: 1842ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 18432bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org inputs_[0] = base_object; 1844ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org inputs_[1] = offset; 18452bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org } 18462bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 1847ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LOperand* base_object() const { return inputs_[0]; } 1848ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org LOperand* offset() const { return inputs_[1]; } 18492bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 1850ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 18512bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 1852ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 18532bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org}; 18542bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 18552bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 1856ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> { 1857394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com public: 1858d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 1859394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 1860d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org}; 1861d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 1862d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 1863ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LContext FINAL : public LTemplateInstruction<1, 0, 0> { 1864496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org public: 1865496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Context, "context") 186694b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Context) 1867496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org}; 1868496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 1869496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 1870ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDeclareGlobals FINAL : public LTemplateInstruction<0, 1, 0> { 187156454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org public: 1872935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LDeclareGlobals(LOperand* context) { 1873935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1874935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 1875935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 1876935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1877935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 187856454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 187956454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 188056454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org}; 188156454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org 188256454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org 1883ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallJSFunction FINAL : public LTemplateInstruction<1, 1, 0> { 1884160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org public: 188526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org explicit LCallJSFunction(LOperand* function) { 188626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_[0] = function; 1887160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org } 1888160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 188926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* function() { return inputs_[0]; } 189056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 189126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") 189226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) 1893160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 1894ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1895160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 1896160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1897160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org}; 1898160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 1899160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 1900ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> { 1901c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 19029aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org LCallWithDescriptor(CallInterfaceDescriptor descriptor, 1903ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org const ZoneList<LOperand*>& operands, Zone* zone) 19049aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org : inputs_(descriptor.GetRegisterParameterCount() + 1, zone) { 19059aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DCHECK(descriptor.GetRegisterParameterCount() + 1 == operands.length()); 190626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_.AddAll(operands, zone); 19070511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 19080511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 190926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* target() const { return inputs_[0]; } 1910c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1911e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 1912e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 191326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org private: 191426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 19153a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 1916ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1917c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1918c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 191926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 192026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org ZoneList<LOperand*> inputs_; 192126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 192226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Iterator support. 1923ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int InputCount() FINAL OVERRIDE { return inputs_.length(); } 1924ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } 192526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 1926ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual int TempCount() FINAL OVERRIDE { return 0; } 1927ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual LOperand* TempAt(int i) FINAL OVERRIDE { return NULL; } 1928c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1929c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1930c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1931ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> { 1932c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 193326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInvokeFunction(LOperand* context, LOperand* function) { 1934935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 193526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org inputs_[1] = function; 1936935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 1937935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 1938935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 193926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LOperand* function() { return inputs_[1]; } 1940935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 194126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 194226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1943a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 1944ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1945d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1946c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1947c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1948a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 1949a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 1950ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> { 1951c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1952935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LCallFunction(LOperand* context, LOperand* function) { 1953935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1954935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = function; 1955c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org } 19563a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 1957c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1958c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1959d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1960935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1961935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* function() { return inputs_[1]; } 1962c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1963c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1964d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1965d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1966ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNew FINAL : public LTemplateInstruction<1, 2, 0> { 1967c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 1968935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LCallNew(LOperand* context, LOperand* constructor) { 1969935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1970935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = constructor; 19710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 1972c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1973935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1974935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 197556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 1976c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1977c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNew) 1978c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1979ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 1980c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1981c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 1982c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 1983c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1984c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 1985ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> { 19864a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org public: 1987935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LCallNewArray(LOperand* context, LOperand* constructor) { 1988935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 1989935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = constructor; 19904a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org } 19914a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1992935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 1993935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* constructor() { return inputs_[1]; } 19944a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 19954a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 19964a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 19974a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1998ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 19994a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 20004a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org int arity() const { return hydrogen()->argument_count() - 1; } 20014a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org}; 20024a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 20034a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 2004ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> { 2005c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2006935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LCallRuntime(LOperand* context) { 2007935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2008935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 2009935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2010935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2011935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2012c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 2013c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 2014c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2015ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE { 2016fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org return save_doubles() == kDontSaveFPRegs; 2017fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org } 2018fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 2019ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org const Runtime::Function* function() const { return hydrogen()->function(); } 2020c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org int arity() const { return hydrogen()->argument_count(); } 2021fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } 2022c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2023c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2024c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2025ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 2026c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 20270511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LInteger32ToDouble(LOperand* value) { 20280511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 20290511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2030c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 203156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 203256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2033c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 2034c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2035c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2036c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2037ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LUint32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { 203846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org public: 20397e6132b924829c353864933f29124419916db550machenbach@chromium.org explicit LUint32ToDouble(LOperand* value) { 204046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org inputs_[0] = value; 204146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org } 204246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 204356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 204456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 204546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 204646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org}; 204746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 204846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2049ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagI FINAL : public LTemplateInstruction<1, 1, 2> { 2050c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2051e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) { 20520511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 2053e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org temps_[0] = temp1; 2054e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org temps_[1] = temp2; 20550511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2056c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 205756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 2058e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LOperand* temp1() { return temps_[0]; } 2059e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org LOperand* temp2() { return temps_[1]; } 206056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2061c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 2062c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2063c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2064c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2065ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagU FINAL : public LTemplateInstruction<1, 1, 2> { 206646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org public: 2067bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) { 206846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org inputs_[0] = value; 2069bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[0] = temp1; 2070bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org temps_[1] = temp2; 207146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org } 207246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 207356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 2074bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp1() { return temps_[0]; } 2075bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org LOperand* temp2() { return temps_[1]; } 207656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 207746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 207846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org}; 207946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 208046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2081ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberTagD FINAL : public LTemplateInstruction<1, 1, 1> { 2082c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 20830511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LNumberTagD(LOperand* value, LOperand* temp) { 20840511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 20850511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 20860511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2087c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 208856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 208956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 209056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2091c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 209294b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2093a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}; 2094a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2095a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2096c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org// Sometimes truncating conversion from a tagged value to an int32. 2097ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToI FINAL : public LTemplateInstruction<1, 1, 0> { 2098a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 20993a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org explicit LDoubleToI(LOperand* value) { 21000511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 21010511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2102a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 210356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 210456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2105c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 2106c54d36599f1e72bddd09d5b7a980304c7b638048ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2107a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2108c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2109a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}; 2110a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2111a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2112ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleToSmi FINAL : public LTemplateInstruction<1, 1, 0> { 2113a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org public: 2114a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org explicit LDoubleToSmi(LOperand* value) { 2115a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org inputs_[0] = value; 2116a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org } 2117a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2118a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org LOperand* value() { return inputs_[0]; } 2119a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2120a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 2121a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2122a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org}; 2123a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2124a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2125c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org// Truncating conversion from a tagged value to an int32. 2126ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTaggedToI FINAL : public LTemplateInstruction<1, 1, 1> { 2127a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 21280511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LTaggedToI(LOperand* value, LOperand* temp) { 21290511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 21300511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com temps_[0] = temp; 21310511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2132a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 213356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 213456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 213556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2136c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 2137528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2138a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2139c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2140c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2141c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2142c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2143ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiTag FINAL : public LTemplateInstruction<1, 1, 0> { 2144c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 21450511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LSmiTag(LOperand* value) { 21460511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 21470511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2148c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 214956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 215056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2151c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 2152381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change) 2153c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2154c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2155c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2156ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LNumberUntagD FINAL : public LTemplateInstruction<1, 1, 0> { 2157c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 21580511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LNumberUntagD(LOperand* value) { 21590511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 21600511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2161c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 216256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 216356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2164c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 21656d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org DECLARE_HYDROGEN_ACCESSOR(Change); 2166c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2167c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2168c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2169ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LSmiUntag FINAL : public LTemplateInstruction<1, 1, 0> { 2170c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 21710511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com LSmiUntag(LOperand* value, bool needs_check) 21720511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com : needs_check_(needs_check) { 21730511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 21740511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2175c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 217656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 2177c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool needs_check() const { return needs_check_; } 2178c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 217956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 218056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2181c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org private: 2182c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org bool needs_check_; 2183c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2184c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2185c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2186ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedField FINAL : public LTemplateInstruction<0, 2, 1> { 2187c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 21883a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 21893a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org inputs_[0] = object; 21903a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org inputs_[1] = value; 21913a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org temps_[0] = temp; 2192a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 2193a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 219456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* object() { return inputs_[0]; } 219556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[1]; } 219656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 219756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 21983a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 21993a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 2200c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2201ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2202c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2203f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Representation representation() const { 2204f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return hydrogen()->field_representation(); 2205f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org } 2206c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2207c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2208c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2209ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> { 2210c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2211935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { 2212935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2213935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = object; 2214935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = value; 22153a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 2216c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2217935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2218935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object() { return inputs_[1]; } 2219935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* value() { return inputs_[2]; } 222056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2221c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 2222c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 22233a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 2224ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 22253a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 22263a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Handle<Object> name() const { return hydrogen()->name(); } 2227486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2228c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2229c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2230c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2231ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> { 2232c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2233e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { 223456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org inputs_[0] = object; 22350511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[1] = key; 223656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org inputs_[2] = value; 2237a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 2238d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2239e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org bool is_external() const { return hydrogen()->is_external(); } 22405c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_fixed_typed_array() const { 22415c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return hydrogen()->is_fixed_typed_array(); 22425c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 22435c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org bool is_typed_elements() const { 22445c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return is_external() || is_fixed_typed_array(); 22455c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 224656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* elements() { return inputs_[0]; } 224756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* key() { return inputs_[1]; } 224856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[2]; } 2249e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org ElementsKind elements_kind() const { return hydrogen()->elements_kind(); } 225056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2251e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 2252e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 2253717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 2254ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 225528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 2256fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org uint32_t base_offset() const { return hydrogen()->base_offset(); } 2257717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org}; 2258717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 2259717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 2260ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> { 2261c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2262935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LStoreKeyedGeneric(LOperand* context, 2263935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object, 2264935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* key, 2265935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* value) { 2266935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2267935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = object; 2268935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = key; 2269935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[3] = value; 22703a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 2271c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2272935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2273935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object() { return inputs_[1]; } 2274935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* key() { return inputs_[2]; } 2275935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* value() { return inputs_[3]; } 227656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2277c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 227844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 22793a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 2280ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 22813a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 2282486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org StrictMode strict_mode() { return hydrogen()->strict_mode(); } 22833a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org}; 22843a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 22853a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 2286ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 2> { 2287394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com public: 2288394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com LTransitionElementsKind(LOperand* object, 2289935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context, 2290394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com LOperand* new_map_temp, 229156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp) { 2292394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com inputs_[0] = object; 2293935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = context; 2294394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com temps_[0] = new_map_temp; 229556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org temps_[1] = temp; 2296394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 2297394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 229856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* object() { return inputs_[0]; } 2299935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[1]; } 230056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* new_map_temp() { return temps_[0]; } 230156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[1]; } 230256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2303394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 2304394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com "transition-elements-kind") 2305394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 2306394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2307ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2308394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2309528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2310528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Map> transitioned_map() { 2311528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return hydrogen()->transitioned_map().handle(); 2312528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } 2313003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ElementsKind from_kind() { return hydrogen()->from_kind(); } 2314003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ElementsKind to_kind() { return hydrogen()->to_kind(); } 2315394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}; 2316394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2317394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2318ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTrapAllocationMemento FINAL : public LTemplateInstruction<0, 1, 1> { 231994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org public: 232094b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org LTrapAllocationMemento(LOperand* object, 232194b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org LOperand* temp) { 232294b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org inputs_[0] = object; 232394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org temps_[0] = temp; 232494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org } 232594b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 232694b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org LOperand* object() { return inputs_[0]; } 232794b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org LOperand* temp() { return temps_[0]; } 232894b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 232994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 233094b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org "trap-allocation-memento") 233194b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org}; 233294b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 233394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 2334ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringAdd FINAL : public LTemplateInstruction<1, 3, 0> { 2335160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org public: 2336935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 2337935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2338935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = left; 2339935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = right; 2340160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org } 2341160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 2342935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2343935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* left() { return inputs_[1]; } 2344935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* right() { return inputs_[2]; } 234556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 234656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 234756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringAdd) 2348160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org}; 2349160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 2350160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 2351ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharCodeAt FINAL : public LTemplateInstruction<1, 3, 0> { 23523a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org public: 2353935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 2354935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2355935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = string; 2356935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[2] = index; 23573a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 23583a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 2359935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2360935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* string() { return inputs_[1]; } 2361935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* index() { return inputs_[2]; } 236256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 236356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 236456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 2365c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2366c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2367c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2368ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStringCharFromCode FINAL : public LTemplateInstruction<1, 2, 0> { 2369b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org public: 2370935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { 2371935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2372935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = char_code; 2373b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org } 2374b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 2375935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2376935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* char_code() { return inputs_[1]; } 237756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2378b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2379b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 2380b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org}; 2381b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 2382b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 2383ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckValue FINAL : public LTemplateInstruction<0, 1, 0> { 2384c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 23851f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org explicit LCheckValue(LOperand* value) { 23860511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 23870511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2388c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 238956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 239064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 23911f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 23921f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckValue) 2393c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2394c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2395c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2396ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckInstanceType FINAL : public LTemplateInstruction<0, 1, 0> { 2397c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 239883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org explicit LCheckInstanceType(LOperand* value) { 23990511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 24000511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2401c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 240256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 240356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2404c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 2405c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 2406a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}; 2407a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2408a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2409ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMaps FINAL : public LTemplateInstruction<0, 1, 0> { 2410a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 2411af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org explicit LCheckMaps(LOperand* value = NULL) { 24120511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 24130511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2414c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 241556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 241656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 24171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 24181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 2419c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2420c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2421c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2422ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckSmi FINAL : public LTemplateInstruction<1, 1, 0> { 2423a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 2424badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org explicit LCheckSmi(LOperand* value) { 24250511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 24260511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2427a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 242856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 242956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2430badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 2431badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org}; 2432badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org 2433a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2434ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampDToUint8 FINAL : public LTemplateInstruction<1, 1, 0> { 2435c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org public: 243689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org explicit LClampDToUint8(LOperand* unclamped) { 243756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org inputs_[0] = unclamped; 2438c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org } 2439c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2440c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org LOperand* unclamped() { return inputs_[0]; } 2441c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2442c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 2443c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org}; 2444c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2445c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2446ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampIToUint8 FINAL : public LTemplateInstruction<1, 1, 0> { 2447c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org public: 244856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org explicit LClampIToUint8(LOperand* unclamped) { 244956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org inputs_[0] = unclamped; 2450c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org } 2451c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2452c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org LOperand* unclamped() { return inputs_[0]; } 2453c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2454c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 2455c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org}; 2456c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2457c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2458ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LClampTToUint8 FINAL : public LTemplateInstruction<1, 1, 1> { 2459c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org public: 246056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LClampTToUint8(LOperand* unclamped, 246189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org LOperand* temp_xmm) { 246256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org inputs_[0] = unclamped; 246389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org temps_[0] = temp_xmm; 2464c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org } 2465c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2466c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org LOperand* unclamped() { return inputs_[0]; } 246789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org LOperand* temp_xmm() { return temps_[0]; } 2468c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2469c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 2470c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org}; 2471c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2472c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 2473ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckNonSmi FINAL : public LTemplateInstruction<0, 1, 0> { 2474badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org public: 2475badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org explicit LCheckNonSmi(LOperand* value) { 2476badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org inputs_[0] = value; 2477a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 2478d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 247956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 248056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2481badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 24821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 24831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}; 24841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 24851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2486ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LDoubleBits FINAL : public LTemplateInstruction<1, 1, 0> { 2487ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 2488ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org explicit LDoubleBits(LOperand* value) { 2489ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = value; 2490ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2491ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2492ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* value() { return inputs_[0]; } 2493ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2494ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 2495ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 2496ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 2497ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2498ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2499ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LConstructDouble FINAL : public LTemplateInstruction<1, 2, 0> { 2500ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public: 2501ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LConstructDouble(LOperand* hi, LOperand* lo) { 2502ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[0] = hi; 2503ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org inputs_[1] = lo; 2504ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2505ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2506ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* hi() { return inputs_[0]; } 2507ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LOperand* lo() { return inputs_[1]; } 2508ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2509ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double") 2510ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org}; 2511ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2512ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2513ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LAllocate FINAL : public LTemplateInstruction<1, 2, 1> { 251494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org public: 2515935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LAllocate(LOperand* context, LOperand* size, LOperand* temp) { 2516935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2517935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = size; 251894b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org temps_[0] = temp; 251994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org } 252094b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 2521935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2522935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* size() { return inputs_[1]; } 252394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org LOperand* temp() { return temps_[0]; } 252494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 252594b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 252694b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org DECLARE_HYDROGEN_ACCESSOR(Allocate) 252794b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org}; 252894b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 252994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org 2530ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LRegExpLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 2531c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2532935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LRegExpLiteral(LOperand* context) { 2533935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2534935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 2535935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2536935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2537935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2538c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 2539c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 2540c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2541c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2542c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2543ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LFunctionLiteral FINAL : public LTemplateInstruction<1, 1, 0> { 2544c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2545935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LFunctionLiteral(LOperand* context) { 2546935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2547935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 2548935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2549935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2550935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2551c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 2552c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 2553c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2554c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2555c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2556ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LToFastProperties FINAL : public LTemplateInstruction<1, 1, 0> { 2557ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org public: 2558ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org explicit LToFastProperties(LOperand* value) { 2559ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org inputs_[0] = value; 2560ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 2561ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 256256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 256356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2564ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 2565ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 2566ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}; 2567ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2568ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2569ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeof FINAL : public LTemplateInstruction<1, 2, 0> { 2570c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2571935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LTypeof(LOperand* context, LOperand* value) { 2572935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2573935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = value; 25740511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2575c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2576935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2577935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* value() { return inputs_[1]; } 257856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2579c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2580c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2581c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2582c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2583ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LTypeofIsAndBranch FINAL : public LControlInstruction<1, 0> { 2584c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 25850511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com explicit LTypeofIsAndBranch(LOperand* value) { 25860511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com inputs_[0] = value; 25870511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com } 2588c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 258956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* value() { return inputs_[0]; } 259056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2591c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 25924f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 2593c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 25940511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com Handle<String> type_literal() { return hydrogen()->type_literal(); } 2595d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2596ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual void PrintDataTo(StringStream* stream) OVERRIDE; 2597c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2598c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2599c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2600ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> { 2601d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com public: 2602d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com explicit LIsConstructCallAndBranch(LOperand* temp) { 2603d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com temps_[0] = temp; 2604d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com } 2605d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 260656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org LOperand* temp() { return temps_[0]; } 260756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 2608d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 2609d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com "is-construct-call-and-branch") 26104f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org DECLARE_HYDROGEN_ACCESSOR(IsConstructCallAndBranch) 2611d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com}; 2612d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 2613d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 2614ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> { 2615c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 26161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org LOsrEntry() {} 2617c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2618ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { 261932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return false; 262032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 2621c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2622c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 2623d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2624d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2625ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> { 2626c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org public: 2627935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org explicit LStackCheck(LOperand* context) { 2628935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2629935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org } 2630935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2631935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2632935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org 2633c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 263404921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org DECLARE_HYDROGEN_ACCESSOR(StackCheck) 263504921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org 263604921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org Label* done_label() { return &done_label_; } 263704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org 263804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org private: 263904921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org Label done_label_; 2640d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 2641d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2642d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2643ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInPrepareMap FINAL : public LTemplateInstruction<1, 2, 0> { 2644be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org public: 2645935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LForInPrepareMap(LOperand* context, LOperand* object) { 2646935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[0] = context; 2647935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org inputs_[1] = object; 2648be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org } 2649be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2650935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 2651935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org LOperand* object() { return inputs_[1]; } 2652be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2653be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 2654be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org}; 2655be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2656be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2657ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LForInCacheArray FINAL : public LTemplateInstruction<1, 1, 0> { 2658be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org public: 2659be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org explicit LForInCacheArray(LOperand* map) { 2660be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org inputs_[0] = map; 2661be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org } 2662be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2663be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LOperand* map() { return inputs_[0]; } 2664be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2665be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 2666be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2667be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org int idx() { 2668be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org return HForInCacheArray::cast(this->hydrogen_value())->idx(); 2669be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org } 2670be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org}; 2671be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2672be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2673ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LCheckMapValue FINAL : public LTemplateInstruction<0, 2, 0> { 2674be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org public: 2675be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LCheckMapValue(LOperand* value, LOperand* map) { 2676be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org inputs_[0] = value; 2677be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org inputs_[1] = map; 2678be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org } 2679be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2680be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LOperand* value() { return inputs_[0]; } 2681be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LOperand* map() { return inputs_[1]; } 2682be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2683be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 2684be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org}; 2685be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2686be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2687ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LLoadFieldByIndex FINAL : public LTemplateInstruction<1, 2, 0> { 2688be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org public: 2689be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LLoadFieldByIndex(LOperand* object, LOperand* index) { 2690be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org inputs_[0] = object; 2691be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org inputs_[1] = index; 2692be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org } 2693be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2694be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LOperand* object() { return inputs_[0]; } 2695be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org LOperand* index() { return inputs_[1]; } 2696be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2697be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 2698be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org}; 2699be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 2700be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 27011e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LStoreFrameContext: public LTemplateInstruction<0, 1, 0> { 27021e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public: 27031e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org explicit LStoreFrameContext(LOperand* context) { 27041e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[0] = context; 27051e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } 27061e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27071e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 27081e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27091e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext, "store-frame-context") 27101e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org}; 27111e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27121e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27131e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LAllocateBlockContext: public LTemplateInstruction<1, 2, 0> { 27141e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public: 27151e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LAllocateBlockContext(LOperand* context, LOperand* function) { 27161e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[0] = context; 27171e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org inputs_[1] = function; 27181e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } 27191e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27201e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* context() { return inputs_[0]; } 27211e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org LOperand* function() { return inputs_[1]; } 27221e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27231e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); } 27241e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27251e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context") 27261e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext) 27271e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org}; 27281e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 27291e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 2730d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgclass LChunkBuilder; 2731ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LPlatformChunk FINAL : public LChunk { 2732d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org public: 273328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org LPlatformChunk(CompilationInfo* info, HGraph* graph) 2734895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org : LChunk(info, graph), 2735895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org dehoisted_key_ids_(graph->GetMaximumValueID(), graph->zone()) { } 2736c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2737c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org int GetNextSpillIndex(RegisterKind kind); 2738c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org LOperand* GetNextSpillSlot(RegisterKind kind); 2739895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org BitVector* GetDehoistedKeyIds() { return &dehoisted_key_ids_; } 2740895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org bool IsDehoistedKey(HValue* value) { 2741895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return dehoisted_key_ids_.Contains(value->id()); 2742895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org } 2743895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 2744895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org private: 2745895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org BitVector dehoisted_key_ids_; 2746a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}; 2747a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2748a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2749ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LChunkBuilder FINAL : public LChunkBuilderBase { 2750a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 27518f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2752b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org : LChunkBuilderBase(info, graph), 2753d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org current_instruction_(NULL), 2754d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org current_block_(NULL), 2755d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org next_block_(NULL), 2756b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org allocator_(allocator) {} 2757a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 2758a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Build the sequence for the graph. 275928583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org LPlatformChunk* Build(); 2760a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2761a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Declare methods that deal with the individual node types. 2762c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 2763a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 2764a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#undef DECLARE_DO 2765a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2766e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathFloor(HUnaryMathOperation* instr); 2767e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathRound(HUnaryMathOperation* instr); 2768dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org LInstruction* DoMathFround(HUnaryMathOperation* instr); 2769e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathAbs(HUnaryMathOperation* instr); 2770e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathLog(HUnaryMathOperation* instr); 2771e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathExp(HUnaryMathOperation* instr); 2772e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathSqrt(HUnaryMathOperation* instr); 2773e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LInstruction* DoMathPowHalf(HUnaryMathOperation* instr); 2774f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org LInstruction* DoMathClz32(HUnaryMathOperation* instr); 2775ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoDivByPowerOf2I(HDiv* instr); 2776bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LInstruction* DoDivByConstI(HDiv* instr); 2777ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LInstruction* DoDivI(HDiv* instr); 2778ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoModByPowerOf2I(HMod* instr); 2779bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org LInstruction* DoModByConstI(HMod* instr); 2780ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoModI(HMod* instr); 2781ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 2782ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 2783ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 2784e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2785d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org private: 2786c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Methods for getting operands for Use / Define / Temp. 2787c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LUnallocated* ToUnallocated(Register reg); 2788c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LUnallocated* ToUnallocated(XMMRegister reg); 2789c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2790c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Methods for setting up define-use relationships. 27910511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 27920511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 27930511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 27940511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com XMMRegister fixed_register); 2795c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2796c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // A value that is guaranteed to be allocated to a register. 2797c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Operand created by UseRegister is guaranteed to be live until the end of 2798c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // instruction. This means that register allocator will not reuse it's 2799c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // register for any other operand inside instruction. 2800c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Operand created by UseRegisterAtStart is guaranteed to be live only at 2801c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // instruction start. Register allocator is free to assign the same register 2802c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // to some other operand used inside instruction (i.e. temporary or 2803c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // output). 28040511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseRegister(HValue* value); 28050511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 2806c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 28070a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // An input operand in a register that may be trashed. 28080511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 28090511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 281071ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org // An input operand in a register that may be trashed or a constant operand. 281171ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org MUST_USE_RESULT LOperand* UseTempRegisterOrConstant(HValue* value); 281271ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org 28130a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // An input operand in a register or stack slot. 28140511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* Use(HValue* value); 28150511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 28160511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 28170a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // An input operand in a register, stack slot or a constant operand. 28180511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 28190511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 28200511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 28210a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // An input operand in a register or a constant operand. 28220511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 28230511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 28240511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 2825f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org // An input operand in a constant operand. 2826f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org MUST_USE_RESULT LOperand* UseConstant(HValue* value); 2827f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 28280a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // An input operand in register, stack slot or a constant operand. 28290a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org // Will not be moved to a register even if one is freely available. 2830ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE; 28310a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 28320511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com // Temporary operand that must be in a register. 28330511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LUnallocated* TempRegister(); 28340511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* FixedTemp(Register reg); 28350511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); 28360511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 2837c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Methods for setting up define-use relationships. 2838c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Return the same instruction that they are passed. 283926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* Define(LTemplateResultInstruction<1>* instr, 284026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LUnallocated* result); 284126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); 284226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, 284326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org int index); 284426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr); 284526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr, 284626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org Register reg); 284726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr, 284826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org XMMRegister reg); 2849b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // Assigns an environment to an instruction. An instruction which can 2850b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // deoptimize must have an environment. 2851c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* AssignEnvironment(LInstruction* instr); 2852b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // Assigns a pointer map to an instruction. An instruction which can 2853b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // trigger a GC or a lazy deoptimization must have a pointer map. 2854c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* AssignPointerMap(LInstruction* instr); 2855c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2856c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 2857c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2858b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // Marks a call for the register allocator. Assigns a pointer map to 2859b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // support GC and lazy deoptimization. Assigns an environment to support 2860b645116853c677aca8a316381b87441ba6004f67danno@chromium.org // eager deoptimization if CAN_DEOPTIMIZE_EAGERLY. 2861c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* MarkAsCall( 2862c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* instr, 2863c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HInstruction* hinstr, 2864c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 2865c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2866c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void VisitInstruction(HInstruction* current); 2867011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org void AddInstruction(LInstruction* instr, HInstruction* current); 2868c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 2869d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 2870c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 2871c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* DoArithmeticD(Token::Value op, 2872c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org HArithmeticBinaryOperation* instr); 2873c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org LInstruction* DoArithmeticT(Token::Value op, 2874528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org HBinaryOperation* instr); 2875895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org void FindDehoistedKeyDefinitions(HValue* candidate); 2876d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2877d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org HInstruction* current_instruction_; 2878d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org HBasicBlock* current_block_; 2879d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org HBasicBlock* next_block_; 2880d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org LAllocator* allocator_; 2881d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2882a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2883a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}; 2884a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2885c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org#undef DECLARE_HYDROGEN_ACCESSOR 2886c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org#undef DECLARE_CONCRETE_INSTRUCTION 2887a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 28880511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} } // namespace v8::int 2889a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 2890a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#endif // V8_X64_LITHIUM_X64_H_ 2891