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