| 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 Operator; | 21 class Operator; |
| 22 class SourcePositionTable; |
| 22 } | 23 } |
| 23 | 24 |
| 24 namespace wasm { | 25 namespace wasm { |
| 25 // Forward declarations for some WASM data structures. | 26 // Forward declarations for some WASM data structures. |
| 26 struct ModuleEnv; | 27 struct ModuleEnv; |
| 27 struct WasmFunction; | 28 struct WasmFunction; |
| 28 class ErrorThrower; | 29 class ErrorThrower; |
| 29 | 30 |
| 30 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. | 31 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. |
| 31 typedef compiler::Node TFNode; | 32 typedef compiler::Node TFNode; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 49 // from JavaScript. | 50 // from JavaScript. |
| 50 Handle<JSFunction> CompileJSToWasmWrapper( | 51 Handle<JSFunction> CompileJSToWasmWrapper( |
| 51 Isolate* isolate, wasm::ModuleEnv* module, Handle<String> name, | 52 Isolate* isolate, wasm::ModuleEnv* module, Handle<String> name, |
| 52 Handle<Code> wasm_code, Handle<JSObject> module_object, uint32_t index); | 53 Handle<Code> wasm_code, Handle<JSObject> module_object, uint32_t index); |
| 53 | 54 |
| 54 // Abstracts details of building TurboFan graph nodes for WASM to separate | 55 // Abstracts details of building TurboFan graph nodes for WASM to separate |
| 55 // the WASM decoder from the internal details of TurboFan. | 56 // the WASM decoder from the internal details of TurboFan. |
| 56 class WasmTrapHelper; | 57 class WasmTrapHelper; |
| 57 class WasmGraphBuilder { | 58 class WasmGraphBuilder { |
| 58 public: | 59 public: |
| 59 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); |
| 60 | 63 |
| 61 Node** Buffer(size_t count) { | 64 Node** Buffer(size_t count) { |
| 62 if (count > cur_bufsize_) { | 65 if (count > cur_bufsize_) { |
| 63 size_t new_size = count + cur_bufsize_ + 5; | 66 size_t new_size = count + cur_bufsize_ + 5; |
| 64 cur_buffer_ = | 67 cur_buffer_ = |
| 65 reinterpret_cast<Node**>(zone_->New(new_size * sizeof(Node*))); | 68 reinterpret_cast<Node**>(zone_->New(new_size * sizeof(Node*))); |
| 66 cur_bufsize_ = new_size; | 69 cur_bufsize_ = new_size; |
| 67 } | 70 } |
| 68 return cur_buffer_; | 71 return cur_buffer_; |
| 69 } | 72 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 void set_module(wasm::ModuleEnv* module) { this->module_ = module; } | 136 void set_module(wasm::ModuleEnv* module) { this->module_ = module; } |
| 134 | 137 |
| 135 void set_control_ptr(Node** control) { this->control_ = control; } | 138 void set_control_ptr(Node** control) { this->control_ = control; } |
| 136 | 139 |
| 137 void set_effect_ptr(Node** effect) { this->effect_ = effect; } | 140 void set_effect_ptr(Node** effect) { this->effect_ = effect; } |
| 138 | 141 |
| 139 wasm::FunctionSig* GetFunctionSignature() { return function_signature_; } | 142 wasm::FunctionSig* GetFunctionSignature() { return function_signature_; } |
| 140 | 143 |
| 141 void Int64LoweringForTesting(); | 144 void Int64LoweringForTesting(); |
| 142 | 145 |
| 146 void SetSourcePosition(Node* node, int position); |
| 147 |
| 143 private: | 148 private: |
| 144 static const int kDefaultBufferSize = 16; | 149 static const int kDefaultBufferSize = 16; |
| 145 friend class WasmTrapHelper; | 150 friend class WasmTrapHelper; |
| 146 | 151 |
| 147 Zone* zone_; | 152 Zone* zone_; |
| 148 JSGraph* jsgraph_; | 153 JSGraph* jsgraph_; |
| 149 wasm::ModuleEnv* module_; | 154 wasm::ModuleEnv* module_; |
| 150 Node* mem_buffer_; | 155 Node* mem_buffer_; |
| 151 Node* mem_size_; | 156 Node* mem_size_; |
| 152 Node* function_table_; | 157 Node* function_table_; |
| 153 Node** control_; | 158 Node** control_; |
| 154 Node** effect_; | 159 Node** effect_; |
| 155 Node** cur_buffer_; | 160 Node** cur_buffer_; |
| 156 size_t cur_bufsize_; | 161 size_t cur_bufsize_; |
| 157 Node* def_buffer_[kDefaultBufferSize]; | 162 Node* def_buffer_[kDefaultBufferSize]; |
| 158 | 163 |
| 159 WasmTrapHelper* trap_; | 164 WasmTrapHelper* trap_; |
| 160 wasm::FunctionSig* function_signature_; | 165 wasm::FunctionSig* function_signature_; |
| 161 SetOncePointer<const Operator> allocate_heap_number_operator_; | 166 SetOncePointer<const Operator> allocate_heap_number_operator_; |
| 162 | 167 |
| 168 compiler::SourcePositionTable* source_position_table_ = nullptr; |
| 169 |
| 163 // Internal helper methods. | 170 // Internal helper methods. |
| 164 JSGraph* jsgraph() { return jsgraph_; } | 171 JSGraph* jsgraph() { return jsgraph_; } |
| 165 Graph* graph(); | 172 Graph* graph(); |
| 166 | 173 |
| 167 Node* String(const char* string); | 174 Node* String(const char* string); |
| 168 Node* MemBuffer(uint32_t offset); | 175 Node* MemBuffer(uint32_t offset); |
| 169 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); | 176 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); |
| 170 | 177 |
| 171 Node* MaskShiftCount32(Node* node); | 178 Node* MaskShiftCount32(Node* node); |
| 172 Node* MaskShiftCount64(Node* node); | 179 Node* MaskShiftCount64(Node* node); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 Node** buf = Buffer(new_count); | 275 Node** buf = Buffer(new_count); |
| 269 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); | 276 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); |
| 270 return buf; | 277 return buf; |
| 271 } | 278 } |
| 272 }; | 279 }; |
| 273 } // namespace compiler | 280 } // namespace compiler |
| 274 } // namespace internal | 281 } // namespace internal |
| 275 } // namespace v8 | 282 } // namespace v8 |
| 276 | 283 |
| 277 #endif // V8_COMPILER_WASM_COMPILER_H_ | 284 #endif // V8_COMPILER_WASM_COMPILER_H_ |
| OLD | NEW |