28 #ifndef V8_MIPS_LITHIUM_MIPS_H_
29 #define V8_MIPS_LITHIUM_MIPS_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) \
185 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
186 virtual Opcode opcode() const { return LInstruction::k##type; } \
187 virtual void CompileToNative(LCodeGen* generator); \
188 virtual const char* Mnemonic() const { return mnemonic; } \
189 static L##type* cast(LInstruction* instr) { \
190 ASSERT(instr->Is##type()); \
191 return reinterpret_cast<L##type*>(instr); \
195 #define DECLARE_HYDROGEN_ACCESSOR(type) \
196 H##type* hydrogen() const { \
197 return H##type::cast(hydrogen_value()); \
201 class LInstruction:
public ZoneObject {
204 : environment_(
NULL),
205 hydrogen_value_(
NULL),
210 virtual const char*
Mnemonic()
const = 0;
217 #define DECLARE_OPCODE(type) k##type,
220 #undef DECLARE_OPCODE
226 #define DECLARE_PREDICATE(type) \
227 bool Is##type() const { return opcode() == k##type; }
229 #undef DECLARE_PREDICATE
233 virtual bool IsGap()
const {
return false; }
275 bool is_save_doubles_;
282 template<
int R,
int I,
int T>
283 class LTemplateInstruction:
public LInstruction {
304 class LGap:
public LTemplateInstruction<0, 0, 0> {
315 virtual bool IsGap()
const {
return true; }
319 return reinterpret_cast<LGap*
>(instr);
336 if (parallel_moves_[pos] ==
NULL) {
339 return parallel_moves_[pos];
343 return parallel_moves_[pos];
352 class LInstructionGap:
public LGap {
360 class LGoto:
public LTemplateInstruction<0, 0, 0> {
375 class LLazyBailout:
public LTemplateInstruction<0, 0, 0> {
387 int gap_instructions_size_;
391 class LDeoptimize:
public LTemplateInstruction<0, 0, 0> {
397 class LLabel:
public LGap {
400 :
LGap(block), replacement_(
NULL) { }
419 class LParameter:
public LTemplateInstruction<1, 0, 0> {
425 class LCallStub:
public LTemplateInstruction<1, 0, 0> {
431 return hydrogen()->transcendental_type();
436 class LUnknownOSRValue:
public LTemplateInstruction<1, 0, 0> {
442 template<
int I,
int T>
443 class LControlInstruction:
public LTemplateInstruction<0, I, T> {
459 class LWrapReceiver:
public LTemplateInstruction<1, 2, 0> {
473 class LApplyArguments:
public LTemplateInstruction<1, 4, 0> {
494 class LAccessArgumentsAt:
public LTemplateInstruction<1, 3, 0> {
512 class LArgumentsLength:
public LTemplateInstruction<1, 1, 0> {
522 class LArgumentsElements:
public LTemplateInstruction<1, 0, 0> {
529 class LModI: public LTemplateInstruction<1, 2, 3> {
559 class
LDivI: public LTemplateInstruction<1, 2, 0> {
571 class
LMulI: public LTemplateInstruction<1, 2, 1> {
596 return hydrogen()->GetInputRepresentation().IsDouble();
603 class LUnaryMathOperation:
public LTemplateInstruction<1, 1, 1> {
618 class LCmpObjectEqAndBranch:
public LControlInstruction<2, 0> {
626 "cmp-object-eq-and-branch")
638 "cmp-constant-eq-and-branch")
659 class LIsObjectAndBranch:
public LControlInstruction<1, 1> {
708 "is-undetectable-and-branch")
723 "string-compare-and-branch")
726 Token::
Value op()
const {
return hydrogen()->token(); }
732 class LHasInstanceTypeAndBranch:
public LControlInstruction<1, 0> {
739 "has-instance-type-and-branch")
764 "has-cached-array-index-and-branch")
779 "class-of-test-and-branch")
786 class
LCmpT: public LTemplateInstruction<1, 2, 0> {
800 class LInstanceOf:
public LTemplateInstruction<1, 2, 0> {
811 class LInstanceOfKnownGlobal:
public LTemplateInstruction<1, 1, 1> {
819 "instance-of-known-global")
824 return lazy_deopt_env_;
827 lazy_deopt_env_ = env;
835 class LBoundsCheck:
public LTemplateInstruction<0, 2, 0> {
849 class LBitI:
public LTemplateInstruction<1, 2, 0> {
863 class
LShiftI: public LTemplateInstruction<1, 2, 0> {
866 : op_(op), can_deopt_(can_deopt) {
883 class
LSubI: public LTemplateInstruction<1, 2, 0> {
895 class
LConstantI: public LTemplateInstruction<1, 0, 0> {
900 int32_t value()
const {
return hydrogen()->Integer32Value(); }
904 class LConstantD:
public LTemplateInstruction<1, 0, 0> {
909 double value()
const {
return hydrogen()->DoubleValue(); }
913 class LConstantT:
public LTemplateInstruction<1, 0, 0> {
922 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, 1> {
1003 class
LDateField: public LTemplateInstruction<1, 1, 1> {
1012 Smi* index()
const {
return index_; }
1019 class LThrow:
public LTemplateInstruction<0, 1, 0> {
1029 class LBitNotI:
public LTemplateInstruction<1, 1, 0> {
1039 class LAddI:
public LTemplateInstruction<1, 2, 0> {
1051 class
LPower: public LTemplateInstruction<1, 2, 0> {
1063 class
LRandom: public LTemplateInstruction<1, 1, 0> {
1074 class
LArithmeticD: public LTemplateInstruction<1, 2, 0> {
1086 virtual const char*
Mnemonic()
const;
1093 class LArithmeticT:
public LTemplateInstruction<1, 2, 0> {
1103 virtual const char*
Mnemonic()
const;
1112 class LReturn:
public LTemplateInstruction<0, 1, 0> {
1122 class LLoadNamedField:
public LTemplateInstruction<1, 1, 0> {
1146 class LLoadNamedGeneric:
public LTemplateInstruction<1, 1, 0> {
1160 class LLoadFunctionPrototype:
public LTemplateInstruction<1, 1, 0> {
1173 class LLoadElements:
public LTemplateInstruction<1, 1, 0> {
1183 class LLoadExternalArrayPointer:
public LTemplateInstruction<1, 1, 0> {
1190 "load-external-array-pointer")
1194 class LLoadKeyedFastElement:
public LTemplateInstruction<1, 2, 0> {
1210 class LLoadKeyedFastDoubleElement:
public LTemplateInstruction<1, 2, 0> {
1218 "load-keyed-fast-double-element")
1227 class LLoadKeyedSpecializedArrayElement:
public LTemplateInstruction<1, 2, 0> {
1231 inputs_[0] = external_pointer;
1236 "load-keyed-specialized-array-element")
1242 return hydrogen()->elements_kind();
1248 class LLoadKeyedGeneric:
public LTemplateInstruction<1, 2, 0> {
1262 class LLoadGlobalCell:
public LTemplateInstruction<1, 0, 0> {
1269 class LLoadGlobalGeneric: public LTemplateInstruction<1, 1, 0> {
1284 class LStoreGlobalCell:
public LTemplateInstruction<0, 1, 1> {
1298 class LStoreGlobalGeneric:
public LTemplateInstruction<0, 2, 0> {
1316 class LLoadContextSlot:
public LTemplateInstruction<1, 1, 0> {
1332 class LStoreContextSlot:
public LTemplateInstruction<0, 2, 0> {
1350 class LPushArgument:
public LTemplateInstruction<0, 1, 0> {
1360 class LDrop:
public LTemplateInstruction<0, 0, 0> {
1362 explicit LDrop(
int count) : count_(count) { }
1380 class
LContext: public LTemplateInstruction<1, 0, 0> {
1386 class LOuterContext:
public LTemplateInstruction<1, 1, 0> {
1398 class LDeclareGlobals:
public LTemplateInstruction<0, 0, 0> {
1405 class LGlobalObject: public LTemplateInstruction<1, 1, 0> {
1417 class LGlobalReceiver:
public LTemplateInstruction<1, 1, 0> {
1429 class LCallConstantFunction:
public LTemplateInstruction<1, 0, 0> {
1437 int arity()
const {
return hydrogen()->argument_count() - 1; }
1441 class LInvokeFunction:
public LTemplateInstruction<1, 1, 0> {
1454 int arity()
const {
return hydrogen()->argument_count() - 1; }
1459 class LCallKeyed:
public LTemplateInstruction<1, 1, 0> {
1470 int arity()
const {
return hydrogen()->argument_count() - 1; }
1475 class LCallNamed:
public LTemplateInstruction<1, 0, 0> {
1483 int arity()
const {
return hydrogen()->argument_count() - 1; }
1487 class LCallFunction:
public LTemplateInstruction<1, 1, 0> {
1497 int arity()
const {
return hydrogen()->argument_count() - 1; }
1501 class LCallGlobal:
public LTemplateInstruction<1, 0, 0> {
1509 int arity()
const {
return hydrogen()->argument_count() - 1; }
1513 class LCallKnownGlobal:
public LTemplateInstruction<1, 0, 0> {
1521 int arity()
const {
return hydrogen()->argument_count() - 1; }
1525 class LCallNew:
public LTemplateInstruction<1, 1, 0> {
1536 int arity()
const {
return hydrogen()->argument_count() - 1; }
1540 class LCallRuntime:
public LTemplateInstruction<1, 0, 0> {
1546 int arity()
const {
return hydrogen()->argument_count(); }
1550 class LInteger32ToDouble:
public LTemplateInstruction<1, 1, 0> {
1560 class LNumberTagI:
public LTemplateInstruction<1, 1, 0> {
1570 class LNumberTagD:
public LTemplateInstruction<1, 1, 2> {
1583 class LDoubleToI:
public LTemplateInstruction<1, 1, 2> {
1594 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
1599 class LTaggedToI:
public LTemplateInstruction<1, 1, 3> {
1614 bool truncating() {
return hydrogen()->CanTruncateToInt32(); }
1618 class LSmiTag:
public LTemplateInstruction<1, 1, 0> {
1628 class LNumberUntagD:
public LTemplateInstruction<1, 1, 0> {
1639 class
LSmiUntag: public LTemplateInstruction<1, 1, 0> {
1642 : needs_check_(needs_check) {
1648 bool needs_check()
const {
return needs_check_; }
1655 class LStoreNamedField:
public LTemplateInstruction<0, 2, 1> {
1673 int offset() {
return hydrogen()->offset(); }
1678 class LStoreNamedGeneric:
public LTemplateInstruction<0, 2, 0> {
1697 class LStoreKeyedFastElement:
public LTemplateInstruction<0, 3, 0> {
1706 "store-keyed-fast-element")
1718 class LStoreKeyedFastDoubleElement:
public LTemplateInstruction<0, 3, 0> {
1729 "store-keyed-fast-double-element")
1743 class LStoreKeyedGeneric:
public LTemplateInstruction<0, 3, 0> {
1762 class LStoreKeyedSpecializedArrayElement:
public LTemplateInstruction<0, 3, 0> {
1767 inputs_[0] = external_pointer;
1773 "store-keyed-specialized-array-element")
1780 return hydrogen()->elements_kind();
1786 class LTransitionElementsKind:
public LTemplateInstruction<1, 1, 2> {
1792 temps_[0] = new_map_temp;
1797 "transition-elements-kind")
1810 class LStringAdd:
public LTemplateInstruction<1, 2, 0> {
1826 class LStringCharCodeAt:
public LTemplateInstruction<1, 2, 0> {
1841 class LStringCharFromCode:
public LTemplateInstruction<1, 1, 0> {
1854 class LStringLength:
public LTemplateInstruction<1, 1, 0> {
1867 class LCheckFunction:
public LTemplateInstruction<0, 1, 0> {
1891 class
LCheckMaps: public LTemplateInstruction<0, 1, 0> {
1917 class LCheckSmi:
public LTemplateInstruction<0, 1, 0> {
1927 class LCheckNonSmi:
public LTemplateInstruction<0, 1, 0> {
1937 class LClampDToUint8:
public LTemplateInstruction<1, 1, 1> {
1950 class LClampIToUint8:
public LTemplateInstruction<1, 1, 0> {
1962 class LClampTToUint8:
public LTemplateInstruction<1, 1, 1> {
1975 class LAllocateObject:
public LTemplateInstruction<1, 0, 2> {
1987 class
LFastLiteral: public LTemplateInstruction<1, 0, 0> {
2024 class LToFastProperties:
public LTemplateInstruction<1, 1, 0> {
2035 class
LTypeof: public LTemplateInstruction<1, 1, 0> {
2045 class LTypeofIsAndBranch:
public LControlInstruction<1, 0> {
2060 class LIsConstructCallAndBranch:
public LControlInstruction<0, 1> {
2067 "is-construct-call-and-branch")
2071 class LDeleteProperty:
public LTemplateInstruction<1, 2, 0> {
2085 class LOsrEntry:
public LTemplateInstruction<0, 0, 0> {
2091 LOperand** SpilledRegisterArray() {
return register_spills_; }
2094 void MarkSpilledRegister(
int allocation_index,
LOperand* spill_operand);
2095 void MarkSpilledDoubleRegister(
int allocation_index,
2108 class LStackCheck:
public LTemplateInstruction<0, 0, 0> {
2113 Label* done_label() {
return &done_label_; }
2120 class LIn:
public LTemplateInstruction<1, 2, 0> {
2134 class LForInPrepareMap:
public LTemplateInstruction<1, 1, 0> {
2146 class LForInCacheArray:
public LTemplateInstruction<1, 1, 0> {
2162 class LCheckMapValue:
public LTemplateInstruction<0, 2, 0> {
2176 class LLoadFieldByIndex:
public LTemplateInstruction<1, 2, 0> {
2190 class LChunkBuilder;
2191 class LChunk:
public ZoneObject {
2193 explicit LChunk(CompilationInfo* info, HGraph* graph);
2195 void AddInstruction(
LInstruction* instruction, HBasicBlock* block);
2196 LConstantOperand* DefineConstantOperand(HConstant* constant);
2198 Representation LookupLiteralRepresentation(LConstantOperand* operand)
const;
2200 int GetNextSpillIndex(
bool is_double);
2201 LOperand* GetNextSpillSlot(
bool is_double);
2203 int ParameterAt(
int index);
2204 int GetParameterStackSlot(
int index)
const;
2206 CompilationInfo*
info()
const {
return info_; }
2210 LGap* GetGapAt(
int index)
const;
2211 bool IsGapAt(
int index)
const;
2212 int NearestGapPos(
int index)
const;
2213 void MarkEmptyBlocks();
2216 HBasicBlock* block = graph_->blocks()->at(block_id);
2221 LLabel* cur = GetLabel(block_id);
2222 while (cur->replacement() !=
NULL) {
2223 cur = cur->replacement();
2225 return cur->block_id();
2228 LLabel* label = GetLabel(block_id);
2229 ASSERT(!label->HasReplacement());
2230 return label->label();
2234 return &inlined_closures_;
2238 inlined_closures_.Add(closure, zone());
2244 int spill_slot_count_;
2245 CompilationInfo* info_;
2259 zone_(graph->zone()),
2261 current_instruction_(
NULL),
2262 current_block_(
NULL),
2265 allocator_(allocator),
2266 position_(RelocInfo::kNoPosition),
2267 instruction_pending_deoptimization_environment_(
NULL),
2268 pending_deoptimization_ast_id_(
AstNode::kNoNumber) { }
2274 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2286 LChunk* chunk()
const {
return chunk_; }
2287 CompilationInfo* info()
const {
return info_; }
2288 HGraph* graph()
const {
return graph_; }
2289 Zone* zone()
const {
return zone_; }
2291 bool is_unused()
const {
return status_ == UNUSED; }
2292 bool is_building()
const {
return status_ == BUILDING; }
2293 bool is_done()
const {
return status_ ==
DONE; }
2294 bool is_aborted()
const {
return status_ == ABORTED; }
2296 void Abort(
const char* format, ...);
2299 LUnallocated* ToUnallocated(Register reg);
2304 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
2332 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2345 template<
int I,
int T>
2346 LInstruction* Define(LTemplateInstruction<1, I, T>* instr,
2348 template<
int I,
int T>
2349 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr);
2350 template<
int I,
int T>
2351 LInstruction* DefineAsSpilled(LTemplateInstruction<1, I, T>* instr,
2353 template<
int I,
int T>
2354 LInstruction* DefineSameAsFirst(LTemplateInstruction<1, I, T>* instr);
2355 template<
int I,
int T>
2356 LInstruction* DefineFixed(LTemplateInstruction<1, I, T>* instr,
2358 template<
int I,
int T>
2359 LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr,
2364 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2371 HInstruction* hinstr,
2372 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2374 LEnvironment* CreateEnvironment(HEnvironment* hydrogen_env,
2375 int* argument_index_accumulator);
2377 void VisitInstruction(HInstruction* current);
2379 void DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block);
2383 HArithmeticBinaryOperation* instr);
2385 HArithmeticBinaryOperation* instr);
2388 CompilationInfo* info_;
2389 HGraph*
const graph_;
2392 HInstruction* current_instruction_;
2393 HBasicBlock* current_block_;
2394 HBasicBlock* next_block_;
2395 int argument_count_;
2396 LAllocator* allocator_;
2398 LInstruction* instruction_pending_deoptimization_environment_;
2399 int pending_deoptimization_ast_id_;
2404 #undef DECLARE_HYDROGEN_ACCESSOR
2405 #undef DECLARE_CONCRETE_INSTRUCTION
2409 #endif // V8_MIPS_LITHIUM_MIPS_H_
LCmpT(LOperand *left, LOperand *right)
LStringCharCodeAt(LOperand *string, LOperand *index)
LDateField(LOperand *date, LOperand *temp, Smi *index)
LArgumentsLength(LOperand *elements)
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
LLoadContextSlot(LOperand *context)
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
LStoreKeyedGeneric(LOperand *obj, LOperand *key, LOperand *val)
LClassOfTestAndBranch(LOperand *value, LOperand *temp)
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_
uint32_t additional_index() const
LWrapReceiver(LOperand *receiver, LOperand *function)
#define DECLARE_OPCODE(type)
LParallelMove * GetOrCreateParallelMove(InnerPosition pos, Zone *zone)
LNumberTagI(LOperand *value)
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
LLoadGlobalGeneric(LOperand *global_object)
LCheckSmi(LOperand *value)
LLoadFunctionPrototype(LOperand *function)
LStringLength(LOperand *string)
LIsObjectAndBranch(LOperand *value, LOperand *temp)
Handle< Object > name() const
LUnaryMathOperation(LOperand *value, LOperand *temp)
uint32_t additional_index() const
LStoreNamedField(LOperand *obj, LOperand *val, LOperand *temp)
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
LStoreContextSlot(LOperand *context, LOperand *value)
virtual HBasicBlock * SuccessorAt(int i)=0
LCheckNonSmi(LOperand *value)
#define ASSERT(condition)
LBoundsCheck(LOperand *index, LOperand *length)
LClampTToUint8(LOperand *value, LOperand *temp)
virtual const char * Mnemonic() const =0
LFixedArrayBaseLength(LOperand *value)
LCheckPrototypeMaps(LOperand *temp1, LOperand *temp2)
LAllocateObject(LOperand *temp1, LOperand *temp2)
LCheckInstanceType(LOperand *value)
virtual void PrintDataTo(StringStream *stream)
int gap_instructions_size()
uint32_t additional_index() const
#define DECLARE_PREDICATE(type)
LInvokeFunction(LOperand *function)
LHasInstanceTypeAndBranch(LOperand *value)
StrictModeFlag strict_mode_flag()
LTransitionElementsKind(LOperand *object, LOperand *new_map_temp, LOperand *temp_reg)
LNumberUntagD(LOperand *value)
LForInPrepareMap(LOperand *object)
void set_hydrogen_value(HValue *value)
LLoadNamedField(LOperand *object)
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
LPower(LOperand *left, LOperand *right)
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)
virtual bool HasResult() const =0
Handle< JSObject > holder() const
DwVfpRegister DoubleRegister
virtual Opcode opcode() const =0
Handle< Object > name() const
Handle< Map > map() const
LGlobalObject(LOperand *context)
EmbeddedContainer< LOperand *, R > results_
ElementsKind elements_kind() const
LLabel * replacement() const
LDeleteProperty(LOperand *obj, LOperand *key)
virtual LOperand * TempAt(int i)=0
Handle< JSFunction > known_function()
LAddI(LOperand *left, LOperand *right)
bool is_loop_header() const
LCmpObjectEqAndBranch(LOperand *left, LOperand *right)
LOperand ** SpilledDoubleRegisterArray()
LNumberTagD(LOperand *value, LOperand *temp1, LOperand *temp2)
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()
LStoreNamedGeneric(LOperand *obj, LOperand *val)
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
LDoubleToI(LOperand *value, LOperand *temp1, LOperand *temp2)
LStoreGlobalGeneric(LOperand *global_object, LOperand *value)
virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment *env)
virtual bool IsControl() const
LStringCharFromCode(LOperand *char_code)
HBasicBlock * block() const
LSubI(LOperand *left, LOperand *right)
TranscendentalCache::Type transcendental_type()
LMulI(LOperand *left, LOperand *right, LOperand *temp)
virtual void PrintTo(StringStream *stream)
LDivI(LOperand *left, LOperand *right)
virtual void PrintDataTo(StringStream *stream)
LStoreKeyedFastDoubleElement(LOperand *elements, LOperand *key, LOperand *val)
#define T(name, string, precedence)
LToFastProperties(LOperand *value)
LInstanceOf(LOperand *left, LOperand *right)
LStoreKeyedSpecializedArrayElement(LOperand *external_pointer, LOperand *key, LOperand *val)
LCmpMapAndBranch(LOperand *value, LOperand *temp)
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
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
#define DECLARE_HYDROGEN_ACCESSOR(type)
virtual bool IsGap() const
static const int kNumAllocatableRegisters
LStringAdd(LOperand *left, LOperand *right)
LLoadNamedFieldPolymorphic(LOperand *object)
LCheckMaps(LOperand *value)
LModI(LOperand *left, LOperand *right, LOperand *temp1, LOperand *temp2, LOperand *temp3)
bool IsLoopHeader() const
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)
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
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)
LTaggedToI(LOperand *value, LOperand *temp1, LOperand *temp2, LOperand *temp3)
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
LValueOf(LOperand *value, LOperand *temp)
LBitNotI(LOperand *value)
LApplyArguments(LOperand *function, LOperand *receiver, LOperand *length, LOperand *elements)
LModI(LOperand *left, LOperand *right)
Handle< Map > original_map()
LCallFunction(LOperand *function)
LIsNilAndBranch(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)
void AddInlinedClosure(Handle< JSFunction > closure)