| 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 } | 22 } |
| 22 | 23 |
| 23 namespace wasm { | 24 namespace wasm { |
| 24 // Forward declarations for some WASM data structures. | 25 // Forward declarations for some WASM data structures. |
| 25 struct ModuleEnv; | 26 struct ModuleEnv; |
| 26 struct WasmFunction; | 27 struct WasmFunction; |
| 27 class ErrorThrower; | 28 class ErrorThrower; |
| 28 | 29 |
| 29 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. | 30 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}. |
| 30 typedef compiler::Node TFNode; | 31 typedef compiler::Node TFNode; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 Node* ReturnVoid(); | 102 Node* ReturnVoid(); |
| 102 Node* Unreachable(); | 103 Node* Unreachable(); |
| 103 | 104 |
| 104 Node* CallDirect(uint32_t index, Node** args); | 105 Node* CallDirect(uint32_t index, Node** args); |
| 105 Node* CallImport(uint32_t index, Node** args); | 106 Node* CallImport(uint32_t index, Node** args); |
| 106 Node* CallIndirect(uint32_t index, Node** args); | 107 Node* CallIndirect(uint32_t index, Node** args); |
| 107 void BuildJSToWasmWrapper(Handle<Code> wasm_code, wasm::FunctionSig* sig); | 108 void BuildJSToWasmWrapper(Handle<Code> wasm_code, wasm::FunctionSig* sig); |
| 108 void BuildWasmToJSWrapper(Handle<JSFunction> function, | 109 void BuildWasmToJSWrapper(Handle<JSFunction> function, |
| 109 wasm::FunctionSig* sig); | 110 wasm::FunctionSig* sig); |
| 110 | 111 |
| 111 Node* BuildJavaScriptToNumber(Node* node, Node* context, Node* effect, | |
| 112 Node* control); | |
| 113 Node* ToJS(Node* node, Node* context, wasm::LocalType type); | 112 Node* ToJS(Node* node, Node* context, wasm::LocalType type); |
| 114 Node* FromJS(Node* node, Node* context, wasm::LocalType type); | 113 Node* FromJS(Node* node, Node* context, wasm::LocalType type); |
| 115 Node* Invert(Node* node); | 114 Node* Invert(Node* node); |
| 116 Node* FunctionTable(); | 115 Node* FunctionTable(); |
| 117 | 116 |
| 118 //----------------------------------------------------------------------- | 117 //----------------------------------------------------------------------- |
| 119 // Operations that concern the linear memory. | 118 // Operations that concern the linear memory. |
| 120 //----------------------------------------------------------------------- | 119 //----------------------------------------------------------------------- |
| 121 Node* MemSize(uint32_t offset); | 120 Node* MemSize(uint32_t offset); |
| 122 Node* LoadGlobal(uint32_t index); | 121 Node* LoadGlobal(uint32_t index); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 151 Node* mem_size_; | 150 Node* mem_size_; |
| 152 Node* function_table_; | 151 Node* function_table_; |
| 153 Node** control_; | 152 Node** control_; |
| 154 Node** effect_; | 153 Node** effect_; |
| 155 Node** cur_buffer_; | 154 Node** cur_buffer_; |
| 156 size_t cur_bufsize_; | 155 size_t cur_bufsize_; |
| 157 Node* def_buffer_[kDefaultBufferSize]; | 156 Node* def_buffer_[kDefaultBufferSize]; |
| 158 | 157 |
| 159 WasmTrapHelper* trap_; | 158 WasmTrapHelper* trap_; |
| 160 wasm::FunctionSig* function_signature_; | 159 wasm::FunctionSig* function_signature_; |
| 160 SetOncePointer<const Operator> allocate_heap_number_operator_; |
| 161 | 161 |
| 162 // Internal helper methods. | 162 // Internal helper methods. |
| 163 JSGraph* jsgraph() { return jsgraph_; } | 163 JSGraph* jsgraph() { return jsgraph_; } |
| 164 Graph* graph(); | 164 Graph* graph(); |
| 165 | 165 |
| 166 Node* String(const char* string); | 166 Node* String(const char* string); |
| 167 Node* MemBuffer(uint32_t offset); | 167 Node* MemBuffer(uint32_t offset); |
| 168 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); | 168 void BoundsCheckMem(MachineType memtype, Node* index, uint32_t offset); |
| 169 | 169 |
| 170 Node* MaskShiftCount32(Node* node); | 170 Node* MaskShiftCount32(Node* node); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 Node* BuildI32DivU(Node* left, Node* right); | 237 Node* BuildI32DivU(Node* left, Node* right); |
| 238 Node* BuildI32RemU(Node* left, Node* right); | 238 Node* BuildI32RemU(Node* left, Node* right); |
| 239 | 239 |
| 240 Node* BuildI64DivS(Node* left, Node* right); | 240 Node* BuildI64DivS(Node* left, Node* right); |
| 241 Node* BuildI64RemS(Node* left, Node* right); | 241 Node* BuildI64RemS(Node* left, Node* right); |
| 242 Node* BuildI64DivU(Node* left, Node* right); | 242 Node* BuildI64DivU(Node* left, Node* right); |
| 243 Node* BuildI64RemU(Node* left, Node* right); | 243 Node* BuildI64RemU(Node* left, Node* right); |
| 244 Node* BuildDiv64Call(Node* left, Node* right, ExternalReference ref, | 244 Node* BuildDiv64Call(Node* left, Node* right, ExternalReference ref, |
| 245 MachineType result_type, int trap_zero); | 245 MachineType result_type, int trap_zero); |
| 246 | 246 |
| 247 Node* BuildJavaScriptToNumber(Node* node, Node* context, Node* effect, |
| 248 Node* control); |
| 249 Node* BuildChangeInt32ToTagged(Node* value); |
| 250 Node* BuildChangeFloat64ToTagged(Node* value); |
| 251 Node* BuildChangeTaggedToFloat64(Node* value); |
| 252 |
| 253 Node* BuildChangeInt32ToSmi(Node* value); |
| 254 Node* BuildChangeSmiToInt32(Node* value); |
| 255 Node* BuildChangeSmiToFloat64(Node* value); |
| 256 Node* BuildTestNotSmi(Node* value); |
| 257 Node* BuildSmiShiftBitsConstant(); |
| 258 |
| 259 Node* BuildAllocateHeapNumberWithValue(Node* value, Node* control); |
| 260 Node* BuildLoadHeapNumberValue(Node* value, Node* control); |
| 261 Node* BuildHeapNumberValueIndexConstant(); |
| 262 |
| 247 Node** Realloc(Node** buffer, size_t old_count, size_t new_count) { | 263 Node** Realloc(Node** buffer, size_t old_count, size_t new_count) { |
| 248 Node** buf = Buffer(new_count); | 264 Node** buf = Buffer(new_count); |
| 249 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); | 265 if (buf != buffer) memcpy(buf, buffer, old_count * sizeof(Node*)); |
| 250 return buf; | 266 return buf; |
| 251 } | 267 } |
| 252 }; | 268 }; |
| 253 } // namespace compiler | 269 } // namespace compiler |
| 254 } // namespace internal | 270 } // namespace internal |
| 255 } // namespace v8 | 271 } // namespace v8 |
| 256 | 272 |
| 257 #endif // V8_COMPILER_WASM_COMPILER_H_ | 273 #endif // V8_COMPILER_WASM_COMPILER_H_ |
| OLD | NEW |