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

Side by Side Diff: src/compiler/code-assembler.h

Issue 2600183004: [turbofan] Remove virtual methods from CodeAssembler. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « no previous file | src/compiler/code-assembler.cc » ('j') | src/compiler/code-assembler.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_CODE_ASSEMBLER_H_ 5 #ifndef V8_COMPILER_CODE_ASSEMBLER_H_
6 #define V8_COMPILER_CODE_ASSEMBLER_H_ 6 #define V8_COMPILER_CODE_ASSEMBLER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 22 matching lines...) Expand all
33 class CallDescriptor; 33 class CallDescriptor;
34 class CodeAssemblerLabel; 34 class CodeAssemblerLabel;
35 class CodeAssemblerVariable; 35 class CodeAssemblerVariable;
36 class CodeAssemblerState; 36 class CodeAssemblerState;
37 class Node; 37 class Node;
38 class RawMachineAssembler; 38 class RawMachineAssembler;
39 class RawMachineLabel; 39 class RawMachineLabel;
40 40
41 typedef ZoneList<CodeAssemblerVariable*> CodeAssemblerVariableList; 41 typedef ZoneList<CodeAssemblerVariable*> CodeAssemblerVariableList;
42 42
43 typedef std::function<void()> CodeAssemblerCallback;
44
43 #define CODE_ASSEMBLER_COMPARE_BINARY_OP_LIST(V) \ 45 #define CODE_ASSEMBLER_COMPARE_BINARY_OP_LIST(V) \
44 V(Float32Equal) \ 46 V(Float32Equal) \
45 V(Float32LessThan) \ 47 V(Float32LessThan) \
46 V(Float32LessThanOrEqual) \ 48 V(Float32LessThanOrEqual) \
47 V(Float32GreaterThan) \ 49 V(Float32GreaterThan) \
48 V(Float32GreaterThanOrEqual) \ 50 V(Float32GreaterThanOrEqual) \
49 V(Float64Equal) \ 51 V(Float64Equal) \
50 V(Float64LessThan) \ 52 V(Float64LessThan) \
51 V(Float64LessThanOrEqual) \ 53 V(Float64LessThanOrEqual) \
52 V(Float64GreaterThan) \ 54 V(Float64GreaterThan) \
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // clients, CodeAssembler also provides an abstraction for creating variables 184 // clients, CodeAssembler also provides an abstraction for creating variables
183 // and enhanced Label functionality to merge variable values along paths where 185 // and enhanced Label functionality to merge variable values along paths where
184 // they have differing values, including loops. 186 // they have differing values, including loops.
185 // 187 //
186 // The CodeAssembler itself is stateless (and instances are expected to be 188 // The CodeAssembler itself is stateless (and instances are expected to be
187 // temporary-scoped and short-lived); all its state is encapsulated into 189 // temporary-scoped and short-lived); all its state is encapsulated into
188 // a CodeAssemblerState instance. 190 // a CodeAssemblerState instance.
189 class V8_EXPORT_PRIVATE CodeAssembler { 191 class V8_EXPORT_PRIVATE CodeAssembler {
190 public: 192 public:
191 explicit CodeAssembler(CodeAssemblerState* state) : state_(state) {} 193 explicit CodeAssembler(CodeAssemblerState* state) : state_(state) {}
192 194 ~CodeAssembler();
193 virtual ~CodeAssembler();
194 195
195 static Handle<Code> GenerateCode(CodeAssemblerState* state); 196 static Handle<Code> GenerateCode(CodeAssemblerState* state);
196 197
197 bool Is64() const; 198 bool Is64() const;
198 bool IsFloat64RoundUpSupported() const; 199 bool IsFloat64RoundUpSupported() const;
199 bool IsFloat64RoundDownSupported() const; 200 bool IsFloat64RoundDownSupported() const;
200 bool IsFloat64RoundTiesEvenSupported() const; 201 bool IsFloat64RoundTiesEvenSupported() const;
201 bool IsFloat64RoundTruncateSupported() const; 202 bool IsFloat64RoundTruncateSupported() const;
202 203
203 // Shortened aliases for use in CodeAssembler subclasses. 204 // Shortened aliases for use in CodeAssembler subclasses.
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 // Helpers which delegate to RawMachineAssembler. 368 // Helpers which delegate to RawMachineAssembler.
368 Factory* factory() const; 369 Factory* factory() const;
369 Isolate* isolate() const; 370 Isolate* isolate() const;
370 Zone* zone() const; 371 Zone* zone() const;
371 372
372 CodeAssemblerState* state() { return state_; } 373 CodeAssemblerState* state() { return state_; }
373 374
374 void BreakOnNode(int node_id); 375 void BreakOnNode(int node_id);
375 376
376 protected: 377 protected:
377 // Enables subclasses to perform operations before and after a call. 378 void RegisterCallGenerationCallbacks(
378 virtual void CallPrologue(); 379 const CodeAssemblerCallback& call_prologue,
379 virtual void CallEpilogue(); 380 const CodeAssemblerCallback& call_epilogue);
381 void UnregisterCallGenerationCallbacks();
380 382
381 private: 383 private:
382 RawMachineAssembler* raw_assembler() const; 384 RawMachineAssembler* raw_assembler() const;
383 385
386 // Calls respective callback registered in the state.
387 void CallPrologue();
388 void CallEpilogue();
389
384 CodeAssemblerState* state_; 390 CodeAssemblerState* state_;
385 391
386 DISALLOW_COPY_AND_ASSIGN(CodeAssembler); 392 DISALLOW_COPY_AND_ASSIGN(CodeAssembler);
387 }; 393 };
388 394
389 class CodeAssemblerVariable { 395 class CodeAssemblerVariable {
390 public: 396 public:
391 explicit CodeAssemblerVariable(CodeAssembler* assembler, 397 explicit CodeAssemblerVariable(CodeAssembler* assembler,
392 MachineRepresentation rep); 398 MachineRepresentation rep);
393 ~CodeAssemblerVariable(); 399 ~CodeAssemblerVariable();
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 476
471 CodeAssemblerState(Isolate* isolate, Zone* zone, 477 CodeAssemblerState(Isolate* isolate, Zone* zone,
472 CallDescriptor* call_descriptor, Code::Flags flags, 478 CallDescriptor* call_descriptor, Code::Flags flags,
473 const char* name); 479 const char* name);
474 480
475 std::unique_ptr<RawMachineAssembler> raw_assembler_; 481 std::unique_ptr<RawMachineAssembler> raw_assembler_;
476 Code::Flags flags_; 482 Code::Flags flags_;
477 const char* name_; 483 const char* name_;
478 bool code_generated_; 484 bool code_generated_;
479 ZoneSet<CodeAssemblerVariable::Impl*> variables_; 485 ZoneSet<CodeAssemblerVariable::Impl*> variables_;
486 CodeAssemblerCallback call_prologue_;
487 CodeAssemblerCallback call_epilogue_;
480 488
481 DISALLOW_COPY_AND_ASSIGN(CodeAssemblerState); 489 DISALLOW_COPY_AND_ASSIGN(CodeAssemblerState);
482 }; 490 };
483 491
484 } // namespace compiler 492 } // namespace compiler
485 } // namespace internal 493 } // namespace internal
486 } // namespace v8 494 } // namespace v8
487 495
488 #endif // V8_COMPILER_CODE_ASSEMBLER_H_ 496 #endif // V8_COMPILER_CODE_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/code-assembler.cc » ('j') | src/compiler/code-assembler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698