13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifndef V8_CRANKSHAFT_MIPS_LITHIUM_MIPS_H_ 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define V8_CRANKSHAFT_MIPS_LITHIUM_MIPS_H_ 744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/crankshaft/hydrogen.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/crankshaft/lithium.h" 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/crankshaft/lithium-allocator.h" 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/safepoint-table.h" 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/utils.h" 1344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1444f0eee88ff00398ff7f715fab053374d808c90dSteve Blocknamespace v8 { 1544f0eee88ff00398ff7f715fab053374d808c90dSteve Blocknamespace internal { 1644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1744f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Forward declarations. 1844f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LCodeGen; 193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(AccessArgumentsAt) \ 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(AddI) \ 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Allocate) \ 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ApplyArguments) \ 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ArgumentsElements) \ 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ArgumentsLength) \ 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ArithmeticD) \ 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ArithmeticT) \ 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(BitI) \ 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(BoundsCheck) \ 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Branch) \ 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CallWithDescriptor) \ 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CallNewArray) \ 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CallRuntime) \ 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(CheckArrayBufferNotNeutered) \ 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckInstanceType) \ 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckMaps) \ 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckMapValue) \ 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckNonSmi) \ 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckSmi) \ 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CheckValue) \ 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ClampDToUint8) \ 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ClampIToUint8) \ 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ClampTToUint8) \ 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ClassOfTestAndBranch) \ 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CompareNumericAndBranch) \ 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CmpObjectEqAndBranch) \ 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CmpHoleAndBranch) \ 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CmpMapAndBranch) \ 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(CmpT) \ 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ConstantD) \ 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ConstantE) \ 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ConstantI) \ 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ConstantS) \ 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ConstantT) \ 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Context) \ 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DebugBreak) \ 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DeclareGlobals) \ 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Deoptimize) \ 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DivByConstI) \ 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DivByPowerOf2I) \ 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DivI) \ 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DoubleToI) \ 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DoubleBits) \ 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DoubleToSmi) \ 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Drop) \ 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Dummy) \ 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(DummyUse) \ 69537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch V(FastAllocate) \ 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(FlooringDivByConstI) \ 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(FlooringDivByPowerOf2I) \ 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(FlooringDivI) \ 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ForInCacheArray) \ 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ForInPrepareMap) \ 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(GetCachedArrayIndex) \ 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Goto) \ 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(HasCachedArrayIndexAndBranch) \ 78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(HasInPrototypeChainAndBranch) \ 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(HasInstanceTypeAndBranch) \ 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(InnerAllocatedObject) \ 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(InstructionGap) \ 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Integer32ToDouble) \ 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(InvokeFunction) \ 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(IsStringAndBranch) \ 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(IsSmiAndBranch) \ 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(IsUndetectableAndBranch) \ 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Label) \ 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LazyBailout) \ 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadContextSlot) \ 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadRoot) \ 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadFieldByIndex) \ 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadFunctionPrototype) \ 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadGlobalGeneric) \ 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadKeyed) \ 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadKeyedGeneric) \ 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadNamedField) \ 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LoadNamedGeneric) \ 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathAbs) \ 9921efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch V(MathCos) \ 10021efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch V(MathSin) \ 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathExp) \ 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathClz32) \ 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathFloor) \ 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathFround) \ 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathLog) \ 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathMinMax) \ 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathPowHalf) \ 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathRound) \ 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MathSqrt) \ 110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(MaybeGrowElements) \ 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ModByConstI) \ 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ModByPowerOf2I) \ 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ModI) \ 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MulI) \ 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(MultiplyAddD) \ 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(NumberTagD) \ 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(NumberTagI) \ 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(NumberTagU) \ 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(NumberUntagD) \ 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(OsrEntry) \ 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Parameter) \ 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Power) \ 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(Prologue) \ 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(PushArgument) \ 125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Return) \ 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SeqStringGetChar) \ 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SeqStringSetChar) \ 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ShiftI) \ 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SmiTag) \ 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SmiUntag) \ 131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StackCheck) \ 132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreCodeEntry) \ 133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreContextSlot) \ 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreKeyed) \ 135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreKeyedGeneric) \ 136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreNamedField) \ 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StoreNamedGeneric) \ 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StringAdd) \ 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StringCharCodeAt) \ 140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StringCharFromCode) \ 141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(StringCompareAndBranch) \ 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SubI) \ 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(TaggedToI) \ 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ThisFunction) \ 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(TransitionElementsKind) \ 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(TrapAllocationMemento) \ 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Typeof) \ 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(TypeofIsAndBranch) \ 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(Uint32ToDouble) \ 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(UnknownOSRValue) \ 1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(WrapReceiver) 1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 153958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 154014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Opcode opcode() const final { return LInstruction::k##type; } \ 155014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void CompileToNative(LCodeGen* generator) final; \ 156014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const char* Mnemonic() const final { return mnemonic; } \ 157958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier static L##type* cast(LInstruction* instr) { \ 158958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DCHECK(instr->Is##type()); \ 159958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return reinterpret_cast<L##type*>(instr); \ 1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define DECLARE_HYDROGEN_ACCESSOR(type) \ 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch H##type* hydrogen() const { \ 1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return H##type::cast(hydrogen_value()); \ 1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LInstruction : public ZoneObject { 17044f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction() 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : environment_(NULL), 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch hydrogen_value_(NULL), 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bit_field_(IsCallBits::encode(false)) { 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual ~LInstruction() {} 17844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual void CompileToNative(LCodeGen* generator) = 0; 1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual const char* Mnemonic() const = 0; 1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual void PrintTo(StringStream* stream); 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual void PrintDataTo(StringStream* stream); 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual void PrintOutputOperandTo(StringStream* stream); 1843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch enum Opcode { 1863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Declare a unique enum value for each instruction. 1873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define DECLARE_OPCODE(type) k##type, 1883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 1893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch kNumberOfInstructions 1903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DECLARE_OPCODE 1913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 1923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual Opcode opcode() const = 0; 1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Declare non-virtual type testers for all leaf IR classes. 1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define DECLARE_PREDICATE(type) \ 1973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool Is##type() const { return opcode() == k##type; } 1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DECLARE_PREDICATE 2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Declare virtual predicates for instructions that don't have 2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // an opcode. 2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual bool IsGap() const { return false; } 2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual bool IsControl() const { return false; } 2063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Try deleting this instruction if possible. 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual bool TryDelete() { return false; } 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_environment(LEnvironment* env) { environment_ = env; } 2113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LEnvironment* environment() const { return environment_; } 2123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool HasEnvironment() const { return environment_ != NULL; } 2133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 2153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LPointerMap* pointer_map() const { return pointer_map_.get(); } 2163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool HasPointerMap() const { return pointer_map_.is_set(); } 2173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HValue* hydrogen_value() const { return hydrogen_value_; } 2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); } 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool IsCall() const { return IsCallBits::decode(bit_field_); } 2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2241b268ca467c924004286c97bac133db489cf43d0Ben Murdoch void MarkAsSyntacticTailCall() { 2251b268ca467c924004286c97bac133db489cf43d0Ben Murdoch bit_field_ = IsSyntacticTailCallBits::update(bit_field_, true); 2261b268ca467c924004286c97bac133db489cf43d0Ben Murdoch } 2271b268ca467c924004286c97bac133db489cf43d0Ben Murdoch bool IsSyntacticTailCall() const { 2281b268ca467c924004286c97bac133db489cf43d0Ben Murdoch return IsSyntacticTailCallBits::decode(bit_field_); 2291b268ca467c924004286c97bac133db489cf43d0Ben Murdoch } 2301b268ca467c924004286c97bac133db489cf43d0Ben Murdoch 2313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Interface to the register allocator and iterators. 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool ClobbersTemps() const { return IsCall(); } 233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool ClobbersRegisters() const { return IsCall(); } 234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual bool ClobbersDoubleRegisters(Isolate* isolate) const { 235b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return IsCall(); 236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 2373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Interface to the register allocator and iterators. 239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool IsMarkedAsCall() const { return IsCall(); } 2403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual bool HasResult() const = 0; 242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual LOperand* result() const = 0; 2433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* FirstInput() { return InputAt(0); } 2453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* Output() { return HasResult() ? result() : NULL; } 2463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } 248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#ifdef DEBUG 2503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void VerifyCall(); 2513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#endif 2523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual int InputCount() = 0; 254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual LOperand* InputAt(int i) = 0; 255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Iterator interface. 258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch friend class InputIterator; 259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 260b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch friend class TempIterator; 261b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual int TempCount() = 0; 262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual LOperand* TempAt(int i) = 0; 263b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 264b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch class IsCallBits: public BitField<bool, 0, 1> {}; 2651b268ca467c924004286c97bac133db489cf43d0Ben Murdoch class IsSyntacticTailCallBits : public BitField<bool, IsCallBits::kNext, 1> { 2661b268ca467c924004286c97bac133db489cf43d0Ben Murdoch }; 267b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LEnvironment* environment_; 2693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch SetOncePointer<LPointerMap> pointer_map_; 2703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HValue* hydrogen_value_; 271b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int bit_field_; 2723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 273592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 2743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// R = number of result operands (0 or 1). 276b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtemplate<int R> 277b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LTemplateResultInstruction : public LInstruction { 2783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Allow 0 or 1 output operands. 2803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch STATIC_ASSERT(R == 0 || R == 1); 281014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasResult() const final { return R != 0 && result() != NULL; } 2823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_result(LOperand* operand) { results_[0] = operand; } 283014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* result() const override { return results_[0]; } 2843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch protected: 286b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EmbeddedContainer<LOperand*, R> results_; 287b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 2883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// R = number of result operands (0 or 1). 291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// I = number of input operands. 292b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// T = number of temporary operands. 293b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtemplate<int R, int I, int T> 294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LTemplateInstruction : public LTemplateResultInstruction<R> { 2953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch protected: 2963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch EmbeddedContainer<LOperand*, I> inputs_; 2973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch EmbeddedContainer<LOperand*, T> temps_; 298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Iterator support. 301014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int InputCount() final { return I; } 302014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* InputAt(int i) final { return inputs_[i]; } 303b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 304014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int TempCount() final { return T; } 305014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* TempAt(int i) final { return temps_[i]; } 3063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 3073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LGap : public LTemplateInstruction<0, 0, 0> { 3103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 3113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LGap(HBasicBlock* block) 3123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : block_(block) { 3133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch parallel_moves_[BEFORE] = NULL; 3143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch parallel_moves_[START] = NULL; 3153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch parallel_moves_[END] = NULL; 3163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch parallel_moves_[AFTER] = NULL; 31744f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 31844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Can't use the DECLARE-macro here because of sub-classes. 320014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool IsGap() const final { return true; } 321014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 3223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static LGap* cast(LInstruction* instr) { 323b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(instr->IsGap()); 3243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return reinterpret_cast<LGap*>(instr); 32544f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 32644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool IsRedundant() const; 3283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HBasicBlock* block() const { return block_; } 3303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch enum InnerPosition { 3323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BEFORE, 3333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch START, 3343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch END, 3353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch AFTER, 3363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch FIRST_INNER_POSITION = BEFORE, 3373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LAST_INNER_POSITION = AFTER 3383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 33944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 340b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) { 341b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (parallel_moves_[pos] == NULL) { 342b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parallel_moves_[pos] = new(zone) LParallelMove(zone); 343b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 3443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return parallel_moves_[pos]; 34544f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 34644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LParallelMove* GetParallelMove(InnerPosition pos) { 3483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return parallel_moves_[pos]; 34944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 35044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 3523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 3533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HBasicBlock* block_; 3543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 3553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 357014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LInstructionGap final : public LGap { 3583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 3593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 3603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 361014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override { 362b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return !IsRedundant(); 363b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 364b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 3653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 3663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 3673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 369014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LGoto final : public LTemplateInstruction<0, 0, 0> { 3703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 371b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LGoto(HBasicBlock* block) : block_(block) { } 3723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 373014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override; 3743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 375014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 376014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool IsControl() const override { return true; } 3773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 378b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int block_id() const { return block_->block_id(); } 379592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 381b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HBasicBlock* block_; 3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 3833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 385014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LPrologue final : public LTemplateInstruction<0, 0, 0> { 386014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 387014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Prologue, "prologue") 388014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 389014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 390014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 391014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLazyBailout final : public LTemplateInstruction<0, 0, 0> { 3923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 3933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LLazyBailout() : gap_instructions_size_(0) { } 3943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 3963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_gap_instructions_size(int gap_instructions_size) { 3983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch gap_instructions_size_ = gap_instructions_size; 39944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 4003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int gap_instructions_size() { return gap_instructions_size_; } 401592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 4023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 4033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int gap_instructions_size_; 4043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 405592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 4063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 407014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDummy final : public LTemplateInstruction<1, 0, 0> { 408b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 409b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDummy() {} 410b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 411b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 412b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 413b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 414014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDummyUse final : public LTemplateInstruction<1, 1, 0> { 415b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 416b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDummyUse(LOperand* value) { 417b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 418b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 419b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 420b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 421b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 422b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 423014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDeoptimize final : public LTemplateInstruction<0, 0, 0> { 4243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 425014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool IsControl() const override { return true; } 4263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 427b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 4283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 431014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLabel final : public LGap { 4323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 4333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LLabel(HBasicBlock* block) 4343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : LGap(block), replacement_(NULL) { } 4353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 436014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override { return false; } 4373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Label, "label") 4383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 439014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 4403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int block_id() const { return block()->block_id(); } 4423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool is_loop_header() const { return block()->IsLoopHeader(); } 443b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool is_osr_entry() const { return block()->is_osr_entry(); } 4443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Label* label() { return &label_; } 4453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LLabel* replacement() const { return replacement_; } 4463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void set_replacement(LLabel* label) { replacement_ = label; } 4473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool HasReplacement() const { return replacement_ != NULL; } 4483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 4503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Label label_; 4513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LLabel* replacement_; 4523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 455014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LParameter final : public LTemplateInstruction<1, 0, 0> { 4563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 457014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override { return false; } 4583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 4593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 462014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LUnknownOSRValue final : public LTemplateInstruction<1, 0, 0> { 4633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 464014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override { return false; } 4653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 4663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtemplate<int I, int T> 470b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LControlInstruction : public LTemplateInstruction<0, I, T> { 4713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 472b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 473b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 474014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool IsControl() const final { return true; } 475592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 4763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int SuccessorCount() { return hydrogen()->SuccessorCount(); } 4773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 478b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 479b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int TrueDestination(LChunk* chunk) { 480b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return chunk->LookupDestination(true_block_id()); 481b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 482b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int FalseDestination(LChunk* chunk) { 483b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return chunk->LookupDestination(false_block_id()); 484b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 485b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 486b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Label* TrueLabel(LChunk* chunk) { 487b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (true_label_ == NULL) { 488b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk)); 489b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 490b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return true_label_; 491b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 492b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Label* FalseLabel(LChunk* chunk) { 493b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (false_label_ == NULL) { 494b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk)); 495b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 496b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return false_label_; 497b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 498b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 499b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch protected: 500b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int true_block_id() { return SuccessorAt(0)->block_id(); } 501b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int false_block_id() { return SuccessorAt(1)->block_id(); } 5023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 5043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HControlInstruction* hydrogen() { 5053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return HControlInstruction::cast(this->hydrogen_value()); 50644f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 508b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Label* false_label_; 509b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Label* true_label_; 5103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 511592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 5123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 513014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LWrapReceiver final : public LTemplateInstruction<1, 2, 0> { 5143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 5153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LWrapReceiver(LOperand* receiver, LOperand* function) { 5163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = receiver; 5173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = function; 5185d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch } 5195d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch 5203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 521b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 5223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* receiver() { return inputs_[0]; } 5243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* function() { return inputs_[1]; } 5253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 5263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 528014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LApplyArguments final : public LTemplateInstruction<1, 4, 0> { 5293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 5303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LApplyArguments(LOperand* function, 5313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* receiver, 5323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* length, 5333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* elements) { 5343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = function; 5353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = receiver; 5363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[2] = length; 5373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[3] = elements; 53844f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 53944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 5411b268ca467c924004286c97bac133db489cf43d0Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(ApplyArguments) 5423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* function() { return inputs_[0]; } 5443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* receiver() { return inputs_[1]; } 5453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* length() { return inputs_[2]; } 5463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* elements() { return inputs_[3]; } 5473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 5483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 550014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LAccessArgumentsAt final : public LTemplateInstruction<1, 3, 0> { 5513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 5523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 5533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = arguments; 5543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = length; 5553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[2] = index; 55644f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 55744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 5593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* arguments() { return inputs_[0]; } 5613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* length() { return inputs_[1]; } 5623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* index() { return inputs_[2]; } 5633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 564014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 5653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 5663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 568014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LArgumentsLength final : public LTemplateInstruction<1, 1, 0> { 5693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 5703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LArgumentsLength(LOperand* elements) { 5713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = elements; 57244f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 57344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 574b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* elements() { return inputs_[0]; } 575b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 5773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 5783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 580014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LArgumentsElements final : public LTemplateInstruction<1, 0, 0> { 5813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 5823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 583b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 5843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 5853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 587014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LModByPowerOf2I final : public LTemplateInstruction<1, 1, 0> { 5883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 589b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 590b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 591b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 59244f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 59344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 594b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 595b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() const { return divisor_; } 59644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 597b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 5983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Mod) 599b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 600b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 601b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 6023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 6033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 605014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LModByConstI final : public LTemplateInstruction<1, 1, 0> { 6063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 607b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LModByConstI(LOperand* dividend, int32_t divisor) { 608b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 609b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 61044f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 61144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 612b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 613b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() const { return divisor_; } 614b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 615b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 616b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Mod) 617b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 618b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 619b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 6203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 6213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 623014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LModI final : public LTemplateInstruction<1, 2, 3> { 6243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 625b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LModI(LOperand* left, 626b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right) { 6273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 6283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 62944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 63044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 633b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 634b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 635b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Mod) 63644f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 63744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 63844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 639014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDivByPowerOf2I final : public LTemplateInstruction<1, 1, 0> { 64044f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 641b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 642b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 643b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 6443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 64544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 646b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 647b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() const { return divisor_; } 6483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 649b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 650b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Div) 65144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 652b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 653b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 6543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 655592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 6563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 657014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDivByConstI final : public LTemplateInstruction<1, 1, 0> { 6583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 659b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDivByConstI(LOperand* dividend, int32_t divisor) { 660b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 661b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 66244f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 66344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 664b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 665b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() const { return divisor_; } 6663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 667b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 668b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Div) 669b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 670b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 671b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 6723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 6733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 675014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDivI final : public LTemplateInstruction<1, 2, 1> { 6763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 677b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 678b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 679b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = divisor; 680b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 68144f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 6823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 683b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 684b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* divisor() { return inputs_[1]; } 685b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 686b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 687b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 688b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 68944f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 69044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 69144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 692014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LFlooringDivByPowerOf2I final : public LTemplateInstruction<1, 1, 0> { 69344f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 694b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 6973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 6983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 699b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 700b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() { return divisor_; } 701b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 702b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 703b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "flooring-div-by-power-of-2-i") 704b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 705b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 706b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 707b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 70844f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 70944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 71044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 711014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LFlooringDivByConstI final : public LTemplateInstruction<1, 1, 2> { 71244f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 713b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { 714b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 715b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch divisor_ = divisor; 716b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 71744f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 71844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 719b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 720b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor() const { return divisor_; } 721b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 7223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 723b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 724b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 7253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 726b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 727b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int32_t divisor_; 7283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 7293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 731014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LFlooringDivI final : public LTemplateInstruction<1, 2, 0> { 7323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 733b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LFlooringDivI(LOperand* dividend, LOperand* divisor) { 734b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = dividend; 735b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = divisor; 73644f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 7373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 738b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* dividend() { return inputs_[0]; } 739b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* divisor() { return inputs_[1]; } 7403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 741b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 742b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 7433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 7443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 746014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMulI final : public LTemplateInstruction<1, 2, 0> { 7473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 748b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMulI(LOperand* left, LOperand* right) { 749b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = left; 750b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = right; 75144f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 75244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 753b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 754b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 7553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 756b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 757b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Mul) 7583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 7593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 761b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Instruction for computing multiplier * multiplicand + addend. 762014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMultiplyAddD final : public LTemplateInstruction<1, 3, 0> { 7633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 764b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMultiplyAddD(LOperand* addend, LOperand* multiplier, 765b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* multiplicand) { 766b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = addend; 767b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = multiplier; 768b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = multiplicand; 76944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 7703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 771b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* addend() { return inputs_[0]; } 772b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* multiplier() { return inputs_[1]; } 773b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* multiplicand() { return inputs_[2]; } 7743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 775b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d") 7763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 7773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 779014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDebugBreak final : public LTemplateInstruction<0, 0, 0> { 7803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 781b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 78244f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 78344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 78444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 785014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCompareNumericAndBranch final : public LControlInstruction<2, 0> { 78644f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 787b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCompareNumericAndBranch(LOperand* left, LOperand* right) { 7883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 7893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 7903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 7913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 792b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 793b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 794b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 795b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 796b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "compare-numeric-and-branch") 797b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 7983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return hydrogen()->token(); } 800b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool is_double() const { 801b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->representation().IsDouble(); 802b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 80344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 804014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 8053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 808014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathFloor final : public LTemplateInstruction<1, 1, 1> { 8093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 810b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMathFloor(LOperand* value, LOperand* temp) { 8113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 812b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 81344f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 81444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 815b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 816b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 8173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 818b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 819b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 8203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 823014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathRound final : public LTemplateInstruction<1, 1, 1> { 8243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 825b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMathRound(LOperand* value, LOperand* temp) { 8263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 827b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 82844f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 82944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 830b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 831b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 832b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 833b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 834b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 8353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 838014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathFround final : public LTemplateInstruction<1, 1, 0> { 8393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 840b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LMathFround(LOperand* value) { inputs_[0] = value; } 84144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 842b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 8433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 844b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") 8453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 848014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathAbs final : public LTemplateInstruction<1, 2, 0> { 8493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 850b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMathAbs(LOperand* context, LOperand* value) { 851b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = context; 8523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 85344f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 85444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 855b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[1]; } 856b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 8573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 858b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 859b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 8603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 863014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathLog final : public LTemplateInstruction<1, 1, 0> { 8643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 865b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LMathLog(LOperand* value) { 866b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 86744f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 86844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 869b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 8703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 871b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 8723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 8743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 875014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathClz32 final : public LTemplateInstruction<1, 1, 0> { 8763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 877b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LMathClz32(LOperand* value) { 878b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 87944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 88044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 881b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 882b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 883b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 8843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 8853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 88621efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdochclass LMathCos final : public LTemplateInstruction<1, 1, 0> { 88721efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch public: 88821efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch explicit LMathCos(LOperand* value) { inputs_[0] = value; } 88921efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch 89021efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch LOperand* value() { return inputs_[0]; } 8913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 89221efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathCos, "math-cos") 89321efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch}; 89421efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch 89521efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdochclass LMathSin final : public LTemplateInstruction<1, 1, 0> { 8963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 89721efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch explicit LMathSin(LOperand* value) { inputs_[0] = value; } 89821efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch 89921efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch LOperand* value() { return inputs_[0]; } 90021efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch 90121efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathSin, "math-sin") 90221efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch}; 90321efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch 90421efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdochclass LMathExp final : public LTemplateInstruction<1, 1, 0> { 90521efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch public: 90621efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch explicit LMathExp(LOperand* value) { inputs_[0] = value; } 90744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 908b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 9093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 910b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 9113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 9123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 91344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 914014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathSqrt final : public LTemplateInstruction<1, 1, 0> { 9153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 916b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LMathSqrt(LOperand* value) { 917b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 91844f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 91944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 920b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 9213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 922b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 9233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 9243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 9253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 926014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathPowHalf final : public LTemplateInstruction<1, 1, 1> { 9273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 928b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMathPowHalf(LOperand* value, LOperand* temp) { 929b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 930b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 931b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 932b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 933b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 934b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 935b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 936b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 937b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 938b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 939b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 940014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCmpObjectEqAndBranch final : public LControlInstruction<2, 0> { 941b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 942b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 943b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = left; 944b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = right; 945b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 946b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 947b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 948b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 949b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 950b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 951b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch) 952b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 953b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 954b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 955014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCmpHoleAndBranch final : public LControlInstruction<1, 0> { 956b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 957b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LCmpHoleAndBranch(LOperand* object) { 958b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = object; 959b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 960b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 961b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[0]; } 962b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 963b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 964b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 965b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 966b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 967b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 968014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LIsStringAndBranch final : public LControlInstruction<1, 1> { 969b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 970b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LIsStringAndBranch(LOperand* value, LOperand* temp) { 971b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 972b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 973b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 974b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 975b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 976b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 977b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 978b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 979b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 980b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 981014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 982b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 983b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 984b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 985014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LIsSmiAndBranch final : public LControlInstruction<1, 0> { 986b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 987b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LIsSmiAndBranch(LOperand* value) { 988b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 989b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 990b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 991b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 992b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 993b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 994b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 995b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 996014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 997b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 998b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 999b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1000014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LIsUndetectableAndBranch final : public LControlInstruction<1, 1> { 1001b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1002b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 1003b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1004b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 1005b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1006b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1007b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1008b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1009b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1010b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 1011b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "is-undetectable-and-branch") 1012b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 1013b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1014014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1015b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1016b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1017b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1018014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStringCompareAndBranch final : public LControlInstruction<3, 0> { 1019b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1020b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) { 1021b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1022b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = left; 1023b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = right; 1024b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1025b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1026b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1027b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[1]; } 1028b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[2]; } 1029b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1030b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 1031b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "string-compare-and-branch") 1032b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 1033b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1034b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Token::Value op() const { return hydrogen()->token(); } 1035b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1036014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1037b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1038b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1039b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1040014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LHasInstanceTypeAndBranch final : public LControlInstruction<1, 0> { 1041b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1042b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LHasInstanceTypeAndBranch(LOperand* value) { 1043b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1044b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1045b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1046b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1047b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1048b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 1049b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "has-instance-type-and-branch") 1050b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 1051b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1052014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1053b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1054b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1055b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1056014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LGetCachedArrayIndex final : public LTemplateInstruction<1, 1, 0> { 1057b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1058b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LGetCachedArrayIndex(LOperand* value) { 1059b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1060b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1061b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1062b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1063b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1064b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 1065b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 1066b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1067b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1068b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1069014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LHasCachedArrayIndexAndBranch final : public LControlInstruction<1, 0> { 1070b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1071b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 1072b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1073b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1074b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1075b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1076b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1077b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 1078b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "has-cached-array-index-and-branch") 1079b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 1080b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1081014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1082b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1083b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1084b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1085014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LClassOfTestAndBranch final : public LControlInstruction<1, 1> { 1086b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1087b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LClassOfTestAndBranch(LOperand* value, LOperand* temp) { 1088b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1089b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 1090b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1091b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1092b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1093b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1094b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1095b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1096b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "class-of-test-and-branch") 1097b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1098b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1099014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCmpT final : public LTemplateInstruction<1, 3, 0> { 1104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCmpT(LOperand* context, LOperand* left, LOperand* right) { 1106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = left; 1108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = right; 1109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[1]; } 1113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[2]; } 1114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 1116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Token::Value op() const { return hydrogen()->token(); } 1119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LHasInPrototypeChainAndBranch final : public LControlInstruction<2, 0> { 1123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LHasInPrototypeChainAndBranch(LOperand* object, LOperand* prototype) { 1125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[0] = object; 1126014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[1] = prototype; 1127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* object() const { return inputs_[0]; } 1130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* prototype() const { return inputs_[1]; } 1131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(HasInPrototypeChainAndBranch, 1133014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "has-in-prototype-chain-and-branch") 1134014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(HasInPrototypeChainAndBranch) 1135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1138014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LBoundsCheck final : public LTemplateInstruction<0, 2, 0> { 1139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LBoundsCheck(LOperand* index, LOperand* length) { 1141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = index; 1142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = length; 1143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* index() { return inputs_[0]; } 1146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* length() { return inputs_[1]; } 1147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 1150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1153014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LBitI final : public LTemplateInstruction<1, 2, 0> { 1154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LBitI(LOperand* left, LOperand* right) { 1156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = left; 11573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 115844f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 115944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 1162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 11633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return hydrogen()->op(); } 11643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 11653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 11663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Bitwise) 11673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 11683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 11693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1170014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LShiftI final : public LTemplateInstruction<1, 2, 0> { 11713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 11723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 11733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : op_(op), can_deopt_(can_deopt) { 11743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 11753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 117644f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 117744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 11783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return op_; } 1179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 11813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool can_deopt() const { return can_deopt_; } 1182592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 11833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 11843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 11853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 11863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op_; 11873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool can_deopt_; 11883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 11893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 11903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LSubI final : public LTemplateInstruction<1, 2, 0> { 11923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 11933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LSubI(LOperand* left, LOperand* right) { 11943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 11953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 1196257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1197257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 1200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 12023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Sub) 1203592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch}; 120444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1205592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 1206014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LConstantI final : public LTemplateInstruction<1, 0, 0> { 1207592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch public: 12083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 12093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Constant) 1210592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 12113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int32_t value() const { return hydrogen()->Integer32Value(); } 12123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 1213592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 12143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1215014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LConstantS final : public LTemplateInstruction<1, 0, 0> { 12163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 12183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Constant) 12193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 12213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1224014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LConstantD final : public LTemplateInstruction<1, 0, 0> { 12253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 12273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Constant) 12283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch double value() const { return hydrogen()->DoubleValue(); } 1230014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch uint64_t bits() const { return hydrogen()->DoubleValueAsBits(); } 12313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1234014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LConstantE final : public LTemplateInstruction<1, 0, 0> { 12353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 1237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Constant) 12383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExternalReference value() const { 1240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->ExternalReferenceValue(); 1241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 12423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1245014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LConstantT final : public LTemplateInstruction<1, 0, 0> { 12463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Constant) 12493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Object> value(Isolate* isolate) const { 1251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->handle(isolate); 12523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 12533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1256014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LBranch final : public LControlInstruction<1, 0> { 12573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LBranch(LOperand* value) { 12593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 12603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 12613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 12633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1264b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 1265b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Branch) 12663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1267014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 12683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1271014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCmpMapAndBranch final : public LControlInstruction<1, 1> { 12723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1273b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCmpMapAndBranch(LOperand* value, LOperand* temp) { 12743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 1275b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 12763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 12773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1278b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1281b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 1282b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1283b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1284b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Map> map() const { return hydrogen()->map().handle(); } 12853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 12863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1288014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LSeqStringGetChar final : public LTemplateInstruction<1, 2, 0> { 12893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSeqStringGetChar(LOperand* string, LOperand* index) { 1291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = string; 1292b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = index; 12933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 12943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1295b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* string() const { return inputs_[0]; } 1296b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* index() const { return inputs_[1]; } 1297b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 1299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 13003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1303014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LSeqStringSetChar final : public LTemplateInstruction<1, 4, 0> { 13043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1305b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSeqStringSetChar(LOperand* context, 1306b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* string, 1307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* index, 1308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value) { 1309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1310b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = string; 1311b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = index; 1312b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[3] = value; 13133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 13143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* string() { return inputs_[1]; } 1316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* index() { return inputs_[2]; } 1317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[3]; } 1318b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1319b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 1320b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 13213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1324014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LAddI final : public LTemplateInstruction<1, 2, 0> { 13253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 13263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LAddI(LOperand* left, LOperand* right) { 13273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 13283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 13293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 13303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1331b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1332b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 1333b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 13343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 13353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Add) 13363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1339014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMathMinMax final : public LTemplateInstruction<1, 2, 0> { 13403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1341b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LMathMinMax(LOperand* left, LOperand* right) { 13423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 13433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 13443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 13453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1346b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1347b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 1348b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1349b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 1350b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 13513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1354014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LPower final : public LTemplateInstruction<1, 2, 0> { 13553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1356b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LPower(LOperand* left, LOperand* right) { 1357b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = left; 1358b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = right; 13593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 13603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1361b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1362b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 1363b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1364b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1365b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Power) 13663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1369014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LArithmeticD final : public LTemplateInstruction<1, 2, 0> { 13703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 13713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 13723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : op_(op) { 13733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 13743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 13753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 13763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return op_; } 1378b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[0]; } 1379b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[1]; } 13803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1381014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Opcode opcode() const override { return LInstruction::kArithmeticD; } 1382014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void CompileToNative(LCodeGen* generator) override; 1383014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const char* Mnemonic() const override; 13843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 13863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op_; 13873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1390014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LArithmeticT final : public LTemplateInstruction<1, 3, 0> { 13913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1392b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LArithmeticT(Token::Value op, 1393b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context, 1394b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left, 1395b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right) 13963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : op_(op) { 1397b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1398b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = left; 1399b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = right; 14003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 14013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1402b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1403b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[1]; } 1404b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[2]; } 14053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return op_; } 14063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1407014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Opcode opcode() const final { return LInstruction::kArithmeticT; } 1408014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void CompileToNative(LCodeGen* generator) override; 1409014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const char* Mnemonic() const override; 1410014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1411014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 1412014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 14133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 14143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op_; 14153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1418014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LReturn final : public LTemplateInstruction<0, 3, 0> { 14193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1420b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) { 14213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 1422b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = context; 1423b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = parameter_count; 14243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 14253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1426b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1427b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1428b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool has_constant_parameter_count() { 1429b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return parameter_count()->IsConstantOperand(); 1430b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1431b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LConstantOperand* constant_parameter_count() { 1432b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(has_constant_parameter_count()); 1433b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return LConstantOperand::cast(parameter_count()); 1434b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1435b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* parameter_count() { return inputs_[2]; } 1436b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Return, "return") 14383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1441014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadNamedField final : public LTemplateInstruction<1, 1, 0> { 14423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 14433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LLoadNamedField(LOperand* object) { 14443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 14453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 14463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1447b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[0]; } 1448b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 14503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 14513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1454014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadNamedGeneric final : public LTemplateInstruction<1, 2, 1> { 14553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1456b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { 1457b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1458b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = object; 1459b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = vector; 14603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 14613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1462b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1463b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[1]; } 1464b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp_vector() { return temps_[0]; } 14653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 14673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 14683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<Object> name() const { return hydrogen()->name(); } 14703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1473014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadFunctionPrototype final : public LTemplateInstruction<1, 1, 0> { 14743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 14753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LLoadFunctionPrototype(LOperand* function) { 14763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = function; 14773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 14783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* function() { return inputs_[0]; } 14803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1481b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1482b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 14833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1486014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadRoot final : public LTemplateInstruction<1, 0, 0> { 14873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1488b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 1489b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 14903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1491b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Heap::RootListIndex index() const { return hydrogen()->index(); } 14923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 14933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1495014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadKeyed final : public LTemplateInstruction<1, 3, 0> { 14963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1497014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LLoadKeyed(LOperand* elements, LOperand* key, LOperand* backing_store_owner) { 14983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = elements; 14993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = key; 1500014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[2] = backing_store_owner; 15013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* elements() { return inputs_[0]; } 15043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* key() { return inputs_[1]; } 1505014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* backing_store_owner() { return inputs_[2]; } 1506b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ElementsKind elements_kind() const { 1507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->elements_kind(); 15083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1509b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool is_fixed_typed_array() const { 1510b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->is_fixed_typed_array(); 1511b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 15123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1513b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1514b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 15153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1516014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1517b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch uint32_t base_offset() const { return hydrogen()->base_offset(); } 15183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 15193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1521014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadKeyedGeneric final : public LTemplateInstruction<1, 3, 1> { 15223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1523b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, 1524b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* vector) { 1525b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1526b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = object; 1527b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = key; 1528b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = vector; 15293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1531b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1532b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[1]; } 1533b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* key() { return inputs_[2]; } 1534b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp_vector() { return temps_[0]; } 15353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1536b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1537b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) 15383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 15393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 154021efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdochclass LLoadGlobalGeneric final : public LTemplateInstruction<1, 1, 1> { 15413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 154221efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch LLoadGlobalGeneric(LOperand* context, LOperand* vector) { 1543b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1544b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = vector; 15453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1547b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1548b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp_vector() { return temps_[0]; } 1549b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 15513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 15523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<Object> name() const { return hydrogen()->name(); } 1554014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TypeofMode typeof_mode() const { return hydrogen()->typeof_mode(); } 15553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 15563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1558014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadContextSlot final : public LTemplateInstruction<1, 1, 0> { 15593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 15603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LLoadContextSlot(LOperand* context) { 15613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = context; 15623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1564b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1565b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 15673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 15683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int slot_index() { return hydrogen()->slot_index(); } 15703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1571014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 15723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 15733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1575014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreContextSlot final : public LTemplateInstruction<0, 2, 0> { 15763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 15773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LStoreContextSlot(LOperand* context, LOperand* value) { 15783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = context; 15793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = value; 15803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1582b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1583b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[1]; } 1584b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 15863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 15873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int slot_index() { return hydrogen()->slot_index(); } 15893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1590014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 15913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 15923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 15933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1594014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LPushArgument final : public LTemplateInstruction<0, 1, 0> { 15953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 15963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LPushArgument(LOperand* value) { 15973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 15983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 15993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1600b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1601b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 16023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 16033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1606014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDrop final : public LTemplateInstruction<0, 0, 0> { 16073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1608b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDrop(int count) : count_(count) { } 1609b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1610b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int count() const { return count_; } 1611b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1612b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 1613b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1614b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 1615b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int count_; 16163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1619014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreCodeEntry final : public LTemplateInstruction<0, 2, 0> { 16203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1621b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LStoreCodeEntry(LOperand* function, LOperand* code_object) { 1622b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = function; 1623b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = code_object; 1624b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1625b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1626b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* function() { return inputs_[0]; } 1627b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* code_object() { return inputs_[1]; } 1628b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1629014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1630b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 1632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 16333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1636014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LInnerAllocatedObject final : public LTemplateInstruction<1, 2, 0> { 16373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1638b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 1639b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = base_object; 1640b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = offset; 16413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 16423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1643b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* base_object() const { return inputs_[0]; } 1644b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* offset() const { return inputs_[1]; } 16453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1646014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 1647b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1648b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 16493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1652014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LThisFunction final : public LTemplateInstruction<1, 0, 0> { 16533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1654b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 1655b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 16563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1659014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LContext final : public LTemplateInstruction<1, 0, 0> { 16603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1661b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Context, "context") 1662b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Context) 1663b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1664b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1665b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1666014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDeclareGlobals final : public LTemplateInstruction<0, 1, 0> { 1667b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1668b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDeclareGlobals(LOperand* context) { 16693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = context; 16703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 16713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1672b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 16733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1674b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 1675b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 16763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 16773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 16783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1679014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCallWithDescriptor final : public LTemplateResultInstruction<1> { 16803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1681b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCallWithDescriptor(CallInterfaceDescriptor descriptor, 1682b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const ZoneList<LOperand*>& operands, Zone* zone) 1683b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : descriptor_(descriptor), 1684014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_(descriptor.GetRegisterParameterCount() + 1685014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kImplicitRegisterParameterCount, 1686014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch zone) { 1687014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK(descriptor.GetRegisterParameterCount() + 1688014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kImplicitRegisterParameterCount == 1689014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch operands.length()); 1690b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_.AddAll(operands, zone); 1691b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 16923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1693b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* target() const { return inputs_[0]; } 1694b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const CallInterfaceDescriptor descriptor() { return descriptor_; } 1696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1697958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 1698958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1699014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // The target and context are passed as implicit parameters that are not 1700014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // explicitly listed in the descriptor. 1701014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static const int kImplicitRegisterParameterCount = 2; 1702014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1703b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 1704b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 1705b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1706014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 17073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1709b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1710b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptor descriptor_; 1711b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZoneList<LOperand*> inputs_; 1712b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1713b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Iterator support. 1714014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int InputCount() final { return inputs_.length(); } 1715014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* InputAt(int i) final { return inputs_[i]; } 1716b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1717014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int TempCount() final { return 0; } 1718014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* TempAt(int i) final { return NULL; } 17193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1722014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LInvokeFunction final : public LTemplateInstruction<1, 2, 0> { 17233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1724b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInvokeFunction(LOperand* context, LOperand* function) { 1725b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1726b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = function; 17273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 17283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1729b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1730b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* function() { return inputs_[1]; } 1731b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 17323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 17333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 17343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1735014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 17363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 17383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1741014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCallNewArray final : public LTemplateInstruction<1, 2, 0> { 17423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1743b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LCallNewArray(LOperand* context, LOperand* constructor) { 1744b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1745b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = constructor; 17463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 17473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1748b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1749b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* constructor() { return inputs_[1]; } 1750b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1751b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 1752b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 1753b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1754014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 17553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 17573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1760014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCallRuntime final : public LTemplateInstruction<1, 1, 0> { 17613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1762b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LCallRuntime(LOperand* context) { 1763b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1764b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 17653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1766b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 17673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1768b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1769b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1770b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1771014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool ClobbersDoubleRegisters(Isolate* isolate) const override { 1772b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return save_doubles() == kDontSaveFPRegs; 1773b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1774b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1775b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const Runtime::Function* function() const { return hydrogen()->function(); } 1776b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int arity() const { return hydrogen()->argument_count(); } 1777b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } 17783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1781014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LInteger32ToDouble final : public LTemplateInstruction<1, 1, 0> { 17823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1783b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LInteger32ToDouble(LOperand* value) { 1784b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1785b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 17863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1787b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 17883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1789b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 17903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1793014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LUint32ToDouble final : public LTemplateInstruction<1, 1, 0> { 17943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1795b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LUint32ToDouble(LOperand* value) { 1796b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 17973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 17983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1799b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 18003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1801b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 18023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1805014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LNumberTagI final : public LTemplateInstruction<1, 1, 2> { 1806b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 1807b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) { 1808b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 1809b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp1; 1810b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[1] = temp2; 1811b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1812b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1813b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1814b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp1() { return temps_[0]; } 1815b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2() { return temps_[1]; } 18163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1817b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 18183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1821014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LNumberTagU final : public LTemplateInstruction<1, 1, 2> { 18223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1823b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) { 18243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 1825b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp1; 1826b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[1] = temp2; 18273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 18283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1829b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1830b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp1() { return temps_[0]; } 1831b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2() { return temps_[1]; } 1832b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1833b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 18343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1837014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LNumberTagD final : public LTemplateInstruction<1, 1, 2> { 18383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1839b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) { 18403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 1841b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 1842b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[1] = temp2; 18433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 18443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1845b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1846b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1847b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2() { return temps_[1]; } 1848b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1849b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 1850b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Change) 18513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1854014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDoubleToSmi final : public LTemplateInstruction<1, 1, 0> { 18553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1856b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDoubleToSmi(LOperand* value) { 18573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 18583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 18593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1860b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1861b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1862b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 1863b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 1864b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1865b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool truncating() { return hydrogen()->CanTruncateToInt32(); } 18663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Sometimes truncating conversion from a tagged value to an int32. 1870014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDoubleToI final : public LTemplateInstruction<1, 1, 0> { 18713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1872b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDoubleToI(LOperand* value) { 18733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 18743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 18753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1876b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1877b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 18783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 18793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 18803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool truncating() { return hydrogen()->CanTruncateToInt32(); } 18823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 18833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 18853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Truncating conversion from a tagged value to an int32. 1886014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LTaggedToI final : public LTemplateInstruction<1, 1, 2> { 18873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 18883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LTaggedToI(LOperand* value, 1889b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp, 1890b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2) { 18913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 1892b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 18933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[1] = temp2; 18943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 18953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1896b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1897b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1898b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2() { return temps_[1]; } 1899b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 1901b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Change) 19023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool truncating() { return hydrogen()->CanTruncateToInt32(); } 19043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1907014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LSmiTag final : public LTemplateInstruction<1, 1, 0> { 19083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 19093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LSmiTag(LOperand* value) { 19103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 19113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1913b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1914b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 1916b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Change) 19173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1920014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LNumberUntagD final : public LTemplateInstruction<1, 1, 0> { 19213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 19223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LNumberUntagD(LOperand* value) { 19233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 19243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1926b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 1927b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 19293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Change) 19303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1933014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LSmiUntag final : public LTemplateInstruction<1, 1, 0> { 19343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 19353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LSmiUntag(LOperand* value, bool needs_check) 19363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch : needs_check_(needs_check) { 19373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 19383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1940b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 19413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool needs_check() const { return needs_check_; } 19423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1943b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 1944b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 19463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch bool needs_check_; 19473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1950014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreNamedField final : public LTemplateInstruction<0, 2, 1> { 19513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1952b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 1953b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = object; 1954b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = value; 1955b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 19563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1958b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[0]; } 1959b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[1]; } 1960b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 1961b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 19633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 19643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1965014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 19663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1967b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Representation representation() const { 1968b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->field_representation(); 1969b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 19703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1973014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreNamedGeneric final : public LTemplateInstruction<0, 3, 2> { 19743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 1975014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value, 1976014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* slot, LOperand* vector) { 1977b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 1978b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = object; 1979b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = value; 1980014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch temps_[0] = slot; 1981014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch temps_[1] = vector; 19823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1984b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 1985b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[1]; } 1986b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[2]; } 1987014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* temp_slot() { return temps_[0]; } 1988014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* temp_vector() { return temps_[1]; } 1989b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 19913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 19923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1993014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 19943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<Object> name() const { return hydrogen()->name(); } 1996014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode() { return hydrogen()->language_mode(); } 19973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2000014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreKeyed final : public LTemplateInstruction<0, 4, 0> { 20013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2002014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LStoreKeyed(LOperand* object, LOperand* key, LOperand* value, 2003014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* backing_store_owner) { 2004b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = object; 20053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = key; 2006b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = value; 2007014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[3] = backing_store_owner; 20083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2010b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool is_fixed_typed_array() const { 2011b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->is_fixed_typed_array(); 2012b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 2013b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* elements() { return inputs_[0]; } 20143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* key() { return inputs_[1]; } 20153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* value() { return inputs_[2]; } 2016014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* backing_store_owner() { return inputs_[3]; } 2017b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ElementsKind elements_kind() const { 2018b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->elements_kind(); 20193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2021b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 2022b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 20233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2024014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 2025b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 2026b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch uint32_t base_offset() const { return hydrogen()->base_offset(); } 20273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 20283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2030014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStoreKeyedGeneric final : public LTemplateInstruction<0, 4, 2> { 20313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2032014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LStoreKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, 2033014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* value, LOperand* slot, LOperand* vector) { 2034b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2035014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[1] = object; 2036b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = key; 2037b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[3] = value; 2038014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch temps_[0] = slot; 2039014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch temps_[1] = vector; 20403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2042b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2043b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[1]; } 2044b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* key() { return inputs_[2]; } 2045b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[3]; } 2046014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* temp_slot() { return temps_[0]; } 2047014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* temp_vector() { return temps_[1]; } 2048b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 20493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 20503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 20513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2052014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 20533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2054014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode() { return hydrogen()->language_mode(); } 20553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 20563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2058014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LTransitionElementsKind final : public LTemplateInstruction<0, 2, 1> { 20593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 20603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LTransitionElementsKind(LOperand* object, 2061b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context, 2062b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* new_map_temp) { 20633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 2064b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = context; 20653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = new_map_temp; 20663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2068b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[1]; } 2069b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[0]; } 2070b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* new_map_temp() { return temps_[0]; } 2071b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 20723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 20733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "transition-elements-kind") 20743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 20753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2076014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 20773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2078b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2079b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Map> transitioned_map() { 2080b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hydrogen()->transitioned_map().handle(); 2081b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 2082b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ElementsKind from_kind() { return hydrogen()->from_kind(); } 2083b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ElementsKind to_kind() { return hydrogen()->to_kind(); } 20843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 20853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2087014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LTrapAllocationMemento final : public LTemplateInstruction<0, 1, 1> { 20883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2089b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LTrapAllocationMemento(LOperand* object, 2090b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp) { 2091b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = object; 2092b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp; 20933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2095b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* object() { return inputs_[0]; } 2096b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 20973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2098b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 2099b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "trap-allocation-memento") 21003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LMaybeGrowElements final : public LTemplateInstruction<1, 5, 0> { 2104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 2105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LMaybeGrowElements(LOperand* context, LOperand* object, LOperand* elements, 2106014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* key, LOperand* current_capacity) { 2107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[0] = context; 2108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[1] = object; 2109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[2] = elements; 2110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[3] = key; 2111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inputs_[4] = current_capacity; 2112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 2113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* context() { return inputs_[0]; } 2115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* object() { return inputs_[1]; } 2116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* elements() { return inputs_[2]; } 2117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* key() { return inputs_[3]; } 2118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* current_capacity() { return inputs_[4]; } 2119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(MaybeGrowElements) 2121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(MaybeGrowElements, "maybe-grow-elements") 2122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 2123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStringAdd final : public LTemplateInstruction<1, 3, 0> { 21263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 2128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = left; 2130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = right; 21313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* left() { return inputs_[1]; } 2135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* right() { return inputs_[2]; } 21363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 2138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringAdd) 21393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2142014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStringCharCodeAt final : public LTemplateInstruction<1, 3, 0> { 21433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 2145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = string; 2147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[2] = index; 21483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* string() { return inputs_[1]; } 2152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* index() { return inputs_[2]; } 21533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 2155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 21563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2159014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStringCharFromCode final : public LTemplateInstruction<1, 2, 0> { 21603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { 2162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = char_code; 21643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* char_code() { return inputs_[1]; } 21683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 21713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2174014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckValue final : public LTemplateInstruction<0, 1, 0> { 21753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LCheckValue(LOperand* value) { 21773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 21783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 21813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 2183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckValue) 21843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2187014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckArrayBufferNotNeutered final 2188014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : public LTemplateInstruction<0, 1, 0> { 2189014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 2190014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch explicit LCheckArrayBufferNotNeutered(LOperand* view) { inputs_[0] = view; } 2191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2192014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LOperand* view() { return inputs_[0]; } 2193014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2194014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckArrayBufferNotNeutered, 2195014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "check-array-buffer-not-neutered") 2196014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckArrayBufferNotNeutered) 2197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 2198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2199014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 2200014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckInstanceType final : public LTemplateInstruction<0, 1, 0> { 22013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 22023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LCheckInstanceType(LOperand* value) { 22033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 22043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 2207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 22093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 22103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2213014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckMaps final : public LTemplateInstruction<0, 1, 0> { 22143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LCheckMaps(LOperand* value = NULL) { 22163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 22173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 22203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 2222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 22233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2226014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckSmi final : public LTemplateInstruction<1, 1, 0> { 22273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 22283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LCheckSmi(LOperand* value) { 22293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 22303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 2233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 22353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2238014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckNonSmi final : public LTemplateInstruction<0, 1, 0> { 22393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 22403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LCheckNonSmi(LOperand* value) { 22413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 22423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 2245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 2247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 22483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2251014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LClampDToUint8 final : public LTemplateInstruction<1, 1, 1> { 22523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LClampDToUint8(LOperand* unclamped, LOperand* temp) { 2254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = unclamped; 22553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = temp; 22563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* unclamped() { return inputs_[0]; } 2259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 22603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 22623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2265014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LClampIToUint8 final : public LTemplateInstruction<1, 1, 0> { 22663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2267b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LClampIToUint8(LOperand* unclamped) { 2268b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = unclamped; 22693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* unclamped() { return inputs_[0]; } 22723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 22743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2277014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LClampTToUint8 final : public LTemplateInstruction<1, 1, 1> { 22783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LClampTToUint8(LOperand* unclamped, LOperand* temp) { 2280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = unclamped; 22813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = temp; 22823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* unclamped() { return inputs_[0]; } 2285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp() { return temps_[0]; } 22863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 22883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 22893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2291014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LDoubleBits final : public LTemplateInstruction<1, 1, 0> { 22923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2293b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LDoubleBits(LOperand* value) { 2294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = value; 22953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 22963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2297b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 2298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 2300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 23013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2304014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LAllocate final : public LTemplateInstruction<1, 2, 2> { 23053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2306b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LAllocate(LOperand* context, 2307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* size, 2308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp1, 2309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2) { 2310b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2311b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = size; 2312b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[0] = temp1; 2313b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch temps_[1] = temp2; 2314b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 2315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* size() { return inputs_[1]; } 2318b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp1() { return temps_[0]; } 2319b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* temp2() { return temps_[1]; } 2320b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2321b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 2322b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Allocate) 23233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2325537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdochclass LFastAllocate final : public LTemplateInstruction<1, 1, 2> { 2326537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch public: 2327537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch LFastAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) { 2328537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch inputs_[0] = size; 2329537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch temps_[0] = temp1; 2330537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch temps_[1] = temp2; 2331537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch } 2332537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch 2333537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch LOperand* size() { return inputs_[0]; } 2334537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch LOperand* temp1() { return temps_[0]; } 2335537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch LOperand* temp2() { return temps_[1]; } 2336537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch 2337537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(FastAllocate, "fast-allocate") 2338537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Allocate) 2339537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch}; 23403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2341014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LTypeof final : public LTemplateInstruction<1, 2, 0> { 23423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2343b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LTypeof(LOperand* context, LOperand* value) { 2344b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2345b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[1] = value; 23463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 23473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2348b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 2349b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[1]; } 2350b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 23513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 23523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2355014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LTypeofIsAndBranch final : public LControlInstruction<1, 0> { 23563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 23573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LTypeofIsAndBranch(LOperand* value) { 23583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 23593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 23603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2361b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* value() { return inputs_[0]; } 2362b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 23633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 23643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 23653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<String> type_literal() { return hydrogen()->type_literal(); } 23673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2368014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintDataTo(StringStream* stream) override; 23693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2372014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LOsrEntry final : public LTemplateInstruction<0, 0, 0> { 23733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2374b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOsrEntry() {} 23753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2376014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasInterestingComment(LCodeGen* gen) const override { return false; } 2377b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 23783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2381014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LStackCheck final : public LTemplateInstruction<0, 1, 0> { 23823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2383b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit LStackCheck(LOperand* context) { 2384b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 2385b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 23863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2387b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 23883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 23903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StackCheck) 23913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Label* done_label() { return &done_label_; } 23933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 23953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Label done_label_; 23963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 23973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2399014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LForInPrepareMap final : public LTemplateInstruction<1, 2, 0> { 24003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 2401b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LForInPrepareMap(LOperand* context, LOperand* object) { 2402b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs_[0] = context; 24033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = object; 24043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 24053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2406b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* context() { return inputs_[0]; } 24073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* object() { return inputs_[1]; } 24083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 24103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 24113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2413014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LForInCacheArray final : public LTemplateInstruction<1, 1, 0> { 24143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 24153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LForInCacheArray(LOperand* map) { 24163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = map; 24173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 24183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* map() { return inputs_[0]; } 24203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 24223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int idx() { 24243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return HForInCacheArray::cast(this->hydrogen_value())->idx(); 24253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 24263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 24273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2429014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LCheckMapValue final : public LTemplateInstruction<0, 2, 0> { 24303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 24313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LCheckMapValue(LOperand* value, LOperand* map) { 24323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 24333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = map; 24343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 24353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* value() { return inputs_[0]; } 24373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* map() { return inputs_[1]; } 24383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 24403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 24413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2443014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LLoadFieldByIndex final : public LTemplateInstruction<1, 2, 0> { 24443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 24453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LLoadFieldByIndex(LOperand* object, LOperand* index) { 24463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 24473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = index; 24483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 24493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* object() { return inputs_[0]; } 24513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* index() { return inputs_[1]; } 24523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 24543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 24553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2457b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass LChunkBuilder; 2458014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LPlatformChunk final : public LChunk { 2459b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 2460b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LPlatformChunk(CompilationInfo* info, HGraph* graph) 2461b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : LChunk(info, graph) { } 2462b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2463b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int GetNextSpillIndex(RegisterKind kind); 2464b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOperand* GetNextSpillSlot(RegisterKind kind); 2465b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 2466b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2467b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2468014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass LChunkBuilder final : public LChunkBuilderBase { 24693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 24703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2471b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : LChunkBuilderBase(info, graph), 24723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch current_instruction_(NULL), 24733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch current_block_(NULL), 24743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch next_block_(NULL), 2475b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch allocator_(allocator) {} 24763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Build the sequence for the graph. 2478b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LPlatformChunk* Build(); 24793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 24803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Declare methods that deal with the individual node types. 24813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 24823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 24833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DECLARE_DO 24843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2485b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend); 2486b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2487b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch static bool HasMagicNumberForDivisor(int32_t divisor); 2488b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 2489b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathFloor(HUnaryMathOperation* instr); 2490b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathRound(HUnaryMathOperation* instr); 2491b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathFround(HUnaryMathOperation* instr); 2492b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathAbs(HUnaryMathOperation* instr); 2493b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathLog(HUnaryMathOperation* instr); 249421efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch LInstruction* DoMathCos(HUnaryMathOperation* instr); 249521efce637eb329c94f1323b6a2334a1c977e1a9dBen Murdoch LInstruction* DoMathSin(HUnaryMathOperation* instr); 2496b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathExp(HUnaryMathOperation* instr); 2497b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathSqrt(HUnaryMathOperation* instr); 2498b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathPowHalf(HUnaryMathOperation* instr); 2499b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoMathClz32(HUnaryMathOperation* instr); 2500b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoDivByPowerOf2I(HDiv* instr); 2501b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoDivByConstI(HDiv* instr); 2502b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoDivI(HDiv* instr); 2503b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoModByPowerOf2I(HMod* instr); 2504b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoModByConstI(HMod* instr); 2505b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoModI(HMod* instr); 2506b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 2507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 2508b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 25093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2510b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 25113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Methods for getting operands for Use / Define / Temp. 25123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LUnallocated* ToUnallocated(Register reg); 25133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LUnallocated* ToUnallocated(DoubleRegister reg); 25143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Methods for setting up define-use relationships. 25163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 25173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 25183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 25193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DoubleRegister fixed_register); 25203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // A value that is guaranteed to be allocated to a register. 25223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Operand created by UseRegister is guaranteed to be live until the end of 25233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // instruction. This means that register allocator will not reuse it's 25243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // register for any other operand inside instruction. 25253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Operand created by UseRegisterAtStart is guaranteed to be live only at 25263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // instruction start. Register allocator is free to assign the same register 25273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // to some other operand used inside instruction (i.e. temporary or 25283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // output). 25293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseRegister(HValue* value); 25303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 25313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // An input operand in a register that may be trashed. 25333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 25343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // An input operand in a register or stack slot. 25363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* Use(HValue* value); 25373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 25383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // An input operand in a register, stack slot or a constant operand. 25403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 25413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 25423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // An input operand in a register or a constant operand. 25443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 25453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 25463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2547b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // An input operand in a constant operand. 2548b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MUST_USE_RESULT LOperand* UseConstant(HValue* value); 2549b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 25503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // An input operand in register, stack slot or a constant operand. 25513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Will not be moved to a register even if one is freely available. 2552014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch MUST_USE_RESULT LOperand* UseAny(HValue* value) override; 25533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Temporary operand that must be in a register. 25553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LUnallocated* TempRegister(); 2556b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MUST_USE_RESULT LUnallocated* TempDoubleRegister(); 25573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* FixedTemp(Register reg); 25583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); 25593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Methods for setting up define-use relationships. 25613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Return the same instruction that they are passed. 2562b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* Define(LTemplateResultInstruction<1>* instr, 2563b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LUnallocated* result); 2564b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); 2565b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, 2566b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int index); 2567b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr); 2568b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr, 2569b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register reg); 2570b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr, 2571b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DoubleRegister reg); 25723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* AssignEnvironment(LInstruction* instr); 25733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* AssignPointerMap(LInstruction* instr); 25743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 25763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // By default we assume that instruction sequences generated for calls 25783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // cannot deoptimize eagerly and we do not attach environment to this 25793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // instruction. 25803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* MarkAsCall( 25813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* instr, 25823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HInstruction* hinstr, 25833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 25843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void VisitInstruction(HInstruction* current); 2586b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void AddInstruction(LInstruction* instr, HInstruction* current); 25873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 25893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* DoBit(Token::Value op, HBitwiseBinaryOperation* instr); 25903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 25913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* DoArithmeticD(Token::Value op, 25923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HArithmeticBinaryOperation* instr); 25933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LInstruction* DoArithmeticT(Token::Value op, 2594b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HBinaryOperation* instr); 25953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 25963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HInstruction* current_instruction_; 25973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HBasicBlock* current_block_; 25983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch HBasicBlock* next_block_; 25993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LAllocator* allocator_; 2600592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 260144f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 260244f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 260344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 26043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DECLARE_HYDROGEN_ACCESSOR 26053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DECLARE_CONCRETE_INSTRUCTION 260644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2607014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 2608014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 260944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2610014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#endif // V8_CRANKSHAFT_MIPS_LITHIUM_MIPS_H_ 2611