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

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

Issue 1239793002: [interpreter] Add basic framework for bytecode handler code generation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add comment to count macro. Created 5 years, 5 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef V8_COMPILER_INTERPRETER_CODEGEN_H_
6 #define V8_COMPILER_INTERPRETER_CODEGEN_H_
7
8 #include "src/interpreter/bytecodes.h"
Michael Starzinger 2015/07/17 13:20:58 Can we add the same comment that is in pipeline.h
rmcilroy 2015/07/21 11:13:21 Done. Also added similar comments for src/interpre
9 #include "src/smart-pointers.h"
10
11 namespace v8 {
12 namespace internal {
13
14 class Isolate;
15 class Zone;
16
17 namespace compiler {
18
19 class CallDescriptor;
20 class CommonOperatorBuilder;
21 class Graph;
22 class MachineOperatorBuilder;
23 class Node;
24 class Operator;
25 class RawMachineAssembler;
26 class Schedule;
27
28 class InterpreterAssembler {
29 public:
30 InterpreterAssembler(Isolate* isolate, Zone* zone,
Michael Starzinger 2015/07/17 13:20:58 Do you think it makes sense to add unit tests for
rmcilroy 2015/07/21 11:13:21 Yes this probably makes sense, although I'm not ex
31 interpreter::Bytecode bytecode);
32 virtual ~InterpreterAssembler();
33
34 Handle<Code> GenerateCode();
35
36 // Constants.
37 Node* Int32Constant(int value);
38 Node* NumberConstant(double value);
39
40 // Returns the bytecode argument |index| for the current bytecode.
41 Node* BytecodeArg(int index);
42
43 // Loads from and stores to the interpreter register file.
44 Node* LoadRegister(int index);
45 Node* LoadRegister(Node* index);
46 void StoreRegister(Node* value, int index);
47 void StoreRegister(Node* value, Node* index);
48
49 // Function return.
50 void Return(Node* value);
51
52 // Dispatch to the bytecode.
53 void Dispatch();
54
55 // Specifies the parameter number used to thread fixed register data through
56 // interpreter dispatches.
57 static const int kBytecodePointerParameter = 0;
58 static const int kDispatchTablePointerParameter = 1;
59
60 private:
61 // Returns the pointer to the current bytecode.
62 Node* BytecodePointer();
63 // Returns the pointer to first entry in the interpreter dispatch table.
64 Node* DispatchTablePointer();
65 // Returns the frame pointer for the current function.
66 Node* FramePointer();
67
68 // Returns the offset of register |index|.
69 Node* RegisterFrameOffset(int index);
70 Node* RegisterFrameOffset(Node* index);
71
72 // Returns BytecodePointer() advanced by delta bytecodes. Note: this does not
73 // update BytecodePointer() itself.
74 Node* Advance(int delta);
75
76 // Returns the a call descriptor for interpreter dispatch.
77 const CallDescriptor* GetCallDiscriptorForDispatch();
78
79 // Private helpers which delegate to RawMachineAssembler.
80 Isolate* isolate();
81 Graph* graph();
82 Schedule* schedule();
83 MachineOperatorBuilder* machine();
84 CommonOperatorBuilder* common();
85
86 Zone* zone_; // Not owned.
87 interpreter::Bytecode bytecode_;
88 SmartPointer<RawMachineAssembler> raw_assembler_;
89 bool code_generated_;
90
91 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler);
92 };
93
94 } // namespace interpreter
95 } // namespace internal
96 } // namespace v8
97
98 #endif // V8_COMPILER_INTERPRETER_CODEGEN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698