28 #ifndef V8_IA32_LITHIUM_IA32_H_
29 #define V8_IA32_LITHIUM_IA32_H_
43 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
44 V(AccessArgumentsAt) \
48 V(ArgumentsElements) \
56 V(CallWithDescriptor) \
62 V(CheckInstanceType) \
71 V(ClampTToUint8NoSSE2) \
72 V(ClassOfTestAndBranch) \
74 V(CompareMinusZeroAndBranch) \
75 V(CompareNumericAndBranch) \
76 V(CmpObjectEqAndBranch) \
100 V(FlooringDivByConstI) \
101 V(FlooringDivByPowerOf2I) \
105 V(GetCachedArrayIndex) \
107 V(HasCachedArrayIndexAndBranch) \
108 V(HasInstanceTypeAndBranch) \
109 V(InnerAllocatedObject) \
111 V(InstanceOfKnownGlobal) \
113 V(Integer32ToDouble) \
115 V(IsConstructCallAndBranch) \
116 V(IsObjectAndBranch) \
117 V(IsStringAndBranch) \
119 V(IsUndetectableAndBranch) \
123 V(LoadFieldByIndex) \
124 V(LoadFunctionPrototype) \
126 V(LoadGlobalGeneric) \
128 V(LoadKeyedGeneric) \
130 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) \
176 V(ToFastProperties) \
177 V(TransitionElementsKind) \
178 V(TrapAllocationMemento) \
180 V(TypeofIsAndBranch) \
186 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
187 virtual Opcode opcode() const V8_FINAL V8_OVERRIDE { \
188 return LInstruction::k##type; \
190 virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE; \
191 virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE { \
194 static L##type* cast(LInstruction* instr) { \
195 ASSERT(instr->Is##type()); \
196 return reinterpret_cast<L##type*>(instr); \
200 #define DECLARE_HYDROGEN_ACCESSOR(type) \
201 H##type* hydrogen() const { \
202 return H##type::cast(hydrogen_value()); \
206 class LInstruction :
public ZoneObject {
209 : environment_(
NULL),
210 hydrogen_value_(
NULL),
211 bit_field_(IsCallBits::encode(
false)) {
217 virtual const char*
Mnemonic()
const = 0;
224 #define DECLARE_OPCODE(type) k##type,
227 #undef DECLARE_OPCODE
233 #define DECLARE_PREDICATE(type) \
234 bool Is##type() const { return opcode() == k##type; }
236 #undef DECLARE_PREDICATE
240 virtual bool IsGap()
const {
return false; }
257 void MarkAsCall() { bit_field_ = IsCallBits::update(bit_field_,
true); }
258 bool IsCall()
const {
return IsCallBits::decode(bit_field_); }
289 virtual int InputCount() = 0;
290 virtual LOperand* InputAt(
int i) = 0;
293 virtual int TempCount() = 0;
294 virtual LOperand* TempAt(
int i) = 0;
296 class IsCallBits:
public BitField<bool, 0, 1> {};
298 LEnvironment* environment_;
299 SetOncePointer<LPointerMap> pointer_map_;
300 HValue* hydrogen_value_;
307 class LTemplateResultInstruction :
public LInstruction {
325 template<
int R,
int I,
int T>
326 class LTemplateInstruction :
public LTemplateResultInstruction<R> {
328 EmbeddedContainer<LOperand*, I>
inputs_;
329 EmbeddedContainer<LOperand*, T>
temps_;
341 class LGap :
public LTemplateInstruction<0, 0, 0> {
355 return reinterpret_cast<LGap*
>(instr);
360 HBasicBlock*
block()
const {
return block_; }
372 if (parallel_moves_[pos] ==
NULL) {
373 parallel_moves_[pos] =
new(zone) LParallelMove(zone);
375 return parallel_moves_[pos];
379 return parallel_moves_[pos];
388 class LInstructionGap
V8_FINAL :
public LGap {
393 return !IsRedundant();
400 class LClobberDoubles
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
410 class LGoto
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
412 explicit LGoto(HBasicBlock* block) : block_(block) { }
417 virtual
bool IsControl() const V8_OVERRIDE {
return true; }
419 int block_id()
const {
return block_->block_id(); }
429 class LLazyBailout
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
435 class LDummy
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
442 class LDummyUse
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
451 class LDeoptimize
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
458 class LLabel
V8_FINAL : public LGap {
461 : LGap(block), replacement_(
NULL) { }
470 int block_id()
const {
return block()->block_id(); }
480 LLabel* replacement_;
484 class LParameter
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
493 class LCallStub
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
496 inputs_[0] = context;
515 template<
int I,
int T>
516 class LControlInstruction:
public LTemplateInstruction<0, I, T> {
523 HBasicBlock*
SuccessorAt(
int i) {
return hydrogen()->SuccessorAt(i); }
533 if (true_label_ ==
NULL) {
539 if (false_label_ ==
NULL) {
559 class LWrapReceiver
V8_FINAL :
public LTemplateInstruction<1, 2, 1> {
564 inputs_[0] = receiver;
565 inputs_[1] =
function;
584 inputs_[0] =
function;
585 inputs_[1] = receiver;
587 inputs_[3] = elements;
599 class LAccessArgumentsAt
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
602 inputs_[0] = arguments;
620 inputs_[0] = elements;
629 class LArgumentsElements
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
636 class LDebugBreak
V8_FINAL : public LTemplateInstruction<0, 0, 0> {
642 class LModByPowerOf2I
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
645 inputs_[0] = dividend;
666 inputs_[0] = dividend;
685 class LModI
V8_FINAL : public LTemplateInstruction<1, 2, 1> {
702 class LDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
705 inputs_[0] = dividend;
720 class LDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 2> {
726 inputs_[0] = dividend;
745 class LDivI
V8_FINAL : public LTemplateInstruction<1, 2, 1> {
762 class LFlooringDivByPowerOf2I
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
765 inputs_[0] = dividend;
773 "flooring-div-by-power-of-2-i")
781 class LFlooringDivByConstI
V8_FINAL : public LTemplateInstruction<1, 1, 3> {
788 inputs_[0] = dividend;
809 class LMulI
V8_FINAL : public LTemplateInstruction<1, 2, 1> {
837 "compare-numeric-and-branch")
840 Token::
Value op()
const {
return hydrogen()->token(); }
842 return hydrogen()->representation().IsDouble();
849 class LMathFloor
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
862 class LMathRound
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
877 class LMathAbs
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
880 inputs_[1] = context;
892 class LMathLog
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
904 class LMathClz32
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
916 class LMathExp
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
924 ExternalReference::InitializeMathExpData();
935 class LMathSqrt
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
947 class LMathPowHalf
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
961 class LCmpObjectEqAndBranch
V8_FINAL :
public LControlInstruction<2, 0> {
975 class LCmpHoleAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
988 class LCompareMinusZeroAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
999 "cmp-minus-zero-and-branch")
1004 class LIsObjectAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1020 class LIsStringAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1033 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1037 class LIsSmiAndBranch
V8_FINAL : public LControlInstruction<1, 0> {
1048 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1052 class LIsUndetectableAndBranch
V8_FINAL : public LControlInstruction<1, 1> {
1063 "is-undetectable-and-branch")
1066 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1070 class LStringCompareAndBranch
V8_FINAL : public LControlInstruction<3, 0> {
1073 inputs_[0] = context;
1083 "string-compare-and-branch")
1086 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1092 class LHasInstanceTypeAndBranch
V8_FINAL :
public LControlInstruction<1, 1> {
1103 "has-instance-type-and-branch")
1106 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1110 class LGetCachedArrayIndex
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1123 class LHasCachedArrayIndexAndBranch
V8_FINAL
1124 : public LControlInstruction<1, 0> {
1133 "has-cached-array-index-and-branch")
1135 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1139 class LIsConstructCallAndBranch
V8_FINAL : public LControlInstruction<0, 1> {
1148 "is-construct-call-and-branch")
1152 class LClassOfTestAndBranch
V8_FINAL :
public LControlInstruction<1, 2> {
1165 "class-of-test-and-branch")
1168 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1172 class LCmpT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1175 inputs_[0] = context;
1188 class LInstanceOf
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1191 inputs_[0] = context;
1202 class LInstanceOfKnownGlobal
V8_FINAL :
public LTemplateInstruction<1, 2, 1> {
1205 inputs_[0] = context;
1215 "instance-of-known-global")
1220 return lazy_deopt_env_;
1223 LEnvironment* env) V8_OVERRIDE {
1224 lazy_deopt_env_ = env;
1228 LEnvironment* lazy_deopt_env_;
1232 class LBoundsCheck
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
1236 inputs_[1] = length;
1247 class LBitI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1264 class LShiftI
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1267 : op_(op), can_deopt_(can_deopt) {
1286 class LSubI
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1301 class LConstantI
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1306 int32_t value()
const {
return hydrogen()->Integer32Value(); }
1310 class LConstantS
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1319 class LConstantD
V8_FINAL :
public LTemplateInstruction<1, 0, 1> {
1330 double value()
const {
return hydrogen()->DoubleValue(); }
1334 class LConstantE
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1339 ExternalReference value()
const {
1340 return hydrogen()->ExternalReferenceValue();
1345 class LConstantT
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1351 return hydrogen()->handle(isolate);
1356 class LBranch
V8_FINAL :
public LControlInstruction<1, 1> {
1369 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1373 class LCmpMapAndBranch
V8_FINAL : public LControlInstruction<1, 0> {
1388 class LMapEnumLength
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1400 class LDateField
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
1414 Smi* index()
const {
return index_; }
1421 class LSeqStringGetChar
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1424 inputs_[0] = string;
1436 class LSeqStringSetChar
V8_FINAL : public LTemplateInstruction<1, 4, 0> {
1442 inputs_[0] = context;
1443 inputs_[1] = string;
1457 class LAddI
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1469 add->BetterLeftOperand()->UseCount() > 1;
1477 class LMathMinMax
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1492 class LPower
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1507 class LArithmeticD
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1521 return LInstruction::kArithmeticD;
1524 virtual const char* Mnemonic() const V8_OVERRIDE;
1531 class LArithmeticT
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1538 inputs_[0] = context;
1548 return LInstruction::kArithmeticT;
1551 virtual const char* Mnemonic() const V8_OVERRIDE;
1560 class LReturn
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
1566 inputs_[1] = context;
1567 inputs_[2] = parameter_count;
1571 return parameter_count()->IsConstantOperand();
1574 ASSERT(has_constant_parameter_count());
1575 return LConstantOperand::cast(parameter_count());
1584 class LLoadNamedField
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1587 inputs_[0] = object;
1597 class LLoadNamedGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1600 inputs_[0] = context;
1601 inputs_[1] = object;
1614 class LLoadFunctionPrototype
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
1617 inputs_[0] =
function;
1629 class LLoadRoot
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1634 Heap::RootListIndex index()
const {
return hydrogen()->index(); }
1638 class LLoadKeyed
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1641 inputs_[0] = elements;
1647 return hydrogen()->elements_kind();
1650 return hydrogen()->is_external();
1653 return hydrogen()->is_fixed_typed_array();
1656 return is_external() || is_fixed_typed_array();
1662 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1663 uint32_t additional_index()
const {
return hydrogen()->index_offset(); }
1665 return hydrogen()->key()->representation().IsTagged();
1670 inline static bool ExternalArrayOpRequiresTemp(
1671 Representation key_representation,
1676 return key_representation.IsSmi() &&
1686 class LLoadKeyedGeneric
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
1689 inputs_[0] = context;
1702 class LLoadGlobalCell
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1709 class LLoadGlobalGeneric
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1712 inputs_[0] = context;
1713 inputs_[1] = global_object;
1727 class LStoreGlobalCell
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
1740 class LLoadContextSlot
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1743 inputs_[0] = context;
1751 int slot_index() {
return hydrogen()->slot_index(); }
1757 class LStoreContextSlot
V8_FINAL :
public LTemplateInstruction<0, 2, 1> {
1760 inputs_[0] = context;
1772 int slot_index() {
return hydrogen()->slot_index(); }
1778 class LPushArgument
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
1790 class LDrop
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
1792 explicit LDrop(
int count) : count_(count) { }
1803 class LStoreCodeEntry
V8_FINAL: public LTemplateInstruction<0, 1, 1> {
1806 inputs_[0] =
function;
1807 temps_[0] = code_object;
1820 class LInnerAllocatedObject
V8_FINAL: public LTemplateInstruction<1, 2, 0> {
1823 inputs_[0] = base_object;
1824 inputs_[1] = offset;
1836 class LThisFunction
V8_FINAL :
public LTemplateInstruction<1, 0, 0> {
1843 class LContext
V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1850 class LDeclareGlobals
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1853 inputs_[0] = context;
1863 class LCallJSFunction
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1866 inputs_[0] =
function;
1874 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1876 int arity()
const {
return hydrogen()->argument_count() - 1; }
1880 class LCallWithDescriptor
V8_FINAL :
public LTemplateResultInstruction<1> {
1885 : inputs_(descriptor->environment_length() + 1, zone) {
1887 inputs_.AddAll(operands, zone);
1896 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1898 int arity()
const {
return hydrogen()->argument_count() - 1; }
1900 ZoneList<LOperand*> inputs_;
1903 virtual int InputCount()
V8_FINAL V8_OVERRIDE {
return inputs_.length(); }
1904 virtual LOperand* InputAt(
int i)
V8_FINAL V8_OVERRIDE {
return inputs_[i]; }
1906 virtual int TempCount()
V8_FINAL V8_OVERRIDE {
return 0; }
1907 virtual LOperand* TempAt(
int i)
V8_FINAL V8_OVERRIDE {
return NULL; }
1911 class LInvokeFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1914 inputs_[0] = context;
1915 inputs_[1] =
function;
1924 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1926 int arity()
const {
return hydrogen()->argument_count() - 1; }
1930 class LCallFunction
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1933 inputs_[0] = context;
1934 inputs_[1] =
function;
1943 int arity()
const {
return hydrogen()->argument_count() - 1; }
1947 class LCallNew
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1950 inputs_[0] = context;
1951 inputs_[1] = constructor;
1960 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1962 int arity()
const {
return hydrogen()->argument_count() - 1; }
1966 class LCallNewArray
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
1969 inputs_[0] = context;
1970 inputs_[1] = constructor;
1979 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
1981 int arity()
const {
return hydrogen()->argument_count() - 1; }
1985 class LCallRuntime
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
1988 inputs_[0] = context;
1996 virtual
bool ClobbersDoubleRegisters() const V8_OVERRIDE {
2001 int arity()
const {
return hydrogen()->argument_count(); }
2006 class LInteger32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2018 class LUint32ToDouble
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2032 class LNumberTagI
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2046 class LNumberTagU
V8_FINAL :
public LTemplateInstruction<1, 1, 2> {
2062 class LNumberTagD
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2078 class LDoubleToI
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2091 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2095 class LDoubleToSmi
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2109 class LTaggedToI
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2122 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
2126 class LSmiTag
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2139 class LNumberUntagD
V8_FINAL : public LTemplateInstruction<1, 1, 1> {
2154 class LSmiUntag
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2157 : needs_check_(needs_check) {
2165 bool needs_check()
const {
return needs_check_; }
2172 class LStoreNamedField
V8_FINAL :
public LTemplateInstruction<0, 2, 2> {
2181 temps_[1] = temp_map;
2192 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2194 Handle<
Map> transition()
const {
return hydrogen()->transition_map(); }
2196 return hydrogen()->field_representation();
2201 class LStoreNamedGeneric
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2204 inputs_[0] = context;
2205 inputs_[1] = object;
2216 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2222 class LStoreKeyed
V8_FINAL :
public LTemplateInstruction<0, 3, 0> {
2232 return hydrogen()->is_fixed_typed_array();
2235 return is_external() || is_fixed_typed_array();
2241 return hydrogen()->elements_kind();
2247 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2248 uint32_t additional_index()
const {
return hydrogen()->index_offset(); }
2253 class LStoreKeyedGeneric
V8_FINAL :
public LTemplateInstruction<0, 4, 0> {
2259 inputs_[0] = context;
2260 inputs_[1] = object;
2273 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2279 class LTransitionElementsKind
V8_FINAL :
public LTemplateInstruction<0, 2, 2> {
2285 inputs_[0] = object;
2286 inputs_[1] = context;
2287 temps_[0] = new_map_temp;
2297 "transition-elements-kind")
2300 virtual
void PrintDataTo(
StringStream* stream) V8_OVERRIDE;
2302 Handle<
Map> original_map() {
return hydrogen()->original_map().handle(); }
2304 return hydrogen()->transitioned_map().handle();
2311 class LTrapAllocationMemento
V8_FINAL :
public LTemplateInstruction<0, 1, 1> {
2315 inputs_[0] = object;
2323 "trap-allocation-memento")
2327 class LStringAdd
V8_FINAL :
public LTemplateInstruction<1, 3, 0> {
2330 inputs_[0] = context;
2344 class LStringCharCodeAt
V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2347 inputs_[0] = context;
2348 inputs_[1] = string;
2361 class LStringCharFromCode
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2364 inputs_[0] = context;
2365 inputs_[1] = char_code;
2376 class LCheckValue
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2389 class LCheckInstanceType
V8_FINAL : public LTemplateInstruction<0, 1, 1> {
2404 class LCheckMaps
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2417 class LCheckSmi
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2429 class LClampDToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2441 class LClampIToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2453 class LClampTToUint8
V8_FINAL :
public LTemplateInstruction<1, 1, 1> {
2457 temps_[0] = temp_xmm;
2468 class LClampTToUint8NoSSE2
V8_FINAL :
public LTemplateInstruction<1, 1, 3> {
2474 inputs_[0] = unclamped;
2486 "clamp-t-to-uint8-nosse2")
2491 class LCheckNonSmi
V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2504 class LDoubleBits
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2517 class LConstructDouble
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2531 class LAllocate
V8_FINAL :
public LTemplateInstruction<1, 2, 1> {
2534 inputs_[0] = context;
2548 class LRegExpLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2551 inputs_[0] = context;
2561 class LFunctionLiteral
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2564 inputs_[0] = context;
2574 class LToFastProperties
V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2587 class LTypeof
V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2590 inputs_[0] = context;
2601 class LTypeofIsAndBranch
V8_FINAL :
public LControlInstruction<1, 0> {
2618 class LOsrEntry
V8_FINAL :
public LTemplateInstruction<0, 0, 0> {
2627 class LStackCheck
V8_FINAL :
public LTemplateInstruction<0, 1, 0> {
2630 inputs_[0] = context;
2638 Label* done_label() {
return &done_label_; }
2645 class LForInPrepareMap
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2648 inputs_[0] = context;
2649 inputs_[1] = object;
2659 class LForInCacheArray
V8_FINAL :
public LTemplateInstruction<1, 1, 0> {
2670 return HForInCacheArray::cast(this->hydrogen_value())->idx();
2675 class LCheckMapValue
V8_FINAL :
public LTemplateInstruction<0, 2, 0> {
2689 class LLoadFieldByIndex
V8_FINAL :
public LTemplateInstruction<1, 2, 0> {
2692 inputs_[0] = object;
2703 class LChunkBuilder;
2704 class LPlatformChunk
V8_FINAL :
public LChunk {
2708 num_double_slots_(0) { }
2716 int num_double_slots_;
2720 class LChunkBuilder
V8_FINAL :
public LChunkBuilderBase {
2723 : LChunkBuilderBase(graph->zone()),
2728 current_instruction_(
NULL),
2729 current_block_(
NULL),
2731 allocator_(allocator) { }
2734 LPlatformChunk* Build();
2739 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2743 LInstruction* DoMathFloor(HUnaryMathOperation* instr);
2744 LInstruction* DoMathRound(HUnaryMathOperation* instr);
2745 LInstruction* DoMathAbs(HUnaryMathOperation* instr);
2746 LInstruction* DoMathLog(HUnaryMathOperation* instr);
2747 LInstruction* DoMathExp(HUnaryMathOperation* instr);
2748 LInstruction* DoMathSqrt(HUnaryMathOperation* instr);
2749 LInstruction* DoMathPowHalf(HUnaryMathOperation* instr);
2750 LInstruction* DoMathClz32(HUnaryMathOperation* instr);
2751 LInstruction* DoDivByPowerOf2I(HDiv* instr);
2752 LInstruction* DoDivByConstI(HDiv* instr);
2753 LInstruction* DoDivI(HBinaryOperation* instr);
2754 LInstruction* DoModByPowerOf2I(HMod* instr);
2755 LInstruction* DoModByConstI(HMod* instr);
2756 LInstruction* DoModI(HMod* instr);
2757 LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr);
2758 LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr);
2768 LPlatformChunk* chunk()
const {
return chunk_; }
2769 CompilationInfo*
info()
const {
return info_; }
2770 HGraph* graph()
const {
return graph_; }
2772 bool is_unused()
const {
return status_ == UNUSED; }
2773 bool is_building()
const {
return status_ == BUILDING; }
2774 bool is_done()
const {
return status_ ==
DONE; }
2775 bool is_aborted()
const {
return status_ == ABORTED; }
2780 LUnallocated* ToUnallocated(Register reg);
2781 LUnallocated* ToUnallocated(XMMRegister reg);
2782 LUnallocated* ToUnallocated(X87Register reg);
2786 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2788 XMMRegister fixed_register);
2814 Register fixed_register);
2818 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2834 LInstruction* Define(LTemplateResultInstruction<1>* instr,
2835 LUnallocated* result);
2836 LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr);
2837 LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr,
2839 LInstruction* DefineSameAsFirst(LTemplateResultInstruction<1>* instr);
2840 LInstruction* DefineFixed(LTemplateResultInstruction<1>* instr,
2842 LInstruction* DefineFixedDouble(LTemplateResultInstruction<1>* instr,
2844 LInstruction* DefineX87TOS(LTemplateResultInstruction<1>* instr);
2847 LInstruction* AssignEnvironment(LInstruction* instr);
2850 LInstruction* AssignPointerMap(LInstruction* instr);
2852 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2854 LOperand* GetSeqStringSetCharOperand(HSeqStringSetChar* instr);
2859 LInstruction* MarkAsCall(
2860 LInstruction* instr,
2861 HInstruction* hinstr,
2862 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2864 void VisitInstruction(HInstruction* current);
2866 void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2867 LInstruction* DoShift(
Token::Value op, HBitwiseBinaryOperation* instr);
2869 HArithmeticBinaryOperation* instr);
2871 HBinaryOperation* instr);
2873 LOperand* GetStoreKeyedValueOperand(HStoreKeyed* instr);
2875 LPlatformChunk* chunk_;
2876 CompilationInfo* info_;
2877 HGraph*
const graph_;
2879 HInstruction* current_instruction_;
2880 HBasicBlock* current_block_;
2881 HBasicBlock* next_block_;
2882 LAllocator* allocator_;
2887 #undef DECLARE_HYDROGEN_ACCESSOR
2888 #undef DECLARE_CONCRETE_INSTRUCTION
2892 #endif // V8_IA32_LITHIUM_IA32_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)
LModByConstI(LOperand *dividend, int32_t divisor, LOperand *temp1, LOperand *temp2)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env) V8_OVERRIDE
LStoreGlobalCell(LOperand *value)
virtual Opcode opcode() const V8_OVERRIDE
LCmpObjectEqAndBranch(LOperand *left, LOperand *right)
friend class TempIterator
static LGap * cast(LInstruction *instr)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env)
LPower(LOperand *left, LOperand *right)
void set_pointer_map(LPointerMap *p)
bool HasDoubleRegisterInput()
virtual bool HasInterestingComment(LCodeGen *gen) const V8_OVERRIDE
LModI(LOperand *left, LOperand *right, LOperand *temp)
LMathFloor(LOperand *value)
LMathPowHalf(LOperand *value, LOperand *temp)
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)
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)
LForInCacheArray(LOperand *map)
static Smi * FromInt(int value)
LStoreKeyed(LOperand *obj, LOperand *key, LOperand *val)
LInstanceOf(LOperand *context, LOperand *left, LOperand *right)
LFlooringDivByConstI(LOperand *dividend, int32_t divisor, LOperand *temp1, LOperand *temp2, LOperand *temp3)
LParallelMove * GetOrCreateParallelMove(InnerPosition pos, Zone *zone)
bool is_loop_header() const
LStringAdd(LOperand *context, LOperand *left, LOperand *right)
LDummyUse(LOperand *value)
LLoadFunctionPrototype(LOperand *function, LOperand *temp)
virtual bool ClobbersDoubleRegisters() const
int environment_length() const
LLabel(HBasicBlock *block)
LStoreNamedGeneric(LOperand *context, LOperand *object, LOperand *value)
LConstantD(LOperand *temp)
LBoundsCheck(LOperand *index, LOperand *length)
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
LIsConstructCallAndBranch(LOperand *temp)
LEnvironment * environment() const
LArithmeticD(Token::Value op, LOperand *left, LOperand *right)
LClampIToUint8(LOperand *value)
#define ASSERT(condition)
LArithmeticT(Token::Value op, LOperand *context, LOperand *left, LOperand *right)
bool is_typed_elements() const
bool NeedsCanonicalization()
LConstantOperand * constant_parameter_count()
virtual bool IsGap() const V8_FINAL V8_OVERRIDE
static bool IsSafeForSnapshot(CpuFeature f)
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)
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)
LNumberTagD(LOperand *value, LOperand *temp)
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)
Representation representation() const
LOperand * target() const
virtual LOperand * result() const =0
virtual bool HasInterestingComment(LCodeGen *gen) const
LGetCachedArrayIndex(LOperand *value)
LBitI(LOperand *left, LOperand *right)
LGoto(HBasicBlock *block)
LClassOfTestAndBranch(LOperand *value, LOperand *temp, LOperand *temp2)
LAccessArgumentsAt(LOperand *arguments, LOperand *length, LOperand *index)
LDoubleToSmi(LOperand *value)
bool has_constant_parameter_count()
LClampDToUint8(LOperand *value)
LDivByConstI(LOperand *dividend, int32_t divisor, LOperand *temp1, LOperand *temp2)
void set_hydrogen_value(HValue *value)
LClampTToUint8(LOperand *value, LOperand *temp_xmm)
LMathExp(LOperand *value, LOperand *temp1, LOperand *temp2)
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
LLoadContextSlot(LOperand *context)
LIsSmiAndBranch(LOperand *value)
LCmpHoleAndBranch(LOperand *object)
virtual bool HasResult() const =0
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)
LNumberUntagD(LOperand *value, LOperand *temp)
LCmpMapAndBranch(LOperand *value)
bool jumps_to_join() const
LOperand * new_map_temp()
HBasicBlock * SuccessorAt(int i)
virtual bool IsControl() const V8_FINAL V8_OVERRIDE
LBranch(LOperand *value, LOperand *temp)
LDeclareGlobals(LOperand *context)
LDivI(LOperand *left, LOperand *right, LOperand *temp)
bool HasEnvironment() const
LArgumentsLength(LOperand *elements)
LCompareNumericAndBranch(LOperand *left, LOperand *right)
ElementsKind elements_kind() const
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
LTaggedToI(LOperand *value, LOperand *temp)
bool HasReplacement() const
LMathSqrt(LOperand *value)
LIsUndetectableAndBranch(LOperand *value, LOperand *temp)
LToFastProperties(LOperand *value)
LCompareMinusZeroAndBranch(LOperand *value, LOperand *temp)
LLoadKeyedGeneric(LOperand *context, LOperand *obj, LOperand *key)
LIsObjectAndBranch(LOperand *value, LOperand *temp)
LDoubleToI(LOperand *value, LOperand *temp)
DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch,"compare-numeric-and-branch") Token bool is_double() const
LMapEnumLength(LOperand *value)
HBasicBlock * block() const
LDateField(LOperand *date, LOperand *temp, Smi *index)
virtual void PrintTo(StringStream *stream)
LOperand * global_object()
LLoadKeyed(LOperand *elements, LOperand *key)
LStoreKeyedGeneric(LOperand *context, LOperand *object, LOperand *key, LOperand *value)
#define T(name, string, precedence)
LHasInstanceTypeAndBranch(LOperand *value, LOperand *temp)
LReturn(LOperand *value, LOperand *context, LOperand *parameter_count)
STATIC_ASSERT(R==0||R==1)
bool IsDoubleInput(X87Register reg, LCodeGen *cgen)
LMulI(LOperand *left, LOperand *right, LOperand *temp)
LMathMinMax(LOperand *left, LOperand *right)
bool ClobbersTemps() const
bool HasDoubleRegisterResult()
LAllocate(LOperand *context, LOperand *size, LOperand *temp)
virtual bool IsControl() const
LPointerMap * pointer_map() const
void set_replacement(LLabel *label)
LStoreCodeEntry(LOperand *function, LOperand *code_object)
LStoreContextSlot(LOperand *context, LOperand *value, LOperand *temp)
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
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)
LCheckSmi(LOperand *value)
Label * TrueLabel(LChunk *chunk)
LShiftI(Token::Value op, LOperand *left, LOperand *right, bool can_deopt)
LClampTToUint8NoSSE2(LOperand *unclamped, LOperand *temp1, LOperand *temp2, LOperand *temp3)
LCallWithDescriptor(const CallInterfaceDescriptor *descriptor, ZoneList< LOperand * > &operands, Zone *zone)
LCheckInstanceType(LOperand *value, LOperand *temp)
virtual void CompileToNative(LCodeGen *generator)=0
LLabel * replacement() const
LDoubleBits(LOperand *value)
#define DECLARE_HYDROGEN_ACCESSOR(type)
Handle< Map > transitioned_map()
LNumberTagI(LOperand *value, LOperand *temp)
LEnvironment * GetDeferredLazyDeoptimizationEnvironment()
virtual bool HasResult() const V8_FINAL V8_OVERRIDE
LLoadNamedGeneric(LOperand *context, LOperand *object)
LMathRound(LOperand *value, LOperand *temp)
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
LTransitionElementsKind(LOperand *object, LOperand *context, LOperand *new_map_temp, LOperand *temp)
bool is_fixed_typed_array() const
void set_result(LOperand *operand)
bool HasPointerMap() const
LInstructionGap(HBasicBlock *block)
LPushArgument(LOperand *value)
LOperand * string() const
LFunctionLiteral(LOperand *context)
LInvokeFunction(LOperand *context, LOperand *function)
LStackCheck(LOperand *context)
int LookupDestination(int block_id) const
#define DECLARE_PREDICATE(type)
LInstanceOfKnownGlobal(LOperand *context, LOperand *value, LOperand *temp)
LWrapReceiver(LOperand *receiver, LOperand *function, LOperand *temp)
LStringCharFromCode(LOperand *context, LOperand *char_code)
LInnerAllocatedObject(LOperand *base_object, LOperand *offset)
#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 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)
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
LUint32ToDouble(LOperand *value, LOperand *temp)
SaveFPRegsMode save_doubles() const
int FalseDestination(LChunk *chunk)
LLoadGlobalGeneric(LOperand *context, LOperand *global_object)
LRegExpLiteral(LOperand *context)
LTrapAllocationMemento(LOperand *object, LOperand *temp)
int num_double_slots() const
LInteger32ToDouble(LOperand *value)
static bool UseLea(HAdd *add)
LHasCachedArrayIndexAndBranch(LOperand *value)
LConstructDouble(LOperand *hi, LOperand *lo)
LStoreNamedField(LOperand *obj, LOperand *val, LOperand *temp, LOperand *temp_map)