28 #ifndef V8_X64_LITHIUM_X64_H_
29 #define V8_X64_LITHIUM_X64_H_
43 #define LITHIUM_ALL_INSTRUCTION_LIST(V) \
44 V(ControlInstruction) \
46 LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
49 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
50 V(AccessArgumentsAt) \
54 V(ArgumentsElements) \
63 V(CallConstantFunction) \
73 V(CheckInstanceType) \
76 V(CheckPrototypeMaps) \
81 V(ClassOfTestAndBranch) \
82 V(CmpConstantEqAndBranch) \
84 V(CmpObjectEqAndBranch) \
98 V(FixedArrayBaseLength) \
100 V(GetCachedArrayIndex) \
104 V(HasCachedArrayIndexAndBranch) \
105 V(HasInstanceTypeAndBranch) \
108 V(InstanceOfKnownGlobal) \
110 V(Integer32ToDouble) \
112 V(IsConstructCallAndBranch) \
114 V(IsObjectAndBranch) \
115 V(IsStringAndBranch) \
117 V(IsUndetectableAndBranch) \
118 V(StringCompareAndBranch) \
124 V(LoadExternalArrayPointer) \
125 V(LoadFunctionPrototype) \
127 V(LoadGlobalGeneric) \
128 V(LoadKeyedFastDoubleElement) \
129 V(LoadKeyedFastElement) \
130 V(LoadKeyedGeneric) \
131 V(LoadKeyedSpecializedArrayElement) \
133 V(LoadNamedFieldPolymorphic) \
134 V(LoadNamedGeneric) \
153 V(StoreContextSlot) \
155 V(StoreGlobalGeneric) \
156 V(StoreKeyedFastDoubleElement) \
157 V(StoreKeyedFastElement) \
158 V(StoreKeyedGeneric) \
159 V(StoreKeyedSpecializedArrayElement) \
161 V(StoreNamedGeneric) \
163 V(StringCharCodeAt) \
164 V(StringCharFromCode) \
170 V(ToFastProperties) \
171 V(TransitionElementsKind) \
173 V(TypeofIsAndBranch) \
174 V(UnaryMathOperation) \
180 V(LoadFieldByIndex) \
186 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
187 virtual Opcode opcode() const { return LInstruction::k##type; } \
188 virtual void CompileToNative(LCodeGen* generator); \
189 virtual const char* Mnemonic() const { return mnemonic; } \
190 static L##type* cast(LInstruction* instr) { \
191 ASSERT(instr->Is##type()); \
192 return reinterpret_cast<L##type*>(instr); \
196 #define DECLARE_HYDROGEN_ACCESSOR(type) \
197 H##type* hydrogen() const { \
198 return H##type::cast(hydrogen_value()); \
202 class LInstruction:
public ZoneObject {
205 : environment_(
NULL),
206 hydrogen_value_(
NULL),
212 virtual const char*
Mnemonic()
const = 0;
219 #define DECLARE_OPCODE(type) k##type,
222 #undef DECLARE_OPCODE
228 #define DECLARE_PREDICATE(type) \
229 bool Is##type() const { return opcode() == k##type; }
231 #undef DECLARE_PREDICATE
235 virtual bool IsGap()
const {
return false; }
283 template<
int R,
int I,
int T>
284 class LTemplateInstruction:
public LInstruction {
305 class LGap:
public LTemplateInstruction<0, 0, 0> {
316 virtual bool IsGap()
const {
return true; }
320 return reinterpret_cast<LGap*
>(instr);
338 if (parallel_moves_[pos] ==
NULL) {
341 return parallel_moves_[pos];
345 return parallel_moves_[pos];
354 class LInstructionGap:
public LGap {
362 class LGoto:
public LTemplateInstruction<0, 0, 0> {
377 class LLazyBailout:
public LTemplateInstruction<0, 0, 0> {
389 int gap_instructions_size_;
393 class LDeoptimize:
public LTemplateInstruction<0, 0, 0> {
399 class LLabel:
public LGap {
402 :
LGap(block), replacement_(
NULL) { }
421 class LParameter:
public LTemplateInstruction<1, 0, 0> {
427 class LCallStub:
public LTemplateInstruction<1, 0, 0> {
433 return hydrogen()->transcendental_type();
438 class LUnknownOSRValue:
public LTemplateInstruction<1, 0, 0> {
444 template<
int I,
int T>
445 class LControlInstruction:
public LTemplateInstruction<0, I, T> {
461 class LWrapReceiver:
public LTemplateInstruction<1, 2, 0> {
475 class LApplyArguments:
public LTemplateInstruction<1, 4, 0> {
496 class LAccessArgumentsAt:
public LTemplateInstruction<1, 3, 0> {
514 class LArgumentsLength:
public LTemplateInstruction<1, 1, 0> {
524 class LArgumentsElements:
public LTemplateInstruction<1, 0, 0> {
531 class LModI: public LTemplateInstruction<1, 2, 1> {
544 class
LDivI: public LTemplateInstruction<1, 2, 1> {
557 class
LMulI: public LTemplateInstruction<1, 2, 0> {
581 return hydrogen()->GetInputRepresentation().IsDouble();
588 class LUnaryMathOperation:
public LTemplateInstruction<1, 1, 0> {
602 class LCmpObjectEqAndBranch:
public LControlInstruction<2, 0> {
610 "cmp-object-eq-and-branch")
614 class LCmpConstantEqAndBranch:
public LControlInstruction<1, 0> {
621 "cmp-constant-eq-and-branch")
643 class LIsObjectAndBranch:
public LControlInstruction<1, 0> {
691 "is-undetectable-and-branch")
706 "string-compare-and-branch")
715 class LHasInstanceTypeAndBranch:
public LControlInstruction<1, 0> {
722 "has-instance-type-and-branch")
747 "has-cached-array-index-and-branch")
763 "class-of-test-and-branch")
770 class
LCmpT: public LTemplateInstruction<1, 2, 0> {
784 class LIn:
public LTemplateInstruction<1, 2, 0> {
798 class LInstanceOf:
public LTemplateInstruction<1, 2, 0> {
809 class LInstanceOfKnownGlobal:
public LTemplateInstruction<1, 1, 1> {
817 "instance-of-known-global")
822 return lazy_deopt_env_;
825 lazy_deopt_env_ = env;
833 class LBoundsCheck:
public LTemplateInstruction<0, 2, 0> {
847 class LBitI:
public LTemplateInstruction<1, 2, 0> {
861 class
LShiftI: public LTemplateInstruction<1, 2, 0> {
864 : op_(op), can_deopt_(can_deopt) {
881 class
LSubI: public LTemplateInstruction<1, 2, 0> {
893 class
LConstantI: public LTemplateInstruction<1, 0, 0> {
898 int32_t value()
const {
return hydrogen()->Integer32Value(); }
902 class LConstantD:
public LTemplateInstruction<1, 0, 1> {
910 double value()
const {
return hydrogen()->DoubleValue(); }
914 class LConstantT:
public LTemplateInstruction<1, 0, 0> {
923 class LBranch:
public LControlInstruction<1, 0> {
949 return hydrogen()->FirstSuccessor()->block_id();
952 return hydrogen()->SecondSuccessor()->block_id();
957 class LJSArrayLength:
public LTemplateInstruction<1, 1, 0> {
975 "fixed-array-base-length")
991 class
LValueOf: public LTemplateInstruction<1, 1, 0> {
1002 class
LDateField: public LTemplateInstruction<1, 1, 0> {
1011 Smi* index()
const {
return index_; }
1018 class LThrow:
public LTemplateInstruction<0, 1, 0> {
1028 class LBitNotI:
public LTemplateInstruction<1, 1, 0> {
1038 class LAddI:
public LTemplateInstruction<1, 2, 0> {
1050 class
LPower: public LTemplateInstruction<1, 2, 0> {
1062 class
LRandom: public LTemplateInstruction<1, 1, 0> {
1073 class
LArithmeticD: public LTemplateInstruction<1, 2, 0> {
1085 virtual const char*
Mnemonic()
const;
1092 class LArithmeticT:
public LTemplateInstruction<1, 2, 0> {
1102 virtual const char*
Mnemonic()
const;
1111 class LReturn:
public LTemplateInstruction<0, 1, 0> {
1121 class LLoadNamedField:
public LTemplateInstruction<1, 1, 0> {
1145 class LLoadNamedGeneric:
public LTemplateInstruction<1, 1, 0> {
1159 class LLoadFunctionPrototype:
public LTemplateInstruction<1, 1, 0> {
1172 class LLoadElements:
public LTemplateInstruction<1, 1, 0> {
1182 class LLoadExternalArrayPointer:
public LTemplateInstruction<1, 1, 0> {
1189 "load-external-array-pointer")
1193 class LLoadKeyedFastElement:
public LTemplateInstruction<1, 2, 0> {
1209 class LLoadKeyedFastDoubleElement:
public LTemplateInstruction<1, 2, 0> {
1217 "load-keyed-fast-double-element")
1226 class LLoadKeyedSpecializedArrayElement:
public LTemplateInstruction<1, 2, 0> {
1229 inputs_[0] = external_pointer;
1234 "load-keyed-specialized-array-element")
1240 return hydrogen()->elements_kind();
1246 class LLoadKeyedGeneric:
public LTemplateInstruction<1, 2, 0> {
1260 class LLoadGlobalCell:
public LTemplateInstruction<1, 0, 0> {
1267 class LLoadGlobalGeneric: public LTemplateInstruction<1, 1, 0> {
1282 class LStoreGlobalCell:
public LTemplateInstruction<0, 1, 1> {
1296 class LStoreGlobalGeneric:
public LTemplateInstruction<0, 2, 0> {
1314 class LLoadContextSlot:
public LTemplateInstruction<1, 1, 0> {
1330 class LStoreContextSlot:
public LTemplateInstruction<0, 2, 1> {
1349 class LPushArgument:
public LTemplateInstruction<0, 1, 0> {
1359 class LDrop:
public LTemplateInstruction<0, 0, 0> {
1361 explicit LDrop(
int count) : count_(count) { }
1379 class
LContext: public LTemplateInstruction<1, 0, 0> {
1385 class LOuterContext:
public LTemplateInstruction<1, 1, 0> {
1397 class LDeclareGlobals:
public LTemplateInstruction<0, 0, 0> {
1404 class LGlobalObject: public LTemplateInstruction<1, 0, 0> {
1410 class LGlobalReceiver:
public LTemplateInstruction<1, 1, 0> {
1422 class LCallConstantFunction:
public LTemplateInstruction<1, 0, 0> {
1430 int arity()
const {
return hydrogen()->argument_count() - 1; }
1434 class LInvokeFunction:
public LTemplateInstruction<1, 1, 0> {
1447 int arity()
const {
return hydrogen()->argument_count() - 1; }
1452 class LCallKeyed:
public LTemplateInstruction<1, 1, 0> {
1465 int arity()
const {
return hydrogen()->argument_count() - 1; }
1469 class LCallNamed:
public LTemplateInstruction<1, 0, 0> {
1477 int arity()
const {
return hydrogen()->argument_count() - 1; }
1481 class LCallFunction:
public LTemplateInstruction<1, 1, 0> {
1491 int arity()
const {
return hydrogen()->argument_count() - 1; }
1495 class LCallGlobal:
public LTemplateInstruction<1, 0, 0> {
1503 int arity()
const {
return hydrogen()->argument_count() - 1; }
1507 class LCallKnownGlobal:
public LTemplateInstruction<1, 0, 0> {
1515 int arity()
const {
return hydrogen()->argument_count() - 1; }
1519 class LCallNew:
public LTemplateInstruction<1, 1, 0> {
1530 int arity()
const {
return hydrogen()->argument_count() - 1; }
1534 class LCallRuntime:
public LTemplateInstruction<1, 0, 0> {
1540 int arity()
const {
return hydrogen()->argument_count(); }
1544 class LInteger32ToDouble:
public LTemplateInstruction<1, 1, 0> {
1554 class LNumberTagI:
public LTemplateInstruction<1, 1, 0> {
1564 class LNumberTagD:
public LTemplateInstruction<1, 1, 1> {
1576 class LDoubleToI:
public LTemplateInstruction<1, 1, 0> {
1585 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
1590 class LTaggedToI:
public LTemplateInstruction<1, 1, 1> {
1600 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
1604 class LSmiTag:
public LTemplateInstruction<1, 1, 0> {
1614 class LNumberUntagD:
public LTemplateInstruction<1, 1, 0> {
1625 class
LSmiUntag: public LTemplateInstruction<1, 1, 0> {
1628 : needs_check_(needs_check) {
1634 bool needs_check()
const {
return needs_check_; }
1641 class LStoreNamedField:
public LTemplateInstruction<0, 2, 1> {
1659 int offset() {
return hydrogen()->offset(); }
1664 class LStoreNamedGeneric:
public LTemplateInstruction<0, 2, 0> {
1683 class LStoreKeyedFastElement:
public LTemplateInstruction<0, 3, 0> {
1692 "store-keyed-fast-element")
1704 class LStoreKeyedFastDoubleElement:
public LTemplateInstruction<0, 3, 0> {
1715 "store-keyed-fast-double-element")
1729 class LStoreKeyedSpecializedArrayElement:
public LTemplateInstruction<0, 3, 0> {
1734 inputs_[0] = external_pointer;
1740 "store-keyed-specialized-array-element")
1747 return hydrogen()->elements_kind();
1753 class LStoreKeyedGeneric:
public LTemplateInstruction<0, 3, 0> {
1773 class LTransitionElementsKind:
public LTemplateInstruction<1, 1, 2> {
1779 temps_[0] = new_map_temp;
1784 "transition-elements-kind")
1797 class LStringAdd:
public LTemplateInstruction<1, 2, 0> {
1812 class LStringCharCodeAt:
public LTemplateInstruction<1, 2, 0> {
1827 class LStringCharFromCode:
public LTemplateInstruction<1, 1, 0> {
1840 class LStringLength:
public LTemplateInstruction<1, 1, 0> {
1853 class LCheckFunction:
public LTemplateInstruction<0, 1, 0> {
1877 class
LCheckMaps: public LTemplateInstruction<0, 1, 0> {
1902 class LCheckSmi:
public LTemplateInstruction<0, 1, 0> {
1912 class LClampDToUint8:
public LTemplateInstruction<1, 1, 1> {
1925 class LClampIToUint8:
public LTemplateInstruction<1, 1, 0> {
1937 class LClampTToUint8:
public LTemplateInstruction<1, 1, 2> {
1953 class LCheckNonSmi:
public LTemplateInstruction<0, 1, 0> {
1963 class LAllocateObject:
public LTemplateInstruction<1, 0, 1> {
1974 class
LFastLiteral: public LTemplateInstruction<1, 0, 0> {
2011 class LToFastProperties:
public LTemplateInstruction<1, 1, 0> {
2022 class
LTypeof: public LTemplateInstruction<1, 1, 0> {
2032 class LTypeofIsAndBranch:
public LControlInstruction<1, 0> {
2047 class LIsConstructCallAndBranch:
public LControlInstruction<0, 1> {
2054 "is-construct-call-and-branch")
2073 class LOsrEntry:
public LTemplateInstruction<0, 0, 0> {
2079 LOperand** SpilledRegisterArray() {
return register_spills_; }
2082 void MarkSpilledRegister(
int allocation_index,
LOperand* spill_operand);
2083 void MarkSpilledDoubleRegister(
int allocation_index,
2096 class LStackCheck:
public LTemplateInstruction<0, 0, 0> {
2101 Label* done_label() {
return &done_label_; }
2108 class LForInPrepareMap:
public LTemplateInstruction<1, 1, 0> {
2120 class LForInCacheArray:
public LTemplateInstruction<1, 1, 0> {
2136 class LCheckMapValue:
public LTemplateInstruction<0, 2, 0> {
2150 class LLoadFieldByIndex:
public LTemplateInstruction<1, 2, 0> {
2164 class LChunkBuilder;
2165 class LChunk:
public ZoneObject {
2168 : spill_slot_count_(0),
2171 instructions_(32, graph->zone()),
2172 pointer_maps_(8, graph->zone()),
2173 inlined_closures_(1, graph->zone()) { }
2180 int GetNextSpillIndex(
bool is_double);
2181 LOperand* GetNextSpillSlot(
bool is_double);
2183 int ParameterAt(
int index);
2184 int GetParameterStackSlot(
int index)
const;
2186 CompilationInfo*
info()
const {
return info_; }
2190 LGap* GetGapAt(
int index)
const;
2191 bool IsGapAt(
int index)
const;
2192 int NearestGapPos(
int index)
const;
2193 void MarkEmptyBlocks();
2196 HBasicBlock* block = graph_->blocks()->at(block_id);
2201 LLabel* cur = GetLabel(block_id);
2202 while (cur->replacement() !=
NULL) {
2203 cur = cur->replacement();
2205 return cur->block_id();
2208 LLabel* label = GetLabel(block_id);
2209 ASSERT(!label->HasReplacement());
2210 return label->label();
2214 return &inlined_closures_;
2218 inlined_closures_.Add(closure, zone());
2224 int spill_slot_count_;
2225 CompilationInfo* info_;
2239 zone_(graph->zone()),
2241 current_instruction_(
NULL),
2242 current_block_(
NULL),
2245 allocator_(allocator),
2246 position_(RelocInfo::kNoPosition),
2247 instruction_pending_deoptimization_environment_(
NULL),
2248 pending_deoptimization_ast_id_(
AstNode::kNoNumber) { }
2254 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2266 LChunk* chunk()
const {
return chunk_; }
2267 CompilationInfo* info()
const {
return info_; }
2268 HGraph* graph()
const {
return graph_; }
2269 Zone* zone()
const {
return zone_; }
2271 bool is_unused()
const {
return status_ == UNUSED; }
2272 bool is_building()
const {
return status_ == BUILDING; }
2273 bool is_done()
const {
return status_ ==
DONE; }
2274 bool is_aborted()
const {
return status_ == ABORTED; }
2276 void Abort(
const char* format, ...);
2279 LUnallocated* ToUnallocated(Register reg);
2280 LUnallocated* ToUnallocated(XMMRegister reg);
2284 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2286 XMMRegister fixed_register);
2312 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2325 template<
int I,
int T>
2326 LInstruction* Define(LTemplateInstruction<1, I, T>* instr,
2328 template<
int I,
int T>
2329 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr);
2330 template<
int I,
int T>
2331 LInstruction* DefineAsSpilled(LTemplateInstruction<1, I, T>* instr,
2333 template<
int I,
int T>
2334 LInstruction* DefineSameAsFirst(LTemplateInstruction<1, I, T>* instr);
2335 template<
int I,
int T>
2336 LInstruction* DefineFixed(LTemplateInstruction<1, I, T>* instr,
2338 template<
int I,
int T>
2339 LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr,
2348 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2355 HInstruction* hinstr,
2356 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2358 LEnvironment* CreateEnvironment(HEnvironment* hydrogen_env,
2359 int* argument_index_accumulator);
2361 void VisitInstruction(HInstruction* current);
2363 void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2366 HArithmeticBinaryOperation* instr);
2368 HArithmeticBinaryOperation* instr);
2371 CompilationInfo* info_;
2372 HGraph*
const graph_;
2375 HInstruction* current_instruction_;
2376 HBasicBlock* current_block_;
2377 HBasicBlock* next_block_;
2378 int argument_count_;
2379 LAllocator* allocator_;
2381 LInstruction* instruction_pending_deoptimization_environment_;
2382 int pending_deoptimization_ast_id_;
2387 #undef DECLARE_HYDROGEN_ACCESSOR
2388 #undef DECLARE_CONCRETE_INSTRUCTION
2392 #endif // V8_X64_LITHIUM_X64_H_
LCmpT(LOperand *left, LOperand *right)
LStringCharCodeAt(LOperand *string, LOperand *index)
LArgumentsLength(LOperand *elements)
LLoadContextSlot(LOperand *context)
LDoubleToI(LOperand *value)
LGlobalReceiver(LOperand *global_object)
static LGap * cast(LInstruction *instr)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env)
Handle< Map > transitioned_map()
LLoadFieldByIndex(LOperand *object, LOperand *index)
Handle< Object > name() const
uint32_t additional_index() const
LGetCachedArrayIndex(LOperand *value)
LCallKeyed(LOperand *key)
void set_pointer_map(LPointerMap *p)
bool IsMarkedAsCall() const
Handle< Object > name() const
virtual LOperand * InputAt(int i)=0
LClampDToUint8(LOperand *value, LOperand *temp)
void set_environment(LEnvironment *env)
void set_result(LOperand *operand)
int false_block_id() const
virtual void PrintOutputOperandTo(StringStream *stream)
EmbeddedContainer< LOperand *, T > temps_
LStoreContextSlot(LOperand *context, LOperand *value, LOperand *temp)
uint32_t additional_index() const
LAllocateObject(LOperand *temp)
LWrapReceiver(LOperand *receiver, LOperand *function)
LParallelMove * GetOrCreateParallelMove(InnerPosition pos, Zone *zone)
LConstantD(LOperand *temp)
LNumberTagI(LOperand *value)
#define DECLARE_OPCODE(type)
LInstructionGap(HBasicBlock *block)
value format" "after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false, "print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false, "report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true, "garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true, "flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true, "use incremental marking") DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") DEFINE_bool(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true, "Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false, "Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true, "use inline caching") DEFINE_bool(native_code_counters, false, "generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false, "Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true, "Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false, "Never perform compaction on full GC-testing only") DEFINE_bool(compact_code_space, true, "Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true, "Flush inline caches prior to mark compact collection and" "flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0, "Default seed for initializing random generator" "(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true, "allows verbose printing") DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") DEFINE_bool(trace_sim, false, "Trace simulator execution") DEFINE_bool(check_icache, false, "Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8, "Stack alingment in bytes in simulator(4 or 8, 8 is default)") DEFINE_bool(trace_exception, false, "print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false, "preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true, "randomize hashes to avoid predictable hash collisions" "(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0, "Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false, "activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") DEFINE_int(testing_int_flag, 13, "testing_int_flag") DEFINE_float(testing_float_flag, 2.5, "float-flag") DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") DEFINE_string(testing_serialization_file, "/tmp/serdes", "file in which to serialize heap") DEFINE_bool(help, false, "Print usage message, including flags, on console") DEFINE_bool(dump_counters, false, "Dump counters on exit") DEFINE_string(map_counters, "", "Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT, "Pass all remaining arguments to the script.Alias for\"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#43"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2#define FLAG_MODE_DEFINE_DEFAULTS#1"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flag-definitions.h"1#define FLAG_FULL(ftype, ctype, nam, def, cmt)#define FLAG_READONLY(ftype, ctype, nam, def, cmt)#define DEFINE_implication(whenflag, thenflag)#define DEFINE_bool(nam, def, cmt)#define DEFINE_int(nam, def, cmt)#define DEFINE_float(nam, def, cmt)#define DEFINE_string(nam, def, cmt)#define DEFINE_args(nam, def, cmt)#define FLAG DEFINE_bool(use_strict, false,"enforce strict mode") DEFINE_bool(es5_readonly, false,"activate correct semantics for inheriting readonliness") DEFINE_bool(es52_globals, false,"activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false,"enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false,"enable harmony block scoping") DEFINE_bool(harmony_modules, false,"enable harmony modules (implies block scoping)") DEFINE_bool(harmony_proxies, false,"enable harmony proxies") DEFINE_bool(harmony_collections, false,"enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false,"enable all harmony features (except typeof)") DEFINE_implication(harmony, harmony_scoping) DEFINE_implication(harmony, harmony_modules) DEFINE_implication(harmony, harmony_proxies) DEFINE_implication(harmony, harmony_collections) DEFINE_implication(harmony_modules, harmony_scoping) DEFINE_bool(packed_arrays, false,"optimizes arrays that have no holes") DEFINE_bool(smi_only_arrays, true,"tracks arrays with only smi values") DEFINE_bool(clever_optimizations, true,"Optimize object size, Array shift, DOM strings and string +") DEFINE_bool(unbox_double_arrays, true,"automatically unbox arrays of doubles") DEFINE_bool(string_slices, true,"use string slices") DEFINE_bool(crankshaft, true,"use crankshaft") DEFINE_string(hydrogen_filter,"","optimization filter") DEFINE_bool(use_range, true,"use hydrogen range analysis") DEFINE_bool(eliminate_dead_phis, true,"eliminate dead phis") DEFINE_bool(use_gvn, true,"use hydrogen global value numbering") DEFINE_bool(use_canonicalizing, true,"use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true,"use function inlining") DEFINE_int(max_inlined_source_size, 600,"maximum source size in bytes considered for a single inlining") DEFINE_int(max_inlined_nodes, 196,"maximum number of AST nodes considered for a single inlining") DEFINE_int(max_inlined_nodes_cumulative, 196,"maximum cumulative number of AST nodes considered for inlining") DEFINE_bool(loop_invariant_code_motion, true,"loop invariant code motion") DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true,"crankshaft harvests type feedback from stub cache") DEFINE_bool(hydrogen_stats, false,"print statistics for hydrogen") DEFINE_bool(trace_hydrogen, false,"trace generated hydrogen to file") DEFINE_string(trace_phase,"Z","trace generated IR for specified phases") DEFINE_bool(trace_inlining, false,"trace inlining decisions") DEFINE_bool(trace_alloc, false,"trace register allocator") DEFINE_bool(trace_all_uses, false,"trace all use positions") DEFINE_bool(trace_range, false,"trace range analysis") DEFINE_bool(trace_gvn, false,"trace global value numbering") DEFINE_bool(trace_representation, false,"trace representation types") DEFINE_bool(stress_pointer_maps, false,"pointer map for every instruction") DEFINE_bool(stress_environments, false,"environment for every instruction") DEFINE_int(deopt_every_n_times, 0,"deoptimize every n times a deopt point is passed") DEFINE_bool(trap_on_deopt, false,"put a break point before deoptimizing") DEFINE_bool(deoptimize_uncommon_cases, true,"deoptimize uncommon cases") DEFINE_bool(polymorphic_inlining, true,"polymorphic inlining") DEFINE_bool(use_osr, true,"use on-stack replacement") DEFINE_bool(array_bounds_checks_elimination, false,"perform array bounds checks elimination") DEFINE_bool(array_index_dehoisting, false,"perform array index dehoisting") DEFINE_bool(trace_osr, false,"trace on-stack replacement") DEFINE_int(stress_runs, 0,"number of stress runs") DEFINE_bool(optimize_closures, true,"optimize closures") DEFINE_bool(inline_construct, true,"inline constructor calls") DEFINE_bool(inline_arguments, true,"inline functions with arguments object") DEFINE_int(loop_weight, 1,"loop weight for representation inference") DEFINE_bool(optimize_for_in, true,"optimize functions containing for-in loops") DEFINE_bool(experimental_profiler, true,"enable all profiler experiments") DEFINE_bool(watch_ic_patching, false,"profiler considers IC stability") DEFINE_int(frame_count, 1,"number of stack frames inspected by the profiler") DEFINE_bool(self_optimization, false,"primitive functions trigger their own optimization") DEFINE_bool(direct_self_opt, false,"call recompile stub directly when self-optimizing") DEFINE_bool(retry_self_opt, false,"re-try self-optimization if it failed") DEFINE_bool(count_based_interrupts, false,"trigger profiler ticks based on counting instead of timing") DEFINE_bool(interrupt_at_exit, false,"insert an interrupt check at function exit") DEFINE_bool(weighted_back_edges, false,"weight back edges by jump distance for interrupt triggering") DEFINE_int(interrupt_budget, 5900,"execution budget before interrupt is triggered") DEFINE_int(type_info_threshold, 15,"percentage of ICs that must have type info to allow optimization") DEFINE_int(self_opt_count, 130,"call count before self-optimization") DEFINE_implication(experimental_profiler, watch_ic_patching) DEFINE_implication(experimental_profiler, self_optimization) DEFINE_implication(experimental_profiler, retry_self_opt) DEFINE_implication(experimental_profiler, count_based_interrupts) DEFINE_implication(experimental_profiler, interrupt_at_exit) DEFINE_implication(experimental_profiler, weighted_back_edges) DEFINE_bool(trace_opt_verbose, false,"extra verbose compilation tracing") DEFINE_implication(trace_opt_verbose, trace_opt) DEFINE_bool(debug_code, false,"generate extra code (assertions) for debugging") DEFINE_bool(code_comments, false,"emit comments in code disassembly") DEFINE_bool(enable_sse2, true,"enable use of SSE2 instructions if available") DEFINE_bool(enable_sse3, true,"enable use of SSE3 instructions if available") DEFINE_bool(enable_sse4_1, true,"enable use of SSE4.1 instructions if available") DEFINE_bool(enable_cmov, true,"enable use of CMOV instruction if available") DEFINE_bool(enable_rdtsc, true,"enable use of RDTSC instruction if available") DEFINE_bool(enable_sahf, true,"enable use of SAHF instruction if available (X64 only)") DEFINE_bool(enable_vfp3, true,"enable use of VFP3 instructions if available - this implies ""enabling ARMv7 instructions (ARM only)") DEFINE_bool(enable_armv7, true,"enable use of ARMv7 instructions if available (ARM only)") DEFINE_bool(enable_fpu, true,"enable use of MIPS FPU instructions if available (MIPS only)") DEFINE_string(expose_natives_as, NULL,"expose natives in global object") DEFINE_string(expose_debug_as, NULL,"expose debug in global object") DEFINE_bool(expose_gc, false,"expose gc extension") DEFINE_bool(expose_externalize_string, false,"expose externalize string extension") DEFINE_int(stack_trace_limit, 10,"number of stack frames to capture") DEFINE_bool(builtins_in_stack_traces, false,"show built-in functions in stack traces") DEFINE_bool(disable_native_files, false,"disable builtin natives files") DEFINE_bool(inline_new, true,"use fast inline allocation") DEFINE_bool(stack_trace_on_abort, true,"print a stack trace if an assertion failure occurs") DEFINE_bool(trace, false,"trace function calls") DEFINE_bool(mask_constants_with_cookie, true,"use random jit cookie to mask large constants") DEFINE_bool(lazy, true,"use lazy compilation") DEFINE_bool(trace_opt, false,"trace lazy optimization") DEFINE_bool(trace_opt_stats, false,"trace lazy optimization statistics") DEFINE_bool(opt, true,"use adaptive optimizations") DEFINE_bool(always_opt, false,"always try to optimize functions") DEFINE_bool(prepare_always_opt, false,"prepare for turning on always opt") DEFINE_bool(trace_deopt, false,"trace deoptimization") DEFINE_int(min_preparse_length, 1024,"minimum length for automatic enable preparsing") DEFINE_bool(always_full_compiler, false,"try to use the dedicated run-once backend for all code") DEFINE_bool(trace_bailout, false,"print reasons for falling back to using the classic V8 backend") DEFINE_bool(compilation_cache, true,"enable compilation cache") DEFINE_bool(cache_prototype_transitions, true,"cache prototype transitions") DEFINE_bool(trace_debug_json, false,"trace debugging JSON request/response") DEFINE_bool(debugger_auto_break, true,"automatically set the debug break flag when debugger commands are ""in the queue") DEFINE_bool(enable_liveedit, true,"enable liveedit experimental feature") DEFINE_bool(break_on_abort, true,"always cause a debug break before aborting") DEFINE_int(stack_size, kPointerSize *123,"default size of stack region v8 is allowed to use (in kBytes)") DEFINE_int(max_stack_trace_source_length, 300,"maximum length of function source code printed in a stack trace.") DEFINE_bool(always_inline_smi_code, false,"always inline smi code in non-opt code") DEFINE_int(max_new_space_size, 0,"max size of the new generation (in kBytes)") DEFINE_int(max_old_space_size, 0,"max size of the old generation (in Mbytes)") DEFINE_int(max_executable_size, 0,"max size of executable memory (in Mbytes)") DEFINE_bool(gc_global, false,"always perform global GCs") DEFINE_int(gc_interval,-1,"garbage collect after <n> allocations") DEFINE_bool(trace_gc, false,"print one trace line following each garbage collection") DEFINE_bool(trace_gc_nvp, false,"print one detailed trace line in name=value format ""after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false,"print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false,"print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false,"report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true,"garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true,"flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true,"use incremental marking") DEFINE_bool(incremental_marking_steps, true,"do incremental marking steps") DEFINE_bool(trace_incremental_marking, false,"trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true,"Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false,"Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true,"use inline caching") DEFINE_bool(native_code_counters, false,"generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false,"Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true,"Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false,"Never perform compaction on full GC - testing only") DEFINE_bool(compact_code_space, true,"Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true,"Flush inline caches prior to mark compact collection and ""flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0,"Default seed for initializing random generator ""(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true,"allows verbose printing") DEFINE_bool(allow_natives_syntax, false,"allow natives syntax") DEFINE_bool(trace_sim, false,"Trace simulator execution") DEFINE_bool(check_icache, false,"Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0,"Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8,"Stack alingment in bytes in simulator (4 or 8, 8 is default)") DEFINE_bool(trace_exception, false,"print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false,"preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true,"randomize hashes to avoid predictable hash collisions ""(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0,"Fixed seed to use to hash property keys (0 means random)""(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false,"activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true,"generate optimized regexp code") DEFINE_bool(testing_bool_flag, true,"testing_bool_flag") DEFINE_int(testing_int_flag, 13,"testing_int_flag") DEFINE_float(testing_float_flag, 2.5,"float-flag") DEFINE_string(testing_string_flag,"Hello, world!","string-flag") DEFINE_int(testing_prng_seed, 42,"Seed used for threading test randomness") DEFINE_string(testing_serialization_file,"/tmp/serdes","file in which to serialize heap") DEFINE_bool(help, false,"Print usage message, including flags, on console") DEFINE_bool(dump_counters, false,"Dump counters on exit") DEFINE_string(map_counters,"","Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT,"Pass all remaining arguments to the script. Alias for \"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#47"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2 namespace{struct Flag{enum FlagType{TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING, TYPE_ARGS} name
LDateField(LOperand *date, Smi *index)
LLoadGlobalGeneric(LOperand *global_object)
LCheckSmi(LOperand *value)
LLoadFunctionPrototype(LOperand *function)
LStringLength(LOperand *string)
Handle< Object > name() const
uint32_t additional_index() const
LLabel(HBasicBlock *block)
LJSArrayLength(LOperand *value)
int true_block_id() const
LChunkBuilder(CompilationInfo *info, HGraph *graph, LAllocator *allocator)
LOuterContext(LOperand *context)
static const int kNumAllocatableRegisters
Handle< Object > name() const
Handle< Map > transition() const
LEnvironment * environment() const
LValueOf(LOperand *value)
virtual HBasicBlock * SuccessorAt(int i)=0
LCheckNonSmi(LOperand *value)
#define ASSERT(condition)
LBoundsCheck(LOperand *index, LOperand *length)
virtual const char * Mnemonic() const =0
LFixedArrayBaseLength(LOperand *value)
LClassOfTestAndBranch(LOperand *value, LOperand *temp, LOperand *temp2)
LCheckInstanceType(LOperand *value)
virtual void PrintDataTo(StringStream *stream)
LModI(LOperand *left, LOperand *right, LOperand *temp)
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
int gap_instructions_size()
uint32_t additional_index() const
LInvokeFunction(LOperand *function)
LHasInstanceTypeAndBranch(LOperand *value)
LChunk(CompilationInfo *info, HGraph *graph)
LStoreKeyedGeneric(LOperand *object, LOperand *key, LOperand *value)
StrictModeFlag strict_mode_flag()
LNumberTagD(LOperand *value, LOperand *temp)
LTransitionElementsKind(LOperand *object, LOperand *new_map_temp, LOperand *temp_reg)
LNumberUntagD(LOperand *value)
LIsNilAndBranch(LOperand *value, LOperand *temp)
#define DECLARE_PREDICATE(type)
LForInPrepareMap(LOperand *object)
void set_hydrogen_value(HValue *value)
LLoadNamedField(LOperand *object)
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
LPower(LOperand *left, LOperand *right)
virtual bool HasResult() const =0
Handle< JSObject > holder() const
virtual Opcode opcode() const =0
Handle< Object > name() const
Handle< Map > map() const
EmbeddedContainer< LOperand *, R > results_
ElementsKind elements_kind() const
LLabel * replacement() const
LDeleteProperty(LOperand *obj, LOperand *key)
virtual LOperand * TempAt(int i)=0
LDivI(LOperand *left, LOperand *right, LOperand *temp)
Handle< JSFunction > known_function()
LAddI(LOperand *left, LOperand *right)
bool is_loop_header() const
LCmpObjectEqAndBranch(LOperand *left, LOperand *right)
LOperand ** SpilledDoubleRegisterArray()
int spill_slot_count() const
LOperand * InputAt(int i)
LElementsKind(LOperand *value)
virtual Opcode opcode() const
HBasicBlock * SuccessorAt(int i)
LStoreKeyedFastElement(LOperand *obj, LOperand *key, LOperand *val)
LIsStringAndBranch(LOperand *value, LOperand *temp)
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastDoubleElement,"load-keyed-fast-double-element") LOperand *elements()
LLoadKeyedFastElement(LOperand *elements, LOperand *key)
bool HasEnvironment() const
virtual bool HasResult() const
LBitI(LOperand *left, LOperand *right)
virtual int TempCount()=0
LLoadExternalArrayPointer(LOperand *object)
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
virtual bool IsControl() const
LTypeofIsAndBranch(LOperand *value)
virtual LOperand * result()=0
LStoreGlobalGeneric(LOperand *global_object, LOperand *value)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env)
virtual bool IsControl() const
LCmpMapAndBranch(LOperand *value)
LStringCharFromCode(LOperand *char_code)
HBasicBlock * block() const
LSubI(LOperand *left, LOperand *right)
TranscendentalCache::Type transcendental_type()
virtual void PrintTo(StringStream *stream)
virtual void PrintDataTo(StringStream *stream)
LStoreKeyedFastDoubleElement(LOperand *elements, LOperand *key, LOperand *val)
#define DECLARE_HYDROGEN_ACCESSOR(type)
#define T(name, string, precedence)
LToFastProperties(LOperand *value)
LInstanceOf(LOperand *left, LOperand *right)
LIsObjectAndBranch(LOperand *value)
LMulI(LOperand *left, LOperand *right)
LStoreKeyedSpecializedArrayElement(LOperand *external_pointer, LOperand *key, LOperand *val)
virtual int SuccessorCount()=0
LRandom(LOperand *global_object)
LForInCacheArray(LOperand *map)
virtual bool IsControl() const
LPointerMap * pointer_map() const
LShiftI(Token::Value op, LOperand *left, LOperand *right, bool can_deopt)
Label * GetAssemblyLabel(int block_id) const
int first_instruction_index() const
ElementsKind elements_kind() const
EmbeddedContainer< LOperand *, I > inputs_
LLabel * GetLabel(int block_id) const
virtual bool IsGap() const
LTaggedToI(LOperand *value, LOperand *temp)
LHasCachedArrayIndexAndBranch(LOperand *value)
LCheckFunction(LOperand *value)
const ZoneList< Handle< JSFunction > > * inlined_closures() const
LAccessArgumentsAt(LOperand *arguments, LOperand *length, LOperand *index)
LArithmeticT(Token::Value op, LOperand *left, LOperand *right)
virtual void PrintDataTo(StringStream *stream)
CompilationInfo * info() const
void set_gap_instructions_size(int gap_instructions_size)
LLoadElements(LOperand *object)
LCmpConstantEqAndBranch(LOperand *left)
virtual void CompileToNative(LCodeGen *generator)=0
virtual bool IsGap() const
static const int kNumAllocatableRegisters
LStringAdd(LOperand *left, LOperand *right)
LLoadNamedFieldPolymorphic(LOperand *object)
LCheckMaps(LOperand *value)
bool IsLoopHeader() const
LStoreNamedField(LOperand *object, LOperand *value, LOperand *temp)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
LLoadKeyedFastDoubleElement(LOperand *elements, LOperand *key)
LArithmeticD(Token::Value op, LOperand *left, LOperand *right)
uint32_t additional_index() const
const ZoneList< LPointerMap * > * pointer_maps() const
virtual void PrintDataTo(StringStream *stream)
LUnaryMathOperation(LOperand *value)
StrictModeFlag strict_mode_flag()
LEnvironment * GetDeferredLazyDeoptimizationEnvironment()
STATIC_ASSERT(R==0||R==1)
void set_replacement(LLabel *label)
StrictModeFlag strict_mode_flag()
LCmpIDAndBranch(LOperand *left, LOperand *right)
LParallelMove * GetParallelMove(InnerPosition pos)
virtual Opcode opcode() const
LInstanceOfKnownGlobal(LOperand *value, LOperand *temp)
bool HasPointerMap() const
LCheckMapValue(LOperand *value, LOperand *map)
LIsSmiAndBranch(LOperand *value)
uint32_t additional_index() const
LInteger32ToDouble(LOperand *value)
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement,"load-keyed-specialized-array-element") LOperand *external_pointer()
int LookupDestination(int block_id) const
LCheckPrototypeMaps(LOperand *temp)
LCallNew(LOperand *constructor)
LClampIToUint8(LOperand *value)
virtual int InputCount()=0
bool NeedsCanonicalization()
LIn(LOperand *key, LOperand *object)
LIsConstructCallAndBranch(LOperand *temp)
static HValue * cast(HValue *value)
LLoadNamedGeneric(LOperand *object)
DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,"instance-of-known-global") Handle< JSFunction > function() const
HValue * hydrogen_value() const
LPushArgument(LOperand *value)
LStringCompareAndBranch(LOperand *left, LOperand *right)
bool HasReplacement() const
LBitNotI(LOperand *value)
LApplyArguments(LOperand *function, LOperand *receiver, LOperand *length, LOperand *elements)
LClampTToUint8(LOperand *value, LOperand *temp, LOperand *temp2)
Handle< Map > original_map()
LCallFunction(LOperand *function)
LStoreNamedGeneric(LOperand *object, LOperand *value)
LLoadKeyedGeneric(LOperand *obj, LOperand *key)
DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement,"store-keyed-specialized-array-element") LOperand *external_pointer()
LStoreGlobalCell(LOperand *value, LOperand *temp)
LIsUndetectableAndBranch(LOperand *value, LOperand *temp)
const ZoneList< LInstruction * > * instructions() const
LSmiUntag(LOperand *value, bool needs_check)
LLoadKeyedSpecializedArrayElement(LOperand *external_pointer, LOperand *key)
virtual void PrintDataTo(StringStream *stream)
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)
void AddInlinedClosure(Handle< JSFunction > closure)