13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Redistribution and use in source and binary forms, with or without 3b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// modification, are permitted provided that the following conditions are 4b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// met: 5b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// 6b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Redistributions of source code must retain the above copyright 7b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// notice, this list of conditions and the following disclaimer. 8b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Redistributions in binary form must reproduce the above 9b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// copyright notice, this list of conditions and the following 10b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// disclaimer in the documentation and/or other materials provided 11b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// with the distribution. 12b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Neither the name of Google Inc. nor the names of its 13b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// contributors may be used to endorse or promote products derived 14b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// from this software without specific prior written permission. 15b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// 16b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 28b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef V8_X64_LITHIUM_X64_H_ 29b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define V8_X64_LITHIUM_X64_H_ 30b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 31b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include "hydrogen.h" 32b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include "lithium-allocator.h" 33086aeeaae12517475c22695a200be45495516549Ben Murdoch#include "lithium.h" 34b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include "safepoint-table.h" 353fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch#include "utils.h" 36b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 37b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochnamespace v8 { 38b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochnamespace internal { 39b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 40b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Forward declarations. 41b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochclass LCodeGen; 42b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 43b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#define LITHIUM_ALL_INSTRUCTION_LIST(V) \ 44b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ControlInstruction) \ 45b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Call) \ 46b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LITHIUM_CONCRETE_INSTRUCTION_LIST(V) 47b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 48b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 49b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ 50b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(AccessArgumentsAt) \ 51b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(AddI) \ 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(AllocateObject) \ 53b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ApplyArguments) \ 54b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ArgumentsElements) \ 55b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ArgumentsLength) \ 56b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ArithmeticD) \ 57b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ArithmeticT) \ 58b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ArrayLiteral) \ 59b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(BitI) \ 60b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(BitNotI) \ 61b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(BoundsCheck) \ 62b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Branch) \ 63b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallConstantFunction) \ 64b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallFunction) \ 65b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallGlobal) \ 66b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallKeyed) \ 67b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallKnownGlobal) \ 68b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallNamed) \ 69b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallNew) \ 70b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallRuntime) \ 71b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CallStub) \ 72b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CheckFunction) \ 73b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CheckInstanceType) \ 74b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CheckMap) \ 7544f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(CheckNonSmi) \ 76b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CheckPrototypeMaps) \ 77b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CheckSmi) \ 78257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(ClampDToUint8) \ 79257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(ClampIToUint8) \ 80257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(ClampTToUint8) \ 8144f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(ClassOfTestAndBranch) \ 823fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(CmpConstantEqAndBranch) \ 83b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CmpIDAndBranch) \ 843fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(CmpObjectEqAndBranch) \ 85b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CmpMapAndBranch) \ 86b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(CmpT) \ 87b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ConstantD) \ 88b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ConstantI) \ 89b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ConstantT) \ 901e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block V(Context) \ 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(DeclareGlobals) \ 92b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(DeleteProperty) \ 93b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Deoptimize) \ 94b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(DivI) \ 95b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(DoubleToI) \ 963fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(ElementsKind) \ 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(FastLiteral) \ 9869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch V(FixedArrayBaseLength) \ 99b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(FunctionLiteral) \ 100e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch V(GetCachedArrayIndex) \ 101b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(GlobalObject) \ 102b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(GlobalReceiver) \ 103b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Goto) \ 104053d10c438f14580aaf4ab1b2aad93a5a4fe8b82Steve Block V(HasCachedArrayIndexAndBranch) \ 105257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(HasInstanceTypeAndBranch) \ 106257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(In) \ 107b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(InstanceOf) \ 108b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(InstanceOfKnownGlobal) \ 109257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(InstructionGap) \ 110b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Integer32ToDouble) \ 111257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(InvokeFunction) \ 112257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(IsConstructCallAndBranch) \ 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(IsNilAndBranch) \ 114b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(IsObjectAndBranch) \ 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(IsStringAndBranch) \ 116b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(IsSmiAndBranch) \ 117257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(IsUndetectableAndBranch) \ 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(StringCompareAndBranch) \ 119b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(JSArrayLength) \ 120b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Label) \ 121b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LazyBailout) \ 122b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadContextSlot) \ 123b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadElements) \ 12444f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(LoadExternalArrayPointer) \ 125257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(LoadFunctionPrototype) \ 1268b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch V(LoadGlobalCell) \ 1278b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch V(LoadGlobalGeneric) \ 1283fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(LoadKeyedFastDoubleElement) \ 129b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadKeyedFastElement) \ 130b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadKeyedGeneric) \ 13144f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(LoadKeyedSpecializedArrayElement) \ 132b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadNamedField) \ 13344f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(LoadNamedFieldPolymorphic) \ 134b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(LoadNamedGeneric) \ 135b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ModI) \ 136b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(MulI) \ 137b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(NumberTagD) \ 138b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(NumberTagI) \ 139b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(NumberUntagD) \ 1405d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch V(ObjectLiteral) \ 141b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(OsrEntry) \ 142e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch V(OuterContext) \ 143b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Parameter) \ 144b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Power) \ 145b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(PushArgument) \ 1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(Random) \ 147b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(RegExpLiteral) \ 148b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Return) \ 149b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(ShiftI) \ 150b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(SmiTag) \ 151b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(SmiUntag) \ 152b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(StackCheck) \ 153e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch V(StoreContextSlot) \ 1548b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch V(StoreGlobalCell) \ 1558b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch V(StoreGlobalGeneric) \ 1563fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(StoreKeyedFastDoubleElement) \ 157b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(StoreKeyedFastElement) \ 158b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(StoreKeyedGeneric) \ 15944f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(StoreKeyedSpecializedArrayElement) \ 160b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(StoreNamedField) \ 161b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(StoreNamedGeneric) \ 162257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(StringAdd) \ 163e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch V(StringCharCodeAt) \ 16444f0eee88ff00398ff7f715fab053374d808c90dSteve Block V(StringCharFromCode) \ 165e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch V(StringLength) \ 166b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(SubI) \ 167b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(TaggedToI) \ 1683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch V(ThisFunction) \ 169b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Throw) \ 170257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch V(ToFastProperties) \ 1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(TransitionElementsKind) \ 172b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(Typeof) \ 173b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(TypeofIsAndBranch) \ 174b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(UnaryMathOperation) \ 175b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch V(UnknownOSRValue) \ 1763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(ValueOf) \ 1773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(ForInPrepareMap) \ 1783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(ForInCacheArray) \ 1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(CheckMapValue) \ 1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(LoadFieldByIndex) \ 1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(DateField) \ 1823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch V(WrapReceiver) 183b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 184b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 185257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 186257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual Opcode opcode() const { return LInstruction::k##type; } \ 187257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void CompileToNative(LCodeGen* generator); \ 188257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual const char* Mnemonic() const { return mnemonic; } \ 189257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static L##type* cast(LInstruction* instr) { \ 190257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(instr->Is##type()); \ 191257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return reinterpret_cast<L##type*>(instr); \ 192b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 193b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 194b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 195b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#define DECLARE_HYDROGEN_ACCESSOR(type) \ 196b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch H##type* hydrogen() const { \ 197b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return H##type::cast(hydrogen_value()); \ 198b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 199b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 200b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 201b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochclass LInstruction: public ZoneObject { 202b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 203b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction() 2041e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block : environment_(NULL), 2051e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block hydrogen_value_(NULL), 2061e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block is_call_(false), 2071e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block is_save_doubles_(false) { } 2081e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 209b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual ~LInstruction() { } 210b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 211b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void CompileToNative(LCodeGen* generator) = 0; 212b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual const char* Mnemonic() const = 0; 213b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintTo(StringStream* stream); 214b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream) = 0; 215b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintOutputOperandTo(StringStream* stream) = 0; 216b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 217257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch enum Opcode { 218257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Declare a unique enum value for each instruction. 219257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#define DECLARE_OPCODE(type) k##type, 220257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) 221257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch kNumberOfInstructions 222257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#undef DECLARE_OPCODE 223257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch }; 224257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 225257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual Opcode opcode() const = 0; 226257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 227257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Declare non-virtual type testers for all leaf IR classes. 228257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#define DECLARE_PREDICATE(type) \ 229257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch bool Is##type() const { return opcode() == k##type; } 230257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 231257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#undef DECLARE_PREDICATE 232257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 233257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Declare virtual predicates for instructions that don't have 234257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // an opcode. 235257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual bool IsGap() const { return false; } 236b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 237b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual bool IsControl() const { return false; } 238b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2391e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void set_environment(LEnvironment* env) { environment_ = env; } 2401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LEnvironment* environment() const { return environment_; } 2411e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block bool HasEnvironment() const { return environment_ != NULL; } 242b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 243b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 244b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LPointerMap* pointer_map() const { return pointer_map_.get(); } 245b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool HasPointerMap() const { return pointer_map_.is_set(); } 246b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 247b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 248b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HValue* hydrogen_value() const { return hydrogen_value_; } 249b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 250b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_deoptimization_environment(LEnvironment* env) { 251b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch deoptimization_environment_.set(env); 252b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 253b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LEnvironment* deoptimization_environment() const { 254b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return deoptimization_environment_.get(); 255b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 256b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool HasDeoptimizationEnvironment() const { 257b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return deoptimization_environment_.is_set(); 258b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 259b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2601e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void MarkAsCall() { is_call_ = true; } 2611e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void MarkAsSaveDoubles() { is_save_doubles_ = true; } 2621e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2631e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // Interface to the register allocator and iterators. 2641e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block bool IsMarkedAsCall() const { return is_call_; } 2651e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block bool IsMarkedAsSaveDoubles() const { return is_save_doubles_; } 2661e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2671e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual bool HasResult() const = 0; 2681e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual LOperand* result() = 0; 2691e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2701e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual int InputCount() = 0; 2711e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual LOperand* InputAt(int i) = 0; 2721e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual int TempCount() = 0; 2731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual LOperand* TempAt(int i) = 0; 2741e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2751e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LOperand* FirstInput() { return InputAt(0); } 2761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LOperand* Output() { return HasResult() ? result() : NULL; } 2771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2781e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#ifdef DEBUG 2791e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void VerifyCall(); 2801e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#endif 2811e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 282b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 2831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LEnvironment* environment_; 284b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch SetOncePointer<LPointerMap> pointer_map_; 285b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HValue* hydrogen_value_; 286b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch SetOncePointer<LEnvironment> deoptimization_environment_; 2871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block bool is_call_; 2881e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block bool is_save_doubles_; 289b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 290b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 291b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2921e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// R = number of result operands (0 or 1). 2931e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// I = number of input operands. 2941e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// T = number of temporary operands. 2951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blocktemplate<int R, int I, int T> 296b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LTemplateInstruction: public LInstruction { 297b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 298b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Allow 0 or 1 output operands. 299b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch STATIC_ASSERT(R == 0 || R == 1); 300b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual bool HasResult() const { return R != 0; } 301b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_result(LOperand* operand) { results_[0] = operand; } 302b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* result() { return results_[0]; } 303b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 304b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int InputCount() { return I; } 305b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* InputAt(int i) { return inputs_[i]; } 306b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 307b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int TempCount() { return T; } 308b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* TempAt(int i) { return temps_[i]; } 309b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 310b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 311b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintOutputOperandTo(StringStream* stream); 312b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 313b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch protected: 3143fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch EmbeddedContainer<LOperand*, R> results_; 3153fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch EmbeddedContainer<LOperand*, I> inputs_; 3163fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch EmbeddedContainer<LOperand*, T> temps_; 317b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 318b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 319b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 320b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LGap: public LTemplateInstruction<0, 0, 0> { 321b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 322b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LGap(HBasicBlock* block) 323b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : block_(block) { 324b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch parallel_moves_[BEFORE] = NULL; 325b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch parallel_moves_[START] = NULL; 326b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch parallel_moves_[END] = NULL; 327b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch parallel_moves_[AFTER] = NULL; 328b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 329b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 330257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Can't use the DECLARE-macro here because of sub-classes. 331257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual bool IsGap() const { return true; } 332b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 333257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static LGap* cast(LInstruction* instr) { 334257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(instr->IsGap()); 335257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return reinterpret_cast<LGap*>(instr); 336257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 337b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 338b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool IsRedundant() const; 339b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 340b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HBasicBlock* block() const { return block_; } 341b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 342b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch enum InnerPosition { 343b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch BEFORE, 344b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch START, 345b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch END, 346b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch AFTER, 347b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch FIRST_INNER_POSITION = BEFORE, 348b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LAST_INNER_POSITION = AFTER 349b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch }; 350b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 351b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LParallelMove* GetOrCreateParallelMove(InnerPosition pos) { 352b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch if (parallel_moves_[pos] == NULL) parallel_moves_[pos] = new LParallelMove; 353b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return parallel_moves_[pos]; 354b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 355b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 356b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LParallelMove* GetParallelMove(InnerPosition pos) { 357b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return parallel_moves_[pos]; 358b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 359b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 360b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 361b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 362b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HBasicBlock* block_; 363b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 364b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 365b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 366257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LInstructionGap: public LGap { 367257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 368257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 369257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 370257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 371257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 372257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 373257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 374b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LGoto: public LTemplateInstruction<0, 0, 0> { 375b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 3763fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch explicit LGoto(int block_id) : block_id_(block_id) { } 377b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 378b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 379b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 380b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual bool IsControl() const { return true; } 381b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 382b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int block_id() const { return block_id_; } 383b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 384b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 385b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int block_id_; 386b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 387b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 388b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 389b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LLazyBailout: public LTemplateInstruction<0, 0, 0> { 390b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 391b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLazyBailout() : gap_instructions_size_(0) { } 392b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 393b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 394b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 395b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_gap_instructions_size(int gap_instructions_size) { 396b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch gap_instructions_size_ = gap_instructions_size; 397b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 398b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int gap_instructions_size() { return gap_instructions_size_; } 399b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 400b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 401b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int gap_instructions_size_; 402b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 403b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 404b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 405b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LDeoptimize: public LTemplateInstruction<0, 0, 0> { 406b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 407b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 408b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 409b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 410b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 411b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LLabel: public LGap { 412b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 413b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LLabel(HBasicBlock* block) 414b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : LGap(block), replacement_(NULL) { } 415b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 416b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Label, "label") 417b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 418b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 419b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 420b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int block_id() const { return block()->block_id(); } 421b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool is_loop_header() const { return block()->IsLoopHeader(); } 422b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Label* label() { return &label_; } 423b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLabel* replacement() const { return replacement_; } 424b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void set_replacement(LLabel* label) { replacement_ = label; } 425b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool HasReplacement() const { return replacement_ != NULL; } 426b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 427b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 428b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Label label_; 429b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLabel* replacement_; 430b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 431b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 432b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 433b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LParameter: public LTemplateInstruction<1, 0, 0> { 434b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 435b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 436b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 437b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 438b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 439b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallStub: public LTemplateInstruction<1, 0, 0> { 440b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 441b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 442b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallStub) 443b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 444b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch TranscendentalCache::Type transcendental_type() { 445b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return hydrogen()->transcendental_type(); 446b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 447b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 448b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 449b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 450b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> { 451b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 452b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 453b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 454b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 455b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 4561e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blocktemplate<int I, int T> 457b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LControlInstruction: public LTemplateInstruction<0, I, T> { 458b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 459b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual bool IsControl() const { return true; } 460b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 4613fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch int SuccessorCount() { return hydrogen()->SuccessorCount(); } 4623fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 4633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); } 4643fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); } 465b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 466b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 4673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch HControlInstruction* hydrogen() { 4683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch return HControlInstruction::cast(this->hydrogen_value()); 4693fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 470b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 471b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 472b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 4733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LWrapReceiver: public LTemplateInstruction<1, 2, 0> { 4743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 4753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LWrapReceiver(LOperand* receiver, LOperand* function) { 4763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = receiver; 4773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = function; 4783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 4813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* receiver() { return inputs_[0]; } 4833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* function() { return inputs_[1]; } 4843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 487b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LApplyArguments: public LTemplateInstruction<1, 4, 0> { 488b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 489b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LApplyArguments(LOperand* function, 490b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* receiver, 491b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* length, 492b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* elements) { 493b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = function; 494b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = receiver; 495b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[2] = length; 496b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[3] = elements; 497b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 498b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 499b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 500b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 501b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* function() { return inputs_[0]; } 502b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* receiver() { return inputs_[1]; } 503b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* length() { return inputs_[2]; } 504b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* elements() { return inputs_[3]; } 505b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 506b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 507b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 508b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LAccessArgumentsAt: public LTemplateInstruction<1, 3, 0> { 509b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 510b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 511b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = arguments; 512b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = length; 513b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[2] = index; 514b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 515b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 516b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 517b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 518b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* arguments() { return inputs_[0]; } 519b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* length() { return inputs_[1]; } 520b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* index() { return inputs_[2]; } 521b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 522b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 523b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 524b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 525b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 5261e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LArgumentsLength: public LTemplateInstruction<1, 1, 0> { 527b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 528b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LArgumentsLength(LOperand* elements) { 529b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = elements; 530b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 531b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 532b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 533b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 534b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 535b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 536b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LArgumentsElements: public LTemplateInstruction<1, 0, 0> { 537b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 538b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LArgumentsElements() { } 539b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 540b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 541b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 542b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 543b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 544b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LModI: public LTemplateInstruction<1, 2, 1> { 545b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 546b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LModI(LOperand* left, LOperand* right, LOperand* temp) { 547b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 548b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 549b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 550b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 551b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 552b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 553b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Mod) 554b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 555b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 556b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 557b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LDivI: public LTemplateInstruction<1, 2, 1> { 558b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 559b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LDivI(LOperand* left, LOperand* right, LOperand* temp) { 560b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 561b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 562b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 563b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 564b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 565b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 566b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Div) 567b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 568b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 569b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 5701e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LMulI: public LTemplateInstruction<1, 2, 0> { 571b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 5721e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LMulI(LOperand* left, LOperand* right) { 573b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 574b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 575b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 576b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 577b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 578b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Mul) 579b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 580b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 581b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 5821e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCmpIDAndBranch: public LControlInstruction<2, 0> { 583b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 584b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LCmpIDAndBranch(LOperand* left, LOperand* right) { 585b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 586b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 587b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 588b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 589b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") 5903fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch) 591b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 592b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op() const { return hydrogen()->token(); } 593b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool is_double() const { 594b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return hydrogen()->GetInputRepresentation().IsDouble(); 595b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 596b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 597b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 598b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 599b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 600b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6011e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { 602b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 603b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LUnaryMathOperation(LOperand* value) { 604b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 605b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 606b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 607b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") 608b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 609b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 610b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 611b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch BuiltinFunctionId op() const { return hydrogen()->op(); } 612b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 613b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 614b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6153fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LCmpObjectEqAndBranch: public LControlInstruction<2, 0> { 616b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 6173fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 618b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 619b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 620b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 621b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6223fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, 6233fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch "cmp-object-eq-and-branch") 624b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 625b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 626b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6273fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LCmpConstantEqAndBranch: public LControlInstruction<1, 0> { 628b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 6293fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch explicit LCmpConstantEqAndBranch(LOperand* left) { 630b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 631b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 632b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6333fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch, 6343fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch "cmp-constant-eq-and-branch") 6353fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch) 636b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 637b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 638b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LIsNilAndBranch: public LControlInstruction<1, 1> { 640b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 6413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LIsNilAndBranch(LOperand* value, LOperand* temp) { 642b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 643b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 644b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 645b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch") 6473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch) 648b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch EqualityKind kind() const { return hydrogen()->kind(); } 6503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch NilValue nil() const { return hydrogen()->nil(); } 651b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 652b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 653b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 654b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 655b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6561e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LIsObjectAndBranch: public LControlInstruction<1, 0> { 657b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 6581e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LIsObjectAndBranch(LOperand* value) { 659b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 660b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 661b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 662b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 6633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) 664b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 665b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 666b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 667b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 668b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 6693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LIsStringAndBranch: public LControlInstruction<1, 1> { 6703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 6713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LIsStringAndBranch(LOperand* value, LOperand* temp) { 6723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 6733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = temp; 6743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 6753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 6773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 6783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual void PrintDataTo(StringStream* stream); 6803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 6813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LIsSmiAndBranch: public LControlInstruction<1, 0> { 684b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 685b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LIsSmiAndBranch(LOperand* value) { 686b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 687b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 688b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 689b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 6903fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 691b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 692b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 693b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 694b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 695b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 696257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LIsUndetectableAndBranch: public LControlInstruction<1, 1> { 697257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 698257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 699257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = value; 700257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch temps_[0] = temp; 701257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 702257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 703257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 704257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "is-undetectable-and-branch") 7053fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 706257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 707257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void PrintDataTo(StringStream* stream); 708257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 709257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 710257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 7113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LStringCompareAndBranch: public LControlInstruction<2, 0> { 7123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 7133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LStringCompareAndBranch(LOperand* left, LOperand* right) { 7143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = left; 7153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = right; 7163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 7173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 7193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "string-compare-and-branch") 7203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 7213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual void PrintDataTo(StringStream* stream); 7233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return hydrogen()->token(); } 7253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 7263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7281e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> { 729b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 7301e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LHasInstanceTypeAndBranch(LOperand* value) { 731b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 732b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 733b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 734b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 735b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch "has-instance-type-and-branch") 7363fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 737b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 738b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 739b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 740b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 741b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 742e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { 743e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch public: 744e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LGetCachedArrayIndex(LOperand* value) { 745e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = value; 746e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 747e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 748e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 749e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 750e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch}; 751e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 752e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 7531e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { 754b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 755b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 756b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 757b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 758b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 759b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 760b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch "has-cached-array-index-and-branch") 7613fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 762b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 763b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 764b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 765b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 766b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 7673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LClassOfTestAndBranch: public LControlInstruction<1, 2> { 768b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 7693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { 770b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 771b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 7723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[1] = temp2; 773b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 774b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 775b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 776b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch "class-of-test-and-branch") 7773fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 778b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 779b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 780b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 781b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 782b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 7831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCmpT: public LTemplateInstruction<1, 2, 0> { 784b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 785b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LCmpT(LOperand* left, LOperand* right) { 786b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 787b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 788b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 789b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 790b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 7913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 792b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 793b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op() const { return hydrogen()->token(); } 794b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 795b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 796b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 797257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LIn: public LTemplateInstruction<1, 2, 0> { 798257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 799257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LIn(LOperand* key, LOperand* object) { 800257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = key; 801257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[1] = object; 802257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 803257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 804257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* key() { return inputs_[0]; } 805257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* object() { return inputs_[1]; } 806257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 807257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(In, "in") 808257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 809257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 810257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 8111e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LInstanceOf: public LTemplateInstruction<1, 2, 0> { 812b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 813b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstanceOf(LOperand* left, LOperand* right) { 814b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 815b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 816b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 817b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 818b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 819b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 820b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 821b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 82244f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LInstanceOfKnownGlobal: public LTemplateInstruction<1, 1, 1> { 823b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 82444f0eee88ff00398ff7f715fab053374d808c90dSteve Block LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) { 825b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 82644f0eee88ff00398ff7f715fab053374d808c90dSteve Block temps_[0] = temp; 827b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 828b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 829b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 830b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch "instance-of-known-global") 831b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 832b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 833b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<JSFunction> function() const { return hydrogen()->function(); } 834b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 835b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 836b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 837b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LBoundsCheck: public LTemplateInstruction<0, 2, 0> { 838b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 839b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LBoundsCheck(LOperand* index, LOperand* length) { 840b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = index; 841b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = length; 842b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 843b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 844b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* index() { return inputs_[0]; } 845b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* length() { return inputs_[1]; } 846b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 847b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 848b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 849b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 850b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 8511e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LBitI: public LTemplateInstruction<1, 2, 0> { 852b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 8533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LBitI(LOperand* left, LOperand* right) { 854b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 855b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 856b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 857b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 8583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Token::Value op() const { return hydrogen()->op(); } 859b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 860b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 8613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Bitwise) 862b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 863b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 864b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 8651e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LShiftI: public LTemplateInstruction<1, 2, 0> { 866b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 867b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 868b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : op_(op), can_deopt_(can_deopt) { 869b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 870b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 871b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 872b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 873b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op() const { return op_; } 874b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 875b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool can_deopt() const { return can_deopt_; } 876b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 877b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 878b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 879b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 880b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op_; 881b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool can_deopt_; 882b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 883b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 884b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 8851e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LSubI: public LTemplateInstruction<1, 2, 0> { 886b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 887b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LSubI(LOperand* left, LOperand* right) { 888b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 889b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 890b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 891b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 892b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 893b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Sub) 894b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 895b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 896b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 8971e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LConstantI: public LTemplateInstruction<1, 0, 0> { 898b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 899b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 9001e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_HYDROGEN_ACCESSOR(Constant) 901b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9021e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block int32_t value() const { return hydrogen()->Integer32Value(); } 903b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 904b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 905b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9061e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LConstantD: public LTemplateInstruction<1, 0, 1> { 907b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 9081e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LConstantD(LOperand* temp) { 909b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 910b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 911b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 9121e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_HYDROGEN_ACCESSOR(Constant) 913b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9141e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block double value() const { return hydrogen()->DoubleValue(); } 915b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 916b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 917b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9181e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LConstantT: public LTemplateInstruction<1, 0, 0> { 919b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 920b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 9211e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_HYDROGEN_ACCESSOR(Constant) 922b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9231e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block Handle<Object> value() const { return hydrogen()->handle(); } 924b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 925b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 926b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9271e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LBranch: public LControlInstruction<1, 0> { 928b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 929b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LBranch(LOperand* value) { 930b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 931b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 932b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 933b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 9343fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Branch) 935b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 936b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 937b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 938b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 939b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { 941b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 942b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LCmpMapAndBranch(LOperand* value) { 943b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 944b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 945b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 946b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 9471e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_HYDROGEN_ACCESSOR(CompareMap) 948b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 949b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual bool IsControl() const { return true; } 950b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 951b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<Map> map() const { return hydrogen()->map(); } 952b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int true_block_id() const { 9531e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block return hydrogen()->FirstSuccessor()->block_id(); 954b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 955b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int false_block_id() const { 9561e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block return hydrogen()->SecondSuccessor()->block_id(); 957b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 958b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 959b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 960b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9611e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LJSArrayLength: public LTemplateInstruction<1, 1, 0> { 962b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 963b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LJSArrayLength(LOperand* value) { 964b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 965b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 966b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 967b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length") 968b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(JSArrayLength) 969b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 970b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 971b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 97269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochclass LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> { 9731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 97469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch explicit LFixedArrayBaseLength(LOperand* value) { 9751e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[0] = value; 9761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 9771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 97869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength, 97969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "fixed-array-base-length") 98069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength) 981b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 982b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 983b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 9843fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LElementsKind: public LTemplateInstruction<1, 1, 0> { 9853fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch public: 9863fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch explicit LElementsKind(LOperand* value) { 9873fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[0] = value; 9883fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 9893fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 9903fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ElementsKind, "elements-kind") 9913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(ElementsKind) 9923fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 9933fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 9943fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 995e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LValueOf: public LTemplateInstruction<1, 1, 0> { 996b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 997e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LValueOf(LOperand* value) { 998b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 999b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1000b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1001b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") 1002b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(ValueOf) 1003b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1004b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1005b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LDateField: public LTemplateInstruction<1, 1, 0> { 10073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 10083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LDateField(LOperand* date, Smi* index) : index_(index) { 10093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = date; 10103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 10113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ValueOf, "date-field") 10133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ValueOf) 10143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Smi* index() const { return index_; } 10163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch private: 10183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Smi* index_; 10193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 10203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10221e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LThrow: public LTemplateInstruction<0, 1, 0> { 1023b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1024b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LThrow(LOperand* value) { 1025b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1026b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1027b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1028b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") 1029b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1030b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1031b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LBitNotI: public LTemplateInstruction<1, 1, 0> { 1033b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1034b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LBitNotI(LOperand* value) { 1035b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1036b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1037b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1038b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") 1039b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1040b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1041b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LAddI: public LTemplateInstruction<1, 2, 0> { 1043b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1044b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LAddI(LOperand* left, LOperand* right) { 1045b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 1046b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 1047b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1048b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1049b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1050b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Add) 1051b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1052b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1053b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10541e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LPower: public LTemplateInstruction<1, 2, 0> { 1055b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1056b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LPower(LOperand* left, LOperand* right) { 1057b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 1058b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 1059b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1060b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1061b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1062b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Power) 1063b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1064b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1065b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LRandom: public LTemplateInstruction<1, 1, 0> { 10673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 10683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LRandom(LOperand* global_object) { 10693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = global_object; 10703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 10713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(Random, "random") 10733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(Random) 10743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 10753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LArithmeticD: public LTemplateInstruction<1, 2, 0> { 1078b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1079b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 1080b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : op_(op) { 1081b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 1082b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 1083b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1084b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1085b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op() const { return op_; } 1086b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1087257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual Opcode opcode() const { return LInstruction::kArithmeticD; } 1088b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void CompileToNative(LCodeGen* generator); 1089b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual const char* Mnemonic() const; 1090b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1091b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 1092b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op_; 1093b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1094b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1095b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 10961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LArithmeticT: public LTemplateInstruction<1, 2, 0> { 1097b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1098b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LArithmeticT(Token::Value op, LOperand* left, LOperand* right) 1099b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : op_(op) { 1100b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = left; 1101b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = right; 1102b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1103b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1104257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual Opcode opcode() const { return LInstruction::kArithmeticT; } 1105b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void CompileToNative(LCodeGen* generator); 1106b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual const char* Mnemonic() const; 1107b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1108b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op() const { return op_; } 1109b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1110b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 1111b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Token::Value op_; 1112b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1113b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1114b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 11151e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LReturn: public LTemplateInstruction<0, 1, 0> { 1116b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1117b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LReturn(LOperand* value) { 1118b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1119b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1120b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1121b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1122b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1123b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1124b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 11251e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadNamedField: public LTemplateInstruction<1, 1, 0> { 1126b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1127b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LLoadNamedField(LOperand* object) { 1128b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = object; 1129b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1130b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1131b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1132b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1133b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1134b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1135b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 113644f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 1, 0> { 113744f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 113844f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LLoadNamedFieldPolymorphic(LOperand* object) { 113944f0eee88ff00398ff7f715fab053374d808c90dSteve Block inputs_[0] = object; 114044f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 114144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 114244f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic") 114344f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic) 114444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 114544f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* object() { return inputs_[0]; } 114644f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 114744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 114844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 11491e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadNamedGeneric: public LTemplateInstruction<1, 1, 0> { 1150b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1151b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LLoadNamedGeneric(LOperand* object) { 1152b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = object; 1153b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1154b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1155b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1156b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1157b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1158b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* object() { return inputs_[0]; } 1159b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<Object> name() const { return hydrogen()->name(); } 1160b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1161b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1162b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 11631e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 0> { 1164b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 11651e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LLoadFunctionPrototype(LOperand* function) { 1166b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = function; 1167b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1168b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1169b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1170b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1171b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1172b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* function() { return inputs_[0]; } 1173b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1174b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1175b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 11761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadElements: public LTemplateInstruction<1, 1, 0> { 1177b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1178b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LLoadElements(LOperand* object) { 1179b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = object; 1180b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1181b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1182b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements") 1183b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1184b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1185b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 118644f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LLoadExternalArrayPointer: public LTemplateInstruction<1, 1, 0> { 11871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 118844f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LLoadExternalArrayPointer(LOperand* object) { 11891e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[0] = object; 11901e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 11911e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 119244f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer, 119344f0eee88ff00398ff7f715fab053374d808c90dSteve Block "load-external-array-pointer") 11941e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}; 11951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 11961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 11971e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> { 1198b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1199b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLoadKeyedFastElement(LOperand* elements, LOperand* key) { 1200b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = elements; 1201b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = key; 1202b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1203b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1204b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element") 1205b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement) 1206b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1207b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* elements() { return inputs_[0]; } 1208b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* key() { return inputs_[1]; } 1209b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1210b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1211b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 12123fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LLoadKeyedFastDoubleElement: public LTemplateInstruction<1, 2, 0> { 12133fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch public: 12143fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LLoadKeyedFastDoubleElement(LOperand* elements, LOperand* key) { 12153fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[0] = elements; 12163fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[1] = key; 12173fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 12183fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 12193fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastDoubleElement, 12203fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch "load-keyed-fast-double-element") 12213fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastDoubleElement) 12223fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 12233fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* elements() { return inputs_[0]; } 12243fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* key() { return inputs_[1]; } 12253fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 12263fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 12273fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 122844f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> { 12291e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 123044f0eee88ff00398ff7f715fab053374d808c90dSteve Block LLoadKeyedSpecializedArrayElement(LOperand* external_pointer, 123144f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* key) { 12321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[0] = external_pointer; 12331e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[1] = key; 12341e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 12351e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 123644f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement, 123744f0eee88ff00398ff7f715fab053374d808c90dSteve Block "load-keyed-specialized-array-element") 123844f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_HYDROGEN_ACCESSOR(LoadKeyedSpecializedArrayElement) 12391e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 12401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LOperand* external_pointer() { return inputs_[0]; } 12411e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LOperand* key() { return inputs_[1]; } 1242589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch ElementsKind elements_kind() const { 12433fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch return hydrogen()->elements_kind(); 124444f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 12451e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}; 12461e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 12471e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 12481e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadKeyedGeneric: public LTemplateInstruction<1, 2, 0> { 1249b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1250b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLoadKeyedGeneric(LOperand* obj, LOperand* key) { 1251b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = obj; 1252b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = key; 1253b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1254b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1255b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1256b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1257b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* object() { return inputs_[0]; } 1258b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* key() { return inputs_[1]; } 1259b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1260b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1261b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 12628b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochclass LLoadGlobalCell: public LTemplateInstruction<1, 0, 0> { 1263b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 12648b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 12658b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1266b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1267b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1268b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 12698b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochclass LLoadGlobalGeneric: public LTemplateInstruction<1, 1, 0> { 1270b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 12718b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch explicit LLoadGlobalGeneric(LOperand* global_object) { 12728b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch inputs_[0] = global_object; 12738b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 12748b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 12758b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 12768b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 12778b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 12788b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch LOperand* global_object() { return inputs_[0]; } 12798b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch Handle<Object> name() const { return hydrogen()->name(); } 12808b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch bool for_typeof() const { return hydrogen()->for_typeof(); } 12818b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch}; 12828b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 12838b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 1284c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdochclass LStoreGlobalCell: public LTemplateInstruction<0, 1, 1> { 12858b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch public: 1286c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch explicit LStoreGlobalCell(LOperand* value, LOperand* temp) { 1287b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1288c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch temps_[0] = temp; 1289b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1290b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 12918b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 12928b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 12933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* value() { return inputs_[0]; } 12958b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch}; 12968b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 12978b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 12988b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochclass LStoreGlobalGeneric: public LTemplateInstruction<0, 2, 0> { 12998b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch public: 13008b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch explicit LStoreGlobalGeneric(LOperand* global_object, 13018b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch LOperand* value) { 13028b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch inputs_[0] = global_object; 13038b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch inputs_[1] = value; 13048b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 13058b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 13068b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") 13078b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) 13088b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 13098b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch LOperand* global_object() { return InputAt(0); } 13108b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch Handle<Object> name() const { return hydrogen()->name(); } 13118b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch LOperand* value() { return InputAt(1); } 13123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 1313b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1314b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1315b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 13161e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LLoadContextSlot: public LTemplateInstruction<1, 1, 0> { 1317b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 13181e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LLoadContextSlot(LOperand* context) { 13191e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[0] = context; 13201e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 13211e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 1322b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1323b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1324b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 13251e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LOperand* context() { return InputAt(0); } 1326b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int slot_index() { return hydrogen()->slot_index(); } 1327b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1328b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1329b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1330b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1331b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1332e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStoreContextSlot: public LTemplateInstruction<0, 2, 1> { 1333e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch public: 1334e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) { 1335e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = context; 1336e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = value; 1337e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch temps_[0] = temp; 1338e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1339e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1340e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 1341e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 1342e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1343e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* context() { return InputAt(0); } 1344e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* value() { return InputAt(1); } 1345e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch int slot_index() { return hydrogen()->slot_index(); } 1346e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1347e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch virtual void PrintDataTo(StringStream* stream); 1348e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch}; 1349e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1350e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 13511e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LPushArgument: public LTemplateInstruction<0, 1, 0> { 1352b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1353b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LPushArgument(LOperand* value) { 1354b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1355b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1356b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1357b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1358b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1359b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1360b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 13613fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LThisFunction: public LTemplateInstruction<1, 0, 0> { 13623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 13633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 13643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 13653fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 13663fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 13673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 13681e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LContext: public LTemplateInstruction<1, 0, 0> { 13691e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 13701e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_CONCRETE_INSTRUCTION(Context, "context") 13711e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}; 13721e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 13731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 1374e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LOuterContext: public LTemplateInstruction<1, 1, 0> { 1375e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch public: 1376e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LOuterContext(LOperand* context) { 1377e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = context; 1378e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1379e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1380e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") 1381e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1382e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* context() { return InputAt(0); } 1383e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch}; 1384e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1385e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 13863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LDeclareGlobals: public LTemplateInstruction<0, 0, 0> { 13873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 13883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 13893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 13903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 13913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1393b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LGlobalObject: public LTemplateInstruction<1, 0, 0> { 1394b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1395b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") 1396b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1397b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1398b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 139944f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LGlobalReceiver: public LTemplateInstruction<1, 1, 0> { 1400b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 140144f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LGlobalReceiver(LOperand* global_object) { 140244f0eee88ff00398ff7f715fab053374d808c90dSteve Block inputs_[0] = global_object; 140344f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 140444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1405b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver") 140644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 140744f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* global() { return InputAt(0); } 1408b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1409b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1410b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1411b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallConstantFunction: public LTemplateInstruction<1, 0, 0> { 1412b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1413b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") 1414b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) 1415b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1416b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1417b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1418b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<JSFunction> function() { return hydrogen()->function(); } 1419b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1420b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1421086aeeaae12517475c22695a200be45495516549Ben Murdoch 1422b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1423257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LInvokeFunction: public LTemplateInstruction<1, 1, 0> { 1424257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 1425257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch explicit LInvokeFunction(LOperand* function) { 1426257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = function; 1427257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1428257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1429257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 1430257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1431257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1432257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* function() { return inputs_[0]; } 1433257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1434257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1435257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1436257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1437257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 1438257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1439257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 14401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCallKeyed: public LTemplateInstruction<1, 1, 0> { 1441b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 14421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LCallKeyed(LOperand* key) { 14431e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block inputs_[0] = key; 1444b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1445b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1446b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") 1447b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallKeyed) 1448b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1449e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* key() { return inputs_[0]; } 1450e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1451b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1452b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1453b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1454b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1455b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1456b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1457b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallNamed: public LTemplateInstruction<1, 0, 0> { 1458b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1459b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named") 1460b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallNamed) 1461b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1462b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1463b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1464b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<String> name() const { return hydrogen()->name(); } 1465b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1466b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1467b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1468b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 14693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LCallFunction: public LTemplateInstruction<1, 1, 0> { 1470b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 14713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LCallFunction(LOperand* function) { 14723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = function; 14733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1474e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1475b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1476b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1477b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 14783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* function() { return inputs_[0]; } 14793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1480b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1481b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1482b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1483b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallGlobal: public LTemplateInstruction<1, 0, 0> { 1484b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1485b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global") 1486b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallGlobal) 1487b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1488b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1489b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1490b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<String> name() const {return hydrogen()->name(); } 1491b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1492b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1493b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1494b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1495b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallKnownGlobal: public LTemplateInstruction<1, 0, 0> { 1496b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1497b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") 1498b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) 1499b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1500b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1501b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1502b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<JSFunction> target() const { return hydrogen()->target(); } 1503b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1504b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1505b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1506b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 15071e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCallNew: public LTemplateInstruction<1, 1, 0> { 1508b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1509b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LCallNew(LOperand* constructor) { 1510b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = constructor; 1511b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1512b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1513b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1514b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallNew) 1515b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1516b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1517086aeeaae12517475c22695a200be45495516549Ben Murdoch 1518b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count() - 1; } 1519b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1520086aeeaae12517475c22695a200be45495516549Ben Murdoch 1521086aeeaae12517475c22695a200be45495516549Ben Murdoch 1522b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCallRuntime: public LTemplateInstruction<1, 0, 0> { 1523b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1524b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1525b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1526b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 152744f0eee88ff00398ff7f715fab053374d808c90dSteve Block const Runtime::Function* function() const { return hydrogen()->function(); } 1528b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int arity() const { return hydrogen()->argument_count(); } 1529b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1530b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1531b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 15321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> { 1533b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1534b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LInteger32ToDouble(LOperand* value) { 1535b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1536086aeeaae12517475c22695a200be45495516549Ben Murdoch } 1537b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1538b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 1539b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1540b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1541b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 15421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LNumberTagI: public LTemplateInstruction<1, 1, 0> { 1543b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1544b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LNumberTagI(LOperand* value) { 1545b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1546086aeeaae12517475c22695a200be45495516549Ben Murdoch } 1547b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1548b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 1549b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1550b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1551b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1552b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LNumberTagD: public LTemplateInstruction<1, 1, 1> { 1553b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1554b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LNumberTagD(LOperand* value, LOperand* temp) { 1555b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1556b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 1557b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1558b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1559b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 1560b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 1561b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1562b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1563b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// Sometimes truncating conversion from a tagged value to an int32. 1564e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LDoubleToI: public LTemplateInstruction<1, 1, 0> { 1565b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 1566e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LDoubleToI(LOperand* value) { 1567b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1568b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1569b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1570b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 15713fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 1572b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1573b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool truncating() { return hydrogen()->CanTruncateToInt32(); } 1574b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1575b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1576b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1577b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// Truncating conversion from a tagged value to an int32. 1578b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LTaggedToI: public LTemplateInstruction<1, 1, 1> { 1579b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1580b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LTaggedToI(LOperand* value, LOperand* temp) { 1581b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1582b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 1583b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1584b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1585b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 15863fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 1587b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1588b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool truncating() { return hydrogen()->CanTruncateToInt32(); } 1589b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1590b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1591b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 15921e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LSmiTag: public LTemplateInstruction<1, 1, 0> { 1593b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1594b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LSmiTag(LOperand* value) { 1595b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1596b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1597086aeeaae12517475c22695a200be45495516549Ben Murdoch 1598b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 1599b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 1600b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1601b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 16021e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LNumberUntagD: public LTemplateInstruction<1, 1, 0> { 1603b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 1604b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LNumberUntagD(LOperand* value) { 1605b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1606b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1607b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1608b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 16097d3e7fc4b65010eabe860313ee0c64f50843f6e3Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(Change); 1610b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1611b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1612b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 16131e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LSmiUntag: public LTemplateInstruction<1, 1, 0> { 1614b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1615b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LSmiUntag(LOperand* value, bool needs_check) 1616b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch : needs_check_(needs_check) { 1617b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1618b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1619b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1620b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 1621b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1622b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool needs_check() const { return needs_check_; } 1623b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1624b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch private: 1625b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool needs_check_; 1626b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1627b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1628b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1629e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStoreNamedField: public LTemplateInstruction<0, 2, 1> { 1630b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1631e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 1632e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = object; 1633e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = value; 1634e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch temps_[0] = temp; 1635b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1636b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1637e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 1638e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 1639b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1640b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1641b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1642b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* object() { return inputs_[0]; } 1643b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* value() { return inputs_[1]; } 1644b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1645e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch Handle<Object> name() const { return hydrogen()->name(); } 1646b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool is_in_object() { return hydrogen()->is_in_object(); } 1647b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int offset() { return hydrogen()->offset(); } 1648b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<Map> transition() const { return hydrogen()->transition(); } 1649b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 1650b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1651b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1652e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStoreNamedGeneric: public LTemplateInstruction<0, 2, 0> { 1653b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 1654e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStoreNamedGeneric(LOperand* object, LOperand* value) { 1655e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = object; 1656e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = value; 1657e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1658086aeeaae12517475c22695a200be45495516549Ben Murdoch 1659b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 1660b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 1661e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1662e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch virtual void PrintDataTo(StringStream* stream); 1663e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1664e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* object() { return inputs_[0]; } 1665e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* value() { return inputs_[1]; } 1666e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch Handle<Object> name() const { return hydrogen()->name(); } 16673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 1668b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 1669b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1670b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1671e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStoreKeyedFastElement: public LTemplateInstruction<0, 3, 0> { 1672b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 1673e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStoreKeyedFastElement(LOperand* obj, LOperand* key, LOperand* val) { 1674b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = obj; 1675b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = key; 1676b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[2] = val; 1677b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1678b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1679e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement, 1680e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch "store-keyed-fast-element") 1681e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreKeyedFastElement) 1682b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1683b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 1684b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1685b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* object() { return inputs_[0]; } 1686b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* key() { return inputs_[1]; } 1687b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* value() { return inputs_[2]; } 1688b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1689b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1690b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 16913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochclass LStoreKeyedFastDoubleElement: public LTemplateInstruction<0, 3, 0> { 16923fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch public: 16933fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LStoreKeyedFastDoubleElement(LOperand* elements, 16943fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* key, 16953fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* val) { 16963fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[0] = elements; 16973fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[1] = key; 16983fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch inputs_[2] = val; 16993fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 17003fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 17013fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastDoubleElement, 17023fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch "store-keyed-fast-double-element") 17033fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreKeyedFastDoubleElement) 17043fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 17053fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch virtual void PrintDataTo(StringStream* stream); 17063fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 17073fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* elements() { return inputs_[0]; } 17083fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* key() { return inputs_[1]; } 17093fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch LOperand* value() { return inputs_[2]; } 17103fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 17113fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 17123fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 171344f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 0> { 1714b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 171544f0eee88ff00398ff7f715fab053374d808c90dSteve Block LStoreKeyedSpecializedArrayElement(LOperand* external_pointer, 171644f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* key, 171744f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* val) { 1718e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = external_pointer; 1719e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = key; 1720e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[2] = val; 1721e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1722b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 172344f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement, 172444f0eee88ff00398ff7f715fab053374d808c90dSteve Block "store-keyed-specialized-array-element") 172544f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_HYDROGEN_ACCESSOR(StoreKeyedSpecializedArrayElement) 1726e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1727e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* external_pointer() { return inputs_[0]; } 1728e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* key() { return inputs_[1]; } 1729e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* value() { return inputs_[2]; } 1730589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch ElementsKind elements_kind() const { 17313fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch return hydrogen()->elements_kind(); 173244f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 1733b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1734b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1735b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1736e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStoreKeyedGeneric: public LTemplateInstruction<0, 3, 0> { 1737b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1738e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStoreKeyedGeneric(LOperand* object, LOperand* key, LOperand* value) { 1739e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = object; 1740e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = key; 1741e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[2] = value; 1742e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1743b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1744b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 17458b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 1746e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1747e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch virtual void PrintDataTo(StringStream* stream); 1748e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1749e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* object() { return inputs_[0]; } 1750e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* key() { return inputs_[1]; } 1751e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* value() { return inputs_[2]; } 17523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 17533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 17543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LTransitionElementsKind: public LTemplateInstruction<1, 1, 2> { 17573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 17583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LTransitionElementsKind(LOperand* object, 17593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* new_map_temp, 17603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* temp_reg) { 17613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 17623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = new_map_temp; 17633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[1] = temp_reg; 17643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 17653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 17673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "transition-elements-kind") 17683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 17693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch virtual void PrintDataTo(StringStream* stream); 17713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 17723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* object() { return inputs_[0]; } 17733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* new_map_reg() { return temps_[0]; } 17743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* temp_reg() { return temps_[1]; } 17753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<Map> original_map() { return hydrogen()->original_map(); } 17763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); } 17778b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch}; 17788b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 17798b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 1780257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LStringAdd: public LTemplateInstruction<1, 2, 0> { 1781257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 1782257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LStringAdd(LOperand* left, LOperand* right) { 1783257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = left; 1784257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[1] = right; 1785257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1786257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1787257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 1788257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StringAdd) 1789257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1790257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* left() { return inputs_[0]; } 1791257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* right() { return inputs_[1]; } 1792257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 1793257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1794257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1795e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStringCharCodeAt: public LTemplateInstruction<1, 2, 0> { 1796e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch public: 1797e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LStringCharCodeAt(LOperand* string, LOperand* index) { 1798e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = string; 1799e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[1] = index; 1800e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1801e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1802e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 1803e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 1804e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1805e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* string() { return inputs_[0]; } 1806e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* index() { return inputs_[1]; } 1807e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch}; 1808e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1809e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 181044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LStringCharFromCode: public LTemplateInstruction<1, 1, 0> { 181144f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 181244f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LStringCharFromCode(LOperand* char_code) { 181344f0eee88ff00398ff7f715fab053374d808c90dSteve Block inputs_[0] = char_code; 181444f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 181544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 181644f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 181744f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 181844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 181944f0eee88ff00398ff7f715fab053374d808c90dSteve Block LOperand* char_code() { return inputs_[0]; } 182044f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 182144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 182244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1823e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochclass LStringLength: public LTemplateInstruction<1, 1, 0> { 1824e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch public: 1825e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LStringLength(LOperand* string) { 1826e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch inputs_[0] = string; 1827e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch } 1828e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1829e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_CONCRETE_INSTRUCTION(StringLength, "string-length") 1830e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch DECLARE_HYDROGEN_ACCESSOR(StringLength) 1831e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch 1832e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LOperand* string() { return inputs_[0]; } 1833b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1834b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1835b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 18361e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCheckFunction: public LTemplateInstruction<0, 1, 0> { 1837b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1838b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LCheckFunction(LOperand* value) { 1839b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1840b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1841b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 18423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* value() { return InputAt(0); } 18433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1844b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check-function") 1845b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckFunction) 1846b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1847b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1848b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 18491e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCheckInstanceType: public LTemplateInstruction<0, 1, 0> { 1850b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 18511e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LCheckInstanceType(LOperand* value) { 1852b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1853b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1854b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1855b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 1856b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 1857b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1858b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1859b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 18601e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCheckMap: public LTemplateInstruction<0, 1, 0> { 1861b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1862b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LCheckMap(LOperand* value) { 1863b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1864b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1865b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1866b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check-map") 1867b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckMap) 1868b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1869b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1870b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1871b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> { 1872b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1873b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LCheckPrototypeMaps(LOperand* temp) { 1874b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch temps_[0] = temp; 1875b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1876b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1877b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps") 1878b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) 1879b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1880b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<JSObject> prototype() const { return hydrogen()->prototype(); } 1881b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<JSObject> holder() const { return hydrogen()->holder(); } 1882b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1883b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1884b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 18851e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LCheckSmi: public LTemplateInstruction<0, 1, 0> { 1886b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 188744f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LCheckSmi(LOperand* value) { 1888b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 1889b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 1890b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 189144f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 189244f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 189344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1894b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1895257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LClampDToUint8: public LTemplateInstruction<1, 1, 1> { 1896257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 1897257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LClampDToUint8(LOperand* value, LOperand* temp) { 1898257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = value; 1899257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch temps_[0] = temp; 1900257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1901257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1902257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* unclamped() { return inputs_[0]; } 1903257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1904257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 1905257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 1906257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1907257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1908257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LClampIToUint8: public LTemplateInstruction<1, 1, 0> { 1909257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 1910257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch explicit LClampIToUint8(LOperand* value) { 1911257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = value; 1912257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1913257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1914257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* unclamped() { return inputs_[0]; } 1915257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1916257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 1917257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 1918257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1919257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1920257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LClampTToUint8: public LTemplateInstruction<1, 1, 2> { 1921257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 1922257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LClampTToUint8(LOperand* value, 1923257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* temp, 1924257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* temp2) { 1925257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch inputs_[0] = value; 1926257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch temps_[0] = temp; 1927257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch temps_[1] = temp2; 1928257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 1929257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1930257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LOperand* unclamped() { return inputs_[0]; } 1931257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1932257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 1933257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 1934257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1935257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 193644f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LCheckNonSmi: public LTemplateInstruction<0, 1, 0> { 193744f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 193844f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LCheckNonSmi(LOperand* value) { 193944f0eee88ff00398ff7f715fab053374d808c90dSteve Block inputs_[0] = value; 1940b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1941086aeeaae12517475c22695a200be45495516549Ben Murdoch 194244f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 1943b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1944b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1945b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 19463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LAllocateObject: public LTemplateInstruction<1, 0, 1> { 19473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 19483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LAllocateObject(LOperand* temp) { 19493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch temps_[0] = temp; 19503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 19513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object") 19533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(AllocateObject) 19543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LFastLiteral: public LTemplateInstruction<1, 0, 0> { 19583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 19593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(FastLiteral, "fast-literal") 19603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_HYDROGEN_ACCESSOR(FastLiteral) 19613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 19623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 19645d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdochclass LArrayLiteral: public LTemplateInstruction<1, 0, 0> { 1965592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch public: 19665d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array-literal") 19675d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ArrayLiteral) 1968592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch}; 1969592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 1970592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 19715d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdochclass LObjectLiteral: public LTemplateInstruction<1, 0, 0> { 1972b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 19735d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object-literal") 19745d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch DECLARE_HYDROGEN_ACCESSOR(ObjectLiteral) 1975b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1976b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1977b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1978b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LRegExpLiteral: public LTemplateInstruction<1, 0, 0> { 1979b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 1980b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 1981b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 1982b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 1983b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1984b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1985b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { 1986b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 1987b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 1988b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 1989b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1990b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } 1991b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 1992b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 1993b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 199444f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass LToFastProperties: public LTemplateInstruction<1, 1, 0> { 199544f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 199644f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit LToFastProperties(LOperand* value) { 199744f0eee88ff00398ff7f715fab053374d808c90dSteve Block inputs_[0] = value; 199844f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 199944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 200044f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 200144f0eee88ff00398ff7f715fab053374d808c90dSteve Block DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 200244f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 200344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 200444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 20051e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LTypeof: public LTemplateInstruction<1, 1, 0> { 2006b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 2007b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LTypeof(LOperand* value) { 2008b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 2009b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2010b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2011b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2012b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 2013086aeeaae12517475c22695a200be45495516549Ben Murdoch 2014b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 20151e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LTypeofIsAndBranch: public LControlInstruction<1, 0> { 2016b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 2017b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch explicit LTypeofIsAndBranch(LOperand* value) { 2018b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = value; 2019b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 2020b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2021b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 20223fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 2023b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2024b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<String> type_literal() { return hydrogen()->type_literal(); } 2025b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2026b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch virtual void PrintDataTo(StringStream* stream); 2027b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 2028b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2029b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 20301e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LIsConstructCallAndBranch: public LControlInstruction<0, 1> { 20311e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 20321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block explicit LIsConstructCallAndBranch(LOperand* temp) { 20331e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block temps_[0] = temp; 20341e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 20351e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20361e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 20371e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block "is-construct-call-and-branch") 20383fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(IsConstructCallAndBranch) 20391e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}; 20401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20411e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass LDeleteProperty: public LTemplateInstruction<1, 2, 0> { 2043b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 2044b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LDeleteProperty(LOperand* obj, LOperand* key) { 2045b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[0] = obj; 2046b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inputs_[1] = key; 2047b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 2048b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2049b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") 2050b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2051b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* object() { return inputs_[0]; } 2052b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* key() { return inputs_[1]; } 2053b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 2054b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2055b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2056b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LOsrEntry: public LTemplateInstruction<0, 0, 0> { 2057b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 2058b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOsrEntry(); 2059b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2060b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2061b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2062b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand** SpilledRegisterArray() { return register_spills_; } 2063b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; } 2064b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2065b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void MarkSpilledRegister(int allocation_index, LOperand* spill_operand); 2066b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void MarkSpilledDoubleRegister(int allocation_index, 2067b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* spill_operand); 2068086aeeaae12517475c22695a200be45495516549Ben Murdoch 2069086aeeaae12517475c22695a200be45495516549Ben Murdoch private: 2070b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Arrays of spill slot operands for registers with an assigned spill 2071b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // slot, i.e., that must also be restored to the spill slot on OSR entry. 2072b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // NULL if the register has no assigned spill slot. Indexed by allocation 2073b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // index. 2074b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* register_spills_[Register::kNumAllocatableRegisters]; 2075b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* double_register_spills_[DoubleRegister::kNumAllocatableRegisters]; 2076b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch}; 2077086aeeaae12517475c22695a200be45495516549Ben Murdoch 2078086aeeaae12517475c22695a200be45495516549Ben Murdoch 2079b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochclass LStackCheck: public LTemplateInstruction<0, 0, 0> { 2080b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch public: 2081b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 20823fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch DECLARE_HYDROGEN_ACCESSOR(StackCheck) 20833fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 20843fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch Label* done_label() { return &done_label_; } 20853fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 20863fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch private: 20873fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch Label done_label_; 2088086aeeaae12517475c22695a200be45495516549Ben Murdoch}; 2089086aeeaae12517475c22695a200be45495516549Ben Murdoch 2090086aeeaae12517475c22695a200be45495516549Ben Murdoch 20913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LForInPrepareMap: public LTemplateInstruction<1, 1, 0> { 20923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 20933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LForInPrepareMap(LOperand* object) { 20943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 20953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 20963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* object() { return inputs_[0]; } 20983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 20993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 21003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LForInCacheArray: public LTemplateInstruction<1, 1, 0> { 21043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 21053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch explicit LForInCacheArray(LOperand* map) { 21063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = map; 21073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* map() { return inputs_[0]; } 21103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 21123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int idx() { 21143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return HForInCacheArray::cast(this->hydrogen_value())->idx(); 21153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LCheckMapValue: public LTemplateInstruction<0, 2, 0> { 21203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 21213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LCheckMapValue(LOperand* value, LOperand* map) { 21223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = value; 21233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = map; 21243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* value() { return inputs_[0]; } 21273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* map() { return inputs_[1]; } 21283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 21303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochclass LLoadFieldByIndex: public LTemplateInstruction<1, 2, 0> { 21343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch public: 21353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LLoadFieldByIndex(LOperand* object, LOperand* index) { 21363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[0] = object; 21373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch inputs_[1] = index; 21383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 21393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* object() { return inputs_[0]; } 21413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LOperand* index() { return inputs_[1]; } 21423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 21443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 21453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 21463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2147086aeeaae12517475c22695a200be45495516549Ben Murdochclass LChunkBuilder; 2148086aeeaae12517475c22695a200be45495516549Ben Murdochclass LChunk: public ZoneObject { 2149086aeeaae12517475c22695a200be45495516549Ben Murdoch public: 2150e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch explicit LChunk(CompilationInfo* info, HGraph* graph) 2151086aeeaae12517475c22695a200be45495516549Ben Murdoch : spill_slot_count_(0), 2152e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch info_(info), 2153086aeeaae12517475c22695a200be45495516549Ben Murdoch graph_(graph), 2154086aeeaae12517475c22695a200be45495516549Ben Murdoch instructions_(32), 2155086aeeaae12517475c22695a200be45495516549Ben Murdoch pointer_maps_(8), 2156086aeeaae12517475c22695a200be45495516549Ben Murdoch inlined_closures_(1) { } 2157086aeeaae12517475c22695a200be45495516549Ben Murdoch 21581e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void AddInstruction(LInstruction* instruction, HBasicBlock* block); 2159b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LConstantOperand* DefineConstantOperand(HConstant* constant); 2160b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Handle<Object> LookupLiteral(LConstantOperand* operand) const; 2161b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Representation LookupLiteralRepresentation(LConstantOperand* operand) const; 2162b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2163b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int GetNextSpillIndex(bool is_double); 2164b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LOperand* GetNextSpillSlot(bool is_double); 2165b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2166b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int ParameterAt(int index); 2167b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int GetParameterStackSlot(int index) const; 2168086aeeaae12517475c22695a200be45495516549Ben Murdoch int spill_slot_count() const { return spill_slot_count_; } 2169e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch CompilationInfo* info() const { return info_; } 2170086aeeaae12517475c22695a200be45495516549Ben Murdoch HGraph* graph() const { return graph_; } 2171086aeeaae12517475c22695a200be45495516549Ben Murdoch const ZoneList<LInstruction*>* instructions() const { return &instructions_; } 2172b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void AddGapMove(int index, LOperand* from, LOperand* to); 2173b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LGap* GetGapAt(int index) const; 2174b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch bool IsGapAt(int index) const; 2175b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int NearestGapPos(int index) const; 2176b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void MarkEmptyBlocks(); 2177086aeeaae12517475c22695a200be45495516549Ben Murdoch const ZoneList<LPointerMap*>* pointer_maps() const { return &pointer_maps_; } 2178b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch LLabel* GetLabel(int block_id) const { 2179b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HBasicBlock* block = graph_->blocks()->at(block_id); 2180b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int first_instruction = block->first_instruction_index(); 2181b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return LLabel::cast(instructions_[first_instruction]); 2182b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2183b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int LookupDestination(int block_id) const { 2184b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLabel* cur = GetLabel(block_id); 2185b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch while (cur->replacement() != NULL) { 2186b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch cur = cur->replacement(); 2187b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 2188b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return cur->block_id(); 2189b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2190b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Label* GetAssemblyLabel(int block_id) const { 2191b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LLabel* label = GetLabel(block_id); 2192b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch ASSERT(!label->HasReplacement()); 2193b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return label->label(); 2194b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2195b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2196b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch const ZoneList<Handle<JSFunction> >* inlined_closures() const { 2197b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch return &inlined_closures_; 2198b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2199b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2200b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void AddInlinedClosure(Handle<JSFunction> closure) { 2201b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch inlined_closures_.Add(closure); 2202b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2203b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2204086aeeaae12517475c22695a200be45495516549Ben Murdoch private: 2205086aeeaae12517475c22695a200be45495516549Ben Murdoch int spill_slot_count_; 2206e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch CompilationInfo* info_; 2207086aeeaae12517475c22695a200be45495516549Ben Murdoch HGraph* const graph_; 2208086aeeaae12517475c22695a200be45495516549Ben Murdoch ZoneList<LInstruction*> instructions_; 2209086aeeaae12517475c22695a200be45495516549Ben Murdoch ZoneList<LPointerMap*> pointer_maps_; 2210086aeeaae12517475c22695a200be45495516549Ben Murdoch ZoneList<Handle<JSFunction> > inlined_closures_; 2211b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 2212b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2213b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2214b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochclass LChunkBuilder BASE_EMBEDDED { 2215b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 2216e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2217086aeeaae12517475c22695a200be45495516549Ben Murdoch : chunk_(NULL), 2218e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch info_(info), 2219086aeeaae12517475c22695a200be45495516549Ben Murdoch graph_(graph), 22203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch zone_(graph->isolate()->zone()), 2221086aeeaae12517475c22695a200be45495516549Ben Murdoch status_(UNUSED), 2222086aeeaae12517475c22695a200be45495516549Ben Murdoch current_instruction_(NULL), 2223086aeeaae12517475c22695a200be45495516549Ben Murdoch current_block_(NULL), 2224086aeeaae12517475c22695a200be45495516549Ben Murdoch next_block_(NULL), 2225086aeeaae12517475c22695a200be45495516549Ben Murdoch argument_count_(0), 2226086aeeaae12517475c22695a200be45495516549Ben Murdoch allocator_(allocator), 2227086aeeaae12517475c22695a200be45495516549Ben Murdoch position_(RelocInfo::kNoPosition), 22281e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block instruction_pending_deoptimization_environment_(NULL), 2229086aeeaae12517475c22695a200be45495516549Ben Murdoch pending_deoptimization_ast_id_(AstNode::kNoNumber) { } 2230b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2231b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Build the sequence for the graph. 2232086aeeaae12517475c22695a200be45495516549Ben Murdoch LChunk* Build(); 2233b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2234b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Declare methods that deal with the individual node types. 2235b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 2236b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 2237b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef DECLARE_DO 2238b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2239086aeeaae12517475c22695a200be45495516549Ben Murdoch private: 2240086aeeaae12517475c22695a200be45495516549Ben Murdoch enum Status { 2241086aeeaae12517475c22695a200be45495516549Ben Murdoch UNUSED, 2242086aeeaae12517475c22695a200be45495516549Ben Murdoch BUILDING, 2243086aeeaae12517475c22695a200be45495516549Ben Murdoch DONE, 2244086aeeaae12517475c22695a200be45495516549Ben Murdoch ABORTED 2245086aeeaae12517475c22695a200be45495516549Ben Murdoch }; 2246086aeeaae12517475c22695a200be45495516549Ben Murdoch 2247086aeeaae12517475c22695a200be45495516549Ben Murdoch LChunk* chunk() const { return chunk_; } 2248e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch CompilationInfo* info() const { return info_; } 2249086aeeaae12517475c22695a200be45495516549Ben Murdoch HGraph* graph() const { return graph_; } 22503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Zone* zone() const { return zone_; } 2251086aeeaae12517475c22695a200be45495516549Ben Murdoch 2252086aeeaae12517475c22695a200be45495516549Ben Murdoch bool is_unused() const { return status_ == UNUSED; } 2253086aeeaae12517475c22695a200be45495516549Ben Murdoch bool is_building() const { return status_ == BUILDING; } 2254086aeeaae12517475c22695a200be45495516549Ben Murdoch bool is_done() const { return status_ == DONE; } 2255086aeeaae12517475c22695a200be45495516549Ben Murdoch bool is_aborted() const { return status_ == ABORTED; } 2256086aeeaae12517475c22695a200be45495516549Ben Murdoch 2257086aeeaae12517475c22695a200be45495516549Ben Murdoch void Abort(const char* format, ...); 2258086aeeaae12517475c22695a200be45495516549Ben Murdoch 2259b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Methods for getting operands for Use / Define / Temp. 2260b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LUnallocated* ToUnallocated(Register reg); 2261b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LUnallocated* ToUnallocated(XMMRegister reg); 2262b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2263b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Methods for setting up define-use relationships. 2264b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 2265b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 2266b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 2267b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch XMMRegister fixed_register); 2268b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2269b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // A value that is guaranteed to be allocated to a register. 2270b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Operand created by UseRegister is guaranteed to be live until the end of 2271b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // instruction. This means that register allocator will not reuse it's 2272b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // register for any other operand inside instruction. 2273b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Operand created by UseRegisterAtStart is guaranteed to be live only at 2274b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // instruction start. Register allocator is free to assign the same register 2275b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // to some other operand used inside instruction (i.e. temporary or 2276b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // output). 2277b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseRegister(HValue* value); 2278b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); 2279b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 22801e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // An input operand in a register that may be trashed. 2281b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); 2282b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 22831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // An input operand in a register or stack slot. 2284b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* Use(HValue* value); 2285b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseAtStart(HValue* value); 2286b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 22871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // An input operand in a register, stack slot or a constant operand. 2288b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); 2289b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); 2290b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 22911e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // An input operand in a register or a constant operand. 2292b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 2293b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 2294b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 22951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // An input operand in register, stack slot or a constant operand. 22961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // Will not be moved to a register even if one is freely available. 22971e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block MUST_USE_RESULT LOperand* UseAny(HValue* value); 22981e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2299b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Temporary operand that must be in a register. 2300b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LUnallocated* TempRegister(); 2301b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* FixedTemp(Register reg); 2302b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); 2303b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2304b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Methods for setting up define-use relationships. 2305b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch // Return the same instruction that they are passed. 2306b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2307b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* Define(LTemplateInstruction<1, I, T>* instr, 2308b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LUnallocated* result); 2309b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2310b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); 2311b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2312b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DefineAsSpilled(LTemplateInstruction<1, I, T>* instr, 2313b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch int index); 2314b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2315b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DefineSameAsFirst(LTemplateInstruction<1, I, T>* instr); 2316b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2317b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DefineFixed(LTemplateInstruction<1, I, T>* instr, 2318b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch Register reg); 2319b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch template<int I, int T> 2320b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr, 2321b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch XMMRegister reg); 232269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Assigns an environment to an instruction. An instruction which can 232369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // deoptimize must have an environment. 2324b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* AssignEnvironment(LInstruction* instr); 232569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Assigns a pointer map to an instruction. An instruction which can 232669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // trigger a GC or a lazy deoptimization must have a pointer map. 2327b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* AssignPointerMap(LInstruction* instr); 2328b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2329b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 2330b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 233169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Marks a call for the register allocator. Assigns a pointer map to 233269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // support GC and lazy deoptimization. Assigns an environment to support 233369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // eager deoptimization if CAN_DEOPTIMIZE_EAGERLY. 2334b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* MarkAsCall( 2335b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* instr, 2336b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HInstruction* hinstr, 2337b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 2338b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* MarkAsSaveDoubles(LInstruction* instr); 2339b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2340b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* SetInstructionPendingDeoptimizationEnvironment( 2341b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* instr, int ast_id); 2342b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void ClearInstructionPendingDeoptimizationEnvironment(); 2343b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 23443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch LEnvironment* CreateEnvironment(HEnvironment* hydrogen_env, 23453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int* argument_index_accumulator); 2346b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2347b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch void VisitInstruction(HInstruction* current); 2348b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 2349086aeeaae12517475c22695a200be45495516549Ben Murdoch void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block); 2350b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 2351b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DoArithmeticD(Token::Value op, 2352b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HArithmeticBinaryOperation* instr); 2353b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch LInstruction* DoArithmeticT(Token::Value op, 2354b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch HArithmeticBinaryOperation* instr); 2355086aeeaae12517475c22695a200be45495516549Ben Murdoch 2356086aeeaae12517475c22695a200be45495516549Ben Murdoch LChunk* chunk_; 2357e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch CompilationInfo* info_; 2358086aeeaae12517475c22695a200be45495516549Ben Murdoch HGraph* const graph_; 23593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Zone* zone_; 2360086aeeaae12517475c22695a200be45495516549Ben Murdoch Status status_; 2361086aeeaae12517475c22695a200be45495516549Ben Murdoch HInstruction* current_instruction_; 2362086aeeaae12517475c22695a200be45495516549Ben Murdoch HBasicBlock* current_block_; 2363086aeeaae12517475c22695a200be45495516549Ben Murdoch HBasicBlock* next_block_; 2364086aeeaae12517475c22695a200be45495516549Ben Murdoch int argument_count_; 2365086aeeaae12517475c22695a200be45495516549Ben Murdoch LAllocator* allocator_; 2366086aeeaae12517475c22695a200be45495516549Ben Murdoch int position_; 23671e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block LInstruction* instruction_pending_deoptimization_environment_; 2368086aeeaae12517475c22695a200be45495516549Ben Murdoch int pending_deoptimization_ast_id_; 2369086aeeaae12517475c22695a200be45495516549Ben Murdoch 2370b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2371b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 2372b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2373b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#undef DECLARE_HYDROGEN_ACCESSOR 2374b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#undef DECLARE_CONCRETE_INSTRUCTION 2375b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2376b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch} } // namespace v8::int 2377b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2378b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif // V8_X64_LITHIUM_X64_H_ 2379