28 #ifndef V8_ARM_LITHIUM_ARM_H_
29 #define V8_ARM_LITHIUM_ARM_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) \
156 V(SeqStringGetChar) \
157 V(SeqStringSetChar) \
163 V(StoreContextSlot) \
166 V(StoreKeyedGeneric) \
168 V(StoreNamedGeneric) \
170 V(StringCharCodeAt) \
171 V(StringCharFromCode) \
172 V(StringCompareAndBranch) \
177 V(ToFastProperties) \
178 V(TransitionElementsKind) \
179 V(TrapAllocationMemento) \
181 V(TypeofIsAndBranch) \
187 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
188 virtual Opcode opcode() const V8_FINAL V8_OVERRIDE { \
189 return LInstruction::k##type; \
191 virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE; \
192 virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE { \
195 static L##type* cast(LInstruction* instr) { \
196 ASSERT(instr->Is##type()); \
197 return reinterpret_cast<L##type*>(instr); \
201 #define DECLARE_HYDROGEN_ACCESSOR(type) \
202 H##type* hydrogen() const { \
203 return H##type::cast(hydrogen_value()); \
210 : environment_(
NULL),
211 hydrogen_value_(
NULL),
212 bit_field_(IsCallBits::encode(
false)) {
218 virtual const char*
Mnemonic()
const = 0;
225 #define DECLARE_OPCODE(type) k##type,
228 #undef DECLARE_OPCODE
234 #define DECLARE_PREDICATE(type) \
235 bool Is##type() const { return opcode() == k##type; }
237 #undef DECLARE_PREDICATE
241 virtual bool IsGap()
const {
return false; }
258 void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_,
true); }
259 bool IsCall()
const {
return IsCallBits::decode(bit_field_); }
284 virtual int InputCount() = 0;
285 virtual LOperand* InputAt(
int i) = 0;
288 virtual int TempCount() = 0;
289 virtual LOperand* TempAt(
int i) = 0;
291 class IsCallBits:
public BitField<bool, 0, 1> {};
293 LEnvironment* environment_;
320 template<
int R,
int I,
int T>
351 return reinterpret_cast<LGap*
>(instr);
356 HBasicBlock*
block()
const {
return block_; }
368 if (parallel_moves_[pos] ==
NULL) {
369 parallel_moves_[pos] =
new(zone) LParallelMove(zone);
371 return parallel_moves_[pos];
375 return parallel_moves_[pos];
389 return !IsRedundant();
396 class LGoto
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
398 explicit LGoto(HBasicBlock* block) : block_(block) { }
403 virtual
bool IsControl() const V8_OVERRIDE {
return true; }
405 int block_id()
const {
return block_->block_id(); }
412 class LLazyBailout
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
418 void set_gap_instructions_size(
int gap_instructions_size) {
419 gap_instructions_size_ = gap_instructions_size;
424 int gap_instructions_size_;
428 class LDummy
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
435 class LDummyUse
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
444 class LDeoptimize
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
451 class LLabel
V8_FINAL : public LGap {
454 : LGap(block), replacement_(
NULL) { }
463 int block_id()
const {
return block()->block_id(); }
473 LLabel* replacement_;
477 class LParameter
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
484 class LCallStub
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
487 inputs_[0] = context;
506 template<
int I,
int T>
514 HBasicBlock*
SuccessorAt(
int i) {
return hydrogen()->SuccessorAt(i); }
524 if (true_label_ ==
NULL) {
530 if (false_label_ ==
NULL) {
550 class LWrapReceiver
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
553 inputs_[0] = receiver;
554 inputs_[1] =
function;
565 class LApplyArguments
V8_FINAL :
public LTemplateInstruction<1, 4, 0> {
571 inputs_[0] =
function;
572 inputs_[1] = receiver;
574 inputs_[3] = elements;
586 class LAccessArgumentsAt
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
589 inputs_[0] = arguments;
604 class LArgumentsLength
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
607 inputs_[0] = elements;
616 class LArgumentsElements
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
623 class LModByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
626 inputs_[0] = dividend;
641 class LModByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
644 inputs_[0] = dividend;
659 class LModI
V8_FINAL : public LTemplateInstruction<1, 2, 2> {
678 class LDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
681 inputs_[0] = dividend;
696 class LDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
699 inputs_[0] = dividend;
714 class LDivI
V8_FINAL : public LTemplateInstruction<1, 2, 1> {
731 class LFlooringDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
734 inputs_[0] = dividend;
742 "flooring-div-by-power-of-2-i")
750 class LFlooringDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 2> {
753 inputs_[0] = dividend;
770 class LMulI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
786 class LMultiplyAddD
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
791 inputs_[1] = multiplier;
792 inputs_[2] = multiplicand;
804 class LMultiplySubD
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
808 inputs_[0] = minuend;
809 inputs_[1] = multiplier;
810 inputs_[2] = multiplicand;
821 class LDebugBreak
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
827 class LCompareNumericAndBranch
V8_FINAL :
public LControlInstruction<2, 0> {
838 "compare-numeric-and-branch")
841 Token::
Value op()
const {
return hydrogen()->token(); }
843 return hydrogen()->representation().IsDouble();
850 class LMathFloor
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
863 class LMathRound
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
878 class LMathAbs
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
881 inputs_[1] = context;
893 class LMathLog
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
905 class LMathClz32
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
917 class LMathExp
V8_FINAL :
public LTemplateInstruction<1, 1, 3> {
926 temps_[2] = double_temp;
927 ExternalReference::InitializeMathExpData();
939 class LMathSqrt
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
951 class LMathPowHalf
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
963 class LCmpObjectEqAndBranch
V8_FINAL :
public LControlInstruction<2, 0> {
991 class LCompareMinusZeroAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1002 "cmp-minus-zero-and-branch")
1007 class LIsObjectAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1024 class LIsStringAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1037 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1041 class LIsSmiAndBranch
V8_FINAL : public LControlInstruction<1, 0> {
1052 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1056 class LIsUndetectableAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1067 "is-undetectable-and-branch")
1070 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1074 class LStringCompareAndBranch
V8_FINAL : public LControlInstruction<3, 0> {
1077 inputs_[0] = context;
1087 "string-compare-and-branch")
1090 Token::
Value op()
const {
return hydrogen()->token(); }
1092 virtual void PrintDataTo(StringStream* stream)
V8_OVERRIDE;
1096 class LHasInstanceTypeAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
1105 "has-instance-type-and-branch")
1108 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1112 class LGetCachedArrayIndex
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1125 class LHasCachedArrayIndexAndBranch
V8_FINAL
1126 : public LControlInstruction<1, 0> {
1135 "has-cached-array-index-and-branch")
1138 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1142 class LClassOfTestAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1153 "class-of-test-and-branch")
1156 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1160 class LCmpT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1163 inputs_[0] = context;
1179 class LInstanceOf
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1182 inputs_[0] = context;
1195 class LInstanceOfKnownGlobal
V8_FINAL :
public LTemplateInstruction<1, 2, 1> {
1198 inputs_[0] = context;
1208 "instance-of-known-global")
1213 return lazy_deopt_env_;
1216 LEnvironment* env) V8_OVERRIDE {
1217 lazy_deopt_env_ = env;
1221 LEnvironment* lazy_deopt_env_;
1225 class LBoundsCheck
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
1229 inputs_[1] = length;
1240 class LBitI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1257 class LShiftI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1260 : op_(op), can_deopt_(can_deopt) {
1278 class LSubI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1293 class LRSubI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1308 class LConstantI
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1313 int32_t value()
const {
return hydrogen()->Integer32Value(); }
1317 class LConstantS
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1326 class LConstantD
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1331 double value()
const {
return hydrogen()->DoubleValue(); }
1335 class LConstantE
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1340 ExternalReference value()
const {
1341 return hydrogen()->ExternalReferenceValue();
1346 class LConstantT
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1352 return hydrogen()->handle(isolate);
1357 class LBranch
V8_FINAL :
public LControlInstruction<1, 0> {
1368 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1372 class LCmpMapAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1389 class LMapEnumLength
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1401 class LDateField
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
1420 class LSeqStringGetChar
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1423 inputs_[0] = string;
1435 class LSeqStringSetChar
V8_FINAL : public LTemplateInstruction<1, 4, 0> {
1441 inputs_[0] = context;
1442 inputs_[1] = string;
1456 class LAddI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1471 class LMathMinMax
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1486 class LPower
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1501 class LArithmeticD
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1514 return LInstruction::kArithmeticD;
1517 virtual const char* Mnemonic() const V8_OVERRIDE;
1524 class LArithmeticT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1531 inputs_[0] = context;
1542 return LInstruction::kArithmeticT;
1545 virtual const char* Mnemonic() const V8_OVERRIDE;
1552 class LReturn
V8_FINAL : public LTemplateInstruction<0, 3, 0> {
1556 inputs_[1] = context;
1557 inputs_[2] = parameter_count;
1563 return parameter_count()->IsConstantOperand();
1566 ASSERT(has_constant_parameter_count());
1567 return LConstantOperand::cast(parameter_count());
1575 class LLoadNamedField
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1578 inputs_[0] = object;
1588 class LLoadNamedGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1591 inputs_[0] = context;
1592 inputs_[1] = object;
1605 class LLoadFunctionPrototype
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1608 inputs_[0] =
function;
1618 class LLoadRoot
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1623 Heap::RootListIndex index()
const {
return hydrogen()->index(); }
1627 class LLoadKeyed
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1630 inputs_[0] = elements;
1637 return hydrogen()->elements_kind();
1640 return hydrogen()->is_external();
1643 return hydrogen()->is_fixed_typed_array();
1646 return is_external() || is_fixed_typed_array();
1652 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1653 uint32_t additional_index()
const {
return hydrogen()->index_offset(); }
1657 class LLoadKeyedGeneric
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1660 inputs_[0] = context;
1661 inputs_[1] = object;
1673 class LLoadGlobalCell
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1680 class LLoadGlobalGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1683 inputs_[0] = context;
1684 inputs_[1] = global_object;
1698 class LStoreGlobalCell
V8_FINAL :
public LTemplateInstruction<0, 1, 1> {
1713 class LLoadContextSlot
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1716 inputs_[0] = context;
1724 int slot_index() {
return hydrogen()->slot_index(); }
1730 class LStoreContextSlot
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
1733 inputs_[0] = context;
1743 int slot_index() {
return hydrogen()->slot_index(); }
1749 class LPushArgument
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
1761 class LDrop
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
1763 explicit LDrop(
int count) : count_(count) { }
1774 class LStoreCodeEntry
V8_FINAL: public LTemplateInstruction<0, 1, 1> {
1777 inputs_[0] =
function;
1778 temps_[0] = code_object;
1791 class LInnerAllocatedObject
V8_FINAL: public LTemplateInstruction<1, 2, 0> {
1794 inputs_[0] = base_object;
1795 inputs_[1] = offset;
1807 class LThisFunction
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1814 class LContext
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1821 class LDeclareGlobals
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1824 inputs_[0] = context;
1834 class LCallJSFunction
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1837 inputs_[0] =
function;
1845 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1847 int arity()
const {
return hydrogen()->argument_count() - 1; }
1851 class LCallWithDescriptor
V8_FINAL :
public LTemplateResultInstruction<1> {
1856 : descriptor_(descriptor),
1857 inputs_(descriptor->environment_length() + 1, zone) {
1859 inputs_.AddAll(operands, zone);
1870 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1872 int arity()
const {
return hydrogen()->argument_count() - 1; }
1874 const CallInterfaceDescriptor* descriptor_;
1875 ZoneList<LOperand*> inputs_;
1878 virtual int InputCount()
V8_FINAL V8_OVERRIDE {
return inputs_.length(); }
1879 virtual LOperand* InputAt(
int i)
V8_FINAL V8_OVERRIDE {
return inputs_[i]; }
1881 virtual int TempCount()
V8_FINAL V8_OVERRIDE {
return 0; }
1882 virtual LOperand* TempAt(
int i)
V8_FINAL V8_OVERRIDE {
return NULL; }
1886 class LInvokeFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1889 inputs_[0] = context;
1890 inputs_[1] =
function;
1899 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1901 int arity()
const {
return hydrogen()->argument_count() - 1; }
1905 class LCallFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1908 inputs_[0] = context;
1909 inputs_[1] =
function;
1918 int arity()
const {
return hydrogen()->argument_count() - 1; }
1922 class LCallNew
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1925 inputs_[0] = context;
1926 inputs_[1] = constructor;
1935 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1937 int arity()
const {
return hydrogen()->argument_count() - 1; }
1941 class LCallNewArray
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1944 inputs_[0] = context;
1945 inputs_[1] = constructor;
1954 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1956 int arity()
const {
return hydrogen()->argument_count() - 1; }
1960 class LCallRuntime
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1963 inputs_[0] = context;
1971 virtual
bool ClobbersDoubleRegisters() const V8_OVERRIDE {
1976 int arity()
const {
return hydrogen()->argument_count(); }
1981 class LInteger32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1993 class LUint32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2005 class LNumberTagI
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2021 class LNumberTagU
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2037 class LNumberTagD
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2054 class LDoubleToSmi
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2065 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2070 class LDoubleToI
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2081 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2086 class LTaggedToI
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2103 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2107 class LSmiTag
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2120 class LNumberUntagD
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2133 class LSmiUntag
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2136 : needs_check_(needs_check) {
2150 class LStoreNamedField
V8_FINAL : public LTemplateInstruction<0, 2, 1> {
2153 inputs_[0] = object;
2165 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2167 Handle<
Map> transition()
const {
return hydrogen()->transition_map(); }
2169 return hydrogen()->field_representation();
2174 class LStoreNamedGeneric
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2177 inputs_[0] = context;
2178 inputs_[1] = object;
2189 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2196 class LStoreKeyed
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2199 inputs_[0] = object;
2206 return hydrogen()->is_fixed_typed_array();
2209 return is_external() || is_fixed_typed_array();
2215 return hydrogen()->elements_kind();
2221 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2222 bool NeedsCanonicalization() {
2223 if (hydrogen()->value()->IsAdd() || hydrogen()->value()->IsSub() ||
2224 hydrogen()->value()->IsMul() || hydrogen()->value()->IsDiv()) {
2227 return hydrogen()->NeedsCanonicalization();
2233 class LStoreKeyedGeneric
V8_FINAL :
public LTemplateInstruction<0, 4, 0> {
2239 inputs_[0] = context;
2253 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2259 class LTransitionElementsKind
V8_FINAL :
public LTemplateInstruction<0, 2, 1> {
2264 inputs_[0] = object;
2265 inputs_[1] = context;
2266 temps_[0] = new_map_temp;
2274 "transition-elements-kind")
2277 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2279 Handle<
Map> original_map() {
return hydrogen()->original_map().handle(); }
2281 return hydrogen()->transitioned_map().handle();
2288 class LTrapAllocationMemento
V8_FINAL :
public LTemplateInstruction<0, 1, 1> {
2292 inputs_[0] = object;
2300 "trap-allocation-memento")
2304 class LStringAdd
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
2307 inputs_[0] = context;
2322 class LStringCharCodeAt
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2325 inputs_[0] = context;
2326 inputs_[1] = string;
2339 class LStringCharFromCode
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2342 inputs_[0] = context;
2343 inputs_[1] = char_code;
2354 class LCheckValue
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2367 class LCheckInstanceType
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2380 class LCheckMaps
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2393 class LCheckSmi
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2405 class LCheckNonSmi
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
2418 class LClampDToUint8
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2421 inputs_[0] = unclamped;
2430 class LClampIToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2433 inputs_[0] = unclamped;
2442 class LClampTToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2445 inputs_[0] = unclamped;
2456 class LDoubleBits
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2469 class LConstructDouble
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2483 class LAllocate
V8_FINAL :
public LTemplateInstruction<1, 2, 2> {
2489 inputs_[0] = context;
2505 class LRegExpLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2508 inputs_[0] = context;
2518 class LFunctionLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2521 inputs_[0] = context;
2531 class LToFastProperties
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2544 class LTypeof
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2547 inputs_[0] = context;
2558 class LTypeofIsAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
2575 class LIsConstructCallAndBranch
V8_FINAL :
public LControlInstruction<0, 1> {
2584 "is-construct-call-and-branch")
2588 class LOsrEntry
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
2599 class LStackCheck
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
2602 inputs_[0] = context;
2610 Label* done_label() {
return &done_label_; }
2617 class LForInPrepareMap
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2620 inputs_[0] = context;
2621 inputs_[1] = object;
2631 class LForInCacheArray
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2642 return HForInCacheArray::cast(this->hydrogen_value())->idx();
2647 class LCheckMapValue
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
2661 class LLoadFieldByIndex
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2664 inputs_[0] = object;
2675 class LChunkBuilder;
2676 class LPlatformChunk
V8_FINAL :
public LChunk {
2679 :
LChunk(info, graph) { }
2686 class LChunkBuilder
V8_FINAL :
public LChunkBuilderBase {
2689 : LChunkBuilderBase(graph->zone()),
2694 current_instruction_(
NULL),
2695 current_block_(
NULL),
2697 allocator_(allocator) { }
2700 LPlatformChunk* Build();
2705 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2709 LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend);
2710 LInstruction* DoMultiplySub(HValue* minuend, HMul* mul);
2711 LInstruction* DoRSub(HSub* instr);
2713 static bool HasMagicNumberForDivisor(
int32_t divisor);
2715 LInstruction* DoMathFloor(HUnaryMathOperation* instr);
2716 LInstruction* DoMathRound(HUnaryMathOperation* instr);
2717 LInstruction* DoMathAbs(HUnaryMathOperation* instr);
2718 LInstruction* DoMathLog(HUnaryMathOperation* instr);
2719 LInstruction* DoMathExp(HUnaryMathOperation* instr);
2720 LInstruction* DoMathSqrt(HUnaryMathOperation* instr);
2721 LInstruction* DoMathPowHalf(HUnaryMathOperation* instr);
2722 LInstruction* DoMathClz32(HUnaryMathOperation* instr);
2723 LInstruction* DoDivByPowerOf2I(HDiv* instr);
2724 LInstruction* DoDivByConstI(HDiv* instr);
2725 LInstruction* DoDivI(HBinaryOperation* instr);
2726 LInstruction* DoModByPowerOf2I(HMod* instr);
2727 LInstruction* DoModByConstI(HMod* instr);
2728 LInstruction* DoModI(HMod* instr);
2729 LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr);
2730 LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr);
2740 LPlatformChunk* chunk()
const {
return chunk_; }
2741 CompilationInfo*
info()
const {
return info_; }
2742 HGraph* graph()
const {
return graph_; }
2744 bool is_unused()
const {
return status_ == UNUSED; }
2745 bool is_building()
const {
return status_ == BUILDING; }
2746 bool is_done()
const {
return status_ ==
DONE; }
2747 bool is_aborted()
const {
return status_ == ABORTED; }
2752 LUnallocated* ToUnallocated(Register reg);
2757 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2785 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2801 LInstruction* Define(LTemplateResultInstruction<1>* instr,
2802 LUnallocated* result);
2803 LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr);
2804 LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr,
2806 LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr);
2807 LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr,
2809 LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr,
2811 LInstruction* AssignEnvironment(LInstruction* instr);
2812 LInstruction* AssignPointerMap(LInstruction* instr);
2814 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2819 LInstruction* MarkAsCall(
2820 LInstruction* instr,
2821 HInstruction* hinstr,
2822 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2824 void VisitInstruction(HInstruction* current);
2826 void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2827 LInstruction* DoShift(
Token::Value op, HBitwiseBinaryOperation* instr);
2829 HArithmeticBinaryOperation* instr);
2831 HBinaryOperation* instr);
2833 LPlatformChunk* chunk_;
2834 CompilationInfo* info_;
2835 HGraph*
const graph_;
2837 HInstruction* current_instruction_;
2838 HBasicBlock* current_block_;
2839 HBasicBlock* next_block_;
2840 LAllocator* allocator_;
2845 #undef DECLARE_HYDROGEN_ACCESSOR
2846 #undef DECLARE_CONCRETE_INSTRUCTION
2850 #endif // V8_ARM_LITHIUM_ARM_H_
LCallFunction(LOperand *context, LOperand *function)
LSeqStringSetChar(LOperand *context, LOperand *string, LOperand *index, LOperand *value)
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)
LClassOfTestAndBranch(LOperand *value, LOperand *temp)
LPower(LOperand *left, LOperand *right)
void set_pointer_map(LPointerMap *p)
bool IsMarkedAsCall() const
virtual bool HasInterestingComment(LCodeGen *gen) const V8_OVERRIDE
LCheckInstanceType(LOperand *value)
LMathFloor(LOperand *value)
LUint32ToDouble(LOperand *value)
LMultiplyAddD(LOperand *addend, LOperand *multiplier, LOperand *multiplicand)
#define DECLARE_OPCODE(type)
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)
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)
LMathPowHalf(LOperand *value)
LIsConstructCallAndBranch(LOperand *temp)
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)
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()
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
LCallJSFunction(LOperand *function)
Label * FalseLabel(LChunk *chunk)
LFlooringDivByConstI(LOperand *dividend, int32_t divisor, LOperand *temp)
Representation representation() const
#define DECLARE_HYDROGEN_ACCESSOR(type)
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
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)
LRSubI(LOperand *left, LOperand *right)
bool has_constant_parameter_count()
LClampDToUint8(LOperand *unclamped)
void set_hydrogen_value(HValue *value)
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
LLoadContextSlot(LOperand *context)
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
LModI(LOperand *left, LOperand *right, LOperand *temp, LOperand *temp2)
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)
int gap_instructions_size()
LDeclareGlobals(LOperand *context)
LDivI(LOperand *left, LOperand *right, LOperand *temp)
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)
LMultiplySubD(LOperand *minuend, LOperand *multiplier, LOperand *multiplicand)
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
LLabel * replacement() const
LStoreGlobalCell(LOperand *value, LOperand *temp)
#define DECLARE_PREDICATE(type)
LDoubleBits(LOperand *value)
Handle< Map > transitioned_map()
virtual bool HasInterestingComment(LCodeGen *gen) const
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)
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)
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)
virtual bool IsGap() const V8_OVERRIDE
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)