summaryrefslogtreecommitdiffstats
path: root/chromium/v8/src/wasm/wasm-interpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/wasm/wasm-interpreter.h')
-rw-r--r--chromium/v8/src/wasm/wasm-interpreter.h228
1 files changed, 0 insertions, 228 deletions
diff --git a/chromium/v8/src/wasm/wasm-interpreter.h b/chromium/v8/src/wasm/wasm-interpreter.h
deleted file mode 100644
index 5a154be6982..00000000000
--- a/chromium/v8/src/wasm/wasm-interpreter.h
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2016 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef V8_WASM_WASM_INTERPRETER_H_
-#define V8_WASM_WASM_INTERPRETER_H_
-
-#include <memory>
-
-#include "src/wasm/wasm-opcodes.h"
-#include "src/wasm/wasm-value.h"
-#include "src/zone/zone-containers.h"
-
-namespace v8 {
-
-namespace internal {
-class WasmInstanceObject;
-
-namespace wasm {
-
-// Forward declarations.
-struct ModuleWireBytes;
-struct WasmFunction;
-struct WasmModule;
-class WasmInterpreterInternals;
-
-using pc_t = size_t;
-using sp_t = size_t;
-using pcdiff_t = int32_t;
-using spdiff_t = uint32_t;
-
-constexpr pc_t kInvalidPc = 0x80000000;
-
-struct ControlTransferEntry {
- // Distance from the instruction to the label to jump to (forward, but can be
- // negative).
- pcdiff_t pc_diff;
- // Delta by which to decrease the stack height.
- spdiff_t sp_diff;
- // Arity of the block we jump to.
- uint32_t target_arity;
-};
-
-using ControlTransferMap = ZoneMap<pc_t, ControlTransferEntry>;
-
-// Representation of frames within the interpreter.
-//
-// Layout of a frame:
-// -----------------
-// stack slot #N ‾\.
-// ... | stack entries: GetStackHeight(); GetStackValue()
-// stack slot #0 _/·
-// local #L ‾\.
-// ... | locals: GetLocalCount(); GetLocalValue()
-// local #P+1 |
-// param #P | ‾\.
-// ... | | parameters: GetParameterCount(); GetLocalValue()
-// param #0 _/· _/·
-// -----------------
-//
-class V8_EXPORT_PRIVATE InterpretedFrame {
- public:
- const WasmFunction* function() const;
- int pc() const;
-
- int GetParameterCount() const;
- int GetLocalCount() const;
- int GetStackHeight() const;
- WasmValue GetLocalValue(int index) const;
- WasmValue GetStackValue(int index) const;
-
- private:
- friend class WasmInterpreter;
- // Don't instante InterpretedFrames; they will be allocated as
- // InterpretedFrameImpl in the interpreter implementation.
- InterpretedFrame() = delete;
- DISALLOW_COPY_AND_ASSIGN(InterpretedFrame);
-};
-
-// Deleter struct to delete the underlying InterpretedFrameImpl without
-// violating language specifications.
-struct V8_EXPORT_PRIVATE InterpretedFrameDeleter {
- void operator()(InterpretedFrame* ptr);
-};
-
-// An interpreter capable of executing WebAssembly.
-class V8_EXPORT_PRIVATE WasmInterpreter {
- public:
- // State machine for a Thread:
- // +----------------------------------------------------------+
- // | +--------Run()/Step()---------+ |
- // V V | |
- // STOPPED ---Run()--> RUNNING ------Pause()-----+-> PAUSED <--+
- // ^ | | | | / |
- // +--- Exception ---+ | | +--- Breakpoint ---+ RaiseException() <--+
- // | | |
- // | +---------- Trap --------------> TRAPPED --------+
- // +----------- Finish -------------> FINISHED
- enum State { STOPPED, RUNNING, PAUSED, FINISHED, TRAPPED };
-
- // Tells a thread to pause after certain instructions.
- enum BreakFlag : uint8_t {
- None = 0,
- AfterReturn = 1 << 0,
- AfterCall = 1 << 1
- };
-
- using FramePtr = std::unique_ptr<InterpretedFrame, InterpretedFrameDeleter>;
-
- // Representation of a thread in the interpreter.
- class V8_EXPORT_PRIVATE Thread {
- // Don't instante Threads; they will be allocated as ThreadImpl in the
- // interpreter implementation.
- Thread() = delete;
-
- public:
- enum ExceptionHandlingResult { HANDLED, UNWOUND };
-
- // Execution control.
- State state();
- void InitFrame(const WasmFunction* function, WasmValue* args);
- // Pass -1 as num_steps to run till completion, pause or breakpoint.
- State Run(int num_steps = -1);
- State Step() { return Run(1); }
- void Pause();
- void Reset();
-
- // Raise an exception in the current activation and unwind the stack
- // accordingly. Return whether the exception was handled inside wasm:
- // - HANDLED: Activation at handler position and in {PAUSED} state.
- // - UNWOUND: Frames unwound, exception pending, and in {STOPPED} state.
- ExceptionHandlingResult RaiseException(Isolate*, Handle<Object> exception);
-
- // Stack inspection and modification.
- pc_t GetBreakpointPc();
- int GetFrameCount();
- // The InterpretedFrame is only valid as long as the Thread is paused.
- FramePtr GetFrame(int index);
- WasmValue GetReturnValue(int index = 0);
- TrapReason GetTrapReason();
-
- // Returns true if the thread executed an instruction which may produce
- // nondeterministic results, e.g. float div, float sqrt, and float mul,
- // where the sign bit of a NaN is nondeterministic.
- bool PossibleNondeterminism();
-
- // Returns the number of calls / function frames executed on this thread.
- uint64_t NumInterpretedCalls();
-
- // Thread-specific breakpoints.
- // TODO(wasm): Implement this once we support multiple threads.
- // bool SetBreakpoint(const WasmFunction* function, int pc, bool enabled);
- // bool GetBreakpoint(const WasmFunction* function, int pc);
-
- void AddBreakFlags(uint8_t flags);
- void ClearBreakFlags();
-
- // Each thread can have multiple activations, each represented by a portion
- // of the stack frames of this thread. StartActivation returns the id
- // (counting from 0 up) of the started activation.
- // Activations must be properly stacked, i.e. if FinishActivation is called,
- // the given id must the the latest activation on the stack.
- uint32_t NumActivations();
- uint32_t StartActivation();
- void FinishActivation(uint32_t activation_id);
- // Return the frame base of the given activation, i.e. the number of frames
- // when this activation was started.
- uint32_t ActivationFrameBase(uint32_t activation_id);
- };
-
- WasmInterpreter(Isolate* isolate, const WasmModule* module,
- const ModuleWireBytes& wire_bytes,
- Handle<WasmInstanceObject> instance);
-
- ~WasmInterpreter();
-
- //==========================================================================
- // Execution controls.
- //==========================================================================
- void Run();
- void Pause();
-
- // Prepare {function} for stepping in from Javascript.
- void PrepareStepIn(const WasmFunction* function);
-
- // Set a breakpoint at {pc} in {function} to be {enabled}. Returns the
- // previous state of the breakpoint at {pc}.
- bool SetBreakpoint(const WasmFunction* function, pc_t pc, bool enabled);
-
- // Gets the current state of the breakpoint at {function}.
- bool GetBreakpoint(const WasmFunction* function, pc_t pc);
-
- // Enable or disable tracing for {function}. Return the previous state.
- bool SetTracing(const WasmFunction* function, bool enabled);
-
- //==========================================================================
- // Thread iteration and inspection.
- //==========================================================================
- int GetThreadCount();
- Thread* GetThread(int id);
-
- //==========================================================================
- // Testing functionality.
- //==========================================================================
- // Manually adds a function to this interpreter. The func_index of the
- // function must match the current number of functions.
- void AddFunctionForTesting(const WasmFunction* function);
- // Manually adds code to the interpreter for the given function.
- void SetFunctionCodeForTesting(const WasmFunction* function,
- const byte* start, const byte* end);
-
- // Computes the control transfers for the given bytecode. Used internally in
- // the interpreter, but exposed for testing.
- static ControlTransferMap ComputeControlTransfersForTesting(
- Zone* zone, const WasmModule* module, const byte* start, const byte* end);
-
- private:
- Zone zone_;
- std::unique_ptr<WasmInterpreterInternals> internals_;
-
- DISALLOW_COPY_AND_ASSIGN(WasmInterpreter);
-};
-
-} // namespace wasm
-} // namespace internal
-} // namespace v8
-
-#endif // V8_WASM_WASM_INTERPRETER_H_