| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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_WASM_INTERPRETER_H_ | 5 #ifndef V8_WASM_INTERPRETER_H_ |
| 6 #define V8_WASM_INTERPRETER_H_ | 6 #define V8_WASM_INTERPRETER_H_ |
| 7 | 7 |
| 8 #include "src/wasm/wasm-opcodes.h" | 8 #include "src/wasm/wasm-opcodes.h" |
| 9 #include "src/zone/zone-containers.h" | 9 #include "src/zone/zone-containers.h" |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 } \ | 73 } \ |
| 74 template <> \ | 74 template <> \ |
| 75 inline ctype WasmVal::to() { \ | 75 inline ctype WasmVal::to() { \ |
| 76 CHECK_EQ(localtype, type); \ | 76 CHECK_EQ(localtype, type); \ |
| 77 return val.field; \ | 77 return val.field; \ |
| 78 } | 78 } |
| 79 FOREACH_UNION_MEMBER(DECLARE_CAST) | 79 FOREACH_UNION_MEMBER(DECLARE_CAST) |
| 80 #undef DECLARE_CAST | 80 #undef DECLARE_CAST |
| 81 | 81 |
| 82 // Representation of frames within the interpreter. | 82 // Representation of frames within the interpreter. |
| 83 class WasmFrame { | 83 class InterpretedFrame { |
| 84 public: | 84 public: |
| 85 const WasmFunction* function() const { return function_; } | 85 const WasmFunction* function() const { return function_; } |
| 86 int pc() const { | 86 int pc() const { return pc_; } |
| 87 // TODO(wasm): Remove USE once we actually use them. | 87 |
| 88 USE(fp_); | 88 //========================================================================== |
| 89 USE(sp_); | 89 // Stack frame inspection. |
| 90 return pc_; | 90 //========================================================================== |
| 91 } | 91 int GetParameterCount() const; |
| 92 WasmVal GetLocalVal(int index) const; |
| 93 WasmVal GetExprVal(int pc) const; |
| 94 void SetLocalVal(int index, WasmVal val); |
| 95 void SetExprVal(int pc, WasmVal val); |
| 92 | 96 |
| 93 private: | 97 private: |
| 94 friend class WasmInterpreter; | 98 friend class WasmInterpreter; |
| 95 | 99 |
| 96 WasmFrame(const WasmFunction* function, int pc, int fp, int sp) | 100 InterpretedFrame(const WasmFunction* function, int pc, int fp, int sp) |
| 97 : function_(function), pc_(pc), fp_(fp), sp_(sp) {} | 101 : function_(function), pc_(pc), fp_(fp), sp_(sp) {} |
| 98 | 102 |
| 99 const WasmFunction* function_; | 103 const WasmFunction* function_; |
| 100 int pc_; | 104 int pc_; |
| 101 int fp_; | 105 int fp_; |
| 102 int sp_; | 106 int sp_; |
| 103 }; | 107 }; |
| 104 | 108 |
| 105 // An interpreter capable of executing WASM. | 109 // An interpreter capable of executing WASM. |
| 106 class V8_EXPORT_PRIVATE WasmInterpreter { | 110 class V8_EXPORT_PRIVATE WasmInterpreter { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 127 State state(); | 131 State state(); |
| 128 void PushFrame(const WasmFunction* function, WasmVal* args); | 132 void PushFrame(const WasmFunction* function, WasmVal* args); |
| 129 State Run(); | 133 State Run(); |
| 130 State Step(); | 134 State Step(); |
| 131 void Pause(); | 135 void Pause(); |
| 132 void Reset(); | 136 void Reset(); |
| 133 | 137 |
| 134 // Stack inspection and modification. | 138 // Stack inspection and modification. |
| 135 pc_t GetBreakpointPc(); | 139 pc_t GetBreakpointPc(); |
| 136 int GetFrameCount(); | 140 int GetFrameCount(); |
| 137 const WasmFrame* GetFrame(int index); | 141 const InterpretedFrame GetFrame(int index); |
| 138 WasmFrame* GetMutableFrame(int index); | 142 InterpretedFrame GetMutableFrame(int index); |
| 139 WasmVal GetReturnValue(int index = 0); | 143 WasmVal GetReturnValue(int index = 0); |
| 140 // Returns true if the thread executed an instruction which may produce | 144 // Returns true if the thread executed an instruction which may produce |
| 141 // nondeterministic results, e.g. float div, float sqrt, and float mul, | 145 // nondeterministic results, e.g. float div, float sqrt, and float mul, |
| 142 // where the sign bit of a NaN is nondeterministic. | 146 // where the sign bit of a NaN is nondeterministic. |
| 143 bool PossibleNondeterminism(); | 147 bool PossibleNondeterminism(); |
| 144 | 148 |
| 145 // Thread-specific breakpoints. | 149 // Thread-specific breakpoints. |
| 146 // TODO(wasm): Implement this once we support multiple threads. | 150 // TODO(wasm): Implement this once we support multiple threads. |
| 147 // bool SetBreakpoint(const WasmFunction* function, int pc, bool enabled); | 151 // bool SetBreakpoint(const WasmFunction* function, int pc, bool enabled); |
| 148 // bool GetBreakpoint(const WasmFunction* function, int pc); | 152 // bool GetBreakpoint(const WasmFunction* function, int pc); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 167 // Enable or disable tracing for {function}. Return the previous state. | 171 // Enable or disable tracing for {function}. Return the previous state. |
| 168 bool SetTracing(const WasmFunction* function, bool enabled); | 172 bool SetTracing(const WasmFunction* function, bool enabled); |
| 169 | 173 |
| 170 //========================================================================== | 174 //========================================================================== |
| 171 // Thread iteration and inspection. | 175 // Thread iteration and inspection. |
| 172 //========================================================================== | 176 //========================================================================== |
| 173 int GetThreadCount(); | 177 int GetThreadCount(); |
| 174 Thread* GetThread(int id); | 178 Thread* GetThread(int id); |
| 175 | 179 |
| 176 //========================================================================== | 180 //========================================================================== |
| 177 // Stack frame inspection. | |
| 178 //========================================================================== | |
| 179 WasmVal GetLocalVal(const WasmFrame* frame, int index); | |
| 180 WasmVal GetExprVal(const WasmFrame* frame, int pc); | |
| 181 void SetLocalVal(WasmFrame* frame, int index, WasmVal val); | |
| 182 void SetExprVal(WasmFrame* frame, int pc, WasmVal val); | |
| 183 | |
| 184 //========================================================================== | |
| 185 // Memory access. | 181 // Memory access. |
| 186 //========================================================================== | 182 //========================================================================== |
| 187 size_t GetMemorySize(); | 183 size_t GetMemorySize(); |
| 188 WasmVal ReadMemory(size_t offset); | 184 WasmVal ReadMemory(size_t offset); |
| 189 void WriteMemory(size_t offset, WasmVal val); | 185 void WriteMemory(size_t offset, WasmVal val); |
| 190 | 186 |
| 191 //========================================================================== | 187 //========================================================================== |
| 192 // Testing functionality. | 188 // Testing functionality. |
| 193 //========================================================================== | 189 //========================================================================== |
| 194 // Manually adds a function to this interpreter, returning the index of the | 190 // Manually adds a function to this interpreter, returning the index of the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 207 private: | 203 private: |
| 208 Zone zone_; | 204 Zone zone_; |
| 209 WasmInterpreterInternals* internals_; | 205 WasmInterpreterInternals* internals_; |
| 210 }; | 206 }; |
| 211 | 207 |
| 212 } // namespace wasm | 208 } // namespace wasm |
| 213 } // namespace internal | 209 } // namespace internal |
| 214 } // namespace v8 | 210 } // namespace v8 |
| 215 | 211 |
| 216 #endif // V8_WASM_INTERPRETER_H_ | 212 #endif // V8_WASM_INTERPRETER_H_ |
| OLD | NEW |