Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_WASM_COMPILER_H_ | 5 #ifndef V8_COMPILER_WASM_COMPILER_H_ |
| 6 #define V8_COMPILER_WASM_COMPILER_H_ | 6 #define V8_COMPILER_WASM_COMPILER_H_ |
| 7 | 7 |
| 8 // Clients of this interface shouldn't depend on lots of compiler internals. | 8 // Clients of this interface shouldn't depend on lots of compiler internals. |
| 9 // Do not include anything from src/compiler here! | 9 // Do not include anything from src/compiler here! |
| 10 #include "src/wasm/wasm-opcodes.h" | 10 #include "src/wasm/wasm-opcodes.h" |
| 11 #include "src/zone.h" | 11 #include "src/zone.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 | 15 |
| 16 namespace compiler { | 16 namespace compiler { |
| 17 // Forward declarations for some compiler data structures. | 17 // Forward declarations for some compiler data structures. |
| 18 class Node; | 18 class Node; |
| 19 class JSGraph; | 19 class JSGraph; |
| 20 class Graph; | 20 class Graph; |
| 21 class SourcePositionTable; | |
| 22 class SourcePositionScope; | |
| 21 } | 23 } |
| 22 | 24 |
| 23 namespace wasm { | 25 namespace wasm { |
| 24 // Forward declarations for some WASM data structures. | 26 // Forward declarations for some WASM data structures. |
| 25 struct ModuleEnv; | 27 struct ModuleEnv; |
| 26 struct WasmFunction; | 28 struct WasmFunction; |
| 27 class ErrorThrower; | 29 class ErrorThrower; |
| 28 | 30 |
| 29 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. | 31 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. |
| 30 typedef compiler::Node TFNode; | 32 typedef compiler::Node TFNode; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 48 // from JavaScript. | 50 // from JavaScript. |
| 49 Handle<JSFunction> CompileJSToWasmWrapper( | 51 Handle<JSFunction> CompileJSToWasmWrapper( |
| 50 Isolate* isolate, wasm::ModuleEnv* module, Handle<String> name, | 52 Isolate* isolate, wasm::ModuleEnv* module, Handle<String> name, |
| 51 Handle<Code> wasm_code, Handle<JSObject> module_object, uint32_t index); | 53 Handle<Code> wasm_code, Handle<JSObject> module_object, uint32_t index); |
| 52 | 54 |
| 53 // Abstracts details of building TurboFan graph nodes for WASM to separate | 55 // Abstracts details of building TurboFan graph nodes for WASM to separate |
| 54 // the WASM decoder from the internal details of TurboFan. | 56 // the WASM decoder from the internal details of TurboFan. |
| 55 class WasmTrapHelper; | 57 class WasmTrapHelper; |
| 56 class WasmGraphBuilder { | 58 class WasmGraphBuilder { |
| 57 public: | 59 public: |
| 58 WasmGraphBuilder(Zone* z, JSGraph* g, wasm::FunctionSig* function_signature); | 60 WasmGraphBuilder( |
| 61 Zone* z, JSGraph* g, wasm::FunctionSig* function_signature, | |
| 62 compiler::SourcePositionTable* source_position_table = nullptr); | |
| 63 | |
| 64 ~WasmGraphBuilder() { | |
| 65 // check that Enter- / LeaveSourcePositionScope is balanced | |
| 66 DCHECK_NULL(source_position_scope_); | |
| 67 } | |
| 59 | 68 |
| 60 Node** Buffer(size_t count) { | 69 Node** Buffer(size_t count) { |
| 61 if (count > cur_bufsize_) { | 70 if (count > cur_bufsize_) { |
| 62 size_t new_size = count + cur_bufsize_ + 5; | 71 size_t new_size = count + cur_bufsize_ + 5; |
| 63 cur_buffer_ = | 72 cur_buffer_ = |
| 64 reinterpret_cast<Node**>(zone_->New(new_size * sizeof(Node*))); | 73 reinterpret_cast<Node**>(zone_->New(new_size * sizeof(Node*))); |
| 65 cur_bufsize_ = new_size; | 74 cur_bufsize_ = new_size; |
| 66 } | 75 } |
| 67 return cur_buffer_; | 76 return cur_buffer_; |
| 68 } | 77 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 134 void set_module(wasm::ModuleEnv* module) { this->module_ = module; } | 143 void set_module(wasm::ModuleEnv* module) { this->module_ = module; } |
| 135 | 144 |
| 136 void set_control_ptr(Node** control) { this->control_ = control; } | 145 void set_control_ptr(Node** control) { this->control_ = control; } |
| 137 | 146 |
| 138 void set_effect_ptr(Node** effect) { this->effect_ = effect; } | 147 void set_effect_ptr(Node** effect) { this->effect_ = effect; } |
| 139 | 148 |
| 140 wasm::FunctionSig* GetFunctionSignature() { return function_signature_; } | 149 wasm::FunctionSig* GetFunctionSignature() { return function_signature_; } |
| 141 | 150 |
| 142 void Int64LoweringForTesting(); | 151 void Int64LoweringForTesting(); |
| 143 | 152 |
| 153 // Register a graph decorator to assign source positions to nodes (in | |
|
titzer
2016/04/18 11:03:51
I don't think we should add scoping for this. I th
Clemens Hammacher
2016/04/18 11:18:10
What about step-through debugging? Wouldn't that r
| |
| 154 // source_position_table_). Only has an effect if source_position_table_ is | |
| 155 // non-null. Ensure to call LeaveSourcePositionScope afterwards. | |
| 156 void EnterSourcePositionScope(); | |
| 157 void LeaveSourcePositionScope(); | |
| 158 | |
| 159 // Set current source position, such that all nodes created after this call | |
| 160 // get the respecitve position assigned. This only has an effect if | |
| 161 // source_position_table_ is non-null and EnterSourcePositionScope was called | |
| 162 // before. | |
| 163 void SetCurrentSourcePosition(int position); | |
| 164 | |
| 144 private: | 165 private: |
| 145 static const int kDefaultBufferSize = 16; | 166 static const int kDefaultBufferSize = 16; |
| 146 friend class WasmTrapHelper; | 167 friend class WasmTrapHelper; |
| 147 | 168 |
| 148 Zone* zone_; | 169 Zone* zone_; |
| 149 JSGraph* jsgraph_; | 170 JSGraph* jsgraph_; |
| 150 wasm::ModuleEnv* module_; | 171 wasm::ModuleEnv* module_; |
| 151 Node* mem_buffer_; | 172 Node* mem_buffer_; |
| 152 Node* mem_size_; | 173 Node* mem_size_; |
| 153 Node* function_table_; | 174 Node* function_table_; |
| 154 Node** control_; | 175 Node** control_; |
| 155 Node** effect_; | 176 Node** effect_; |
| 156 Node** cur_buffer_; | 177 Node** cur_buffer_; |
| 157 size_t cur_bufsize_; | 178 size_t cur_bufsize_; |
| 158 Node* def_buffer_[kDefaultBufferSize]; | 179 Node* def_buffer_[kDefaultBufferSize]; |
| 159 | 180 |
| 160 WasmTrapHelper* trap_; | 181 WasmTrapHelper* trap_; |
| 161 wasm::FunctionSig* function_signature_; | 182 wasm::FunctionSig* function_signature_; |
| 162 | 183 |
| 184 compiler::SourcePositionTable* source_position_table_ = nullptr; | |
| 185 compiler::SourcePositionScope* source_position_scope_ = nullptr; | |
| 186 | |
| 163 // Internal helper methods. | 187 // Internal helper methods. |
| 164 JSGraph* jsgraph() { return jsgraph_; } | 188 JSGraph* jsgraph() { return jsgraph_; } |
| 165 Graph* graph(); | 189 Graph* graph(); |
| 166 | 190 |
| 167 Node* String(const char* string); | 191 Node* String(const char* string); |
| 168 Node* MemBuffer(uint32_t offset); | 192 Node* MemBuffer(uint32_t offset); |
| 169 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); | 193 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); |
| 170 | 194 |
| 171 Node* MaskShiftCount32(Node* node); | 195 Node* MaskShiftCount32(Node* node); |
| 172 Node* MaskShiftCount64(Node* node); | 196 Node* MaskShiftCount64(Node* node); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 249 Node** buf = Buffer(new_count); | 273 Node** buf = Buffer(new_count); |
| 250 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); | 274 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); |
| 251 return buf; | 275 return buf; |
| 252 } | 276 } |
| 253 }; | 277 }; |
| 254 } // namespace compiler | 278 } // namespace compiler |
| 255 } // namespace internal | 279 } // namespace internal |
| 256 } // namespace v8 | 280 } // namespace v8 |
| 257 | 281 |
| 258 #endif // V8_COMPILER_WASM_COMPILER_H_ | 282 #endif // V8_COMPILER_WASM_COMPILER_H_ |
| OLD | NEW |