OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 class LCodeGen BASE_EMBEDDED { | 44 class LCodeGen BASE_EMBEDDED { |
45 public: | 45 public: |
46 LCodeGen(LChunk* chunk, MacroAssembler* assembler, CompilationInfo* info) | 46 LCodeGen(LChunk* chunk, MacroAssembler* assembler, CompilationInfo* info) |
47 : chunk_(chunk), | 47 : chunk_(chunk), |
48 masm_(assembler), | 48 masm_(assembler), |
49 info_(info), | 49 info_(info), |
50 current_block_(-1), | 50 current_block_(-1), |
51 current_instruction_(-1), | 51 current_instruction_(-1), |
52 instructions_(chunk->instructions()), | 52 instructions_(chunk->instructions()), |
53 deoptimizations_(4), | 53 deoptimizations_(4), |
54 deopt_jump_table_(4), | |
55 deoptimization_literals_(8), | 54 deoptimization_literals_(8), |
56 inlined_function_count_(0), | 55 inlined_function_count_(0), |
57 scope_(info->scope()), | 56 scope_(info->scope()), |
58 status_(UNUSED), | 57 status_(UNUSED), |
59 deferred_(8), | 58 deferred_(8), |
60 osr_pc_offset_(-1), | 59 osr_pc_offset_(-1), |
61 resolver_(this), | 60 resolver_(this), |
62 expected_safepoint_kind_(Safepoint::kSimple) { | 61 expected_safepoint_kind_(Safepoint::kSimple) { |
63 PopulateDeoptimizationLiteralsWithInlinedFunctions(); | 62 PopulateDeoptimizationLiteralsWithInlinedFunctions(); |
64 } | 63 } |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 void Abort(const char* format, ...); | 165 void Abort(const char* format, ...); |
167 void Comment(const char* format, ...); | 166 void Comment(const char* format, ...); |
168 | 167 |
169 void AddDeferredCode(LDeferredCode* code) { deferred_.Add(code); } | 168 void AddDeferredCode(LDeferredCode* code) { deferred_.Add(code); } |
170 | 169 |
171 // Code generation passes. Returns true if code generation should | 170 // Code generation passes. Returns true if code generation should |
172 // continue. | 171 // continue. |
173 bool GeneratePrologue(); | 172 bool GeneratePrologue(); |
174 bool GenerateBody(); | 173 bool GenerateBody(); |
175 bool GenerateDeferredCode(); | 174 bool GenerateDeferredCode(); |
176 bool GenerateDeoptJumpTable(); | |
177 bool GenerateSafepointTable(); | 175 bool GenerateSafepointTable(); |
178 | 176 |
179 enum SafepointMode { | 177 enum SafepointMode { |
180 RECORD_SIMPLE_SAFEPOINT, | 178 RECORD_SIMPLE_SAFEPOINT, |
181 RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS | 179 RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS |
182 }; | 180 }; |
183 | 181 |
184 void CallCode(Handle<Code> code, | 182 void CallCode(Handle<Code> code, |
185 RelocInfo::Mode mode, | 183 RelocInfo::Mode mode, |
186 LInstruction* instr); | 184 LInstruction* instr); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 | 282 |
285 // Emits optimized code for %_IsConstructCall(). | 283 // Emits optimized code for %_IsConstructCall(). |
286 // Caller should branch on equal condition. | 284 // Caller should branch on equal condition. |
287 void EmitIsConstructCall(Register temp1, Register temp2); | 285 void EmitIsConstructCall(Register temp1, Register temp2); |
288 | 286 |
289 void EmitLoadFieldOrConstantFunction(Register result, | 287 void EmitLoadFieldOrConstantFunction(Register result, |
290 Register object, | 288 Register object, |
291 Handle<Map> type, | 289 Handle<Map> type, |
292 Handle<String> name); | 290 Handle<String> name); |
293 | 291 |
294 struct JumpTableEntry { | |
295 explicit inline JumpTableEntry(Address entry) | |
296 : label(), | |
297 address(entry) { } | |
298 Label label; | |
299 Address address; | |
300 }; | |
301 | |
302 LChunk* const chunk_; | 292 LChunk* const chunk_; |
303 MacroAssembler* const masm_; | 293 MacroAssembler* const masm_; |
304 CompilationInfo* const info_; | 294 CompilationInfo* const info_; |
305 | 295 |
306 int current_block_; | 296 int current_block_; |
307 int current_instruction_; | 297 int current_instruction_; |
308 const ZoneList<LInstruction*>* instructions_; | 298 const ZoneList<LInstruction*>* instructions_; |
309 ZoneList<LEnvironment*> deoptimizations_; | 299 ZoneList<LEnvironment*> deoptimizations_; |
310 ZoneList<JumpTableEntry> deopt_jump_table_; | |
311 ZoneList<Handle<Object> > deoptimization_literals_; | 300 ZoneList<Handle<Object> > deoptimization_literals_; |
312 int inlined_function_count_; | 301 int inlined_function_count_; |
313 Scope* const scope_; | 302 Scope* const scope_; |
314 Status status_; | 303 Status status_; |
315 TranslationBuffer translations_; | 304 TranslationBuffer translations_; |
316 ZoneList<LDeferredCode*> deferred_; | 305 ZoneList<LDeferredCode*> deferred_; |
317 int osr_pc_offset_; | 306 int osr_pc_offset_; |
318 | 307 |
319 // Builder that keeps track of safepoints in the code. The table | 308 // Builder that keeps track of safepoints in the code. The table |
320 // itself is emitted at the end of the generated code. | 309 // itself is emitted at the end of the generated code. |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 private: | 382 private: |
394 LCodeGen* codegen_; | 383 LCodeGen* codegen_; |
395 Label entry_; | 384 Label entry_; |
396 Label exit_; | 385 Label exit_; |
397 Label* external_exit_; | 386 Label* external_exit_; |
398 }; | 387 }; |
399 | 388 |
400 } } // namespace v8::internal | 389 } } // namespace v8::internal |
401 | 390 |
402 #endif // V8_ARM_LITHIUM_CODEGEN_ARM_H_ | 391 #endif // V8_ARM_LITHIUM_CODEGEN_ARM_H_ |
OLD | NEW |