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

Side by Side Diff: vm/flow_graph_compiler_ia32.h

Issue 10632009: Make the parser agnostic to the TokenStream implementation. This is the first step towards compacti… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 6 months 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 | « vm/flow_graph_compiler.cc ('k') | vm/flow_graph_compiler_ia32.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_FLOW_GRAPH_COMPILER_IA32_H_ 5 #ifndef VM_FLOW_GRAPH_COMPILER_IA32_H_
6 #define VM_FLOW_GRAPH_COMPILER_IA32_H_ 6 #define VM_FLOW_GRAPH_COMPILER_IA32_H_
7 7
8 #ifndef VM_FLOW_GRAPH_COMPILER_H_ 8 #ifndef VM_FLOW_GRAPH_COMPILER_H_
9 #error Include flow_graph_compiler.h instead of flow_graph_compiler_ia32.h. 9 #error Include flow_graph_compiler.h instead of flow_graph_compiler_ia32.h.
10 #endif 10 #endif
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 void LoadDoubleOrSmiToXmm(XmmRegister result, 69 void LoadDoubleOrSmiToXmm(XmmRegister result,
70 Register reg, 70 Register reg,
71 Register temp, 71 Register temp,
72 Label* not_double_or_smi); 72 Label* not_double_or_smi);
73 73
74 // Returns 'true' if code generation for this function is complete, i.e., 74 // Returns 'true' if code generation for this function is complete, i.e.,
75 // no fall-through to regular code is needed. 75 // no fall-through to regular code is needed.
76 bool TryIntrinsify(); 76 bool TryIntrinsify();
77 77
78 void GenerateCallRuntime(intptr_t cid, 78 void GenerateCallRuntime(intptr_t cid,
79 intptr_t token_index, 79 intptr_t token_pos,
80 intptr_t try_index, 80 intptr_t try_index,
81 const RuntimeEntry& entry); 81 const RuntimeEntry& entry);
82 82
83 // Returns pc-offset (in bytes) of the pc after the call, can be used to emit 83 // Returns pc-offset (in bytes) of the pc after the call, can be used to emit
84 // pc-descriptor information. 84 // pc-descriptor information.
85 intptr_t EmitStaticCall(const Function& function, 85 intptr_t EmitStaticCall(const Function& function,
86 const Array& arguments_descriptor, 86 const Array& arguments_descriptor,
87 intptr_t argument_count); 87 intptr_t argument_count);
88 88
89 void GenerateCall(intptr_t token_index, 89 void GenerateCall(intptr_t token_pos,
90 intptr_t try_index, 90 intptr_t try_index,
91 const ExternalLabel* label, 91 const ExternalLabel* label,
92 PcDescriptors::Kind kind); 92 PcDescriptors::Kind kind);
93 void GenerateInstanceOf(intptr_t cid, 93 void GenerateInstanceOf(intptr_t cid,
94 intptr_t token_index, 94 intptr_t token_pos,
95 intptr_t try_index, 95 intptr_t try_index,
96 const AbstractType& type, 96 const AbstractType& type,
97 bool negate_result); 97 bool negate_result);
98 void GenerateAssertAssignable(intptr_t cid, 98 void GenerateAssertAssignable(intptr_t cid,
99 intptr_t token_index, 99 intptr_t token_pos,
100 intptr_t try_index, 100 intptr_t try_index,
101 const AbstractType& dst_type, 101 const AbstractType& dst_type,
102 const String& dst_name); 102 const String& dst_name);
103 103
104 void GenerateInstanceCall(intptr_t cid, 104 void GenerateInstanceCall(intptr_t cid,
105 intptr_t token_index, 105 intptr_t token_pos,
106 intptr_t try_index, 106 intptr_t try_index,
107 const String& function_name, 107 const String& function_name,
108 intptr_t argument_count, 108 intptr_t argument_count,
109 const Array& argument_names, 109 const Array& argument_names,
110 intptr_t checked_argument_count); 110 intptr_t checked_argument_count);
111 111
112 void GenerateStaticCall(intptr_t cid, 112 void GenerateStaticCall(intptr_t cid,
113 intptr_t token_index, 113 intptr_t token_pos,
114 intptr_t try_index, 114 intptr_t try_index,
115 const Function& function, 115 const Function& function,
116 intptr_t argument_count, 116 intptr_t argument_count,
117 const Array& argument_names); 117 const Array& argument_names);
118 118
119 void GenerateInlinedMathSqrt(Label* done); 119 void GenerateInlinedMathSqrt(Label* done);
120 120
121 void GenerateNumberTypeCheck(Register kClassIdReg, 121 void GenerateNumberTypeCheck(Register kClassIdReg,
122 const AbstractType& type, 122 const AbstractType& type,
123 Label* is_instance_lbl, 123 Label* is_instance_lbl,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 // Returns assembler label associated with the given block entry. 158 // Returns assembler label associated with the given block entry.
159 Label* GetBlockLabel(BlockEntryInstr* block_entry) const; 159 Label* GetBlockLabel(BlockEntryInstr* block_entry) const;
160 160
161 // Returns true if the next block after current in the current block order 161 // Returns true if the next block after current in the current block order
162 // is the given block. 162 // is the given block.
163 bool IsNextBlock(TargetEntryInstr* block_entry) const; 163 bool IsNextBlock(TargetEntryInstr* block_entry) const;
164 164
165 void AddExceptionHandler(intptr_t try_index, intptr_t pc_offset); 165 void AddExceptionHandler(intptr_t try_index, intptr_t pc_offset);
166 void AddCurrentDescriptor(PcDescriptors::Kind kind, 166 void AddCurrentDescriptor(PcDescriptors::Kind kind,
167 intptr_t cid, 167 intptr_t cid,
168 intptr_t token_index, 168 intptr_t token_pos,
169 intptr_t try_index); 169 intptr_t try_index);
170 Label* AddDeoptStub(intptr_t deopt_id, 170 Label* AddDeoptStub(intptr_t deopt_id,
171 intptr_t deopt_token_index, 171 intptr_t deopt_token_pos,
172 intptr_t try_index_, 172 intptr_t try_index_,
173 DeoptReasonId reason, 173 DeoptReasonId reason,
174 Register reg1 = kNoRegister, 174 Register reg1 = kNoRegister,
175 Register reg2 = kNoRegister, 175 Register reg2 = kNoRegister,
176 Register reg3 = kNoRegister); 176 Register reg3 = kNoRegister);
177 177
178 void FinalizeExceptionHandlers(const Code& code); 178 void FinalizeExceptionHandlers(const Code& code);
179 void FinalizePcDescriptors(const Code& code); 179 void FinalizePcDescriptors(const Code& code);
180 void FinalizeStackmaps(const Code& code); 180 void FinalizeStackmaps(const Code& code);
181 void FinalizeVarDescriptors(const Code& code); 181 void FinalizeVarDescriptors(const Code& code);
(...skipping 14 matching lines...) Expand all
196 196
197 void GenerateDeferredCode(); 197 void GenerateDeferredCode();
198 198
199 void CopyParameters(); 199 void CopyParameters();
200 void EmitInstructionPrologue(Instruction* instr); 200 void EmitInstructionPrologue(Instruction* instr);
201 201
202 void GenerateInlinedGetter(intptr_t offset); 202 void GenerateInlinedGetter(intptr_t offset);
203 void GenerateInlinedSetter(intptr_t offset); 203 void GenerateInlinedSetter(intptr_t offset);
204 204
205 RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t cid, 205 RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t cid,
206 intptr_t token_index, 206 intptr_t token_pos,
207 const AbstractType& type, 207 const AbstractType& type,
208 Label* is_instance_lbl, 208 Label* is_instance_lbl,
209 Label* is_not_instance_lbl); 209 Label* is_not_instance_lbl);
210 210
211 RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest( 211 RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest(
212 intptr_t cid, 212 intptr_t cid,
213 intptr_t token_index, 213 intptr_t token_pos,
214 const AbstractType& dst_type, 214 const AbstractType& dst_type,
215 Label* is_instance_lbl, 215 Label* is_instance_lbl,
216 Label* is_not_instance_lbl); 216 Label* is_not_instance_lbl);
217 217
218 void GenerateInstantiatedTypeNoArgumentsTest(intptr_t cid, 218 void GenerateInstantiatedTypeNoArgumentsTest(intptr_t cid,
219 intptr_t token_index, 219 intptr_t token_pos,
220 const AbstractType& dst_type, 220 const AbstractType& dst_type,
221 Label* is_instance_lbl, 221 Label* is_instance_lbl,
222 Label* is_not_instance_lbl); 222 Label* is_not_instance_lbl);
223 223
224 RawSubtypeTestCache* GenerateUninstantiatedTypeTest( 224 RawSubtypeTestCache* GenerateUninstantiatedTypeTest(
225 intptr_t cid, 225 intptr_t cid,
226 intptr_t token_index, 226 intptr_t token_pos,
227 const AbstractType& dst_type, 227 const AbstractType& dst_type,
228 Label* is_instance_lbl, 228 Label* is_instance_lbl,
229 Label* is_not_instance_label); 229 Label* is_not_instance_label);
230 230
231 RawSubtypeTestCache* GenerateSubtype1TestCacheLookup( 231 RawSubtypeTestCache* GenerateSubtype1TestCacheLookup(
232 intptr_t cid, 232 intptr_t cid,
233 intptr_t token_index, 233 intptr_t token_pos,
234 const Class& type_class, 234 const Class& type_class,
235 Label* is_instance_lbl, 235 Label* is_instance_lbl,
236 Label* is_not_instance_lbl); 236 Label* is_not_instance_lbl);
237 237
238 enum TypeTestStubKind { 238 enum TypeTestStubKind {
239 kTestTypeOneArg, 239 kTestTypeOneArg,
240 kTestTypeTwoArgs, 240 kTestTypeTwoArgs,
241 kTestTypeThreeArgs, 241 kTestTypeThreeArgs,
242 }; 242 };
243 243
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 284
285 FrameRegisterAllocator frame_register_allocator_; 285 FrameRegisterAllocator frame_register_allocator_;
286 286
287 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); 287 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
288 }; 288 };
289 289
290 290
291 class DeoptimizationStub : public ZoneAllocated { 291 class DeoptimizationStub : public ZoneAllocated {
292 public: 292 public:
293 DeoptimizationStub(intptr_t deopt_id, 293 DeoptimizationStub(intptr_t deopt_id,
294 intptr_t deopt_token_index, 294 intptr_t deopt_token_pos,
295 intptr_t try_index, 295 intptr_t try_index,
296 DeoptReasonId reason) 296 DeoptReasonId reason)
297 : deopt_id_(deopt_id), 297 : deopt_id_(deopt_id),
298 deopt_token_index_(deopt_token_index), 298 deopt_token_pos_(deopt_token_pos),
299 try_index_(try_index), 299 try_index_(try_index),
300 reason_(reason), 300 reason_(reason),
301 registers_(2), 301 registers_(2),
302 entry_label_() {} 302 entry_label_() {}
303 303
304 void Push(Register reg) { registers_.Add(reg); } 304 void Push(Register reg) { registers_.Add(reg); }
305 Label* entry_label() { return &entry_label_; } 305 Label* entry_label() { return &entry_label_; }
306 306
307 // Implementation is in architecture specific file. 307 // Implementation is in architecture specific file.
308 void GenerateCode(FlowGraphCompiler* compiler); 308 void GenerateCode(FlowGraphCompiler* compiler);
309 309
310 private: 310 private:
311 const intptr_t deopt_id_; 311 const intptr_t deopt_id_;
312 const intptr_t deopt_token_index_; 312 const intptr_t deopt_token_pos_;
313 const intptr_t try_index_; 313 const intptr_t try_index_;
314 const DeoptReasonId reason_; 314 const DeoptReasonId reason_;
315 GrowableArray<Register> registers_; 315 GrowableArray<Register> registers_;
316 Label entry_label_; 316 Label entry_label_;
317 317
318 DISALLOW_COPY_AND_ASSIGN(DeoptimizationStub); 318 DISALLOW_COPY_AND_ASSIGN(DeoptimizationStub);
319 }; 319 };
320 320
321 321
322 } // namespace dart 322 } // namespace dart
323 323
324 #endif // VM_FLOW_GRAPH_COMPILER_IA32_H_ 324 #endif // VM_FLOW_GRAPH_COMPILER_IA32_H_
OLDNEW
« no previous file with comments | « vm/flow_graph_compiler.cc ('k') | vm/flow_graph_compiler_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698