Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/x64/lithium-codegen-x64.h

Issue 11414262: Revert 13105: "Enable stub generation using Hydrogen/Lithium." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/x64/deoptimizer-x64.cc ('k') | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 deoptimizations_(4, info->zone()), 56 deoptimizations_(4, info->zone()),
57 jump_table_(4, info->zone()), 57 jump_table_(4, info->zone()),
58 deoptimization_literals_(8, info->zone()), 58 deoptimization_literals_(8, info->zone()),
59 inlined_function_count_(0), 59 inlined_function_count_(0),
60 scope_(info->scope()), 60 scope_(info->scope()),
61 status_(UNUSED), 61 status_(UNUSED),
62 translations_(info->zone()), 62 translations_(info->zone()),
63 deferred_(8, info->zone()), 63 deferred_(8, info->zone()),
64 osr_pc_offset_(-1), 64 osr_pc_offset_(-1),
65 last_lazy_deopt_pc_(0), 65 last_lazy_deopt_pc_(0),
66 frame_is_built_(false),
67 safepoints_(info->zone()), 66 safepoints_(info->zone()),
68 resolver_(this), 67 resolver_(this),
69 expected_safepoint_kind_(Safepoint::kSimple) { 68 expected_safepoint_kind_(Safepoint::kSimple) {
70 PopulateDeoptimizationLiteralsWithInlinedFunctions(); 69 PopulateDeoptimizationLiteralsWithInlinedFunctions();
71 } 70 }
72 71
73 // Simple accessors. 72 // Simple accessors.
74 MacroAssembler* masm() const { return masm_; } 73 MacroAssembler* masm() const { return masm_; }
75 CompilationInfo* info() const { return info_; } 74 CompilationInfo* info() const { return info_; }
76 Isolate* isolate() const { return info_->isolate(); } 75 Isolate* isolate() const { return info_->isolate(); }
77 Factory* factory() const { return isolate()->factory(); } 76 Factory* factory() const { return isolate()->factory(); }
78 Heap* heap() const { return isolate()->heap(); } 77 Heap* heap() const { return isolate()->heap(); }
79 Zone* zone() const { return zone_; } 78 Zone* zone() const { return zone_; }
80 79
81 bool NeedsEagerFrame() const {
82 return GetStackSlotCount() > 0 ||
83 info()->is_non_deferred_calling() ||
84 !info()->IsStub();
85 }
86 bool NeedsDeferredFrame() const {
87 return !NeedsEagerFrame() && info()->is_deferred_calling();
88 }
89
90 // Support for converting LOperands to assembler types. 80 // Support for converting LOperands to assembler types.
91 Register ToRegister(LOperand* op) const; 81 Register ToRegister(LOperand* op) const;
92 XMMRegister ToDoubleRegister(LOperand* op) const; 82 XMMRegister ToDoubleRegister(LOperand* op) const;
93 bool IsInteger32Constant(LConstantOperand* op) const; 83 bool IsInteger32Constant(LConstantOperand* op) const;
94 int ToInteger32(LConstantOperand* op) const; 84 int ToInteger32(LConstantOperand* op) const;
95 double ToDouble(LConstantOperand* op) const; 85 double ToDouble(LConstantOperand* op) const;
96 bool IsTaggedConstant(LConstantOperand* op) const; 86 bool IsTaggedConstant(LConstantOperand* op) const;
97 Handle<Object> ToHandle(LConstantOperand* op) const; 87 Handle<Object> ToHandle(LConstantOperand* op) const;
98 Operand ToOperand(LOperand* op) const; 88 Operand ToOperand(LOperand* op) const;
99 89
(...skipping 13 matching lines...) Expand all
113 void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr); 103 void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
114 void DoDeferredStackCheck(LStackCheck* instr); 104 void DoDeferredStackCheck(LStackCheck* instr);
115 void DoDeferredRandom(LRandom* instr); 105 void DoDeferredRandom(LRandom* instr);
116 void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr); 106 void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
117 void DoDeferredStringCharFromCode(LStringCharFromCode* instr); 107 void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
118 void DoDeferredAllocateObject(LAllocateObject* instr); 108 void DoDeferredAllocateObject(LAllocateObject* instr);
119 void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr, 109 void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
120 Label* map_check); 110 Label* map_check);
121 111
122 void DoCheckMapCommon(Register reg, Handle<Map> map, 112 void DoCheckMapCommon(Register reg, Handle<Map> map,
123 CompareMapMode mode, LInstruction* instr); 113 CompareMapMode mode, LEnvironment* env);
124 114
125 // Parallel move support. 115 // Parallel move support.
126 void DoParallelMove(LParallelMove* move); 116 void DoParallelMove(LParallelMove* move);
127 void DoGap(LGap* instr); 117 void DoGap(LGap* instr);
128 118
129 // Emit frame translation commands for an environment. 119 // Emit frame translation commands for an environment.
130 void WriteTranslation(LEnvironment* environment, 120 void WriteTranslation(LEnvironment* environment,
131 Translation* translation, 121 Translation* translation,
132 int* arguments_index, 122 int* arguments_index,
133 int* arguments_count); 123 int* arguments_count);
(...skipping 27 matching lines...) Expand all
161 int GetNextEmittedBlock(int block); 151 int GetNextEmittedBlock(int block);
162 152
163 void EmitClassOfTest(Label* if_true, 153 void EmitClassOfTest(Label* if_true,
164 Label* if_false, 154 Label* if_false,
165 Handle<String> class_name, 155 Handle<String> class_name,
166 Register input, 156 Register input,
167 Register temporary, 157 Register temporary,
168 Register scratch); 158 Register scratch);
169 159
170 int GetStackSlotCount() const { return chunk()->spill_slot_count(); } 160 int GetStackSlotCount() const { return chunk()->spill_slot_count(); }
171 int GetParameterCount() const { return info()->num_parameters(); } 161 int GetParameterCount() const { return scope()->num_parameters(); }
172 162
173 void Abort(const char* reason); 163 void Abort(const char* reason);
174 void Comment(const char* format, ...); 164 void Comment(const char* format, ...);
175 165
176 void AddDeferredCode(LDeferredCode* code) { deferred_.Add(code, zone()); } 166 void AddDeferredCode(LDeferredCode* code) { deferred_.Add(code, zone()); }
177 167
178 // Code generation passes. Returns true if code generation should 168 // Code generation passes. Returns true if code generation should
179 // continue. 169 // continue.
180 bool GeneratePrologue(); 170 bool GeneratePrologue();
181 bool GenerateBody(); 171 bool GenerateBody();
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 void EmitPushTaggedOperand(LOperand* operand); 320 void EmitPushTaggedOperand(LOperand* operand);
331 321
332 // Emits optimized code to deep-copy the contents of statically known 322 // Emits optimized code to deep-copy the contents of statically known
333 // object graphs (e.g. object literal boilerplate). 323 // object graphs (e.g. object literal boilerplate).
334 void EmitDeepCopy(Handle<JSObject> object, 324 void EmitDeepCopy(Handle<JSObject> object,
335 Register result, 325 Register result,
336 Register source, 326 Register source,
337 int* offset); 327 int* offset);
338 328
339 struct JumpTableEntry { 329 struct JumpTableEntry {
340 inline JumpTableEntry(Address entry, bool frame, bool is_lazy) 330 explicit inline JumpTableEntry(Address entry)
341 : label(), 331 : label(),
342 address(entry), 332 address(entry) { }
343 needs_frame(frame),
344 is_lazy_deopt(is_lazy) { }
345 Label label; 333 Label label;
346 Address address; 334 Address address;
347 bool needs_frame;
348 bool is_lazy_deopt;
349 }; 335 };
350 336
351 void EnsureSpaceForLazyDeopt(int space_needed); 337 void EnsureSpaceForLazyDeopt(int space_needed);
352 void DoLoadKeyedExternalArray(LLoadKeyed* instr); 338 void DoLoadKeyedExternalArray(LLoadKeyed* instr);
353 void DoLoadKeyedFixedDoubleArray(LLoadKeyed* instr); 339 void DoLoadKeyedFixedDoubleArray(LLoadKeyed* instr);
354 void DoLoadKeyedFixedArray(LLoadKeyed* instr); 340 void DoLoadKeyedFixedArray(LLoadKeyed* instr);
355 void DoStoreKeyedExternalArray(LStoreKeyed* instr); 341 void DoStoreKeyedExternalArray(LStoreKeyed* instr);
356 void DoStoreKeyedFixedDoubleArray(LStoreKeyed* instr); 342 void DoStoreKeyedFixedDoubleArray(LStoreKeyed* instr);
357 void DoStoreKeyedFixedArray(LStoreKeyed* instr); 343 void DoStoreKeyedFixedArray(LStoreKeyed* instr);
358 344
359 Zone* zone_; 345 Zone* zone_;
360 LPlatformChunk* const chunk_; 346 LPlatformChunk* const chunk_;
361 MacroAssembler* const masm_; 347 MacroAssembler* const masm_;
362 CompilationInfo* const info_; 348 CompilationInfo* const info_;
363 349
364 int current_block_; 350 int current_block_;
365 int current_instruction_; 351 int current_instruction_;
366 const ZoneList<LInstruction*>* instructions_; 352 const ZoneList<LInstruction*>* instructions_;
367 ZoneList<LEnvironment*> deoptimizations_; 353 ZoneList<LEnvironment*> deoptimizations_;
368 ZoneList<JumpTableEntry> jump_table_; 354 ZoneList<JumpTableEntry> jump_table_;
369 ZoneList<Handle<Object> > deoptimization_literals_; 355 ZoneList<Handle<Object> > deoptimization_literals_;
370 int inlined_function_count_; 356 int inlined_function_count_;
371 Scope* const scope_; 357 Scope* const scope_;
372 Status status_; 358 Status status_;
373 TranslationBuffer translations_; 359 TranslationBuffer translations_;
374 ZoneList<LDeferredCode*> deferred_; 360 ZoneList<LDeferredCode*> deferred_;
375 int osr_pc_offset_; 361 int osr_pc_offset_;
376 int last_lazy_deopt_pc_; 362 int last_lazy_deopt_pc_;
377 bool frame_is_built_;
378 363
379 // Builder that keeps track of safepoints in the code. The table 364 // Builder that keeps track of safepoints in the code. The table
380 // itself is emitted at the end of the generated code. 365 // itself is emitted at the end of the generated code.
381 SafepointTableBuilder safepoints_; 366 SafepointTableBuilder safepoints_;
382 367
383 // Compiler from a set of parallel moves to a sequential list of moves. 368 // Compiler from a set of parallel moves to a sequential list of moves.
384 LGapResolver resolver_; 369 LGapResolver resolver_;
385 370
386 Safepoint::Kind expected_safepoint_kind_; 371 Safepoint::Kind expected_safepoint_kind_;
387 372
388 class PushSafepointRegistersScope BASE_EMBEDDED { 373 class PushSafepointRegistersScope BASE_EMBEDDED {
389 public: 374 public:
390 explicit PushSafepointRegistersScope(LCodeGen* codegen) 375 explicit PushSafepointRegistersScope(LCodeGen* codegen)
391 : codegen_(codegen) { 376 : codegen_(codegen) {
392 ASSERT(codegen_->info()->is_calling());
393 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kSimple); 377 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kSimple);
394 codegen_->masm_->PushSafepointRegisters(); 378 codegen_->masm_->PushSafepointRegisters();
395 codegen_->expected_safepoint_kind_ = Safepoint::kWithRegisters; 379 codegen_->expected_safepoint_kind_ = Safepoint::kWithRegisters;
396 } 380 }
397 381
398 ~PushSafepointRegistersScope() { 382 ~PushSafepointRegistersScope() {
399 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kWithRegisters); 383 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kWithRegisters);
400 codegen_->masm_->PopSafepointRegisters(); 384 codegen_->masm_->PopSafepointRegisters();
401 codegen_->expected_safepoint_kind_ = Safepoint::kSimple; 385 codegen_->expected_safepoint_kind_ = Safepoint::kSimple;
402 } 386 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 LCodeGen* codegen_; 422 LCodeGen* codegen_;
439 Label entry_; 423 Label entry_;
440 Label exit_; 424 Label exit_;
441 Label* external_exit_; 425 Label* external_exit_;
442 int instruction_index_; 426 int instruction_index_;
443 }; 427 };
444 428
445 } } // namespace v8::internal 429 } } // namespace v8::internal
446 430
447 #endif // V8_X64_LITHIUM_CODEGEN_X64_H_ 431 #endif // V8_X64_LITHIUM_CODEGEN_X64_H_
OLDNEW
« no previous file with comments | « src/x64/deoptimizer-x64.cc ('k') | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698