1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com// Copyright 2012 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
47516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
57516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#ifndef V8_MIPS_LITHIUM_MIPS_H_
67516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#define V8_MIPS_LITHIUM_MIPS_H_
77516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/hydrogen.h"
9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium-allocator.h"
10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium.h"
11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/safepoint-table.h"
12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/utils.h"
137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgnamespace v8 {
157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgnamespace internal {
167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
17c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Forward declarations.
18c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgclass LCodeGen;
19c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
20c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)    \
21c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(AccessArgumentsAt)                          \
22c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(AddI)                                       \
237c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  V(Allocate)                                   \
241e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  V(AllocateBlockContext)                       \
25c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ApplyArguments)                             \
26c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ArgumentsElements)                          \
27c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ArgumentsLength)                            \
28c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ArithmeticD)                                \
29c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ArithmeticT)                                \
30c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(BitI)                                       \
31c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(BoundsCheck)                                \
32c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Branch)                                     \
3326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  V(CallJSFunction)                             \
3426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  V(CallWithDescriptor)                         \
35c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CallFunction)                               \
36c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CallNew)                                    \
37750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  V(CallNewArray)                               \
38c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CallRuntime)                                \
39c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CallStub)                                   \
40c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CheckInstanceType)                          \
411456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  V(CheckMaps)                                  \
42c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(CheckMapValue)                              \
43c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CheckNonSmi)                                \
44c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CheckSmi)                                   \
451f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org  V(CheckValue)                                 \
46c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ClampDToUint8)                              \
47c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ClampIToUint8)                              \
48c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ClampTToUint8)                              \
49c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ClassOfTestAndBranch)                       \
500cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  V(CompareMinusZeroAndBranch)                  \
51e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  V(CompareNumericAndBranch)                    \
52c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CmpObjectEqAndBranch)                       \
53c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  V(CmpHoleAndBranch)                           \
54c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CmpMapAndBranch)                            \
55c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(CmpT)                                       \
56c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ConstantD)                                  \
57d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  V(ConstantE)                                  \
58c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ConstantI)                                  \
59b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org  V(ConstantS)                                  \
60c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ConstantT)                                  \
61ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  V(ConstructDouble)                            \
62c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Context)                                    \
63c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(DateField)                                  \
644e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org  V(DebugBreak)                                 \
65f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  V(DeclareGlobals)                             \
66c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Deoptimize)                                 \
6700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  V(DivByConstI)                                \
6800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  V(DivByPowerOf2I)                             \
69c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(DivI)                                       \
70c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(DoubleToI)                                  \
71ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  V(DoubleBits)                                 \
72a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  V(DoubleToSmi)                                \
73c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(Drop)                                       \
74935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org  V(Dummy)                                      \
7546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org  V(DummyUse)                                   \
76ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  V(FlooringDivByConstI)                        \
77bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  V(FlooringDivByPowerOf2I)                     \
784edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  V(FlooringDivI)                               \
79c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(ForInCacheArray)                            \
80c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(ForInPrepareMap)                            \
81c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(FunctionLiteral)                            \
82c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(GetCachedArrayIndex)                        \
83c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Goto)                                       \
84c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(HasCachedArrayIndexAndBranch)               \
85c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(HasInstanceTypeAndBranch)                   \
86c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(InnerAllocatedObject)                       \
87c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(InstanceOf)                                 \
88c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(InstanceOfKnownGlobal)                      \
89c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(InstructionGap)                             \
90c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Integer32ToDouble)                          \
91c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(InvokeFunction)                             \
92c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(IsConstructCallAndBranch)                   \
93c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(IsObjectAndBranch)                          \
94f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  V(IsStringAndBranch)                          \
95c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(IsSmiAndBranch)                             \
96c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(IsUndetectableAndBranch)                    \
97c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Label)                                      \
98c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LazyBailout)                                \
99c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadContextSlot)                            \
100528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  V(LoadRoot)                                   \
101c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(LoadFieldByIndex)                           \
102c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadFunctionPrototype)                      \
103c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadGlobalCell)                             \
104c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadGlobalGeneric)                          \
105e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  V(LoadKeyed)                                  \
106c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadKeyedGeneric)                           \
107c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadNamedField)                             \
108c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(LoadNamedGeneric)                           \
10978502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  V(MapEnumLength)                              \
110e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathAbs)                                    \
11183130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  V(MathExp)                                    \
112f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  V(MathClz32)                                  \
113e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathFloor)                                  \
114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathLog)                                    \
115471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org  V(MathMinMax)                                 \
116e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathPowHalf)                                \
117e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathRound)                                  \
118e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  V(MathSqrt)                                   \
11900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  V(ModByConstI)                                \
120ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  V(ModByPowerOf2I)                             \
121c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ModI)                                       \
122c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(MulI)                                       \
12359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  V(MultiplyAddD)                               \
124c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(NumberTagD)                                 \
125c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(NumberTagI)                                 \
12678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  V(NumberTagU)                                 \
127c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(NumberUntagD)                               \
128c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(OsrEntry)                                   \
129c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Parameter)                                  \
130c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Power)                                      \
131c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(PushArgument)                               \
132c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(RegExpLiteral)                              \
133c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Return)                                     \
134e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  V(SeqStringGetChar)                           \
135a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org  V(SeqStringSetChar)                           \
136c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ShiftI)                                     \
137c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(SmiTag)                                     \
138c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(SmiUntag)                                   \
139c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StackCheck)                                 \
140662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  V(StoreCodeEntry)                             \
141c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StoreContextSlot)                           \
1421e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  V(StoreFrameContext)                          \
143c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StoreGlobalCell)                            \
144e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  V(StoreKeyed)                                 \
145c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StoreKeyedGeneric)                          \
146c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StoreNamedField)                            \
147c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StoreNamedGeneric)                          \
148c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StringAdd)                                  \
149c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StringCharCodeAt)                           \
150c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(StringCharFromCode)                         \
151471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org  V(StringCompareAndBranch)                     \
152c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(SubI)                                       \
153c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(TaggedToI)                                  \
154c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ThisFunction)                               \
155c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(ToFastProperties)                           \
156c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(TransitionElementsKind)                     \
1577c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  V(TrapAllocationMemento)                      \
158c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(Typeof)                                     \
159c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(TypeofIsAndBranch)                          \
160c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(Uint32ToDouble)                             \
161c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  V(UnknownOSRValue)                            \
162c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  V(WrapReceiver)
163c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
16432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)                        \
16532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual Opcode opcode() const V8_FINAL V8_OVERRIDE {                      \
16632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return LInstruction::k##type;                                           \
16732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }                                                                         \
16832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE;   \
16932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE {               \
17032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return mnemonic;                                                        \
17132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }                                                                         \
17232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  static L##type* cast(LInstruction* instr) {                               \
17332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    ASSERT(instr->Is##type());                                              \
17432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return reinterpret_cast<L##type*>(instr);                               \
175c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
176c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
177c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
178c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_HYDROGEN_ACCESSOR(type)     \
179c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  H##type* hydrogen() const {               \
180c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    return H##type::cast(hydrogen_value()); \
181c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
182c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
183c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
18432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LInstruction : public ZoneObject {
185c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
186c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction()
187594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      : environment_(NULL),
188594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org        hydrogen_value_(NULL),
189594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org        bit_field_(IsCallBits::encode(false)) {
190594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  }
191594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org
19232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual ~LInstruction() {}
193c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
194c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual void CompileToNative(LCodeGen* generator) = 0;
195c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual const char* Mnemonic() const = 0;
196c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual void PrintTo(StringStream* stream);
19788d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org  virtual void PrintDataTo(StringStream* stream);
19888d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org  virtual void PrintOutputOperandTo(StringStream* stream);
199c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
200c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  enum Opcode {
201c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    // Declare a unique enum value for each instruction.
202c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_OPCODE(type) k##type,
203c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE)
204c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    kNumberOfInstructions
205c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_OPCODE
206c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  };
207c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
208c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual Opcode opcode() const = 0;
209c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
210c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Declare non-virtual type testers for all leaf IR classes.
211c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_PREDICATE(type) \
212c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool Is##type() const { return opcode() == k##type; }
213c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE)
214c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_PREDICATE
215c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
216c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Declare virtual predicates for instructions that don't have
217c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // an opcode.
218c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual bool IsGap() const { return false; }
219c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
220c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual bool IsControl() const { return false; }
221c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
222c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_environment(LEnvironment* env) { environment_ = env; }
223c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LEnvironment* environment() const { return environment_; }
224c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool HasEnvironment() const { return environment_ != NULL; }
225c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
226c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); }
227c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LPointerMap* pointer_map() const { return pointer_map_.get(); }
228c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool HasPointerMap() const { return pointer_map_.is_set(); }
229c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
230c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; }
231c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HValue* hydrogen_value() const { return hydrogen_value_; }
232c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2331044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org  virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) { }
234c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
235594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_, true); }
236594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  bool IsCall() const { return IsCallBits::decode(bit_field_); }
237c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
238c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Interface to the register allocator and iterators.
239594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  bool ClobbersTemps() const { return IsCall(); }
240594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  bool ClobbersRegisters() const { return IsCall(); }
241a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org  virtual bool ClobbersDoubleRegisters(Isolate* isolate) const {
242a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org    return IsCall();
243a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org  }
24459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
24559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  // Interface to the register allocator and iterators.
246594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  bool IsMarkedAsCall() const { return IsCall(); }
247c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
248c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual bool HasResult() const = 0;
249d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  virtual LOperand* result() const = 0;
250c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
251c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* FirstInput() { return InputAt(0); }
252c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* Output() { return HasResult() ? result() : NULL; }
253c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
25432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const { return true; }
25532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org
256c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#ifdef DEBUG
257c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void VerifyCall();
258c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#endif
259c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
260c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
26146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  // Iterator interface.
26246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  friend class InputIterator;
26346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  virtual int InputCount() = 0;
26446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  virtual LOperand* InputAt(int i) = 0;
26546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org
266c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  friend class TempIterator;
267c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  virtual int TempCount() = 0;
268c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  virtual LOperand* TempAt(int i) = 0;
269c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
270594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  class IsCallBits: public BitField<bool, 0, 1> {};
271594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org
272c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LEnvironment* environment_;
273c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  SetOncePointer<LPointerMap> pointer_map_;
274c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HValue* hydrogen_value_;
275594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  int bit_field_;
276c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
277c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
278c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// R = number of result operands (0 or 1).
28026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R>
28126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateResultInstruction : public LInstruction {
282c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
283c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Allow 0 or 1 output operands.
284c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  STATIC_ASSERT(R == 0 || R == 1);
28532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasResult() const V8_FINAL V8_OVERRIDE {
28632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return R != 0 && result() != NULL;
28732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
288c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_result(LOperand* operand) { results_[0] = operand; }
289d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  LOperand* result() const { return results_[0]; }
290c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
291c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org protected:
292c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  EmbeddedContainer<LOperand*, R> results_;
29326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org};
29426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org
29526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org
29626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// R = number of result operands (0 or 1).
29726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// I = number of input operands.
29826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org// T = number of temporary operands.
29926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgtemplate<int R, int I, int T>
30026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LTemplateInstruction : public LTemplateResultInstruction<R> {
30126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org protected:
302c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  EmbeddedContainer<LOperand*, I> inputs_;
303c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  EmbeddedContainer<LOperand*, T> temps_;
30446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org
30546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org private:
30626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  // Iterator support.
30732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual int InputCount() V8_FINAL V8_OVERRIDE { return I; }
30832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; }
309c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
31032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual int TempCount() V8_FINAL V8_OVERRIDE { return T; }
31132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return temps_[i]; }
312c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
313c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
314c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
31532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LGap : public LTemplateInstruction<0, 0, 0> {
316c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
317c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LGap(HBasicBlock* block)
318c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : block_(block) {
319c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    parallel_moves_[BEFORE] = NULL;
320c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    parallel_moves_[START] = NULL;
321c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    parallel_moves_[END] = NULL;
322c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    parallel_moves_[AFTER] = NULL;
323c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
324c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
325c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Can't use the DECLARE-macro here because of sub-classes.
32632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool IsGap() const V8_FINAL V8_OVERRIDE { return true; }
32732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
328c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  static LGap* cast(LInstruction* instr) {
329c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    ASSERT(instr->IsGap());
330c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    return reinterpret_cast<LGap*>(instr);
331c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
332c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
333c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool IsRedundant() const;
334c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
335c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HBasicBlock* block() const { return block_; }
336c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
337c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  enum InnerPosition {
338c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    BEFORE,
339c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    START,
340c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    END,
341c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    AFTER,
342c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    FIRST_INNER_POSITION = BEFORE,
343c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    LAST_INNER_POSITION = AFTER
344c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  };
345c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
3467028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org  LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone)  {
3477028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org    if (parallel_moves_[pos] == NULL) {
3487028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org      parallel_moves_[pos] = new(zone) LParallelMove(zone);
3497028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org    }
350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    return parallel_moves_[pos];
351c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
352c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
353c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LParallelMove* GetParallelMove(InnerPosition pos)  {
354c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    return parallel_moves_[pos];
355c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
356c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
357c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
358c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1];
359c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HBasicBlock* block_;
360c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
361c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
362c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
36332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LInstructionGap V8_FINAL : public LGap {
364c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
365c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LInstructionGap(HBasicBlock* block) : LGap(block) { }
366c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
36732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
36832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org    return !IsRedundant();
36932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org  }
37032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org
371c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap")
372c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
373c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
374c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
37532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LGoto V8_FINAL : public LTemplateInstruction<0, 0, 0> {
376c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
377d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org  explicit LGoto(HBasicBlock* block) : block_(block) { }
378c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
37932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE;
380c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
38132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
38232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool IsControl() const V8_OVERRIDE { return true; }
383c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
384d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org  int block_id() const { return block_->block_id(); }
385c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
386c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
387d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org  HBasicBlock* block_;
388c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
389c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
390c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
39132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> {
392c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
393c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LLazyBailout() : gap_instructions_size_(0) { }
394c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
395c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout")
396c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
397c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_gap_instructions_size(int gap_instructions_size) {
398c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    gap_instructions_size_ = gap_instructions_size;
399c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
400c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int gap_instructions_size() { return gap_instructions_size_; }
401c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
402c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
403c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int gap_instructions_size_;
404c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
405c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
406c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
407935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.orgclass LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> {
408935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org public:
409935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org  explicit LDummy() { }
410935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy")
411935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org};
412935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org
413935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org
41432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> {
41546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org public:
41646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org  explicit LDummyUse(LOperand* value) {
41746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org    inputs_[0] = value;
41846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org  }
41946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use")
42046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org};
42146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org
42246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org
42332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDeoptimize V8_FINAL : public LTemplateInstruction<0, 0, 0> {
424c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
425d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org  virtual bool IsControl() const V8_OVERRIDE { return true; }
426c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
427c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Deoptimize)
428c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
429c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
430c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
43132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLabel V8_FINAL : public LGap {
432c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
433c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LLabel(HBasicBlock* block)
434c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : LGap(block), replacement_(NULL) { }
435c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
43632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
43732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return false;
43832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
439c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Label, "label")
440c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
44132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
442c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
443c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int block_id() const { return block()->block_id(); }
444c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_loop_header() const { return block()->IsLoopHeader(); }
44532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org  bool is_osr_entry() const { return block()->is_osr_entry(); }
446c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Label* label() { return &label_; }
447c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LLabel* replacement() const { return replacement_; }
448c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void set_replacement(LLabel* label) { replacement_ = label; }
449c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool HasReplacement() const { return replacement_ != NULL; }
450c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
451c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
452c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Label label_;
453c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LLabel* replacement_;
454c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
455c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
456c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
45732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> {
458c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
45932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
46032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return false;
46132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
463c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
464c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
465c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
466fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> {
467c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
468fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LCallStub(LOperand* context) {
469fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
470fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
471fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
472fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
473fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
474c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub")
475c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallStub)
476c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
477c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
478c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
47932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> {
480c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
48132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
48232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return false;
48332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
484c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value")
485c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
486c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
487c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
488c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgtemplate<int I, int T>
48932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LControlInstruction : public LTemplateInstruction<0, I, T> {
490c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
4911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
4921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
49332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool IsControl() const V8_FINAL V8_OVERRIDE { return true; }
494c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
495c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int SuccessorCount() { return hydrogen()->SuccessorCount(); }
496c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
4971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  int TrueDestination(LChunk* chunk) {
4991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return chunk->LookupDestination(true_block_id());
5001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
5011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  int FalseDestination(LChunk* chunk) {
5021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return chunk->LookupDestination(false_block_id());
5031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
5041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
5051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  Label* TrueLabel(LChunk* chunk) {
5061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (true_label_ == NULL) {
5071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
5081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
5091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return true_label_;
5101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
5111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  Label* FalseLabel(LChunk* chunk) {
5121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (false_label_ == NULL) {
5131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
5141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
5151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return false_label_;
5161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
5171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
5181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org protected:
5191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  int true_block_id() { return SuccessorAt(0)->block_id(); }
5201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  int false_block_id() { return SuccessorAt(1)->block_id(); }
521c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
522c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
523c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HControlInstruction* hydrogen() {
524c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    return HControlInstruction::cast(this->hydrogen_value());
525c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
5261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
5271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  Label* false_label_;
5281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  Label* true_label_;
529c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
530c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
531c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
53232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LWrapReceiver V8_FINAL : public LTemplateInstruction<1, 2, 0> {
5332c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org public:
5342c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org  LWrapReceiver(LOperand* receiver, LOperand* function) {
5352c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org    inputs_[0] = receiver;
5362c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org    inputs_[1] = function;
5372c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org  }
5382c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org
5392c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org  DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver")
54057a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(WrapReceiver)
5412c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org
5422c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org  LOperand* receiver() { return inputs_[0]; }
5432c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org  LOperand* function() { return inputs_[1]; }
5442c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org};
5452c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org
5462c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org
54732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LApplyArguments V8_FINAL : public LTemplateInstruction<1, 4, 0> {
548c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
549c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LApplyArguments(LOperand* function,
550c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                  LOperand* receiver,
551c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                  LOperand* length,
552c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                  LOperand* elements) {
553c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = function;
554c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = receiver;
555c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[2] = length;
556c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[3] = elements;
557c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
558c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
559c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments")
560c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
561c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* function() { return inputs_[0]; }
562c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* receiver() { return inputs_[1]; }
563c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* length() { return inputs_[2]; }
564c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* elements() { return inputs_[3]; }
565c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
566c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
567c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
56832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LAccessArgumentsAt V8_FINAL : public LTemplateInstruction<1, 3, 0> {
569c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
570c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) {
571c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = arguments;
572c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = length;
573c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[2] = index;
574c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
575c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
576c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
577c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
578c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* arguments() { return inputs_[0]; }
579c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* length() { return inputs_[1]; }
580c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* index() { return inputs_[2]; }
581c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
58232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
583c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
584c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
585c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
58632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LArgumentsLength V8_FINAL : public LTemplateInstruction<1, 1, 0> {
587c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
588c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LArgumentsLength(LOperand* elements) {
589c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = elements;
590c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
591c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
592c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* elements() { return inputs_[0]; }
593c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
594c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length")
595c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
596c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
597c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
59832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LArgumentsElements V8_FINAL : public LTemplateInstruction<1, 0, 0> {
599c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
600c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements")
60128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements)
602c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
603c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
604c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
605ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgclass LModByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> {
606c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
607ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LModByPowerOf2I(LOperand* dividend, int32_t divisor) {
608ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    inputs_[0] = dividend;
609ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    divisor_ = divisor;
610c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
611c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
612ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
613ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  int32_t divisor() const { return divisor_; }
614ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
615ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i")
616ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Mod)
617ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
618ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org private:
619ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  int32_t divisor_;
620ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org};
621ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
622ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
62300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.orgclass LModByConstI V8_FINAL : public LTemplateInstruction<1, 1, 0> {
62400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public:
62500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LModByConstI(LOperand* dividend, int32_t divisor) {
62600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    inputs_[0] = dividend;
62700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    divisor_ = divisor;
62800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  }
62900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
63000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
63100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor() const { return divisor_; }
63200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
63300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i")
63400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Mod)
63500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
63600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private:
63700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor_;
63800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org};
63900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
64000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
641ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgclass LModI V8_FINAL : public LTemplateInstruction<1, 2, 3> {
642ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public:
643c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LModI(LOperand* left,
644ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org        LOperand* right) {
645c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
646c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
647c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
648c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
649c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
650c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
651c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
652c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i")
653c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Mod)
654c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
655c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
656c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
65700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.orgclass LDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> {
65800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public:
65900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LDivByPowerOf2I(LOperand* dividend, int32_t divisor) {
66000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    inputs_[0] = dividend;
66100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    divisor_ = divisor;
66200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  }
66300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
66400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
66500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor() const { return divisor_; }
66600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
66700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i")
66800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Div)
66900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
67000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private:
67100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor_;
67200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org};
67300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
67400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
67500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.orgclass LDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 0> {
67600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org public:
67700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LDivByConstI(LOperand* dividend, int32_t divisor) {
67800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    inputs_[0] = dividend;
67900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org    divisor_ = divisor;
68000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  }
68100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
68200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
68300a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor() const { return divisor_; }
68400a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
68500a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i")
68600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Div)
68700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
68800a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org private:
68900a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  int32_t divisor_;
69000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org};
69100a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
69200a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org
69332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDivI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
694c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
6954edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LDivI(LOperand* dividend, LOperand* divisor) {
6964edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org    inputs_[0] = dividend;
6974edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org    inputs_[1] = divisor;
698c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
699c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
7004edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
7014edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LOperand* divisor() { return inputs_[1]; }
702c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
703c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i")
704ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(BinaryOperation)
705ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org};
706ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
707ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
708bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.orgclass LFlooringDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> {
709ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public:
710bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) {
711ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    inputs_[0] = dividend;
712bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org    divisor_ = divisor;
713ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  }
714ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
715ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
716bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  int32_t divisor() { return divisor_; }
717bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
718bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I,
719bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org                               "flooring-div-by-power-of-2-i")
720bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
721bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
722bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private:
723bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  int32_t divisor_;
724bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org};
725bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
726bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
727fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.orgclass LFlooringDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 2> {
728bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org public:
729fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org  LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) {
730bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org    inputs_[0] = dividend;
731bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org    divisor_ = divisor;
732fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org    temps_[0] = temp;
733bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  }
734bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
735bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
736bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  int32_t divisor() const { return divisor_; }
737fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org  LOperand* temp() { return temps_[0]; }
738ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
739ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i")
740ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
741bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org
742bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org private:
743bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  int32_t divisor_;
744c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
745c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
746c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
7474edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.orgclass LFlooringDivI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
7484edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org public:
7494edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LFlooringDivI(LOperand* dividend, LOperand* divisor) {
7504edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org    inputs_[0] = dividend;
7514edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org    inputs_[1] = divisor;
7524edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  }
7534edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org
7544edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LOperand* dividend() { return inputs_[0]; }
7554edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LOperand* divisor() { return inputs_[1]; }
7564edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org
7574edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i")
7584edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
7594edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org};
7604edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org
7614edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org
762c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.orgclass LMulI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
763c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
764c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org  LMulI(LOperand* left, LOperand* right) {
765c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
766c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
767c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
768c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
769c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
770c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
771c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
772c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i")
773c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Mul)
774c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
775c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
776c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
77759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org// Instruction for computing multiplier * multiplicand + addend.
77832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMultiplyAddD V8_FINAL : public LTemplateInstruction<1, 3, 0> {
77959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org public:
78059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  LMultiplyAddD(LOperand* addend, LOperand* multiplier,
78159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org                LOperand* multiplicand) {
78259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org    inputs_[0] = addend;
78359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org    inputs_[1] = multiplier;
78459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org    inputs_[2] = multiplicand;
78559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  }
78659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
78759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  LOperand* addend() { return inputs_[0]; }
78859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  LOperand* multiplier() { return inputs_[1]; }
78959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  LOperand* multiplicand() { return inputs_[2]; }
79059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
79159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d")
79259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org};
79359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
79459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
79532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDebugBreak V8_FINAL : public LTemplateInstruction<0, 0, 0> {
7964e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org public:
7974e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break")
7984e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org};
7994e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org
8004e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org
80132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCompareNumericAndBranch V8_FINAL : public LControlInstruction<2, 0> {
802c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
803e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  LCompareNumericAndBranch(LOperand* left, LOperand* right) {
804c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
805c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
806c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
807c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
808c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
809c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
810c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
811e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch,
812e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org                               "compare-numeric-and-branch")
813e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch)
814c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
815c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op() const { return hydrogen()->token(); }
816c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_double() const {
8178e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org    return hydrogen()->representation().IsDouble();
818c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
819c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
82032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
821c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
822c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
823c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
82432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathFloor V8_FINAL : public LTemplateInstruction<1, 1, 1> {
825c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
826e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LMathFloor(LOperand* value, LOperand* temp) {
827c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
828c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
829c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
830c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
831c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
832c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
833c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
834e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor")
835c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
836e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
837c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
838e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
83932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> {
840e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public:
841e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LMathRound(LOperand* value, LOperand* temp) {
842e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    inputs_[0] = value;
843e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    temps_[0] = temp;
844e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
845e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
846e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* value() { return inputs_[0]; }
847e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* temp() { return temps_[0]; }
848e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
849e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round")
850e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
851e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
852e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
853e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
854fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> {
855e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public:
856fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LMathAbs(LOperand* context, LOperand* value) {
857fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = context;
858e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    inputs_[0] = value;
859e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
860e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
861fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[1]; }
862e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* value() { return inputs_[0]; }
863e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
864e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs")
865e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
866e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
867e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
868e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
86932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> {
870e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public:
871e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  explicit LMathLog(LOperand* value) {
872e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    inputs_[0] = value;
873e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
874e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
875e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* value() { return inputs_[0]; }
876e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
877e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log")
878e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
879e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
880e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
881f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgclass LMathClz32 V8_FINAL : public LTemplateInstruction<1, 1, 0> {
882f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org public:
883f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  explicit LMathClz32(LOperand* value) {
884f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org    inputs_[0] = value;
885f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  }
886f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org
887f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  LOperand* value() { return inputs_[0]; }
888f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org
889f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32")
890f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org};
891f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org
892f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org
89332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathExp V8_FINAL : public LTemplateInstruction<1, 1, 3> {
89483130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org public:
89583130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  LMathExp(LOperand* value,
89683130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org           LOperand* double_temp,
89783130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org           LOperand* temp1,
89883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org           LOperand* temp2) {
89983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org    inputs_[0] = value;
90083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org    temps_[0] = temp1;
90183130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org    temps_[1] = temp2;
90283130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org    temps_[2] = double_temp;
90383130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org    ExternalReference::InitializeMathExpData();
90483130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  }
90583130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org
90683130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
90783130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  LOperand* temp1() { return temps_[0]; }
90883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  LOperand* temp2() { return temps_[1]; }
90983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  LOperand* double_temp() { return temps_[2]; }
91083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org
91183130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp")
912e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
91383130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org
914e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
91532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathSqrt V8_FINAL : public LTemplateInstruction<1, 1, 0> {
916e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public:
917e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  explicit LMathSqrt(LOperand* value) {
918e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    inputs_[0] = value;
919e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
920e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
921e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* value() { return inputs_[0]; }
922e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
923e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt")
924e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org};
925e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
926e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
92732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 1, 1> {
928e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public:
929e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LMathPowHalf(LOperand* value, LOperand* temp) {
930e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    inputs_[0] = value;
931e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    temps_[0] = temp;
932e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
933e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
934e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* value() { return inputs_[0]; }
935e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LOperand* temp() { return temps_[0]; }
936e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
937e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half")
93883130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org};
93983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org
94083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org
94132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCmpObjectEqAndBranch V8_FINAL : public LControlInstruction<2, 0> {
942c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
943c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LCmpObjectEqAndBranch(LOperand* left, LOperand* right) {
944c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
945c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
946c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
947c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
948c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
949c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
950c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
951c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch")
952c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch)
953c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
954c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
955c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
95632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCmpHoleAndBranch V8_FINAL : public LControlInstruction<1, 0> {
957c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com public:
958c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  explicit LCmpHoleAndBranch(LOperand* object) {
959c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com    inputs_[0] = object;
960c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  }
961c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com
962c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  LOperand* object() { return inputs_[0]; }
963c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com
964c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch")
965c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com  DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch)
966c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com};
967c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com
968c4c71ea2d66514cf02679bc673c5ba8c9406bad8palfia@homejinni.com
9690cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgclass LCompareMinusZeroAndBranch V8_FINAL : public LControlInstruction<1, 1> {
9700cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org public:
9710cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) {
9720cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org    inputs_[0] = value;
9730cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org    temps_[0] = temp;
9740cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  }
9750cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
9760cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  LOperand* value() { return inputs_[0]; }
9770cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  LOperand* temp() { return temps_[0]; }
9780cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
9790cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch,
9800cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org                               "cmp-minus-zero-and-branch")
9810cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch)
9820cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org};
9830cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
9840cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
98532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LIsObjectAndBranch V8_FINAL : public LControlInstruction<1, 1> {
986c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
987c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LIsObjectAndBranch(LOperand* value, LOperand* temp) {
988c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
989c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
990c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
991c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
992c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
993c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
994c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
995c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
996c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch)
997c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
998c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual void PrintDataTo(StringStream* stream);
999c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1000c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1001c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
100232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LIsStringAndBranch V8_FINAL : public LControlInstruction<1, 1> {
1003f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org public:
1004f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  LIsStringAndBranch(LOperand* value, LOperand* temp) {
1005f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org    inputs_[0] = value;
1006f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org    temps_[0] = temp;
1007f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  }
1008f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
1009c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1010c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1011c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1012f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch")
1013f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch)
1014f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
101532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1016f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org};
1017f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
1018f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
101932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LIsSmiAndBranch V8_FINAL : public LControlInstruction<1, 0> {
1020c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1021c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LIsSmiAndBranch(LOperand* value) {
1022c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1023c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1024c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1025c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1026c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1027c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
1028c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
1029c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
103032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1031c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1032c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1033c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
103432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LIsUndetectableAndBranch V8_FINAL : public LControlInstruction<1, 1> {
1035c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1036c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
1037c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1038c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
1039c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1040c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1041c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1042c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1043c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1044c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
1045c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "is-undetectable-and-branch")
1046c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
1047c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
104832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1049c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1050c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1051c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1052fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> {
1053f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org public:
1054fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) {
1055fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1056fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = left;
1057fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = right;
1058f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  }
1059f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
1060fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1061fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* left() { return inputs_[1]; }
1062fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* right() { return inputs_[2]; }
1063c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1064f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch,
1065f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org                               "string-compare-and-branch")
1066f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch)
1067f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
1068f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org  Token::Value op() const { return hydrogen()->token(); }
1069f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
107032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1071f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org};
1072f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
1073f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org
107432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LHasInstanceTypeAndBranch V8_FINAL : public LControlInstruction<1, 0> {
1075c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1076c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LHasInstanceTypeAndBranch(LOperand* value) {
1077c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1078c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1079c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1080c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1081c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1082c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
1083c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "has-instance-type-and-branch")
1084c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
1085c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
108632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1087c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1088c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1089c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
109032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LGetCachedArrayIndex V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1091c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1092c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LGetCachedArrayIndex(LOperand* value) {
1093c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1094c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1095c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1096c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1097c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1098c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index")
1099c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex)
1100c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1101c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1102c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
110332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LHasCachedArrayIndexAndBranch V8_FINAL
110432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    : public LControlInstruction<1, 0> {
1105c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1106c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
1107c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1108c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1109c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1110c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1111c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1112c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
1113c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "has-cached-array-index-and-branch")
1114c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch)
1115c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
111632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1117c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1118c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1119c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
112032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LClassOfTestAndBranch V8_FINAL : public LControlInstruction<1, 1> {
1121c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1122c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LClassOfTestAndBranch(LOperand* value, LOperand* temp) {
1123c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1124c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
1125c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1126c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1127c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1128c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1129c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1130c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
1131c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "class-of-test-and-branch")
1132c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
1133c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
113432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1135c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1136c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1137c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1138fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1139c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1140fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LCmpT(LOperand* context, LOperand* left, LOperand* right) {
1141fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1142fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = left;
1143fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = right;
1144c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1145c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1146fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1147fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* left() { return inputs_[1]; }
1148fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* right() { return inputs_[2]; }
1149c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1150c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
1151c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
1152c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1153c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op() const { return hydrogen()->token(); }
1154c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1155c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1156c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1157fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1158c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1159fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LInstanceOf(LOperand* context, LOperand* left, LOperand* right) {
1160fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1161fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = left;
1162fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = right;
1163c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1164c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1165fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1166fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* left() { return inputs_[1]; }
1167fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* right() { return inputs_[2]; }
1168c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1169c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
1170c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1171c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1172c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1173fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> {
1174c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1175fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
1176fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1177fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = value;
1178c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
1179c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1180c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1181fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1182fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* value() { return inputs_[1]; }
1183c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1184c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1185c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
1186c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "instance-of-known-global")
1187c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
1188c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1189c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Handle<JSFunction> function() const { return hydrogen()->function(); }
11901044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org  LEnvironment* GetDeferredLazyDeoptimizationEnvironment() {
11911044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org    return lazy_deopt_env_;
11921044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org  }
119332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void SetDeferredLazyDeoptimizationEnvironment(
119432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org      LEnvironment* env) V8_OVERRIDE {
11951044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org    lazy_deopt_env_ = env;
11961044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org  }
11971044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org
11981044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org private:
11991044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org  LEnvironment* lazy_deopt_env_;
1200c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1201c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1202c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
120332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LBoundsCheck V8_FINAL : public LTemplateInstruction<0, 2, 0> {
1204c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1205c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LBoundsCheck(LOperand* index, LOperand* length) {
1206c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = index;
1207c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = length;
1208c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1209c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1210c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* index() { return inputs_[0]; }
1211c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* length() { return inputs_[1]; }
1212c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1213c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check")
1214129d398d682e6ca3910808c913212ce532f1e155danno@chromium.org  DECLARE_HYDROGEN_ACCESSOR(BoundsCheck)
1215c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1216c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1217c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
121832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LBitI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1219c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1220c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LBitI(LOperand* left, LOperand* right) {
1221c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1222c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1223c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1224c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1225c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1226c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1227c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1228c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op() const { return hydrogen()->op(); }
1229c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1230c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i")
1231c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Bitwise)
1232c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1233c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1234c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
123532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LShiftI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1236c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1237c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt)
1238c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : op_(op), can_deopt_(can_deopt) {
1239c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1240c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1241c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1242c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1243c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op() const { return op_; }
1244c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1245c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1246c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool can_deopt() const { return can_deopt_; }
1247c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1248c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i")
1249c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1250c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
1251c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op_;
1252c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool can_deopt_;
1253c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1254c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1255c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
125632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LSubI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1257c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1258c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LSubI(LOperand* left, LOperand* right) {
1259c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1260c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1261c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1262c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1263c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1264c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1265c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1266c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i")
1267c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Sub)
1268c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1269c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1270c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
127132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LConstantI V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1272c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1273c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i")
1274c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Constant)
1275c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1276c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int32_t value() const { return hydrogen()->Integer32Value(); }
1277c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1278c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
128032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LConstantS V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1281b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org public:
1282b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s")
1283b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Constant)
1284b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org
1285b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org  Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); }
1286b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org};
1287b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org
1288b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org
128932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LConstantD V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1290c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1291c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d")
1292c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Constant)
1293c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1294c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  double value() const { return hydrogen()->DoubleValue(); }
1295c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1296c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1297c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
129832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LConstantE V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1299d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org public:
1300d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e")
1301d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Constant)
1302d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
1303d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  ExternalReference value() const {
1304d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    return hydrogen()->ExternalReferenceValue();
1305d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  }
1306d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org};
1307d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
1308d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
130932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1310c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1311c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
1312c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Constant)
1313c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
13148b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com  Handle<Object> value(Isolate* isolate) const {
13158b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com    return hydrogen()->handle(isolate);
13168b6c7864f30105542f70ddbef4cf00467f941602palfia@homejinni.com  }
1317c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1318c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1319c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
132032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LBranch V8_FINAL : public LControlInstruction<1, 0> {
1321c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1322c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LBranch(LOperand* value) {
1323c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1324c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1325c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1326c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1327c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1328c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
1329c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Branch)
1330c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
133132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1332c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1333c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1334c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
133532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCmpMapAndBranch V8_FINAL : public LControlInstruction<1, 1> {
1336c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1337c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LCmpMapAndBranch(LOperand* value, LOperand* temp) {
1338c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1339c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
1340c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1341c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1342c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1343c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1344c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1345c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
1346c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CompareMap)
1347c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1348528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  Handle<Map> map() const { return hydrogen()->map().handle(); }
1349c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1351c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
135232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMapEnumLength V8_FINAL : public LTemplateInstruction<1, 1, 0> {
135378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public:
135478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  explicit LMapEnumLength(LOperand* value) {
135578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org    inputs_[0] = value;
135678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  }
135778502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
1358c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1359c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
136078502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length")
136178502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org};
136278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
136378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
136432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDateField V8_FINAL : public LTemplateInstruction<1, 1, 1> {
1365154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org public:
1366154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org  LDateField(LOperand* date, LOperand* temp, Smi* index) : index_(index) {
1367154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org    inputs_[0] = date;
1368154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org    temps_[0] = temp;
1369154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org  }
1370154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org
1371c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* date() { return inputs_[0]; }
1372c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1373c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  Smi* index() const { return index_; }
1374c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
13753d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field")
13763d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(DateField)
1377154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org
1378154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org private:
1379154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org  Smi* index_;
1380154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org};
1381154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org
1382154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org
1383e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.orgclass LSeqStringGetChar V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1384e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org public:
1385e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  LSeqStringGetChar(LOperand* string, LOperand* index) {
1386e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org    inputs_[0] = string;
1387e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org    inputs_[1] = index;
1388e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  }
1389e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org
1390e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  LOperand* string() const { return inputs_[0]; }
1391e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  LOperand* index() const { return inputs_[1]; }
1392e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org
1393e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char")
1394e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar)
1395e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org};
1396e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org
1397e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org
13989af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.orgclass LSeqStringSetChar V8_FINAL : public LTemplateInstruction<1, 4, 0> {
1399a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org public:
14009af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org  LSeqStringSetChar(LOperand* context,
14019af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org                    LOperand* string,
1402a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org                    LOperand* index,
1403e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org                    LOperand* value) {
14049af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org    inputs_[0] = context;
14059af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org    inputs_[1] = string;
14069af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org    inputs_[2] = index;
14079af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org    inputs_[3] = value;
1408a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org  }
1409a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org
14109af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org  LOperand* string() { return inputs_[1]; }
14119af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org  LOperand* index() { return inputs_[2]; }
14129af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org  LOperand* value() { return inputs_[3]; }
1413a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org
1414a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org  DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char")
1415a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org  DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar)
1416a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org};
1417a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org
1418a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org
141932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1420c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1421c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LAddI(LOperand* left, LOperand* right) {
1422c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1423c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1424c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1425c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1426c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1427c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1428c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1429c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i")
1430c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Add)
1431c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1432c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1433c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
143432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LMathMinMax V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1435471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org public:
1436471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org  LMathMinMax(LOperand* left, LOperand* right) {
1437471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org    inputs_[0] = left;
1438471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org    inputs_[1] = right;
1439471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org  }
1440471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org
1441c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1442c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1443c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1444e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max")
1445471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(MathMinMax)
1446471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org};
1447471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org
1448471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org
144932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LPower V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1450c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1451c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LPower(LOperand* left, LOperand* right) {
1452c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1453c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1454c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1455c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1456c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1457c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1458c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1459c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Power, "power")
1460c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Power)
1461c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1463c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
146432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LArithmeticD V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1465c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1466c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LArithmeticD(Token::Value op, LOperand* left, LOperand* right)
1467c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : op_(op) {
1468c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = left;
1469c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = right;
1470c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1471c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1472c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op() const { return op_; }
1473c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* left() { return inputs_[0]; }
1474c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* right() { return inputs_[1]; }
1475c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
147632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual Opcode opcode() const V8_OVERRIDE {
147732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return LInstruction::kArithmeticD;
147832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
147932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
148032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual const char* Mnemonic() const V8_OVERRIDE;
1481c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1482c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
1483c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op_;
1484c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1485c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1486c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1487fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1488c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1489fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LArithmeticT(Token::Value op,
1490fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org               LOperand* context,
1491fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org               LOperand* left,
1492fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org               LOperand* right)
1493c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : op_(op) {
1494fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1495fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = left;
1496fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = right;
1497c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1498c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1499fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1500fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* left() { return inputs_[1]; }
1501fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* right() { return inputs_[2]; }
1502c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  Token::Value op() const { return op_; }
1503c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
150432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual Opcode opcode() const V8_FINAL  { return LInstruction::kArithmeticT; }
150532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
150632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual const char* Mnemonic() const V8_OVERRIDE;
1507c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1508c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
1509c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Token::Value op_;
1510c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1511c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1512c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1513fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> {
1514c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1515fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) {
1516c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1517fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = context;
1518fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = parameter_count;
1519c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1520c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1521c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1522c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
15236e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org  bool has_constant_parameter_count() {
15246e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org    return parameter_count()->IsConstantOperand();
15256e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org  }
15266e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org  LConstantOperand* constant_parameter_count() {
15276e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org    ASSERT(has_constant_parameter_count());
15286e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org    return LConstantOperand::cast(parameter_count());
15296e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org  }
1530fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* parameter_count() { return inputs_[2]; }
15316e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org
1532c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Return, "return")
1533c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1534c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1535c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
153632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1537c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1538c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LLoadNamedField(LOperand* object) {
1539c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = object;
1540c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1541c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1542c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* object() { return inputs_[0]; }
1543c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1544c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
1545c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
1546c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1547c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1548c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1549fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1550c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1551fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LLoadNamedGeneric(LOperand* context, LOperand* object) {
1552fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1553fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = object;
1554c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1555c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1556fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1557fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* object() { return inputs_[1]; }
1558c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1559c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
1560c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
1561c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1562c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Handle<Object> name() const { return hydrogen()->name(); }
1563c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1564c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1565c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
156632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1567c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1568c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LLoadFunctionPrototype(LOperand* function) {
1569c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = function;
1570c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1571c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1572c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* function() { return inputs_[0]; }
1573c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1574c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype")
1575c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype)
1576c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1577c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1578c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1579528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgclass LLoadRoot V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1580528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org public:
1581528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root")
1582528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadRoot)
1583528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org
1584528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  Heap::RootListIndex index() const { return hydrogen()->index(); }
1585528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org};
1586528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org
1587528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org
158832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1589c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1590e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  LLoadKeyed(LOperand* elements, LOperand* key) {
1591c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = elements;
1592c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = key;
1593c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1594c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1595c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* elements() { return inputs_[0]; }
1596c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* key() { return inputs_[1]; }
1597e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  ElementsKind elements_kind() const {
1598e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org    return hydrogen()->elements_kind();
1599c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1600e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  bool is_external() const {
1601e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org    return hydrogen()->is_external();
1602c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
16035c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  bool is_fixed_typed_array() const {
16045c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org    return hydrogen()->is_fixed_typed_array();
16055c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  }
16065c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  bool is_typed_elements() const {
16075c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org    return is_external() || is_fixed_typed_array();
16085c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  }
1609c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1610e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
1611e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
1612c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
16138e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org  virtual void PrintDataTo(StringStream* stream);
1614fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org  uint32_t base_offset() const { return hydrogen()->base_offset(); }
1615c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1616c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1617c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1618fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1619c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1620fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key) {
1621fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1622fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = object;
1623fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = key;
1624c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1625c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1626fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1627fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* object() { return inputs_[1]; }
1628fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* key() { return inputs_[2]; }
1629c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1630c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1631c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1632c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1633c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
163432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1635c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1636c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
1637c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
1638c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1639c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1640c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1641fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1642c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1643fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LLoadGlobalGeneric(LOperand* context, LOperand* global_object) {
1644fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1645fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = global_object;
1646c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1647c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1648fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1649fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* global_object() { return inputs_[1]; }
1650c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1651c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
1652c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
1653c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1654c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Handle<Object> name() const { return hydrogen()->name(); }
1655c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool for_typeof() const { return hydrogen()->for_typeof(); }
1656c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1657c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1658c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
165932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> {
1660c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1661c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LStoreGlobalCell(LOperand* value, LOperand* temp) {
1662c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1663c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
1664c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1665c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1666c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1667c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
1668c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1669c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
1670c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
1671c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1672c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1673c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
167432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1675c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1676c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LLoadContextSlot(LOperand* context) {
1677c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = context;
1678c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1679c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1680c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* context() { return inputs_[0]; }
1681c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1682c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot")
1683c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot)
1684c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1685c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int slot_index() { return hydrogen()->slot_index(); }
1686c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1687c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  virtual void PrintDataTo(StringStream* stream);
1688c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1689c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1690c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
169132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LStoreContextSlot V8_FINAL : public LTemplateInstruction<0, 2, 0> {
1692c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1693c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LStoreContextSlot(LOperand* context, LOperand* value) {
1694c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = context;
1695c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = value;
1696c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1697c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1698c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* context() { return inputs_[0]; }
1699c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[1]; }
1700c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1701c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot")
1702c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot)
1703c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1704c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int slot_index() { return hydrogen()->slot_index(); }
1705c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
170632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1707c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1708c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1709c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
171032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LPushArgument V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1711c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1712c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LPushArgument(LOperand* value) {
1713c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1714c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1715c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1716c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1717c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1718c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument")
1719c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1720c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1721c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
172232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LDrop V8_FINAL : public LTemplateInstruction<0, 0, 0> {
172328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org public:
172428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org  explicit LDrop(int count) : count_(count) { }
172528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org
172628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org  int count() const { return count_; }
172728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org
172828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Drop, "drop")
172928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org
173028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org private:
173128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org  int count_;
173228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org};
173328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org
173428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org
17353ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass LStoreCodeEntry V8_FINAL: public LTemplateInstruction<0, 2, 0> {
1736662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org public:
1737662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  LStoreCodeEntry(LOperand* function, LOperand* code_object) {
1738662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org    inputs_[0] = function;
17393ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org    inputs_[1] = code_object;
1740662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  }
1741662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org
1742662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  LOperand* function() { return inputs_[0]; }
17433ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org  LOperand* code_object() { return inputs_[1]; }
1744662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org
1745662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  virtual void PrintDataTo(StringStream* stream);
1746662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org
1747662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry")
1748662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry)
1749662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org};
1750662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org
1751662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org
1752ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.orgclass LInnerAllocatedObject V8_FINAL: public LTemplateInstruction<1, 2, 0> {
17534c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org public:
1754ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org  LInnerAllocatedObject(LOperand* base_object, LOperand* offset) {
17554c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org    inputs_[0] = base_object;
1756ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org    inputs_[1] = offset;
17574c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org  }
17584c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org
1759ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org  LOperand* base_object() const { return inputs_[0]; }
1760ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org  LOperand* offset() const { return inputs_[1]; }
17614c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org
176232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
17634c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org
1764ce9c514a4e015930324b2b45326a478a69535388machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object")
17654c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org};
17664c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org
17674c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.org
176832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LThisFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1769c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1770c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function")
1771c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(ThisFunction)
1772c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1773c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1774c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
177532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LContext V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1776c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1777c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Context, "context")
17787c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Context)
1779c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1780c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1781c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1782fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1783f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org public:
1784fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LDeclareGlobals(LOperand* context) {
1785fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1786fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
1787fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1788fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1789fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1790f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals")
1791f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals)
1792f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org};
1793f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
1794f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
179526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LCallJSFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1796c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
179726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  explicit LCallJSFunction(LOperand* function) {
179826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org    inputs_[0] = function;
1799c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1800c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
180126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LOperand* function() { return inputs_[0]; }
1802c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
180326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function")
180426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallJSFunction)
1805c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
180632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1807c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1808c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1809c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1810c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1811c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
181226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LCallWithDescriptor V8_FINAL : public LTemplateResultInstruction<1> {
1813c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
181426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LCallWithDescriptor(const CallInterfaceDescriptor* descriptor,
1815196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org                      const ZoneList<LOperand*>& operands,
181626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org                      Zone* zone)
181726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org    : descriptor_(descriptor),
181826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org      inputs_(descriptor->environment_length() + 1, zone) {
181926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org    ASSERT(descriptor->environment_length() + 1 == operands.length());
182026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org    inputs_.AddAll(operands, zone);
1821c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
1822c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
182326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LOperand* target() const { return inputs_[0]; }
1824c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
182526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  const CallInterfaceDescriptor* descriptor() { return descriptor_; }
182626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org
182726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org private:
182826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor")
182926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor)
1830c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
183132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1832c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1833c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1834c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
183526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  const CallInterfaceDescriptor* descriptor_;
183626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  ZoneList<LOperand*> inputs_;
183726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org
183826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  // Iterator support.
183926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  virtual int InputCount() V8_FINAL V8_OVERRIDE { return inputs_.length(); }
184026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; }
184126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org
184226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  virtual int TempCount() V8_FINAL V8_OVERRIDE { return 0; }
184326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return NULL; }
184426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org};
1845c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1846c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
184726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.orgclass LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1848c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
184926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInvokeFunction(LOperand* context, LOperand* function) {
1850fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
185126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org    inputs_[1] = function;
1852fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
1853fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1854fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
185526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LOperand* function() { return inputs_[1]; }
1856fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
185726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
185826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
1859c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
186032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1861c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1862c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1863c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1864c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1865c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1866fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1867c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1868fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LCallFunction(LOperand* context, LOperand* function) {
1869fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1870fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = function;
1871c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org  }
1872c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org
1873fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1874fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* function() { return inputs_[1]; }
1875c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1876c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function")
1877c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallFunction)
1878c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1879c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1880c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1881c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1882c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1883fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1884c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1885fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LCallNew(LOperand* context, LOperand* constructor) {
1886fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1887fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = constructor;
18887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
1889c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1890fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1891fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* constructor() { return inputs_[1]; }
1892c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1893c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
1894c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallNew)
1895c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
189632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1897c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1898c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1899c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1900c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1901c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1902fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1903750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public:
1904fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LCallNewArray(LOperand* context, LOperand* constructor) {
1905fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1906fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = constructor;
1907750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  }
1908750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
1909fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1910fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* constructor() { return inputs_[1]; }
1911750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
1912750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array")
1913750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallNewArray)
1914750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
191532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1916750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
1917750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  int arity() const { return hydrogen()->argument_count() - 1; }
1918750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org};
1919750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
1920750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org
1921fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1922c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1923fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LCallRuntime(LOperand* context) {
1924fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
1925fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
1926fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1927fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
1928fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1929c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1930c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1931c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1932a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org  virtual bool ClobbersDoubleRegisters(Isolate* isolate) const V8_OVERRIDE {
1933fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    return save_doubles() == kDontSaveFPRegs;
1934fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
1935fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
1936c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  const Runtime::Function* function() const { return hydrogen()->function(); }
1937c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  int arity() const { return hydrogen()->argument_count(); }
1938fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); }
1939c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1940c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1941c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
194232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1943c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1944c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LInteger32ToDouble(LOperand* value) {
1945c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
19467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
19477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
1948c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1949c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1950c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double")
1951c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1952c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1953c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
195432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LUint32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> {
195578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public:
195678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  explicit LUint32ToDouble(LOperand* value) {
195778502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org    inputs_[0] = value;
195878502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  }
195978502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
1960c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1961c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
196278502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double")
196378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org};
196478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
196578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
1966bc176057ae476990672de915df235c9aeadc8521titzer@chromium.orgclass LNumberTagI V8_FINAL : public LTemplateInstruction<1, 1, 2> {
1967c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
1968bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) {
1969c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
1970bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    temps_[0] = temp1;
1971bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    temps_[1] = temp2;
19727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
19737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
1974c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1975bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LOperand* temp1() { return temps_[0]; }
1976bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LOperand* temp2() { return temps_[1]; }
1977c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1978c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i")
1979c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
1980c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1981c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
1982bc176057ae476990672de915df235c9aeadc8521titzer@chromium.orgclass LNumberTagU V8_FINAL : public LTemplateInstruction<1, 1, 2> {
198378502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org public:
1984bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) {
198578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org    inputs_[0] = value;
1986bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    temps_[0] = temp1;
1987bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    temps_[1] = temp2;
198878502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  }
198978502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
1990c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
1991bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LOperand* temp1() { return temps_[0]; }
1992bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  LOperand* temp2() { return temps_[1]; }
1993c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
199478502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u")
199578502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org};
199678502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
199778502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.org
199832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LNumberTagD V8_FINAL : public LTemplateInstruction<1, 1, 2> {
1999c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2000c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) {
2001c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
2002c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    temps_[0] = temp;
2003c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[1] = temp2;
20047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
20057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2006c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2007c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2008c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp2() { return temps_[1]; }
2009c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2010c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d")
20117c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Change)
2012c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2013c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
20147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
20158fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.orgclass LDoubleToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2016a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org public:
20178fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org  explicit LDoubleToSmi(LOperand* value) {
2018a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org    inputs_[0] = value;
2019a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  }
2020a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
2021a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2022a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
2023a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi")
2024a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
2025a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
2026a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2027a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org};
2028a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
2029a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
2030c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Sometimes truncating conversion from a tagged value to an int32.
20318fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.orgclass LDoubleToI V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2032c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
20338fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org  explicit LDoubleToI(LOperand* value) {
2034c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
20357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
20367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2037c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2038c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2039c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i")
2040c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
2041c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2042c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2043c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2044c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2045c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2046c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Truncating conversion from a tagged value to an int32.
20478fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.orgclass LTaggedToI V8_FINAL : public LTemplateInstruction<1, 1, 2> {
2048c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2049c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LTaggedToI(LOperand* value,
2050c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org             LOperand* temp,
20518fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org             LOperand* temp2) {
2052c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
2053c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    temps_[0] = temp;
2054c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[1] = temp2;
20557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
20567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2057c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2058c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2059c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp2() { return temps_[1]; }
2060c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2061c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i")
2062528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Change)
2063c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2064c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2065c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2066c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
20677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
206832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LSmiTag V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2069c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2070c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LSmiTag(LOperand* value) {
2071c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
20727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
20737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2074c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2075c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2076c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag")
2077381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Change)
2078c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
20797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2080c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
208132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LNumberUntagD V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2082c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2083c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LNumberUntagD(LOperand* value) {
2084c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
20857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
20867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2087c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2088c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2089c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
2090c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Change)
2091c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2092c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2093c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
209432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LSmiUntag V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2095c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2096c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LSmiUntag(LOperand* value, bool needs_check)
2097c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      : needs_check_(needs_check) {
2098c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
20997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
21007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2101c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2102c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool needs_check() const { return needs_check_; }
2103c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2104c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag")
2105c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2106c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
2107c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool needs_check_;
2108c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2109c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2110c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
211132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LStoreNamedField V8_FINAL : public LTemplateInstruction<0, 2, 1> {
2112c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2113c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) {
2114c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[0] = object;
2115c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[1] = value;
211637141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org    temps_[0] = temp;
21177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
21187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2119c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* object() { return inputs_[0]; }
2120c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[1]; }
2121c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2122c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2123c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field")
2124c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreNamedField)
2125c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
212632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2127c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2128f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org  Representation representation() const {
2129f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org    return hydrogen()->field_representation();
2130f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org  }
2131c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2132c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2133c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2134fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> {
2135c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2136fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) {
2137fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2138fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = object;
2139fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = value;
21407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
21417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2142fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2143fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* object() { return inputs_[1]; }
2144fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* value() { return inputs_[2]; }
2145c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2146c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
2147c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric)
2148c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
214932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2150c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2151c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Handle<Object> name() const { return hydrogen()->name(); }
2152486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  StrictMode strict_mode() { return hydrogen()->strict_mode(); }
2153c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2154c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2155c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
215632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LStoreKeyed V8_FINAL : public LTemplateInstruction<0, 3, 0> {
2157c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2158e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) {
2159c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[0] = object;
2160c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[1] = key;
2161c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[2] = value;
21627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
21637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2164e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  bool is_external() const { return hydrogen()->is_external(); }
21655c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  bool is_fixed_typed_array() const {
21665c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org    return hydrogen()->is_fixed_typed_array();
21675c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  }
21685c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  bool is_typed_elements() const {
21695c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org    return is_external() || is_fixed_typed_array();
21705c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  }
2171c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* elements() { return inputs_[0]; }
2172c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* key() { return inputs_[1]; }
2173c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[2]; }
2174e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  ElementsKind elements_kind() const {
2175e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org    return hydrogen()->elements_kind();
2176e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  }
2177c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2178e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed")
2179e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreKeyed)
2180c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
218132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2182fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org  bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); }
2183fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org  uint32_t base_offset() const { return hydrogen()->base_offset(); }
2184c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2185c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2186c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2187fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> {
2188c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2189fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LStoreKeyedGeneric(LOperand* context,
2190fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org                     LOperand* obj,
2191fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org                     LOperand* key,
2192fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org                     LOperand* value) {
2193fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2194fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = obj;
2195fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = key;
2196fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[3] = value;
21977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
21987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2199fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2200fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* object() { return inputs_[1]; }
2201fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* key() { return inputs_[2]; }
2202fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* value() { return inputs_[3]; }
2203c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2204c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
2205c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric)
2206c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
220732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2208c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2209486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  StrictMode strict_mode() { return hydrogen()->strict_mode(); }
2210c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2211c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2212c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2213fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 1> {
2214c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2215c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LTransitionElementsKind(LOperand* object,
2216fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org                          LOperand* context,
2217d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org                          LOperand* new_map_temp) {
2218c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = object;
2219fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = context;
2220c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = new_map_temp;
22217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
22227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2223fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[1]; }
2224c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* object() { return inputs_[0]; }
2225c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* new_map_temp() { return temps_[0]; }
2226c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2227c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind,
2228c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "transition-elements-kind")
2229c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind)
2230c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
223132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2232c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2233528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
2234528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  Handle<Map> transitioned_map() {
2235528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org    return hydrogen()->transitioned_map().handle();
2236528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  }
2237003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org  ElementsKind from_kind() { return hydrogen()->from_kind(); }
2238003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org  ElementsKind to_kind() { return hydrogen()->to_kind(); }
22397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org};
22407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
22417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
224232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LTrapAllocationMemento V8_FINAL : public LTemplateInstruction<0, 1, 1> {
22437c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org public:
22447c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LTrapAllocationMemento(LOperand* object,
22457c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org                         LOperand* temp) {
22467c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org    inputs_[0] = object;
22477c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org    temps_[0] = temp;
22487c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  }
22497c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
22507c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LOperand* object() { return inputs_[0]; }
22517c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LOperand* temp() { return temps_[0]; }
22527c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
22537c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento,
22547c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org                               "trap-allocation-memento")
22557c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org};
22567c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
22577c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
2258fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> {
22597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public:
2260fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
2261fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2262fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = left;
2263fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = right;
22647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
22657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2266fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2267fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* left() { return inputs_[1]; }
2268fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* right() { return inputs_[2]; }
2269c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2270c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
2271c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StringAdd)
2272c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2273c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
22747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2275c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2276fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2277c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2278fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
2279fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2280fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = string;
2281fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[2] = index;
22827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
22837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2284fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2285fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* string() { return inputs_[1]; }
2286fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* index() { return inputs_[2]; }
2287c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2288c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
2289c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
2290c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2291c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2292c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2293fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2294c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2295fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LStringCharFromCode(LOperand* context, LOperand* char_code) {
2296fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2297fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = char_code;
22987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
2299c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2300fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2301fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* char_code() { return inputs_[1]; }
2302c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2303c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
2304c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
23057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org};
23067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
23077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
23081f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.orgclass LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> {
23097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public:
23101f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org  explicit LCheckValue(LOperand* value) {
2311c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
23127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
23137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2314c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
231564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org
23161f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value")
23171f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CheckValue)
2318c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2319c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2320c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
232132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCheckInstanceType V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2322c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2323c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LCheckInstanceType(LOperand* value) {
2324c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
23257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
2326c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2327c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2328c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2329c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type")
2330c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType)
2331c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2332c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2333c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
233432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCheckMaps V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2335c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2336af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org  explicit LCheckMaps(LOperand* value = NULL) {
2337c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
23387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
23397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2340c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2341c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
23421456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps")
23431456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CheckMaps)
2344c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2345c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2346c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
234732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCheckSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2348c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2349c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LCheckSmi(LOperand* value) {
2350c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
23517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
2352c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2353c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2354c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2355c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi")
23567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org};
23577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
23587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
235932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCheckNonSmi V8_FINAL : public LTemplateInstruction<0, 1, 0> {
23607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public:
2361c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LCheckNonSmi(LOperand* value) {
2362c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
2363c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  }
2364c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2365c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2366c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2367c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
23681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
2369c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2370c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
23717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
237232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LClampDToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2373c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2374c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LClampDToUint8(LOperand* unclamped, LOperand* temp) {
2375c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[0] = unclamped;
2376c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
23777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
23787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2379c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* unclamped() { return inputs_[0]; }
2380c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2381c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2382c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8")
2383c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2384c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2385c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
238632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LClampIToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2387c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2388c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  explicit LClampIToUint8(LOperand* unclamped) {
2389c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[0] = unclamped;
23907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
23917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2392c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* unclamped() { return inputs_[0]; }
2393c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2394c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8")
2395c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2396c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2397c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
239832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LClampTToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2399c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2400c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LClampTToUint8(LOperand* unclamped, LOperand* temp) {
2401c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    inputs_[0] = unclamped;
2402c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
24037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
24047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2405c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LOperand* unclamped() { return inputs_[0]; }
2406c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2407c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2408c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8")
2409c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2410c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2411c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2412ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgclass LDoubleBits V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2413ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public:
2414ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  explicit LDoubleBits(LOperand* value) {
2415ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    inputs_[0] = value;
2416ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  }
2417ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2418ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LOperand* value() { return inputs_[0]; }
2419ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2420ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits")
2421ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(DoubleBits)
2422ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org};
2423ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2424ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2425ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgclass LConstructDouble V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2426ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org public:
2427ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LConstructDouble(LOperand* hi, LOperand* lo) {
2428ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    inputs_[0] = hi;
2429ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org    inputs_[1] = lo;
2430ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  }
2431ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2432ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LOperand* hi() { return inputs_[0]; }
2433ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LOperand* lo() { return inputs_[1]; }
2434ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2435ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double")
2436ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org};
2437ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
2438ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org
243932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 2> {
24407c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org public:
2441fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LAllocate(LOperand* context,
2442fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org            LOperand* size,
2443fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org            LOperand* temp1,
2444fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org            LOperand* temp2) {
2445fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
24467c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org    inputs_[1] = size;
24477c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org    temps_[0] = temp1;
24487c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org    temps_[1] = temp2;
24497c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  }
24507c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
2451fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
24527c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LOperand* size() { return inputs_[1]; }
24537c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LOperand* temp1() { return temps_[0]; }
24547c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  LOperand* temp2() { return temps_[1]; }
24557c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
24567c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate")
24577c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  DECLARE_HYDROGEN_ACCESSOR(Allocate)
24587c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org};
24597c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
24607c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
2461fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2463fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LRegExpLiteral(LOperand* context) {
2464fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2465fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
2466fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2467fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2468fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2469c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal")
2470c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral)
2471c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2472c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2473c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2474fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2475c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2476fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LFunctionLiteral(LOperand* context) {
2477fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2478fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
2479fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2480fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2481fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2482c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
2483c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
2484c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2485c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2486c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
248732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2488c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2489c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LToFastProperties(LOperand* value) {
2490c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
24917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
24927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2493c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2494c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2495c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties")
2496c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(ToFastProperties)
2497c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2498c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2499c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2500fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2501c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2502fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LTypeof(LOperand* context, LOperand* value) {
2503fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2504fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = value;
25057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
25067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2507fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2508fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* value() { return inputs_[1]; }
2509c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2510c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
2511c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2512c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2513c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
251432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> {
2515c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2516c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LTypeofIsAndBranch(LOperand* value) {
2517c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    inputs_[0] = value;
25187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
25197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2520c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* value() { return inputs_[0]; }
2521c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2522c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
2523c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch)
2524c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2525c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Handle<String> type_literal() { return hydrogen()->type_literal(); }
2526c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
252732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2528c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2529c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2530c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
253132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LIsConstructCallAndBranch V8_FINAL : public LControlInstruction<0, 1> {
2532c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2533c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  explicit LIsConstructCallAndBranch(LOperand* temp) {
2534c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    temps_[0] = temp;
25357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  }
25367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2537c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  LOperand* temp() { return temps_[0]; }
2538c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
2539c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch,
2540c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                               "is-construct-call-and-branch")
2541c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2542c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
25437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
254432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LOsrEntry V8_FINAL : public LTemplateInstruction<0, 0, 0> {
2545c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
25461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  LOsrEntry() {}
2547c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
254832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
254932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    return false;
255032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org  }
2551c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
2552c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2553c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2554c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2555fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2556c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
2557fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  explicit LStackCheck(LOperand* context) {
2558fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2559fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  }
2560fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2561fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2562fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org
2563c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check")
2564c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  DECLARE_HYDROGEN_ACCESSOR(StackCheck)
2565c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2566c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Label* done_label() { return &done_label_; }
2567c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2568c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
2569c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Label done_label_;
2570c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org};
2571c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2572c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2573fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgclass LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2574812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public:
2575fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LForInPrepareMap(LOperand* context, LOperand* object) {
2576fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[0] = context;
2577fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org    inputs_[1] = object;
2578812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  }
2579812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2580fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* context() { return inputs_[0]; }
2581fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org  LOperand* object() { return inputs_[1]; }
2582812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2583812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map")
2584812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org};
2585812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2586812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
258732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2588812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public:
258989e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org  explicit LForInCacheArray(LOperand* map) {
2590812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    inputs_[0] = map;
2591812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  }
2592812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2593812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LOperand* map() { return inputs_[0]; }
2594812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2595812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array")
2596812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2597812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  int idx() {
2598812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    return HForInCacheArray::cast(this->hydrogen_value())->idx();
2599812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  }
2600812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org};
2601812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2602812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
260332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LCheckMapValue V8_FINAL : public LTemplateInstruction<0, 2, 0> {
2604812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public:
2605812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LCheckMapValue(LOperand* value, LOperand* map) {
2606812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    inputs_[0] = value;
2607812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    inputs_[1] = map;
2608812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  }
2609812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2610812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LOperand* value() { return inputs_[0]; }
2611812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LOperand* map() { return inputs_[1]; }
2612812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2613812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value")
2614812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org};
2615812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2616812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
261732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LLoadFieldByIndex V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2618812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org public:
2619812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LLoadFieldByIndex(LOperand* object, LOperand* index) {
2620812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    inputs_[0] = object;
2621812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org    inputs_[1] = index;
2622812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  }
2623812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2624812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LOperand* object() { return inputs_[0]; }
2625812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  LOperand* index() { return inputs_[1]; }
2626812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2627812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org  DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index")
2628812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org};
2629812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
2630812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
26311e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LStoreFrameContext: public LTemplateInstruction<0, 1, 0> {
26321e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public:
26331e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  explicit LStoreFrameContext(LOperand* context) {
26341e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org    inputs_[0] = context;
26351e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  }
26361e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26371e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  LOperand* context() { return inputs_[0]; }
26381e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26391e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext, "store-frame-context")
26401e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org};
26411e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26421e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26431e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgclass LAllocateBlockContext: public LTemplateInstruction<1, 2, 0> {
26441e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org public:
26451e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  LAllocateBlockContext(LOperand* context, LOperand* function) {
26461e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org    inputs_[0] = context;
26471e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org    inputs_[1] = function;
26481e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  }
26491e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26501e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  LOperand* context() { return inputs_[0]; }
26511e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  LOperand* function() { return inputs_[1]; }
26521e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26531e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); }
26541e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26551e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context")
26561e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext)
26571e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org};
26581e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
26591e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org
2660c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgclass LChunkBuilder;
266132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.orgclass LPlatformChunk V8_FINAL : public LChunk {
2662c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org public:
266328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  LPlatformChunk(CompilationInfo* info, HGraph* graph)
266428583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org      : LChunk(info, graph) { }
2665c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2666c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org  int GetNextSpillIndex(RegisterKind kind);
2667c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org  LOperand* GetNextSpillSlot(RegisterKind kind);
26687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org};
26697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
26707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
26719cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.orgclass LChunkBuilder V8_FINAL : public LChunkBuilderBase {
26727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org public:
2673c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator)
26749cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org      : LChunkBuilderBase(graph->zone()),
26759cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org        chunk_(NULL),
2676c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        info_(info),
2677c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        graph_(graph),
2678c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        status_(UNUSED),
2679c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        current_instruction_(NULL),
2680c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        current_block_(NULL),
2681c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        next_block_(NULL),
2682486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org        allocator_(allocator) { }
26837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2684a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org  Isolate* isolate() const { return graph_->isolate(); }
2685a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org
26867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  // Build the sequence for the graph.
268728583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  LPlatformChunk* Build();
26887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
26897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  // Declare methods that deal with the individual node types.
2690c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
26917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO)
26927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#undef DECLARE_DO
26937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
269459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend);
269559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
2696b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org  static bool HasMagicNumberForDivisor(int32_t divisor);
2697b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org
2698e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathFloor(HUnaryMathOperation* instr);
2699e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathRound(HUnaryMathOperation* instr);
2700e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathAbs(HUnaryMathOperation* instr);
2701e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathLog(HUnaryMathOperation* instr);
2702e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathExp(HUnaryMathOperation* instr);
2703e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathSqrt(HUnaryMathOperation* instr);
2704e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  LInstruction* DoMathPowHalf(HUnaryMathOperation* instr);
2705f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  LInstruction* DoMathClz32(HUnaryMathOperation* instr);
270600a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LInstruction* DoDivByPowerOf2I(HDiv* instr);
270700a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LInstruction* DoDivByConstI(HDiv* instr);
27084edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LInstruction* DoDivI(HDiv* instr);
2709ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LInstruction* DoModByPowerOf2I(HMod* instr);
271000a4ad70bb8883074ba7630edd7140762bcb86a0machenbach@chromium.org  LInstruction* DoModByConstI(HMod* instr);
2711ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LInstruction* DoModI(HMod* instr);
2712bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr);
2713ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr);
27144edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org  LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr);
2715e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
2716c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org private:
2717c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  enum Status {
2718c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    UNUSED,
2719c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    BUILDING,
2720c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    DONE,
2721c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org    ABORTED
2722c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  };
2723c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
272428583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  LPlatformChunk* chunk() const { return chunk_; }
2725c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  CompilationInfo* info() const { return info_; }
2726c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HGraph* graph() const { return graph_; }
2727c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2728c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_unused() const { return status_ == UNUSED; }
2729c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_building() const { return status_ == BUILDING; }
2730c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_done() const { return status_ == DONE; }
2731c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  bool is_aborted() const { return status_ == ABORTED; }
2732c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2733594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  void Abort(BailoutReason reason);
2734c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2735c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Methods for getting operands for Use / Define / Temp.
2736c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LUnallocated* ToUnallocated(Register reg);
2737c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LUnallocated* ToUnallocated(DoubleRegister reg);
2738c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2739c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Methods for setting up define-use relationships.
2740c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand);
2741c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2742c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value,
2743c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                                           DoubleRegister fixed_register);
2744c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2745c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // A value that is guaranteed to be allocated to a register.
2746c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Operand created by UseRegister is guaranteed to be live until the end of
2747c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // instruction. This means that register allocator will not reuse it's
2748c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // register for any other operand inside instruction.
2749c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Operand created by UseRegisterAtStart is guaranteed to be live only at
2750c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // instruction start. Register allocator is free to assign the same register
2751c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // to some other operand used inside instruction (i.e. temporary or
2752c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // output).
2753c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseRegister(HValue* value);
2754c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value);
2755c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2756c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // An input operand in a register that may be trashed.
2757c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseTempRegister(HValue* value);
2758c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2759c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // An input operand in a register or stack slot.
2760c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* Use(HValue* value);
2761c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseAtStart(HValue* value);
2762c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2763c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // An input operand in a register, stack slot or a constant operand.
2764c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseOrConstant(HValue* value);
2765c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value);
2766c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2767c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // An input operand in a register or a constant operand.
2768c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value);
2769c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2770c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2771f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org  // An input operand in a constant operand.
2772f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org  MUST_USE_RESULT LOperand* UseConstant(HValue* value);
2773f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org
2774c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // An input operand in register, stack slot or a constant operand.
2775c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Will not be moved to a register even if one is freely available.
27769cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org  virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) V8_OVERRIDE;
2777c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2778c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Temporary operand that must be in a register.
2779c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LUnallocated* TempRegister();
2780d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org  MUST_USE_RESULT LUnallocated* TempDoubleRegister();
2781c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* FixedTemp(Register reg);
2782c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg);
2783c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2784c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Methods for setting up define-use relationships.
2785c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Return the same instruction that they are passed.
278626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* Define(LTemplateResultInstruction<1>* instr,
278726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org                       LUnallocated* result);
278826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr);
278926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr,
279026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org                                int index);
279126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr);
279226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr,
279326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org                            Register reg);
279426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org  LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr,
279526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org                                  DoubleRegister reg);
2796c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* AssignEnvironment(LInstruction* instr);
2797c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* AssignPointerMap(LInstruction* instr);
2798c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2799c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2800c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2801c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // By default we assume that instruction sequences generated for calls
2802c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // cannot deoptimize eagerly and we do not attach environment to this
2803c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // instruction.
2804c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* MarkAsCall(
2805c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      LInstruction* instr,
2806c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      HInstruction* hinstr,
2807c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2808c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2809c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void VisitInstruction(HInstruction* current);
2810011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org  void AddInstruction(LInstruction* instr, HInstruction* current);
2811c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
2812c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2813c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* DoBit(Token::Value op, HBitwiseBinaryOperation* instr);
2814c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr);
2815c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* DoArithmeticD(Token::Value op,
2816c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                              HArithmeticBinaryOperation* instr);
2817c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LInstruction* DoArithmeticT(Token::Value op,
2818528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org                              HBinaryOperation* instr);
2819c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
282028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  LPlatformChunk* chunk_;
2821c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  CompilationInfo* info_;
2822c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HGraph* const graph_;
2823c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  Status status_;
2824c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HInstruction* current_instruction_;
2825c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HBasicBlock* current_block_;
2826c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  HBasicBlock* next_block_;
2827c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  LAllocator* allocator_;
2828c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org
28297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org  DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
28307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org};
28317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
2832c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_HYDROGEN_ACCESSOR
2833c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org#undef DECLARE_CONCRETE_INSTRUCTION
28347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
28357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} }  // namespace v8::internal
28367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org
28377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#endif  // V8_MIPS_LITHIUM_MIPS_H_
2838