28 #ifndef V8_MIPS_LITHIUM_MIPS_H_
29 #define V8_MIPS_LITHIUM_MIPS_H_
43 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
44 V(AccessArgumentsAt) \
48 V(ArgumentsElements) \
56 V(CallWithDescriptor) \
62 V(CheckInstanceType) \
71 V(ClassOfTestAndBranch) \
72 V(CompareMinusZeroAndBranch) \
73 V(CompareNumericAndBranch) \
74 V(CmpObjectEqAndBranch) \
98 V(FlooringDivByConstI) \
99 V(FlooringDivByPowerOf2I) \
103 V(GetCachedArrayIndex) \
105 V(HasCachedArrayIndexAndBranch) \
106 V(HasInstanceTypeAndBranch) \
107 V(InnerAllocatedObject) \
109 V(InstanceOfKnownGlobal) \
111 V(Integer32ToDouble) \
113 V(IsConstructCallAndBranch) \
114 V(IsObjectAndBranch) \
115 V(IsStringAndBranch) \
117 V(IsUndetectableAndBranch) \
122 V(LoadFieldByIndex) \
123 V(LoadFunctionPrototype) \
125 V(LoadGlobalGeneric) \
127 V(LoadKeyedGeneric) \
129 V(LoadNamedGeneric) \
155 V(SeqStringGetChar) \
156 V(SeqStringSetChar) \
162 V(StoreContextSlot) \
165 V(StoreKeyedGeneric) \
167 V(StoreNamedGeneric) \
169 V(StringCharCodeAt) \
170 V(StringCharFromCode) \
171 V(StringCompareAndBranch) \
175 V(ToFastProperties) \
176 V(TransitionElementsKind) \
177 V(TrapAllocationMemento) \
179 V(TypeofIsAndBranch) \
184 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
185 virtual Opcode opcode() const V8_FINAL V8_OVERRIDE { \
186 return LInstruction::k##type; \
188 virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE; \
189 virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE { \
192 static L##type* cast(LInstruction* instr) { \
193 ASSERT(instr->Is##type()); \
194 return reinterpret_cast<L##type*>(instr); \
198 #define DECLARE_HYDROGEN_ACCESSOR(type) \
199 H##type* hydrogen() const { \
200 return H##type::cast(hydrogen_value()); \
204 class LInstruction :
public ZoneObject {
207 : environment_(
NULL),
208 hydrogen_value_(
NULL),
209 bit_field_(IsCallBits::encode(
false)) {
215 virtual const char*
Mnemonic()
const = 0;
222 #define DECLARE_OPCODE(type) k##type,
225 #undef DECLARE_OPCODE
231 #define DECLARE_PREDICATE(type) \
232 bool Is##type() const { return opcode() == k##type; }
234 #undef DECLARE_PREDICATE
238 virtual bool IsGap()
const {
return false; }
255 void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_,
true); }
256 bool IsCall()
const {
return IsCallBits::decode(bit_field_); }
281 virtual int InputCount() = 0;
282 virtual LOperand* InputAt(
int i) = 0;
285 virtual int TempCount() = 0;
286 virtual LOperand* TempAt(
int i) = 0;
288 class IsCallBits:
public BitField<bool, 0, 1> {};
290 LEnvironment* environment_;
291 SetOncePointer<LPointerMap> pointer_map_;
292 HValue* hydrogen_value_;
299 class LTemplateResultInstruction :
public LInstruction {
317 template<
int R,
int I,
int T>
318 class LTemplateInstruction :
public LTemplateResultInstruction<R> {
320 EmbeddedContainer<LOperand*, I>
inputs_;
321 EmbeddedContainer<LOperand*, T>
temps_;
333 class LGap :
public LTemplateInstruction<0, 0, 0> {
348 return reinterpret_cast<LGap*
>(instr);
353 HBasicBlock*
block()
const {
return block_; }
365 if (parallel_moves_[pos] ==
NULL) {
366 parallel_moves_[pos] =
new(zone) LParallelMove(zone);
368 return parallel_moves_[pos];
372 return parallel_moves_[pos];
381 class LInstructionGap
V8_FINAL :
public LGap {
386 return !IsRedundant();
393 class LGoto
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
395 explicit LGoto(HBasicBlock* block) : block_(block) { }
400 virtual
bool IsControl() const V8_OVERRIDE {
return true; }
402 int block_id()
const {
return block_->block_id(); }
409 class LLazyBailout
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
415 void set_gap_instructions_size(
int gap_instructions_size) {
416 gap_instructions_size_ = gap_instructions_size;
421 int gap_instructions_size_;
425 class LDummy
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
432 class LDummyUse
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
441 class LDeoptimize
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
448 class LLabel
V8_FINAL : public LGap {
451 : LGap(block), replacement_(
NULL) { }
460 int block_id()
const {
return block()->block_id(); }
470 LLabel* replacement_;
474 class LParameter
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
483 class LCallStub
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
486 inputs_[0] = context;
505 template<
int I,
int T>
506 class LControlInstruction :
public LTemplateInstruction<0, I, T> {
513 HBasicBlock*
SuccessorAt(
int i) {
return hydrogen()->SuccessorAt(i); }
523 if (true_label_ ==
NULL) {
529 if (false_label_ ==
NULL) {
549 class LWrapReceiver
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
552 inputs_[0] = receiver;
553 inputs_[1] =
function;
564 class LApplyArguments
V8_FINAL :
public LTemplateInstruction<1, 4, 0> {
570 inputs_[0] =
function;
571 inputs_[1] = receiver;
573 inputs_[3] = elements;
585 class LAccessArgumentsAt
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
588 inputs_[0] = arguments;
603 class LArgumentsLength
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
606 inputs_[0] = elements;
615 class LArgumentsElements
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
622 class LModByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
625 inputs_[0] = dividend;
640 class LModByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
643 inputs_[0] = dividend;
658 class LModI
V8_FINAL : public LTemplateInstruction<1, 2, 3> {
674 class LDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
677 inputs_[0] = dividend;
692 class LDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
695 inputs_[0] = dividend;
710 class LDivI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
725 class LFlooringDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
728 inputs_[0] = dividend;
736 "flooring-div-by-power-of-2-i")
744 class LFlooringDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 2> {
747 inputs_[0] = dividend;
764 class LMulI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
780 class LMultiplyAddD
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
785 inputs_[1] = multiplier;
786 inputs_[2] = multiplicand;
797 class LDebugBreak
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
803 class LCompareNumericAndBranch
V8_FINAL :
public LControlInstruction<2, 0> {
814 "compare-numeric-and-branch")
817 Token::
Value op()
const {
return hydrogen()->token(); }
819 return hydrogen()->representation().IsDouble();
826 class LMathFloor
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
841 class LMathRound
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
856 class LMathAbs
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
859 inputs_[1] = context;
871 class LMathLog
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
883 class LMathClz32
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
895 class LMathExp
V8_FINAL :
public LTemplateInstruction<1, 1, 3> {
904 temps_[2] = double_temp;
905 ExternalReference::InitializeMathExpData();
917 class LMathSqrt
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
929 class LMathPowHalf
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
943 class LCmpObjectEqAndBranch
V8_FINAL :
public LControlInstruction<2, 0> {
971 class LCompareMinusZeroAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
982 "cmp-minus-zero-and-branch")
987 class LIsObjectAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1004 class LIsStringAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1021 class LIsSmiAndBranch
V8_FINAL : public LControlInstruction<1, 0> {
1032 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1036 class LIsUndetectableAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1047 "is-undetectable-and-branch")
1050 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1054 class LStringCompareAndBranch
V8_FINAL : public LControlInstruction<3, 0> {
1057 inputs_[0] = context;
1067 "string-compare-and-branch")
1070 Token::
Value op()
const {
return hydrogen()->token(); }
1072 virtual void PrintDataTo(StringStream* stream)
V8_OVERRIDE;
1076 class LHasInstanceTypeAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
1085 "has-instance-type-and-branch")
1088 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1092 class LGetCachedArrayIndex
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1105 class LHasCachedArrayIndexAndBranch
V8_FINAL
1106 : public LControlInstruction<1, 0> {
1115 "has-cached-array-index-and-branch")
1118 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1122 class LClassOfTestAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1133 "class-of-test-and-branch")
1136 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1140 class LCmpT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1143 inputs_[0] = context;
1159 class LInstanceOf
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1162 inputs_[0] = context;
1175 class LInstanceOfKnownGlobal
V8_FINAL :
public LTemplateInstruction<1, 2, 1> {
1178 inputs_[0] = context;
1188 "instance-of-known-global")
1193 return lazy_deopt_env_;
1196 LEnvironment* env) V8_OVERRIDE {
1197 lazy_deopt_env_ = env;
1201 LEnvironment* lazy_deopt_env_;
1205 class LBoundsCheck
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
1209 inputs_[1] = length;
1220 class LBitI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1237 class LShiftI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1240 : op_(op), can_deopt_(can_deopt) {
1258 class LSubI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1273 class LConstantI
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1278 int32_t value()
const {
return hydrogen()->Integer32Value(); }
1282 class LConstantS
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1291 class LConstantD
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1296 double value()
const {
return hydrogen()->DoubleValue(); }
1300 class LConstantE
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1305 ExternalReference value()
const {
1306 return hydrogen()->ExternalReferenceValue();
1311 class LConstantT
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1317 return hydrogen()->handle(isolate);
1322 class LBranch
V8_FINAL :
public LControlInstruction<1, 0> {
1333 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1337 class LCmpMapAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1354 class LMapEnumLength
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1366 class LDateField
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
1385 class LSeqStringGetChar
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1388 inputs_[0] = string;
1400 class LSeqStringSetChar
V8_FINAL : public LTemplateInstruction<1, 4, 0> {
1406 inputs_[0] = context;
1407 inputs_[1] = string;
1421 class LAddI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1436 class LMathMinMax
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1451 class LPower
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1466 class LArithmeticD
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1479 return LInstruction::kArithmeticD;
1482 virtual const char* Mnemonic() const V8_OVERRIDE;
1489 class LArithmeticT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1496 inputs_[0] = context;
1508 virtual const char* Mnemonic() const V8_OVERRIDE;
1515 class LReturn
V8_FINAL : public LTemplateInstruction<0, 3, 0> {
1519 inputs_[1] = context;
1520 inputs_[2] = parameter_count;
1526 return parameter_count()->IsConstantOperand();
1529 ASSERT(has_constant_parameter_count());
1530 return LConstantOperand::cast(parameter_count());
1538 class LLoadNamedField
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1541 inputs_[0] = object;
1551 class LLoadNamedGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1554 inputs_[0] = context;
1555 inputs_[1] = object;
1568 class LLoadFunctionPrototype
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1571 inputs_[0] =
function;
1581 class LLoadRoot
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1586 Heap::RootListIndex index()
const {
return hydrogen()->index(); }
1590 class LLoadKeyed
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1593 inputs_[0] = elements;
1600 return hydrogen()->elements_kind();
1603 return hydrogen()->is_external();
1606 return hydrogen()->is_fixed_typed_array();
1609 return is_external() || is_fixed_typed_array();
1616 uint32_t additional_index()
const {
return hydrogen()->index_offset(); }
1620 class LLoadKeyedGeneric
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1623 inputs_[0] = context;
1624 inputs_[1] = object;
1636 class LLoadGlobalCell
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1643 class LLoadGlobalGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1646 inputs_[0] = context;
1647 inputs_[1] = global_object;
1661 class LStoreGlobalCell
V8_FINAL :
public LTemplateInstruction<0, 1, 1> {
1676 class LLoadContextSlot
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1679 inputs_[0] = context;
1687 int slot_index() {
return hydrogen()->slot_index(); }
1693 class LStoreContextSlot
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
1696 inputs_[0] = context;
1706 int slot_index() {
return hydrogen()->slot_index(); }
1712 class LPushArgument
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
1724 class LDrop
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
1726 explicit LDrop(
int count) : count_(count) { }
1737 class LStoreCodeEntry
V8_FINAL: public LTemplateInstruction<0, 1, 1> {
1740 inputs_[0] =
function;
1741 temps_[0] = code_object;
1754 class LInnerAllocatedObject
V8_FINAL: public LTemplateInstruction<1, 2, 0> {
1757 inputs_[0] = base_object;
1758 inputs_[1] = offset;
1770 class LThisFunction
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1777 class LContext
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1784 class LDeclareGlobals
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1787 inputs_[0] = context;
1797 class LCallJSFunction
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1800 inputs_[0] =
function;
1808 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1810 int arity()
const {
return hydrogen()->argument_count() - 1; }
1814 class LCallWithDescriptor
V8_FINAL :
public LTemplateResultInstruction<1> {
1819 : descriptor_(descriptor),
1820 inputs_(descriptor->environment_length() + 1, zone) {
1822 inputs_.AddAll(operands, zone);
1833 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1835 int arity()
const {
return hydrogen()->argument_count() - 1; }
1837 const CallInterfaceDescriptor* descriptor_;
1838 ZoneList<LOperand*> inputs_;
1841 virtual int InputCount()
V8_FINAL V8_OVERRIDE {
return inputs_.length(); }
1842 virtual LOperand* InputAt(
int i)
V8_FINAL V8_OVERRIDE {
return inputs_[i]; }
1844 virtual int TempCount()
V8_FINAL V8_OVERRIDE {
return 0; }
1845 virtual LOperand* TempAt(
int i)
V8_FINAL V8_OVERRIDE {
return NULL; }
1849 class LInvokeFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1852 inputs_[0] = context;
1853 inputs_[1] =
function;
1862 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1864 int arity()
const {
return hydrogen()->argument_count() - 1; }
1868 class LCallFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1871 inputs_[0] = context;
1872 inputs_[1] =
function;
1881 int arity()
const {
return hydrogen()->argument_count() - 1; }
1885 class LCallNew
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1888 inputs_[0] = context;
1889 inputs_[1] = constructor;
1898 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1900 int arity()
const {
return hydrogen()->argument_count() - 1; }
1904 class LCallNewArray
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1907 inputs_[0] = context;
1908 inputs_[1] = constructor;
1917 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1919 int arity()
const {
return hydrogen()->argument_count() - 1; }
1923 class LCallRuntime
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1926 inputs_[0] = context;
1934 virtual
bool ClobbersDoubleRegisters() const V8_OVERRIDE {
1939 int arity()
const {
return hydrogen()->argument_count(); }
1944 class LInteger32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1956 class LUint32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1968 class LNumberTagI
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
1984 class LNumberTagU
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2000 class LNumberTagD
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2017 class LDoubleToSmi
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2028 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2033 class LDoubleToI
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2044 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2049 class LTaggedToI
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2066 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2070 class LSmiTag
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2083 class LNumberUntagD
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2096 class LSmiUntag
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2099 : needs_check_(needs_check) {
2113 class LStoreNamedField
V8_FINAL : public LTemplateInstruction<0, 2, 1> {
2116 inputs_[0] = object;
2128 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2130 Handle<
Map> transition()
const {
return hydrogen()->transition_map(); }
2132 return hydrogen()->field_representation();
2137 class LStoreNamedGeneric
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2140 inputs_[0] = context;
2141 inputs_[1] = object;
2152 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2159 class LStoreKeyed
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2162 inputs_[0] = object;
2169 return hydrogen()->is_fixed_typed_array();
2172 return is_external() || is_fixed_typed_array();
2178 return hydrogen()->elements_kind();
2184 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2185 bool NeedsCanonicalization() {
return hydrogen()->NeedsCanonicalization(); }
2190 class LStoreKeyedGeneric
V8_FINAL :
public LTemplateInstruction<0, 4, 0> {
2196 inputs_[0] = context;
2210 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2216 class LTransitionElementsKind
V8_FINAL :
public LTemplateInstruction<0, 2, 1> {
2221 inputs_[0] = object;
2222 inputs_[1] = context;
2223 temps_[0] = new_map_temp;
2231 "transition-elements-kind")
2234 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2236 Handle<
Map> original_map() {
return hydrogen()->original_map().handle(); }
2238 return hydrogen()->transitioned_map().handle();
2245 class LTrapAllocationMemento
V8_FINAL :
public LTemplateInstruction<0, 1, 1> {
2249 inputs_[0] = object;
2257 "trap-allocation-memento")
2261 class LStringAdd
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
2264 inputs_[0] = context;
2279 class LStringCharCodeAt
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2282 inputs_[0] = context;
2283 inputs_[1] = string;
2296 class LStringCharFromCode
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2299 inputs_[0] = context;
2300 inputs_[1] = char_code;
2311 class LCheckValue
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2324 class LCheckInstanceType
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2337 class LCheckMaps
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2350 class LCheckSmi
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2362 class LCheckNonSmi
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
2375 class LClampDToUint8
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2378 inputs_[0] = unclamped;
2389 class LClampIToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2392 inputs_[0] = unclamped;
2401 class LClampTToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2404 inputs_[0] = unclamped;
2415 class LDoubleBits
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2428 class LConstructDouble
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2442 class LAllocate
V8_FINAL :
public LTemplateInstruction<1, 2, 2> {
2448 inputs_[0] = context;
2464 class LRegExpLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2467 inputs_[0] = context;
2477 class LFunctionLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2480 inputs_[0] = context;
2490 class LToFastProperties
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2503 class LTypeof
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2506 inputs_[0] = context;
2517 class LTypeofIsAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
2534 class LIsConstructCallAndBranch
V8_FINAL :
public LControlInstruction<0, 1> {
2543 "is-construct-call-and-branch")
2547 class LOsrEntry
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
2558 class LStackCheck
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
2561 inputs_[0] = context;
2569 Label* done_label() {
return &done_label_; }
2576 class LForInPrepareMap
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2579 inputs_[0] = context;
2580 inputs_[1] = object;
2590 class LForInCacheArray
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2601 return HForInCacheArray::cast(this->hydrogen_value())->idx();
2606 class LCheckMapValue
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
2620 class LLoadFieldByIndex
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2623 inputs_[0] = object;
2634 class LChunkBuilder;
2635 class LPlatformChunk
V8_FINAL :
public LChunk {
2638 :
LChunk(info, graph) { }
2645 class LChunkBuilder
V8_FINAL :
public LChunkBuilderBase {
2648 : LChunkBuilderBase(graph->zone()),
2653 current_instruction_(
NULL),
2654 current_block_(
NULL),
2656 allocator_(allocator) { }
2659 LPlatformChunk* Build();
2664 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2668 LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend);
2670 static bool HasMagicNumberForDivisor(
int32_t divisor);
2672 LInstruction* DoMathFloor(HUnaryMathOperation* instr);
2673 LInstruction* DoMathRound(HUnaryMathOperation* instr);
2674 LInstruction* DoMathAbs(HUnaryMathOperation* instr);
2675 LInstruction* DoMathLog(HUnaryMathOperation* instr);
2676 LInstruction* DoMathExp(HUnaryMathOperation* instr);
2677 LInstruction* DoMathSqrt(HUnaryMathOperation* instr);
2678 LInstruction* DoMathPowHalf(HUnaryMathOperation* instr);
2679 LInstruction* DoMathClz32(HUnaryMathOperation* instr);
2680 LInstruction* DoDivByPowerOf2I(HDiv* instr);
2681 LInstruction* DoDivByConstI(HDiv* instr);
2682 LInstruction* DoDivI(HBinaryOperation* instr);
2683 LInstruction* DoModByPowerOf2I(HMod* instr);
2684 LInstruction* DoModByConstI(HMod* instr);
2685 LInstruction* DoModI(HMod* instr);
2686 LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr);
2687 LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr);
2697 LPlatformChunk* chunk()
const {
return chunk_; }
2698 CompilationInfo*
info()
const {
return info_; }
2699 HGraph* graph()
const {
return graph_; }
2701 bool is_unused()
const {
return status_ == UNUSED; }
2702 bool is_building()
const {
return status_ == BUILDING; }
2703 bool is_done()
const {
return status_ ==
DONE; }
2704 bool is_aborted()
const {
return status_ == ABORTED; }
2709 LUnallocated* ToUnallocated(Register reg);
2714 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2742 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2758 LInstruction* Define(LTemplateResultInstruction<1>* instr,
2759 LUnallocated* result);
2760 LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr);
2761 LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr,
2763 LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr);
2764 LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr,
2766 LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr,
2768 LInstruction* AssignEnvironment(LInstruction* instr);
2769 LInstruction* AssignPointerMap(LInstruction* instr);
2771 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2776 LInstruction* MarkAsCall(
2777 LInstruction* instr,
2778 HInstruction* hinstr,
2779 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2781 void VisitInstruction(HInstruction* current);
2783 void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2784 LInstruction* DoBit(
Token::Value op, HBitwiseBinaryOperation* instr);
2785 LInstruction* DoShift(
Token::Value op, HBitwiseBinaryOperation* instr);
2787 HArithmeticBinaryOperation* instr);
2789 HBinaryOperation* instr);
2791 LPlatformChunk* chunk_;
2792 CompilationInfo* info_;
2793 HGraph*
const graph_;
2795 HInstruction* current_instruction_;
2796 HBasicBlock* current_block_;
2797 HBasicBlock* next_block_;
2798 LAllocator* allocator_;
2803 #undef DECLARE_HYDROGEN_ACCESSOR
2804 #undef DECLARE_CONCRETE_INSTRUCTION
2808 #endif // V8_MIPS_LITHIUM_MIPS_H_
LCallFunction(LOperand *context, LOperand *function)
LSeqStringSetChar(LOperand *context, LOperand *string, LOperand *index, LOperand *value)
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
LLoadFieldByIndex(LOperand *object, LOperand *index)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env) V8_OVERRIDE
virtual Opcode opcode() const V8_OVERRIDE
LCmpObjectEqAndBranch(LOperand *left, LOperand *right)
friend class TempIterator
static LGap * cast(LInstruction *instr)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env)
LMathFloor(LOperand *value, LOperand *temp)
LClassOfTestAndBranch(LOperand *value, LOperand *temp)
LPower(LOperand *left, LOperand *right)
LModI(LOperand *left, LOperand *right)
void set_pointer_map(LPointerMap *p)
bool IsMarkedAsCall() const
virtual bool HasInterestingComment(LCodeGen *gen) const V8_OVERRIDE
LCheckInstanceType(LOperand *value)
LUint32ToDouble(LOperand *value)
LMultiplyAddD(LOperand *addend, LOperand *multiplier, LOperand *multiplicand)
LMathPowHalf(LOperand *value, LOperand *temp)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf map
void set_environment(LEnvironment *env)
virtual void PrintDataTo(StringStream *stream) V8_OVERRIDE
virtual void PrintOutputOperandTo(StringStream *stream)
EmbeddedContainer< LOperand *, T > temps_
LMathClz32(LOperand *value)
LLoadKeyedGeneric(LOperand *context, LOperand *object, LOperand *key)
LForInCacheArray(LOperand *map)
static Smi * FromInt(int value)
LInstanceOf(LOperand *context, LOperand *left, LOperand *right)
#define DECLARE_OPCODE(type)
LParallelMove * GetOrCreateParallelMove(InnerPosition pos, Zone *zone)
bool is_loop_header() const
LStringAdd(LOperand *context, LOperand *left, LOperand *right)
LDummyUse(LOperand *value)
int environment_length() const
LLabel(HBasicBlock *block)
LStoreNamedGeneric(LOperand *context, LOperand *object, LOperand *value)
LAllocate(LOperand *context, LOperand *size, LOperand *temp1, LOperand *temp2)
LBoundsCheck(LOperand *index, LOperand *length)
LIsConstructCallAndBranch(LOperand *temp)
LEnvironment * environment() const
LArithmeticD(Token::Value op, LOperand *left, LOperand *right)
#define ASSERT(condition)
LArithmeticT(Token::Value op, LOperand *context, LOperand *left, LOperand *right)
bool is_typed_elements() const
LConstantOperand * constant_parameter_count()
virtual bool IsGap() const V8_FINAL V8_OVERRIDE
LStringCharCodeAt(LOperand *context, LOperand *string, LOperand *index)
LIsStringAndBranch(LOperand *value, LOperand *temp)
virtual const char * Mnemonic() const =0
LChunkBuilder(CompilationInfo *info, HGraph *graph, LAllocator *allocator)
LNumberTagU(LOperand *value, LOperand *temp1, LOperand *temp2)
LCallStub(LOperand *context)
LOperand * result() const
LCallRuntime(LOperand *context)
LAddI(LOperand *left, LOperand *right)
LTransitionElementsKind(LOperand *object, LOperand *context, LOperand *new_map_temp)
LTypeofIsAndBranch(LOperand *value)
EmbeddedContainer< LOperand *, R > results_
LCmpT(LOperand *context, LOperand *left, LOperand *right)
virtual void PrintDataTo(StringStream *stream)
LCheckMapValue(LOperand *value, LOperand *map)
LFlooringDivByPowerOf2I(LOperand *dividend, int32_t divisor)
LCheckMaps(LOperand *value)
LCallNewArray(LOperand *context, LOperand *constructor)
LOperand * parameter_count()
friend class InputIterator
virtual bool ClobbersDoubleRegisters() const
#define DECLARE_PREDICATE(type)
LCallJSFunction(LOperand *function)
Label * FalseLabel(LChunk *chunk)
LFlooringDivByConstI(LOperand *dividend, int32_t divisor, LOperand *temp)
Representation representation() const
LOperand * target() const
LOperand * multiplicand()
virtual LOperand * result() const =0
virtual bool HasInterestingComment(LCodeGen *gen) const
LStoreContextSlot(LOperand *context, LOperand *value)
LClampIToUint8(LOperand *unclamped)
LGetCachedArrayIndex(LOperand *value)
LBitI(LOperand *left, LOperand *right)
LGoto(HBasicBlock *block)
LAccessArgumentsAt(LOperand *arguments, LOperand *length, LOperand *index)
LDoubleToSmi(LOperand *value)
bool has_constant_parameter_count()
void set_hydrogen_value(HValue *value)
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
LLoadContextSlot(LOperand *context)
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)
LIsSmiAndBranch(LOperand *value)
LCmpHoleAndBranch(LOperand *object)
virtual bool HasResult() const =0
LDoubleToI(LOperand *value)
DwVfpRegister DoubleRegister
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object size
LOperand * base_object() const
virtual Opcode opcode() const =0
LTypeof(LOperand *context, LOperand *value)
LModByPowerOf2I(LOperand *dividend, int32_t divisor)
LCallNew(LOperand *context, LOperand *constructor)
LMathAbs(LOperand *context, LOperand *value)
LCheckValue(LOperand *value)
LPlatformChunk(CompilationInfo *info, HGraph *graph)
int TrueDestination(LChunk *chunk)
LNumberTagD(LOperand *value, LOperand *temp, LOperand *temp2)
LOperand * new_map_temp()
HBasicBlock * SuccessorAt(int i)
virtual bool IsControl() const V8_FINAL V8_OVERRIDE
LCmpMapAndBranch(LOperand *value, LOperand *temp)
LClampDToUint8(LOperand *unclamped, LOperand *temp)
int gap_instructions_size()
LDeclareGlobals(LOperand *context)
bool HasEnvironment() const
LArgumentsLength(LOperand *elements)
LTaggedToI(LOperand *value, LOperand *temp, LOperand *temp2)
LCompareNumericAndBranch(LOperand *left, LOperand *right)
ElementsKind elements_kind() const
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
bool HasReplacement() const
LMathSqrt(LOperand *value)
LIsUndetectableAndBranch(LOperand *value, LOperand *temp)
LToFastProperties(LOperand *value)
LCompareMinusZeroAndBranch(LOperand *value, LOperand *temp)
LModByConstI(LOperand *dividend, int32_t divisor)
LIsObjectAndBranch(LOperand *value, LOperand *temp)
DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch,"compare-numeric-and-branch") Token bool is_double() const
LMapEnumLength(LOperand *value)
HBasicBlock * block() const
LMathExp(LOperand *value, LOperand *double_temp, LOperand *temp1, LOperand *temp2)
LDateField(LOperand *date, LOperand *temp, Smi *index)
virtual void PrintTo(StringStream *stream)
LOperand * global_object()
LLoadKeyed(LOperand *elements, LOperand *key)
LDivByConstI(LOperand *dividend, int32_t divisor)
LStoreKeyedGeneric(LOperand *context, LOperand *obj, LOperand *key, LOperand *value)
#define T(name, string, precedence)
LReturn(LOperand *value, LOperand *context, LOperand *parameter_count)
STATIC_ASSERT(R==0||R==1)
LMathMinMax(LOperand *left, LOperand *right)
bool ClobbersTemps() const
virtual bool IsControl() const
LPointerMap * pointer_map() const
void set_replacement(LLabel *label)
LStoreCodeEntry(LOperand *function, LOperand *code_object)
bool is_osr_entry() const
EmbeddedContainer< LOperand *, I > inputs_
LApplyArguments(LOperand *function, LOperand *receiver, LOperand *length, LOperand *elements)
LOperand * offset() const
virtual bool IsGap() const
const CallInterfaceDescriptor * descriptor()
LMathLog(LOperand *value)
LSeqStringGetChar(LOperand *string, LOperand *index)
LLoadNamedField(LOperand *object)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function info
LSubI(LOperand *left, LOperand *right)
LHasInstanceTypeAndBranch(LOperand *value)
LCheckSmi(LOperand *value)
Label * TrueLabel(LChunk *chunk)
LNumberTagI(LOperand *value, LOperand *temp1, LOperand *temp2)
LShiftI(Token::Value op, LOperand *left, LOperand *right, bool can_deopt)
LCallWithDescriptor(const CallInterfaceDescriptor *descriptor, ZoneList< LOperand * > &operands, Zone *zone)
LNumberUntagD(LOperand *value)
virtual void CompileToNative(LCodeGen *generator)=0
#define DECLARE_HYDROGEN_ACCESSOR(type)
LLabel * replacement() const
LStoreGlobalCell(LOperand *value, LOperand *temp)
LDoubleBits(LOperand *value)
Handle< Map > transitioned_map()
LEnvironment * GetDeferredLazyDeoptimizationEnvironment()
virtual bool HasResult() const V8_FINAL V8_OVERRIDE
uint32_t additional_index() const
LLoadNamedGeneric(LOperand *context, LOperand *object)
LMathRound(LOperand *value, LOperand *temp)
LClampTToUint8(LOperand *unclamped, LOperand *temp)
LWrapReceiver(LOperand *receiver, LOperand *function)
LCheckNonSmi(LOperand *value)
LParallelMove * GetParallelMove(InnerPosition pos)
bool ClobbersRegisters() const
LStringCompareAndBranch(LOperand *context, LOperand *left, LOperand *right)
LForInPrepareMap(LOperand *context, LOperand *object)
Label * GetAssemblyLabel(int block_id) const
bool is_fixed_typed_array() const
void set_result(LOperand *operand)
bool HasPointerMap() const
LInstructionGap(HBasicBlock *block)
virtual Opcode opcode() const V8_FINAL
LPushArgument(LOperand *value)
LOperand * string() const
LStoreKeyed(LOperand *object, LOperand *key, LOperand *value)
LFunctionLiteral(LOperand *context)
LInvokeFunction(LOperand *context, LOperand *function)
LMulI(LOperand *left, LOperand *right)
LStackCheck(LOperand *context)
int LookupDestination(int block_id) const
LInstanceOfKnownGlobal(LOperand *context, LOperand *value, LOperand *temp)
LStringCharFromCode(LOperand *context, LOperand *char_code)
LInnerAllocatedObject(LOperand *base_object, LOperand *offset)
LDivI(LOperand *left, LOperand *right)
LStoreNamedField(LOperand *object, LOperand *value, LOperand *temp)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in name
static HValue * cast(HValue *value)
LLoadFunctionPrototype(LOperand *function)
LSmiUntag(LOperand *value, bool needs_check)
HValue * hydrogen_value() const
LDivByPowerOf2I(LOperand *dividend, int32_t divisor)
DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,"instance-of-known-global") Handle< JSFunction > function() const
SaveFPRegsMode save_doubles() const
int FalseDestination(LChunk *chunk)
LLoadGlobalGeneric(LOperand *context, LOperand *global_object)
LRegExpLiteral(LOperand *context)
LTrapAllocationMemento(LOperand *object, LOperand *temp)
LInteger32ToDouble(LOperand *value)
LHasCachedArrayIndexAndBranch(LOperand *value)
LConstructDouble(LOperand *hi, LOperand *lo)