summaryrefslogtreecommitdiff
path: root/src/interpreter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interpreter.cc')
-rw-r--r--src/interpreter.cc1363
1 files changed, 659 insertions, 704 deletions
diff --git a/src/interpreter.cc b/src/interpreter.cc
index 30aba1a9..f116eb25 100644
--- a/src/interpreter.cc
+++ b/src/interpreter.cc
@@ -25,8 +25,9 @@
#include "stream.h"
namespace wabt {
+namespace interpreter {
-static const char* s_interpreter_opcode_name[256] = {
+static const char* s_opcode_name[256] = {
#define WABT_OPCODE(rtype, type1, type2, mem_size, code, NAME, text) text,
#include "interpreter-opcode.def"
@@ -40,14 +41,13 @@ static const char* s_interpreter_opcode_name[256] = {
return Result::Error; \
} while (0)
-static const char* get_interpreter_opcode_name(InterpreterOpcode opcode) {
- return s_interpreter_opcode_name[static_cast<int>(opcode)];
+static const char* get_opcode_name(Opcode opcode) {
+ return s_opcode_name[static_cast<int>(opcode)];
}
-InterpreterEnvironment::InterpreterEnvironment()
- : istream(new OutputBuffer()) {}
+Environment::Environment() : istream(new OutputBuffer()) {}
-InterpreterThread::InterpreterThread()
+Thread::Thread()
: env(nullptr),
value_stack_top(nullptr),
value_stack_end(nullptr),
@@ -55,18 +55,17 @@ InterpreterThread::InterpreterThread()
call_stack_end(nullptr),
pc(0) {}
-InterpreterImport::InterpreterImport()
- : kind(ExternalKind::Func) {
+Import::Import() : kind(ExternalKind::Func) {
WABT_ZERO_MEMORY(module_name);
WABT_ZERO_MEMORY(field_name);
WABT_ZERO_MEMORY(func.sig_index);
}
-InterpreterImport::InterpreterImport(InterpreterImport&& other) {
+Import::Import(Import&& other) {
*this = std::move(other);
}
-InterpreterImport& InterpreterImport::operator=(InterpreterImport&& other) {
+Import& Import::operator=(Import&& other) {
kind = other.kind;
module_name = other.module_name;
WABT_ZERO_MEMORY(other.module_name);
@@ -90,20 +89,17 @@ InterpreterImport& InterpreterImport::operator=(InterpreterImport&& other) {
return *this;
}
-
-InterpreterImport::~InterpreterImport() {
+Import::~Import() {
destroy_string_slice(&module_name);
destroy_string_slice(&field_name);
}
-InterpreterExport::InterpreterExport(InterpreterExport&& other)
- : name(other.name),
- kind(other.kind),
- index(other.index) {
+Export::Export(Export&& other)
+ : name(other.name), kind(other.kind), index(other.index) {
WABT_ZERO_MEMORY(other.name);
}
-InterpreterExport& InterpreterExport::operator=(InterpreterExport&& other) {
+Export& Export::operator=(Export&& other) {
name = other.name;
kind = other.kind;
index = other.index;
@@ -111,39 +107,37 @@ InterpreterExport& InterpreterExport::operator=(InterpreterExport&& other) {
return *this;
}
-InterpreterExport::~InterpreterExport() {
+Export::~Export() {
destroy_string_slice(&name);
}
-InterpreterModule::InterpreterModule(bool is_host)
+Module::Module(bool is_host)
: memory_index(kInvalidIndex),
table_index(kInvalidIndex),
is_host(is_host) {
WABT_ZERO_MEMORY(name);
}
-InterpreterModule::InterpreterModule(const StringSlice& name, bool is_host)
+Module::Module(const StringSlice& name, bool is_host)
: name(name),
memory_index(kInvalidIndex),
table_index(kInvalidIndex),
is_host(is_host) {}
-InterpreterModule::~InterpreterModule() {
+Module::~Module() {
destroy_string_slice(&name);
}
-DefinedInterpreterModule::DefinedInterpreterModule(size_t istream_start)
- : InterpreterModule(false),
+DefinedModule::DefinedModule(size_t istream_start)
+ : Module(false),
start_func_index(kInvalidIndex),
istream_start(istream_start),
istream_end(istream_start) {}
-HostInterpreterModule::HostInterpreterModule(const StringSlice& name)
- : InterpreterModule(name, true) {}
+HostModule::HostModule(const StringSlice& name) : Module(name, true) {}
-InterpreterEnvironmentMark mark_interpreter_environment(
- InterpreterEnvironment* env) {
- InterpreterEnvironmentMark mark;
+EnvironmentMark mark_environment(Environment* env) {
+ EnvironmentMark mark;
WABT_ZERO_MEMORY(mark);
mark.modules_size = env->modules.size();
mark.sigs_size = env->sigs.size();
@@ -155,8 +149,7 @@ InterpreterEnvironmentMark mark_interpreter_environment(
return mark;
}
-void reset_interpreter_environment_to_mark(InterpreterEnvironment* env,
- InterpreterEnvironmentMark mark) {
+void reset_environment_to_mark(Environment* env, EnvironmentMark mark) {
/* Destroy entries in the binding hash. */
for (size_t i = mark.modules_size; i < env->modules.size(); ++i) {
const StringSlice* name = &env->modules[i]->name;
@@ -187,19 +180,15 @@ void reset_interpreter_environment_to_mark(InterpreterEnvironment* env,
env->istream->data.resize(mark.istream_size);
}
-HostInterpreterModule* append_host_module(InterpreterEnvironment* env,
- StringSlice name) {
- HostInterpreterModule* module =
- new HostInterpreterModule(dup_string_slice(name));
+HostModule* append_host_module(Environment* env, StringSlice name) {
+ HostModule* module = new HostModule(dup_string_slice(name));
env->modules.emplace_back(module);
env->registered_module_bindings.emplace(string_slice_to_string(name),
Binding(env->modules.size() - 1));
return module;
}
-void init_interpreter_thread(InterpreterEnvironment* env,
- InterpreterThread* thread,
- InterpreterThreadOptions* options) {
+void init_thread(Environment* env, Thread* thread, ThreadOptions* options) {
thread->value_stack.resize(options->value_stack_size);
thread->call_stack.resize(options->call_stack_size);
thread->env = env;
@@ -212,16 +201,14 @@ void init_interpreter_thread(InterpreterEnvironment* env,
thread->pc = options->pc;
}
-InterpreterResult push_thread_value(InterpreterThread* thread,
- InterpreterValue value) {
+Result push_thread_value(Thread* thread, Value value) {
if (thread->value_stack_top >= thread->value_stack_end)
- return InterpreterResult::TrapValueStackExhausted;
+ return Result::TrapValueStackExhausted;
*thread->value_stack_top++ = value;
- return InterpreterResult::Ok;
+ return Result::Ok;
}
-InterpreterExport* get_interpreter_export_by_name(InterpreterModule* module,
- const StringSlice* name) {
+Export* get_export_by_name(Module* module, const StringSlice* name) {
int field_index = module->export_bindings.find_index(*name);
if (field_index < 0)
return nullptr;
@@ -475,7 +462,7 @@ DEFINE_BITCAST(bitcast_u64_to_f64, uint64_t, double)
#define TYPE_FIELD_NAME_F32 f32_bits
#define TYPE_FIELD_NAME_F64 f64_bits
-#define TRAP(type) return InterpreterResult::Trap##type
+#define TRAP(type) return Result::Trap##type
#define TRAP_UNLESS(cond, type) TRAP_IF(!(cond), type)
#define TRAP_IF(cond, type) \
do { \
@@ -539,7 +526,7 @@ DEFINE_BITCAST(bitcast_u64_to_f64, uint64_t, double)
#define GET_MEMORY(var) \
Index memory_index = read_u32(&pc); \
- InterpreterMemory* var = &env->memories[memory_index]
+ Memory* var = &env->memories[memory_index]
#define LOAD(type, mem_type) \
do { \
@@ -751,27 +738,26 @@ static WABT_INLINE void read_table_entry_at(const uint8_t* pc,
*out_keep = *(pc + WABT_TABLE_ENTRY_KEEP_OFFSET);
}
-bool func_signatures_are_equal(InterpreterEnvironment* env,
+bool func_signatures_are_equal(Environment* env,
Index sig_index_0,
Index sig_index_1) {
if (sig_index_0 == sig_index_1)
return true;
- InterpreterFuncSignature* sig_0 = &env->sigs[sig_index_0];
- InterpreterFuncSignature* sig_1 = &env->sigs[sig_index_1];
+ FuncSignature* sig_0 = &env->sigs[sig_index_0];
+ FuncSignature* sig_1 = &env->sigs[sig_index_1];
return sig_0->param_types == sig_1->param_types &&
sig_0->result_types == sig_1->result_types;
}
-InterpreterResult call_host(InterpreterThread* thread,
- HostInterpreterFunc* func) {
- InterpreterFuncSignature* sig = &thread->env->sigs[func->sig_index];
+Result call_host(Thread* thread, HostFunc* func) {
+ FuncSignature* sig = &thread->env->sigs[func->sig_index];
size_t num_params = sig->param_types.size();
size_t num_results = sig->result_types.size();
// + 1 is a workaround for using data() below; UBSAN doesn't like calling
// data() with an empty vector.
- std::vector<InterpreterTypedValue> params(num_params + 1);
- std::vector<InterpreterTypedValue> results(num_results + 1);
+ std::vector<TypedValue> params(num_params + 1);
+ std::vector<TypedValue> results(num_results + 1);
for (size_t i = num_params; i > 0; --i) {
params[i - 1].value = POP();
@@ -788,42 +774,42 @@ InterpreterResult call_host(InterpreterThread* thread,
PUSH(results[i].value);
}
- return InterpreterResult::Ok;
+ return Result::Ok;
}
-InterpreterResult run_interpreter(InterpreterThread* thread,
- int num_instructions,
- IstreamOffset* call_stack_return_top) {
- InterpreterResult result = InterpreterResult::Ok;
+Result run_interpreter(Thread* thread,
+ int num_instructions,
+ IstreamOffset* call_stack_return_top) {
+ Result result = Result::Ok;
assert(call_stack_return_top < thread->call_stack_end);
- InterpreterEnvironment* env = thread->env;
+ Environment* env = thread->env;
const uint8_t* istream = env->istream->data.data();
const uint8_t* pc = &istream[thread->pc];
for (int i = 0; i < num_instructions; ++i) {
- InterpreterOpcode opcode = static_cast<InterpreterOpcode>(*pc++);
+ Opcode opcode = static_cast<Opcode>(*pc++);
switch (opcode) {
- case InterpreterOpcode::Select: {
+ case Opcode::Select: {
VALUE_TYPE_I32 cond = POP_I32();
- InterpreterValue false_ = POP();
- InterpreterValue true_ = POP();
+ Value false_ = POP();
+ Value true_ = POP();
PUSH(cond ? true_ : false_);
break;
}
- case InterpreterOpcode::Br:
+ case Opcode::Br:
GOTO(read_u32(&pc));
break;
- case InterpreterOpcode::BrIf: {
+ case Opcode::BrIf: {
IstreamOffset new_pc = read_u32(&pc);
if (POP_I32())
GOTO(new_pc);
break;
}
- case InterpreterOpcode::BrTable: {
+ case Opcode::BrTable: {
Index num_targets = read_u32(&pc);
IstreamOffset table_offset = read_u32(&pc);
VALUE_TYPE_I32 key = POP_I32();
@@ -839,80 +825,80 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::Return:
+ case Opcode::Return:
if (thread->call_stack_top == call_stack_return_top) {
- result = InterpreterResult::Returned;
+ result = Result::Returned;
goto exit_loop;
}
GOTO(POP_CALL());
break;
- case InterpreterOpcode::Unreachable:
+ case Opcode::Unreachable:
TRAP(Unreachable);
break;
- case InterpreterOpcode::I32Const:
+ case Opcode::I32Const:
PUSH_I32(read_u32(&pc));
break;
- case InterpreterOpcode::I64Const:
+ case Opcode::I64Const:
PUSH_I64(read_u64(&pc));
break;
- case InterpreterOpcode::F32Const:
+ case Opcode::F32Const:
PUSH_F32(read_u32(&pc));
break;
- case InterpreterOpcode::F64Const:
+ case Opcode::F64Const:
PUSH_F64(read_u64(&pc));
break;
- case InterpreterOpcode::GetGlobal: {
+ case Opcode::GetGlobal: {
Index index = read_u32(&pc);
assert(index < env->globals.size());
PUSH(env->globals[index].typed_value.value);
break;
}
- case InterpreterOpcode::SetGlobal: {
+ case Opcode::SetGlobal: {
Index index = read_u32(&pc);
assert(index < env->globals.size());
env->globals[index].typed_value.value = POP();
break;
}
- case InterpreterOpcode::GetLocal: {
- InterpreterValue value = PICK(read_u32(&pc));
+ case Opcode::GetLocal: {
+ Value value = PICK(read_u32(&pc));
PUSH(value);
break;
}
- case InterpreterOpcode::SetLocal: {
- InterpreterValue value = POP();
+ case Opcode::SetLocal: {
+ Value value = POP();
PICK(read_u32(&pc)) = value;
break;
}
- case InterpreterOpcode::TeeLocal:
+ case Opcode::TeeLocal:
PICK(read_u32(&pc)) = TOP();
break;
- case InterpreterOpcode::Call: {
+ case Opcode::Call: {
IstreamOffset offset = read_u32(&pc);
PUSH_CALL();
GOTO(offset);
break;
}
- case InterpreterOpcode::CallIndirect: {
+ case Opcode::CallIndirect: {
Index table_index = read_u32(&pc);
- InterpreterTable* table = &env->tables[table_index];
+ Table* table = &env->tables[table_index];
Index sig_index = read_u32(&pc);
VALUE_TYPE_I32 entry_index = POP_I32();
TRAP_IF(entry_index >= table->func_indexes.size(), UndefinedTableIndex);
Index func_index = table->func_indexes[entry_index];
TRAP_IF(func_index == kInvalidIndex, UninitializedTableElement);
- InterpreterFunc* func = env->funcs[func_index].get();
+ Func* func = env->funcs[func_index].get();
TRAP_UNLESS(func_signatures_are_equal(env, func->sig_index, sig_index),
IndirectCallSignatureMismatch);
if (func->is_host) {
@@ -924,111 +910,111 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::CallHost: {
+ case Opcode::CallHost: {
Index func_index = read_u32(&pc);
call_host(thread, env->funcs[func_index]->as_host());
break;
}
- case InterpreterOpcode::I32Load8S:
+ case Opcode::I32Load8S:
LOAD(I32, I8);
break;
- case InterpreterOpcode::I32Load8U:
+ case Opcode::I32Load8U:
LOAD(I32, U8);
break;
- case InterpreterOpcode::I32Load16S:
+ case Opcode::I32Load16S:
LOAD(I32, I16);
break;
- case InterpreterOpcode::I32Load16U:
+ case Opcode::I32Load16U:
LOAD(I32, U16);
break;
- case InterpreterOpcode::I64Load8S:
+ case Opcode::I64Load8S:
LOAD(I64, I8);
break;
- case InterpreterOpcode::I64Load8U:
+ case Opcode::I64Load8U:
LOAD(I64, U8);
break;
- case InterpreterOpcode::I64Load16S:
+ case Opcode::I64Load16S:
LOAD(I64, I16);
break;
- case InterpreterOpcode::I64Load16U:
+ case Opcode::I64Load16U:
LOAD(I64, U16);
break;
- case InterpreterOpcode::I64Load32S:
+ case Opcode::I64Load32S:
LOAD(I64, I32);
break;
- case InterpreterOpcode::I64Load32U:
+ case Opcode::I64Load32U:
LOAD(I64, U32);
break;
- case InterpreterOpcode::I32Load:
+ case Opcode::I32Load:
LOAD(I32, U32);
break;
- case InterpreterOpcode::I64Load:
+ case Opcode::I64Load:
LOAD(I64, U64);
break;
- case InterpreterOpcode::F32Load:
+ case Opcode::F32Load:
LOAD(F32, F32);
break;
- case InterpreterOpcode::F64Load:
+ case Opcode::F64Load:
LOAD(F64, F64);
break;
- case InterpreterOpcode::I32Store8:
+ case Opcode::I32Store8:
STORE(I32, U8);
break;
- case InterpreterOpcode::I32Store16:
+ case Opcode::I32Store16:
STORE(I32, U16);
break;
- case InterpreterOpcode::I64Store8:
+ case Opcode::I64Store8:
STORE(I64, U8);
break;
- case InterpreterOpcode::I64Store16:
+ case Opcode::I64Store16:
STORE(I64, U16);
break;
- case InterpreterOpcode::I64Store32:
+ case Opcode::I64Store32:
STORE(I64, U32);
break;
- case InterpreterOpcode::I32Store:
+ case Opcode::I32Store:
STORE(I32, U32);
break;
- case InterpreterOpcode::I64Store:
+ case Opcode::I64Store:
STORE(I64, U64);
break;
- case InterpreterOpcode::F32Store:
+ case Opcode::F32Store:
STORE(F32, F32);
break;
- case InterpreterOpcode::F64Store:
+ case Opcode::F64Store:
STORE(F64, F64);
break;
- case InterpreterOpcode::CurrentMemory: {
+ case Opcode::CurrentMemory: {
GET_MEMORY(memory);
PUSH_I32(memory->page_limits.initial);
break;
}
- case InterpreterOpcode::GrowMemory: {
+ case Opcode::GrowMemory: {
GET_MEMORY(memory);
uint32_t old_page_size = memory->page_limits.initial;
VALUE_TYPE_I32 grow_pages = POP_I32();
@@ -1045,399 +1031,399 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I32Add:
+ case Opcode::I32Add:
BINOP(I32, I32, +);
break;
- case InterpreterOpcode::I32Sub:
+ case Opcode::I32Sub:
BINOP(I32, I32, -);
break;
- case InterpreterOpcode::I32Mul:
+ case Opcode::I32Mul:
BINOP(I32, I32, *);
break;
- case InterpreterOpcode::I32DivS:
+ case Opcode::I32DivS:
BINOP_DIV_S(I32);
break;
- case InterpreterOpcode::I32DivU:
+ case Opcode::I32DivU:
BINOP_DIV_REM_U(I32, /);
break;
- case InterpreterOpcode::I32RemS:
+ case Opcode::I32RemS:
BINOP_REM_S(I32);
break;
- case InterpreterOpcode::I32RemU:
+ case Opcode::I32RemU:
BINOP_DIV_REM_U(I32, %);
break;
- case InterpreterOpcode::I32And:
+ case Opcode::I32And:
BINOP(I32, I32, &);
break;
- case InterpreterOpcode::I32Or:
+ case Opcode::I32Or:
BINOP(I32, I32, |);
break;
- case InterpreterOpcode::I32Xor:
+ case Opcode::I32Xor:
BINOP(I32, I32, ^);
break;
- case InterpreterOpcode::I32Shl:
+ case Opcode::I32Shl:
BINOP_SHIFT(I32, <<, UNSIGNED);
break;
- case InterpreterOpcode::I32ShrU:
+ case Opcode::I32ShrU:
BINOP_SHIFT(I32, >>, UNSIGNED);
break;
- case InterpreterOpcode::I32ShrS:
+ case Opcode::I32ShrS:
BINOP_SHIFT(I32, >>, SIGNED);
break;
- case InterpreterOpcode::I32Eq:
+ case Opcode::I32Eq:
BINOP(I32, I32, ==);
break;
- case InterpreterOpcode::I32Ne:
+ case Opcode::I32Ne:
BINOP(I32, I32, !=);
break;
- case InterpreterOpcode::I32LtS:
+ case Opcode::I32LtS:
BINOP_SIGNED(I32, I32, <);
break;
- case InterpreterOpcode::I32LeS:
+ case Opcode::I32LeS:
BINOP_SIGNED(I32, I32, <=);
break;
- case InterpreterOpcode::I32LtU:
+ case Opcode::I32LtU:
BINOP(I32, I32, <);
break;
- case InterpreterOpcode::I32LeU:
+ case Opcode::I32LeU:
BINOP(I32, I32, <=);
break;
- case InterpreterOpcode::I32GtS:
+ case Opcode::I32GtS:
BINOP_SIGNED(I32, I32, >);
break;
- case InterpreterOpcode::I32GeS:
+ case Opcode::I32GeS:
BINOP_SIGNED(I32, I32, >=);
break;
- case InterpreterOpcode::I32GtU:
+ case Opcode::I32GtU:
BINOP(I32, I32, >);
break;
- case InterpreterOpcode::I32GeU:
+ case Opcode::I32GeU:
BINOP(I32, I32, >=);
break;
- case InterpreterOpcode::I32Clz: {
+ case Opcode::I32Clz: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I32(value != 0 ? wabt_clz_u32(value) : 32);
break;
}
- case InterpreterOpcode::I32Ctz: {
+ case Opcode::I32Ctz: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I32(value != 0 ? wabt_ctz_u32(value) : 32);
break;
}
- case InterpreterOpcode::I32Popcnt: {
+ case Opcode::I32Popcnt: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I32(wabt_popcount_u32(value));
break;
}
- case InterpreterOpcode::I32Eqz: {
+ case Opcode::I32Eqz: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I32(value == 0);
break;
}
- case InterpreterOpcode::I64Add:
+ case Opcode::I64Add:
BINOP(I64, I64, +);
break;
- case InterpreterOpcode::I64Sub:
+ case Opcode::I64Sub:
BINOP(I64, I64, -);
break;
- case InterpreterOpcode::I64Mul:
+ case Opcode::I64Mul:
BINOP(I64, I64, *);
break;
- case InterpreterOpcode::I64DivS:
+ case Opcode::I64DivS:
BINOP_DIV_S(I64);
break;
- case InterpreterOpcode::I64DivU:
+ case Opcode::I64DivU:
BINOP_DIV_REM_U(I64, /);
break;
- case InterpreterOpcode::I64RemS:
+ case Opcode::I64RemS:
BINOP_REM_S(I64);
break;
- case InterpreterOpcode::I64RemU:
+ case Opcode::I64RemU:
BINOP_DIV_REM_U(I64, %);
break;
- case InterpreterOpcode::I64And:
+ case Opcode::I64And:
BINOP(I64, I64, &);
break;
- case InterpreterOpcode::I64Or:
+ case Opcode::I64Or:
BINOP(I64, I64, |);
break;
- case InterpreterOpcode::I64Xor:
+ case Opcode::I64Xor:
BINOP(I64, I64, ^);
break;
- case InterpreterOpcode::I64Shl:
+ case Opcode::I64Shl:
BINOP_SHIFT(I64, <<, UNSIGNED);
break;
- case InterpreterOpcode::I64ShrU:
+ case Opcode::I64ShrU:
BINOP_SHIFT(I64, >>, UNSIGNED);
break;
- case InterpreterOpcode::I64ShrS:
+ case Opcode::I64ShrS:
BINOP_SHIFT(I64, >>, SIGNED);
break;
- case InterpreterOpcode::I64Eq:
+ case Opcode::I64Eq:
BINOP(I32, I64, ==);
break;
- case InterpreterOpcode::I64Ne:
+ case Opcode::I64Ne:
BINOP(I32, I64, !=);
break;
- case InterpreterOpcode::I64LtS:
+ case Opcode::I64LtS:
BINOP_SIGNED(I32, I64, <);
break;
- case InterpreterOpcode::I64LeS:
+ case Opcode::I64LeS:
BINOP_SIGNED(I32, I64, <=);
break;
- case InterpreterOpcode::I64LtU:
+ case Opcode::I64LtU:
BINOP(I32, I64, <);
break;
- case InterpreterOpcode::I64LeU:
+ case Opcode::I64LeU:
BINOP(I32, I64, <=);
break;
- case InterpreterOpcode::I64GtS:
+ case Opcode::I64GtS:
BINOP_SIGNED(I32, I64, >);
break;
- case InterpreterOpcode::I64GeS:
+ case Opcode::I64GeS:
BINOP_SIGNED(I32, I64, >=);
break;
- case InterpreterOpcode::I64GtU:
+ case Opcode::I64GtU:
BINOP(I32, I64, >);
break;
- case InterpreterOpcode::I64GeU:
+ case Opcode::I64GeU:
BINOP(I32, I64, >=);
break;
- case InterpreterOpcode::I64Clz: {
+ case Opcode::I64Clz: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_I64(value != 0 ? wabt_clz_u64(value) : 64);
break;
}
- case InterpreterOpcode::I64Ctz: {
+ case Opcode::I64Ctz: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_I64(value != 0 ? wabt_ctz_u64(value) : 64);
break;
}
- case InterpreterOpcode::I64Popcnt: {
+ case Opcode::I64Popcnt: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_I64(wabt_popcount_u64(value));
break;
}
- case InterpreterOpcode::F32Add:
+ case Opcode::F32Add:
BINOP_FLOAT(F32, +);
break;
- case InterpreterOpcode::F32Sub:
+ case Opcode::F32Sub:
BINOP_FLOAT(F32, -);
break;
- case InterpreterOpcode::F32Mul:
+ case Opcode::F32Mul:
BINOP_FLOAT(F32, *);
break;
- case InterpreterOpcode::F32Div:
+ case Opcode::F32Div:
BINOP_FLOAT_DIV(F32);
break;
- case InterpreterOpcode::F32Min:
+ case Opcode::F32Min:
MINMAX_FLOAT(F32, MIN);
break;
- case InterpreterOpcode::F32Max:
+ case Opcode::F32Max:
MINMAX_FLOAT(F32, MAX);
break;
- case InterpreterOpcode::F32Abs:
+ case Opcode::F32Abs:
TOP().f32_bits &= ~F32_SIGN_MASK;
break;
- case InterpreterOpcode::F32Neg:
+ case Opcode::F32Neg:
TOP().f32_bits ^= F32_SIGN_MASK;
break;
- case InterpreterOpcode::F32Copysign: {
+ case Opcode::F32Copysign: {
VALUE_TYPE_F32 rhs = POP_F32();
VALUE_TYPE_F32 lhs = POP_F32();
PUSH_F32((lhs & ~F32_SIGN_MASK) | (rhs & F32_SIGN_MASK));
break;
}
- case InterpreterOpcode::F32Ceil:
+ case Opcode::F32Ceil:
UNOP_FLOAT(F32, ceilf);
break;
- case InterpreterOpcode::F32Floor:
+ case Opcode::F32Floor:
UNOP_FLOAT(F32, floorf);
break;
- case InterpreterOpcode::F32Trunc:
+ case Opcode::F32Trunc:
UNOP_FLOAT(F32, truncf);
break;
- case InterpreterOpcode::F32Nearest:
+ case Opcode::F32Nearest:
UNOP_FLOAT(F32, nearbyintf);
break;
- case InterpreterOpcode::F32Sqrt:
+ case Opcode::F32Sqrt:
UNOP_FLOAT(F32, sqrtf);
break;
- case InterpreterOpcode::F32Eq:
+ case Opcode::F32Eq:
BINOP_FLOAT_COMPARE(F32, ==);
break;
- case InterpreterOpcode::F32Ne:
+ case Opcode::F32Ne:
BINOP_FLOAT_COMPARE(F32, !=);
break;
- case InterpreterOpcode::F32Lt:
+ case Opcode::F32Lt:
BINOP_FLOAT_COMPARE(F32, <);
break;
- case InterpreterOpcode::F32Le:
+ case Opcode::F32Le:
BINOP_FLOAT_COMPARE(F32, <=);
break;
- case InterpreterOpcode::F32Gt:
+ case Opcode::F32Gt:
BINOP_FLOAT_COMPARE(F32, >);
break;
- case InterpreterOpcode::F32Ge:
+ case Opcode::F32Ge:
BINOP_FLOAT_COMPARE(F32, >=);
break;
- case InterpreterOpcode::F64Add:
+ case Opcode::F64Add:
BINOP_FLOAT(F64, +);
break;
- case InterpreterOpcode::F64Sub:
+ case Opcode::F64Sub:
BINOP_FLOAT(F64, -);
break;
- case InterpreterOpcode::F64Mul:
+ case Opcode::F64Mul:
BINOP_FLOAT(F64, *);
break;
- case InterpreterOpcode::F64Div:
+ case Opcode::F64Div:
BINOP_FLOAT_DIV(F64);
break;
- case InterpreterOpcode::F64Min:
+ case Opcode::F64Min:
MINMAX_FLOAT(F64, MIN);
break;
- case InterpreterOpcode::F64Max:
+ case Opcode::F64Max:
MINMAX_FLOAT(F64, MAX);
break;
- case InterpreterOpcode::F64Abs:
+ case Opcode::F64Abs:
TOP().f64_bits &= ~F64_SIGN_MASK;
break;
- case InterpreterOpcode::F64Neg:
+ case Opcode::F64Neg:
TOP().f64_bits ^= F64_SIGN_MASK;
break;
- case InterpreterOpcode::F64Copysign: {
+ case Opcode::F64Copysign: {
VALUE_TYPE_F64 rhs = POP_F64();
VALUE_TYPE_F64 lhs = POP_F64();
PUSH_F64((lhs & ~F64_SIGN_MASK) | (rhs & F64_SIGN_MASK));
break;
}
- case InterpreterOpcode::F64Ceil:
+ case Opcode::F64Ceil:
UNOP_FLOAT(F64, ceil);
break;
- case InterpreterOpcode::F64Floor:
+ case Opcode::F64Floor:
UNOP_FLOAT(F64, floor);
break;
- case InterpreterOpcode::F64Trunc:
+ case Opcode::F64Trunc:
UNOP_FLOAT(F64, trunc);
break;
- case InterpreterOpcode::F64Nearest:
+ case Opcode::F64Nearest:
UNOP_FLOAT(F64, nearbyint);
break;
- case InterpreterOpcode::F64Sqrt:
+ case Opcode::F64Sqrt:
UNOP_FLOAT(F64, sqrt);
break;
- case InterpreterOpcode::F64Eq:
+ case Opcode::F64Eq:
BINOP_FLOAT_COMPARE(F64, ==);
break;
- case InterpreterOpcode::F64Ne:
+ case Opcode::F64Ne:
BINOP_FLOAT_COMPARE(F64, !=);
break;
- case InterpreterOpcode::F64Lt:
+ case Opcode::F64Lt:
BINOP_FLOAT_COMPARE(F64, <);
break;
- case InterpreterOpcode::F64Le:
+ case Opcode::F64Le:
BINOP_FLOAT_COMPARE(F64, <=);
break;
- case InterpreterOpcode::F64Gt:
+ case Opcode::F64Gt:
BINOP_FLOAT_COMPARE(F64, >);
break;
- case InterpreterOpcode::F64Ge:
+ case Opcode::F64Ge:
BINOP_FLOAT_COMPARE(F64, >=);
break;
- case InterpreterOpcode::I32TruncSF32: {
+ case Opcode::I32TruncSF32: {
VALUE_TYPE_F32 value = POP_F32();
TRAP_IF(is_nan_f32(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i32_trunc_s_f32(value), IntegerOverflow);
@@ -1445,7 +1431,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I32TruncSF64: {
+ case Opcode::I32TruncSF64: {
VALUE_TYPE_F64 value = POP_F64();
TRAP_IF(is_nan_f64(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i32_trunc_s_f64(value), IntegerOverflow);
@@ -1453,7 +1439,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I32TruncUF32: {
+ case Opcode::I32TruncUF32: {
VALUE_TYPE_F32 value = POP_F32();
TRAP_IF(is_nan_f32(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i32_trunc_u_f32(value), IntegerOverflow);
@@ -1461,7 +1447,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I32TruncUF64: {
+ case Opcode::I32TruncUF64: {
VALUE_TYPE_F64 value = POP_F64();
TRAP_IF(is_nan_f64(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i32_trunc_u_f64(value), IntegerOverflow);
@@ -1469,13 +1455,13 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I32WrapI64: {
+ case Opcode::I32WrapI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_I32(static_cast<uint32_t>(value));
break;
}
- case InterpreterOpcode::I64TruncSF32: {
+ case Opcode::I64TruncSF32: {
VALUE_TYPE_F32 value = POP_F32();
TRAP_IF(is_nan_f32(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i64_trunc_s_f32(value), IntegerOverflow);
@@ -1483,7 +1469,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I64TruncSF64: {
+ case Opcode::I64TruncSF64: {
VALUE_TYPE_F64 value = POP_F64();
TRAP_IF(is_nan_f64(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i64_trunc_s_f64(value), IntegerOverflow);
@@ -1491,7 +1477,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I64TruncUF32: {
+ case Opcode::I64TruncUF32: {
VALUE_TYPE_F32 value = POP_F32();
TRAP_IF(is_nan_f32(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i64_trunc_u_f32(value), IntegerOverflow);
@@ -1499,7 +1485,7 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I64TruncUF64: {
+ case Opcode::I64TruncUF64: {
VALUE_TYPE_F64 value = POP_F64();
TRAP_IF(is_nan_f64(value), InvalidConversionToInteger);
TRAP_UNLESS(is_in_range_i64_trunc_u_f64(value), IntegerOverflow);
@@ -1507,45 +1493,45 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::I64ExtendSI32: {
+ case Opcode::I64ExtendSI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I64(static_cast<int64_t>(BITCAST_I32_TO_SIGNED(value)));
break;
}
- case InterpreterOpcode::I64ExtendUI32: {
+ case Opcode::I64ExtendUI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_I64(static_cast<uint64_t>(value));
break;
}
- case InterpreterOpcode::F32ConvertSI32: {
+ case Opcode::F32ConvertSI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_F32(
BITCAST_FROM_F32(static_cast<float>(BITCAST_I32_TO_SIGNED(value))));
break;
}
- case InterpreterOpcode::F32ConvertUI32: {
+ case Opcode::F32ConvertUI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_F32(BITCAST_FROM_F32(static_cast<float>(value)));
break;
}
- case InterpreterOpcode::F32ConvertSI64: {
+ case Opcode::F32ConvertSI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_F32(
BITCAST_FROM_F32(static_cast<float>(BITCAST_I64_TO_SIGNED(value))));
break;
}
- case InterpreterOpcode::F32ConvertUI64: {
+ case Opcode::F32ConvertUI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_F32(BITCAST_FROM_F32(wabt_convert_uint64_to_float(value)));
break;
}
- case InterpreterOpcode::F32DemoteF64: {
+ case Opcode::F32DemoteF64: {
VALUE_TYPE_F64 value = POP_F64();
if (WABT_LIKELY(is_in_range_f64_demote_f32(value))) {
PUSH_F32(BITCAST_FROM_F32(static_cast<float>(BITCAST_TO_F64(value))));
@@ -1565,118 +1551,117 @@ InterpreterResult run_interpreter(InterpreterThread* thread,
break;
}
- case InterpreterOpcode::F32ReinterpretI32: {
+ case Opcode::F32ReinterpretI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_F32(value);
break;
}
- case InterpreterOpcode::F64ConvertSI32: {
+ case Opcode::F64ConvertSI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_F64(BITCAST_FROM_F64(
static_cast<double>(BITCAST_I32_TO_SIGNED(value))));
break;
}
- case InterpreterOpcode::F64ConvertUI32: {
+ case Opcode::F64ConvertUI32: {
VALUE_TYPE_I32 value = POP_I32();
PUSH_F64(BITCAST_FROM_F64(static_cast<double>(value)));
break;
}
- case InterpreterOpcode::F64ConvertSI64: {
+ case Opcode::F64ConvertSI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_F64(BITCAST_FROM_F64(
static_cast<double>(BITCAST_I64_TO_SIGNED(value))));
break;
}
- case InterpreterOpcode::F64ConvertUI64: {
+ case Opcode::F64ConvertUI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_F64(BITCAST_FROM_F64(wabt_convert_uint64_to_double(value)));
break;
}
- case InterpreterOpcode::F64PromoteF32: {
+ case Opcode::F64PromoteF32: {
VALUE_TYPE_F32 value = POP_F32();
PUSH_F64(BITCAST_FROM_F64(static_cast<double>(BITCAST_TO_F32(value))));
break;
}
- case InterpreterOpcode::F64ReinterpretI64: {
+ case Opcode::F64ReinterpretI64: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_F64(value);
break;
}
- case InterpreterOpcode::I32ReinterpretF32: {
+ case Opcode::I32ReinterpretF32: {
VALUE_TYPE_F32 value = POP_F32();
PUSH_I32(value);
break;
}
- case InterpreterOpcode::I64ReinterpretF64: {
+ case Opcode::I64ReinterpretF64: {
VALUE_TYPE_F64 value = POP_F64();
PUSH_I64(value);
break;
}
- case InterpreterOpcode::I32Rotr:
+ case Opcode::I32Rotr:
BINOP_ROT(I32, RIGHT);
break;
- case InterpreterOpcode::I32Rotl:
+ case Opcode::I32Rotl:
BINOP_ROT(I32, LEFT);
break;
- case InterpreterOpcode::I64Rotr:
+ case Opcode::I64Rotr:
BINOP_ROT(I64, RIGHT);
break;
- case InterpreterOpcode::I64Rotl:
+ case Opcode::I64Rotl:
BINOP_ROT(I64, LEFT);
break;
- case InterpreterOpcode::I64Eqz: {
+ case Opcode::I64Eqz: {
VALUE_TYPE_I64 value = POP_I64();
PUSH_I64(value == 0);
break;
}
- case InterpreterOpcode::Alloca: {
- InterpreterValue* old_value_stack_top = thread->value_stack_top;
+ case Opcode::Alloca: {
+ Value* old_value_stack_top = thread->value_stack_top;
thread->value_stack_top += read_u32(&pc);
CHECK_STACK();
memset(old_value_stack_top, 0,
- (thread->value_stack_top - old_value_stack_top) *
- sizeof(InterpreterValue));
+ (thread->value_stack_top - old_value_stack_top) * sizeof(Value));
break;
}
- case InterpreterOpcode::BrUnless: {
+ case Opcode::BrUnless: {
IstreamOffset new_pc = read_u32(&pc);
if (!POP_I32())
GOTO(new_pc);
break;
}
- case InterpreterOpcode::Drop:
+ case Opcode::Drop:
(void)POP();
break;
- case InterpreterOpcode::DropKeep: {
+ case Opcode::DropKeep: {
uint32_t drop_count = read_u32(&pc);
uint8_t keep_count = *pc++;
DROP_KEEP(drop_count, keep_count);
break;
}
- case InterpreterOpcode::Data:
+ case Opcode::Data:
/* shouldn't ever execute this */
assert(0);
break;
- case InterpreterOpcode::Nop:
+ case Opcode::Nop:
break;
default:
@@ -1690,7 +1675,7 @@ exit_loop:
return result;
}
-void trace_pc(InterpreterThread* thread, Stream* stream) {
+void trace_pc(Thread* thread, Stream* stream) {
const uint8_t* istream = thread->env->istream->data.data();
const uint8_t* pc = &istream[thread->pc];
size_t value_stack_depth =
@@ -1700,352 +1685,337 @@ void trace_pc(InterpreterThread* thread, Stream* stream) {
stream->Writef("#%" PRIzd ". %4" PRIzd ": V:%-3" PRIzd "| ", call_stack_depth,
pc - thread->env->istream->data.data(), value_stack_depth);
- InterpreterOpcode opcode = static_cast<InterpreterOpcode>(*pc++);
+ Opcode opcode = static_cast<Opcode>(*pc++);
switch (opcode) {
- case InterpreterOpcode::Select:
+ case Opcode::Select:
stream->Writef("%s %u, %" PRIu64 ", %" PRIu64 "\n",
- get_interpreter_opcode_name(opcode), PICK(3).i32,
- PICK(2).i64, PICK(1).i64);
+ get_opcode_name(opcode), PICK(3).i32, PICK(2).i64,
+ PICK(1).i64);
break;
- case InterpreterOpcode::Br:
- stream->Writef("%s @%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::Br:
+ stream->Writef("%s @%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::BrIf:
- stream->Writef("%s @%u, %u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc), TOP().i32);
+ case Opcode::BrIf:
+ stream->Writef("%s @%u, %u\n", get_opcode_name(opcode), read_u32_at(pc),
+ TOP().i32);
break;
- case InterpreterOpcode::BrTable: {
+ case Opcode::BrTable: {
Index num_targets = read_u32_at(pc);
IstreamOffset table_offset = read_u32_at(pc + 4);
VALUE_TYPE_I32 key = TOP().i32;
stream->Writef("%s %u, $#%" PRIindex ", table:$%u\n",
- get_interpreter_opcode_name(opcode), key, num_targets,
- table_offset);
+ get_opcode_name(opcode), key, num_targets, table_offset);
break;
}
- case InterpreterOpcode::Nop:
- case InterpreterOpcode::Return:
- case InterpreterOpcode::Unreachable:
- case InterpreterOpcode::Drop:
- stream->Writef("%s\n", get_interpreter_opcode_name(opcode));
+ case Opcode::Nop:
+ case Opcode::Return:
+ case Opcode::Unreachable:
+ case Opcode::Drop:
+ stream->Writef("%s\n", get_opcode_name(opcode));
break;
- case InterpreterOpcode::CurrentMemory: {
+ case Opcode::CurrentMemory: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex "\n", get_interpreter_opcode_name(opcode),
+ stream->Writef("%s $%" PRIindex "\n", get_opcode_name(opcode),
memory_index);
break;
}
- case InterpreterOpcode::I32Const:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::I32Const:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::I64Const:
- stream->Writef("%s $%" PRIu64 "\n", get_interpreter_opcode_name(opcode),
+ case Opcode::I64Const:
+ stream->Writef("%s $%" PRIu64 "\n", get_opcode_name(opcode),
read_u64_at(pc));
break;
- case InterpreterOpcode::F32Const:
- stream->Writef("%s $%g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F32Const:
+ stream->Writef("%s $%g\n", get_opcode_name(opcode),
bitcast_u32_to_f32(read_u32_at(pc)));
break;
- case InterpreterOpcode::F64Const:
- stream->Writef("%s $%g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F64Const:
+ stream->Writef("%s $%g\n", get_opcode_name(opcode),
bitcast_u64_to_f64(read_u64_at(pc)));
break;
- case InterpreterOpcode::GetLocal:
- case InterpreterOpcode::GetGlobal:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::GetLocal:
+ case Opcode::GetGlobal:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::SetLocal:
- case InterpreterOpcode::SetGlobal:
- case InterpreterOpcode::TeeLocal:
- stream->Writef("%s $%u, %u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc), TOP().i32);
+ case Opcode::SetLocal:
+ case Opcode::SetGlobal:
+ case Opcode::TeeLocal:
+ stream->Writef("%s $%u, %u\n", get_opcode_name(opcode), read_u32_at(pc),
+ TOP().i32);
break;
- case InterpreterOpcode::Call:
- stream->Writef("%s @%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::Call:
+ stream->Writef("%s @%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::CallIndirect:
- stream->Writef("%s $%u, %u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc), TOP().i32);
+ case Opcode::CallIndirect:
+ stream->Writef("%s $%u, %u\n", get_opcode_name(opcode), read_u32_at(pc),
+ TOP().i32);
break;
- case InterpreterOpcode::CallHost:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::CallHost:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::I32Load8S:
- case InterpreterOpcode::I32Load8U:
- case InterpreterOpcode::I32Load16S:
- case InterpreterOpcode::I32Load16U:
- case InterpreterOpcode::I64Load8S:
- case InterpreterOpcode::I64Load8U:
- case InterpreterOpcode::I64Load16S:
- case InterpreterOpcode::I64Load16U:
- case InterpreterOpcode::I64Load32S:
- case InterpreterOpcode::I64Load32U:
- case InterpreterOpcode::I32Load:
- case InterpreterOpcode::I64Load:
- case InterpreterOpcode::F32Load:
- case InterpreterOpcode::F64Load: {
+ case Opcode::I32Load8S:
+ case Opcode::I32Load8U:
+ case Opcode::I32Load16S:
+ case Opcode::I32Load16U:
+ case Opcode::I64Load8S:
+ case Opcode::I64Load8U:
+ case Opcode::I64Load16S:
+ case Opcode::I64Load16U:
+ case Opcode::I64Load32S:
+ case Opcode::I64Load32U:
+ case Opcode::I32Load:
+ case Opcode::I64Load:
+ case Opcode::F32Load:
+ case Opcode::F64Load: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%u+$%u\n",
- get_interpreter_opcode_name(opcode), memory_index,
- TOP().i32, read_u32_at(pc));
+ stream->Writef("%s $%" PRIindex ":%u+$%u\n", get_opcode_name(opcode),
+ memory_index, TOP().i32, read_u32_at(pc));
break;
}
- case InterpreterOpcode::I32Store8:
- case InterpreterOpcode::I32Store16:
- case InterpreterOpcode::I32Store: {
+ case Opcode::I32Store8:
+ case Opcode::I32Store16:
+ case Opcode::I32Store: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%u+$%u, %u\n",
- get_interpreter_opcode_name(opcode), memory_index,
- PICK(2).i32, read_u32_at(pc), PICK(1).i32);
+ stream->Writef("%s $%" PRIindex ":%u+$%u, %u\n", get_opcode_name(opcode),
+ memory_index, PICK(2).i32, read_u32_at(pc), PICK(1).i32);
break;
}
- case InterpreterOpcode::I64Store8:
- case InterpreterOpcode::I64Store16:
- case InterpreterOpcode::I64Store32:
- case InterpreterOpcode::I64Store: {
+ case Opcode::I64Store8:
+ case Opcode::I64Store16:
+ case Opcode::I64Store32:
+ case Opcode::I64Store: {
Index memory_index = read_u32(&pc);
stream->Writef("%s $%" PRIindex ":%u+$%u, %" PRIu64 "\n",
- get_interpreter_opcode_name(opcode), memory_index,
- PICK(2).i32, read_u32_at(pc), PICK(1).i64);
+ get_opcode_name(opcode), memory_index, PICK(2).i32,
+ read_u32_at(pc), PICK(1).i64);
break;
}
- case InterpreterOpcode::F32Store: {
+ case Opcode::F32Store: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%u+$%u, %g\n",
- get_interpreter_opcode_name(opcode), memory_index,
- PICK(2).i32, read_u32_at(pc),
+ stream->Writef("%s $%" PRIindex ":%u+$%u, %g\n", get_opcode_name(opcode),
+ memory_index, PICK(2).i32, read_u32_at(pc),
bitcast_u32_to_f32(PICK(1).f32_bits));
break;
}
- case InterpreterOpcode::F64Store: {
+ case Opcode::F64Store: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%u+$%u, %g\n",
- get_interpreter_opcode_name(opcode), memory_index,
- PICK(2).i32, read_u32_at(pc),
+ stream->Writef("%s $%" PRIindex ":%u+$%u, %g\n", get_opcode_name(opcode),
+ memory_index, PICK(2).i32, read_u32_at(pc),
bitcast_u64_to_f64(PICK(1).f64_bits));
break;
}
- case InterpreterOpcode::GrowMemory: {
+ case Opcode::GrowMemory: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%u\n",
- get_interpreter_opcode_name(opcode), memory_index,
- TOP().i32);
+ stream->Writef("%s $%" PRIindex ":%u\n", get_opcode_name(opcode),
+ memory_index, TOP().i32);
break;
}
- case InterpreterOpcode::I32Add:
- case InterpreterOpcode::I32Sub:
- case InterpreterOpcode::I32Mul:
- case InterpreterOpcode::I32DivS:
- case InterpreterOpcode::I32DivU:
- case InterpreterOpcode::I32RemS:
- case InterpreterOpcode::I32RemU:
- case InterpreterOpcode::I32And:
- case InterpreterOpcode::I32Or:
- case InterpreterOpcode::I32Xor:
- case InterpreterOpcode::I32Shl:
- case InterpreterOpcode::I32ShrU:
- case InterpreterOpcode::I32ShrS:
- case InterpreterOpcode::I32Eq:
- case InterpreterOpcode::I32Ne:
- case InterpreterOpcode::I32LtS:
- case InterpreterOpcode::I32LeS:
- case InterpreterOpcode::I32LtU:
- case InterpreterOpcode::I32LeU:
- case InterpreterOpcode::I32GtS:
- case InterpreterOpcode::I32GeS:
- case InterpreterOpcode::I32GtU:
- case InterpreterOpcode::I32GeU:
- case InterpreterOpcode::I32Rotr:
- case InterpreterOpcode::I32Rotl:
- stream->Writef("%s %u, %u\n", get_interpreter_opcode_name(opcode),
- PICK(2).i32, PICK(1).i32);
+ case Opcode::I32Add:
+ case Opcode::I32Sub:
+ case Opcode::I32Mul:
+ case Opcode::I32DivS:
+ case Opcode::I32DivU:
+ case Opcode::I32RemS:
+ case Opcode::I32RemU:
+ case Opcode::I32And:
+ case Opcode::I32Or:
+ case Opcode::I32Xor:
+ case Opcode::I32Shl:
+ case Opcode::I32ShrU:
+ case Opcode::I32ShrS:
+ case Opcode::I32Eq:
+ case Opcode::I32Ne:
+ case Opcode::I32LtS:
+ case Opcode::I32LeS:
+ case Opcode::I32LtU:
+ case Opcode::I32LeU:
+ case Opcode::I32GtS:
+ case Opcode::I32GeS:
+ case Opcode::I32GtU:
+ case Opcode::I32GeU:
+ case Opcode::I32Rotr:
+ case Opcode::I32Rotl:
+ stream->Writef("%s %u, %u\n", get_opcode_name(opcode), PICK(2).i32,
+ PICK(1).i32);
break;
- case InterpreterOpcode::I32Clz:
- case InterpreterOpcode::I32Ctz:
- case InterpreterOpcode::I32Popcnt:
- case InterpreterOpcode::I32Eqz:
- stream->Writef("%s %u\n", get_interpreter_opcode_name(opcode), TOP().i32);
+ case Opcode::I32Clz:
+ case Opcode::I32Ctz:
+ case Opcode::I32Popcnt:
+ case Opcode::I32Eqz:
+ stream->Writef("%s %u\n", get_opcode_name(opcode), TOP().i32);
break;
- case InterpreterOpcode::I64Add:
- case InterpreterOpcode::I64Sub:
- case InterpreterOpcode::I64Mul:
- case InterpreterOpcode::I64DivS:
- case InterpreterOpcode::I64DivU:
- case InterpreterOpcode::I64RemS:
- case InterpreterOpcode::I64RemU:
- case InterpreterOpcode::I64And:
- case InterpreterOpcode::I64Or:
- case InterpreterOpcode::I64Xor:
- case InterpreterOpcode::I64Shl:
- case InterpreterOpcode::I64ShrU:
- case InterpreterOpcode::I64ShrS:
- case InterpreterOpcode::I64Eq:
- case InterpreterOpcode::I64Ne:
- case InterpreterOpcode::I64LtS:
- case InterpreterOpcode::I64LeS:
- case InterpreterOpcode::I64LtU:
- case InterpreterOpcode::I64LeU:
- case InterpreterOpcode::I64GtS:
- case InterpreterOpcode::I64GeS:
- case InterpreterOpcode::I64GtU:
- case InterpreterOpcode::I64GeU:
- case InterpreterOpcode::I64Rotr:
- case InterpreterOpcode::I64Rotl:
- stream->Writef("%s %" PRIu64 ", %" PRIu64 "\n",
- get_interpreter_opcode_name(opcode), PICK(2).i64,
- PICK(1).i64);
+ case Opcode::I64Add:
+ case Opcode::I64Sub:
+ case Opcode::I64Mul:
+ case Opcode::I64DivS:
+ case Opcode::I64DivU:
+ case Opcode::I64RemS:
+ case Opcode::I64RemU:
+ case Opcode::I64And:
+ case Opcode::I64Or:
+ case Opcode::I64Xor:
+ case Opcode::I64Shl:
+ case Opcode::I64ShrU:
+ case Opcode::I64ShrS:
+ case Opcode::I64Eq:
+ case Opcode::I64Ne:
+ case Opcode::I64LtS:
+ case Opcode::I64LeS:
+ case Opcode::I64LtU:
+ case Opcode::I64LeU:
+ case Opcode::I64GtS:
+ case Opcode::I64GeS:
+ case Opcode::I64GtU:
+ case Opcode::I64GeU:
+ case Opcode::I64Rotr:
+ case Opcode::I64Rotl:
+ stream->Writef("%s %" PRIu64 ", %" PRIu64 "\n", get_opcode_name(opcode),
+ PICK(2).i64, PICK(1).i64);
break;
- case InterpreterOpcode::I64Clz:
- case InterpreterOpcode::I64Ctz:
- case InterpreterOpcode::I64Popcnt:
- case InterpreterOpcode::I64Eqz:
- stream->Writef("%s %" PRIu64 "\n", get_interpreter_opcode_name(opcode),
- TOP().i64);
+ case Opcode::I64Clz:
+ case Opcode::I64Ctz:
+ case Opcode::I64Popcnt:
+ case Opcode::I64Eqz:
+ stream->Writef("%s %" PRIu64 "\n", get_opcode_name(opcode), TOP().i64);
break;
- case InterpreterOpcode::F32Add:
- case InterpreterOpcode::F32Sub:
- case InterpreterOpcode::F32Mul:
- case InterpreterOpcode::F32Div:
- case InterpreterOpcode::F32Min:
- case InterpreterOpcode::F32Max:
- case InterpreterOpcode::F32Copysign:
- case InterpreterOpcode::F32Eq:
- case InterpreterOpcode::F32Ne:
- case InterpreterOpcode::F32Lt:
- case InterpreterOpcode::F32Le:
- case InterpreterOpcode::F32Gt:
- case InterpreterOpcode::F32Ge:
- stream->Writef("%s %g, %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F32Add:
+ case Opcode::F32Sub:
+ case Opcode::F32Mul:
+ case Opcode::F32Div:
+ case Opcode::F32Min:
+ case Opcode::F32Max:
+ case Opcode::F32Copysign:
+ case Opcode::F32Eq:
+ case Opcode::F32Ne:
+ case Opcode::F32Lt:
+ case Opcode::F32Le:
+ case Opcode::F32Gt:
+ case Opcode::F32Ge:
+ stream->Writef("%s %g, %g\n", get_opcode_name(opcode),
bitcast_u32_to_f32(PICK(2).i32),
bitcast_u32_to_f32(PICK(1).i32));
break;
- case InterpreterOpcode::F32Abs:
- case InterpreterOpcode::F32Neg:
- case InterpreterOpcode::F32Ceil:
- case InterpreterOpcode::F32Floor:
- case InterpreterOpcode::F32Trunc:
- case InterpreterOpcode::F32Nearest:
- case InterpreterOpcode::F32Sqrt:
- stream->Writef("%s %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F32Abs:
+ case Opcode::F32Neg:
+ case Opcode::F32Ceil:
+ case Opcode::F32Floor:
+ case Opcode::F32Trunc:
+ case Opcode::F32Nearest:
+ case Opcode::F32Sqrt:
+ stream->Writef("%s %g\n", get_opcode_name(opcode),
bitcast_u32_to_f32(TOP().i32));
break;
- case InterpreterOpcode::F64Add:
- case InterpreterOpcode::F64Sub:
- case InterpreterOpcode::F64Mul:
- case InterpreterOpcode::F64Div:
- case InterpreterOpcode::F64Min:
- case InterpreterOpcode::F64Max:
- case InterpreterOpcode::F64Copysign:
- case InterpreterOpcode::F64Eq:
- case InterpreterOpcode::F64Ne:
- case InterpreterOpcode::F64Lt:
- case InterpreterOpcode::F64Le:
- case InterpreterOpcode::F64Gt:
- case InterpreterOpcode::F64Ge:
- stream->Writef("%s %g, %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F64Add:
+ case Opcode::F64Sub:
+ case Opcode::F64Mul:
+ case Opcode::F64Div:
+ case Opcode::F64Min:
+ case Opcode::F64Max:
+ case Opcode::F64Copysign:
+ case Opcode::F64Eq:
+ case Opcode::F64Ne:
+ case Opcode::F64Lt:
+ case Opcode::F64Le:
+ case Opcode::F64Gt:
+ case Opcode::F64Ge:
+ stream->Writef("%s %g, %g\n", get_opcode_name(opcode),
bitcast_u64_to_f64(PICK(2).i64),
bitcast_u64_to_f64(PICK(1).i64));
break;
- case InterpreterOpcode::F64Abs:
- case InterpreterOpcode::F64Neg:
- case InterpreterOpcode::F64Ceil:
- case InterpreterOpcode::F64Floor:
- case InterpreterOpcode::F64Trunc:
- case InterpreterOpcode::F64Nearest:
- case InterpreterOpcode::F64Sqrt:
- stream->Writef("%s %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F64Abs:
+ case Opcode::F64Neg:
+ case Opcode::F64Ceil:
+ case Opcode::F64Floor:
+ case Opcode::F64Trunc:
+ case Opcode::F64Nearest:
+ case Opcode::F64Sqrt:
+ stream->Writef("%s %g\n", get_opcode_name(opcode),
bitcast_u64_to_f64(TOP().i64));
break;
- case InterpreterOpcode::I32TruncSF32:
- case InterpreterOpcode::I32TruncUF32:
- case InterpreterOpcode::I64TruncSF32:
- case InterpreterOpcode::I64TruncUF32:
- case InterpreterOpcode::F64PromoteF32:
- case InterpreterOpcode::I32ReinterpretF32:
- stream->Writef("%s %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::I32TruncSF32:
+ case Opcode::I32TruncUF32:
+ case Opcode::I64TruncSF32:
+ case Opcode::I64TruncUF32:
+ case Opcode::F64PromoteF32:
+ case Opcode::I32ReinterpretF32:
+ stream->Writef("%s %g\n", get_opcode_name(opcode),
bitcast_u32_to_f32(TOP().i32));
break;
- case InterpreterOpcode::I32TruncSF64:
- case InterpreterOpcode::I32TruncUF64:
- case InterpreterOpcode::I64TruncSF64:
- case InterpreterOpcode::I64TruncUF64:
- case InterpreterOpcode::F32DemoteF64:
- case InterpreterOpcode::I64ReinterpretF64:
- stream->Writef("%s %g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::I32TruncSF64:
+ case Opcode::I32TruncUF64:
+ case Opcode::I64TruncSF64:
+ case Opcode::I64TruncUF64:
+ case Opcode::F32DemoteF64:
+ case Opcode::I64ReinterpretF64:
+ stream->Writef("%s %g\n", get_opcode_name(opcode),
bitcast_u64_to_f64(TOP().i64));
break;
- case InterpreterOpcode::I32WrapI64:
- case InterpreterOpcode::F32ConvertSI64:
- case InterpreterOpcode::F32ConvertUI64:
- case InterpreterOpcode::F64ConvertSI64:
- case InterpreterOpcode::F64ConvertUI64:
- case InterpreterOpcode::F64ReinterpretI64:
- stream->Writef("%s %" PRIu64 "\n", get_interpreter_opcode_name(opcode),
- TOP().i64);
+ case Opcode::I32WrapI64:
+ case Opcode::F32ConvertSI64:
+ case Opcode::F32ConvertUI64:
+ case Opcode::F64ConvertSI64:
+ case Opcode::F64ConvertUI64:
+ case Opcode::F64ReinterpretI64:
+ stream->Writef("%s %" PRIu64 "\n", get_opcode_name(opcode), TOP().i64);
break;
- case InterpreterOpcode::I64ExtendSI32:
- case InterpreterOpcode::I64ExtendUI32:
- case InterpreterOpcode::F32ConvertSI32:
- case InterpreterOpcode::F32ConvertUI32:
- case InterpreterOpcode::F32ReinterpretI32:
- case InterpreterOpcode::F64ConvertSI32:
- case InterpreterOpcode::F64ConvertUI32:
- stream->Writef("%s %u\n", get_interpreter_opcode_name(opcode), TOP().i32);
+ case Opcode::I64ExtendSI32:
+ case Opcode::I64ExtendUI32:
+ case Opcode::F32ConvertSI32:
+ case Opcode::F32ConvertUI32:
+ case Opcode::F32ReinterpretI32:
+ case Opcode::F64ConvertSI32:
+ case Opcode::F64ConvertUI32:
+ stream->Writef("%s %u\n", get_opcode_name(opcode), TOP().i32);
break;
- case InterpreterOpcode::Alloca:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc));
+ case Opcode::Alloca:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32_at(pc));
break;
- case InterpreterOpcode::BrUnless:
- stream->Writef("%s @%u, %u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc), TOP().i32);
+ case Opcode::BrUnless:
+ stream->Writef("%s @%u, %u\n", get_opcode_name(opcode), read_u32_at(pc),
+ TOP().i32);
break;
- case InterpreterOpcode::DropKeep:
- stream->Writef("%s $%u $%u\n", get_interpreter_opcode_name(opcode),
- read_u32_at(pc), *(pc + 4));
+ case Opcode::DropKeep:
+ stream->Writef("%s $%u $%u\n", get_opcode_name(opcode), read_u32_at(pc),
+ *(pc + 4));
break;
- case InterpreterOpcode::Data:
+ case Opcode::Data:
/* shouldn't ever execute this */
assert(0);
break;
@@ -2056,7 +2026,7 @@ void trace_pc(InterpreterThread* thread, Stream* stream) {
}
}
-void disassemble(InterpreterEnvironment* env,
+void disassemble(Environment* env,
Stream* stream,
IstreamOffset from,
IstreamOffset to) {
@@ -2071,293 +2041,279 @@ void disassemble(InterpreterEnvironment* env,
while (static_cast<IstreamOffset>(pc - istream) < to) {
stream->Writef("%4" PRIzd "| ", pc - istream);
- InterpreterOpcode opcode = static_cast<InterpreterOpcode>(*pc++);
+ Opcode opcode = static_cast<Opcode>(*pc++);
switch (opcode) {
- case InterpreterOpcode::Select:
- stream->Writef("%s %%[-3], %%[-2], %%[-1]\n",
- get_interpreter_opcode_name(opcode));
+ case Opcode::Select:
+ stream->Writef("%s %%[-3], %%[-2], %%[-1]\n", get_opcode_name(opcode));
break;
- case InterpreterOpcode::Br:
- stream->Writef("%s @%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
+ case Opcode::Br:
+ stream->Writef("%s @%u\n", get_opcode_name(opcode), read_u32(&pc));
break;
- case InterpreterOpcode::BrIf:
- stream->Writef("%s @%u, %%[-1]\n", get_interpreter_opcode_name(opcode),
+ case Opcode::BrIf:
+ stream->Writef("%s @%u, %%[-1]\n", get_opcode_name(opcode),
read_u32(&pc));
break;
- case InterpreterOpcode::BrTable: {
+ case Opcode::BrTable: {
Index num_targets = read_u32(&pc);
IstreamOffset table_offset = read_u32(&pc);
stream->Writef("%s %%[-1], $#%" PRIindex ", table:$%u\n",
- get_interpreter_opcode_name(opcode), num_targets,
- table_offset);
+ get_opcode_name(opcode), num_targets, table_offset);
break;
}
- case InterpreterOpcode::Nop:
- case InterpreterOpcode::Return:
- case InterpreterOpcode::Unreachable:
- case InterpreterOpcode::Drop:
- stream->Writef("%s\n", get_interpreter_opcode_name(opcode));
+ case Opcode::Nop:
+ case Opcode::Return:
+ case Opcode::Unreachable:
+ case Opcode::Drop:
+ stream->Writef("%s\n", get_opcode_name(opcode));
break;
- case InterpreterOpcode::CurrentMemory: {
+ case Opcode::CurrentMemory: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex "\n",
- get_interpreter_opcode_name(opcode), memory_index);
+ stream->Writef("%s $%" PRIindex "\n", get_opcode_name(opcode),
+ memory_index);
break;
}
- case InterpreterOpcode::I32Const:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
+ case Opcode::I32Const:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32(&pc));
break;
- case InterpreterOpcode::I64Const:
- stream->Writef("%s $%" PRIu64 "\n", get_interpreter_opcode_name(opcode),
+ case Opcode::I64Const:
+ stream->Writef("%s $%" PRIu64 "\n", get_opcode_name(opcode),
read_u64(&pc));
break;
- case InterpreterOpcode::F32Const:
- stream->Writef("%s $%g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F32Const:
+ stream->Writef("%s $%g\n", get_opcode_name(opcode),
bitcast_u32_to_f32(read_u32(&pc)));
break;
- case InterpreterOpcode::F64Const:
- stream->Writef("%s $%g\n", get_interpreter_opcode_name(opcode),
+ case Opcode::F64Const:
+ stream->Writef("%s $%g\n", get_opcode_name(opcode),
bitcast_u64_to_f64(read_u64(&pc)));
break;
- case InterpreterOpcode::GetLocal:
- case InterpreterOpcode::GetGlobal:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
+ case Opcode::GetLocal:
+ case Opcode::GetGlobal:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32(&pc));
break;
- case InterpreterOpcode::SetLocal:
- case InterpreterOpcode::SetGlobal:
- case InterpreterOpcode::TeeLocal:
- stream->Writef("%s $%u, %%[-1]\n", get_interpreter_opcode_name(opcode),
+ case Opcode::SetLocal:
+ case Opcode::SetGlobal:
+ case Opcode::TeeLocal:
+ stream->Writef("%s $%u, %%[-1]\n", get_opcode_name(opcode),
read_u32(&pc));
break;
- case InterpreterOpcode::Call:
- stream->Writef("%s @%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
+ case Opcode::Call:
+ stream->Writef("%s @%u\n", get_opcode_name(opcode), read_u32(&pc));
break;
- case InterpreterOpcode::CallIndirect: {
+ case Opcode::CallIndirect: {
Index table_index = read_u32(&pc);
stream->Writef("%s $%" PRIindex ":%u, %%[-1]\n",
- get_interpreter_opcode_name(opcode), table_index,
- read_u32(&pc));
+ get_opcode_name(opcode), table_index, read_u32(&pc));
break;
}
- case InterpreterOpcode::CallHost:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
- break;
-
- case InterpreterOpcode::I32Load8S:
- case InterpreterOpcode::I32Load8U:
- case InterpreterOpcode::I32Load16S:
- case InterpreterOpcode::I32Load16U:
- case InterpreterOpcode::I64Load8S:
- case InterpreterOpcode::I64Load8U:
- case InterpreterOpcode::I64Load16S:
- case InterpreterOpcode::I64Load16U:
- case InterpreterOpcode::I64Load32S:
- case InterpreterOpcode::I64Load32U:
- case InterpreterOpcode::I32Load:
- case InterpreterOpcode::I64Load:
- case InterpreterOpcode::F32Load:
- case InterpreterOpcode::F64Load: {
+ case Opcode::CallHost:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32(&pc));
+ break;
+
+ case Opcode::I32Load8S:
+ case Opcode::I32Load8U:
+ case Opcode::I32Load16S:
+ case Opcode::I32Load16U:
+ case Opcode::I64Load8S:
+ case Opcode::I64Load8U:
+ case Opcode::I64Load16S:
+ case Opcode::I64Load16U:
+ case Opcode::I64Load32S:
+ case Opcode::I64Load32U:
+ case Opcode::I32Load:
+ case Opcode::I64Load:
+ case Opcode::F32Load:
+ case Opcode::F64Load: {
Index memory_index = read_u32(&pc);
stream->Writef("%s $%" PRIindex ":%%[-1]+$%u\n",
- get_interpreter_opcode_name(opcode), memory_index,
- read_u32(&pc));
+ get_opcode_name(opcode), memory_index, read_u32(&pc));
break;
}
- case InterpreterOpcode::I32Store8:
- case InterpreterOpcode::I32Store16:
- case InterpreterOpcode::I32Store:
- case InterpreterOpcode::I64Store8:
- case InterpreterOpcode::I64Store16:
- case InterpreterOpcode::I64Store32:
- case InterpreterOpcode::I64Store:
- case InterpreterOpcode::F32Store:
- case InterpreterOpcode::F64Store: {
+ case Opcode::I32Store8:
+ case Opcode::I32Store16:
+ case Opcode::I32Store:
+ case Opcode::I64Store8:
+ case Opcode::I64Store16:
+ case Opcode::I64Store32:
+ case Opcode::I64Store:
+ case Opcode::F32Store:
+ case Opcode::F64Store: {
Index memory_index = read_u32(&pc);
stream->Writef("%s %%[-2]+$%" PRIindex ", $%u:%%[-1]\n",
- get_interpreter_opcode_name(opcode), memory_index,
- read_u32(&pc));
+ get_opcode_name(opcode), memory_index, read_u32(&pc));
break;
}
- case InterpreterOpcode::I32Add:
- case InterpreterOpcode::I32Sub:
- case InterpreterOpcode::I32Mul:
- case InterpreterOpcode::I32DivS:
- case InterpreterOpcode::I32DivU:
- case InterpreterOpcode::I32RemS:
- case InterpreterOpcode::I32RemU:
- case InterpreterOpcode::I32And:
- case InterpreterOpcode::I32Or:
- case InterpreterOpcode::I32Xor:
- case InterpreterOpcode::I32Shl:
- case InterpreterOpcode::I32ShrU:
- case InterpreterOpcode::I32ShrS:
- case InterpreterOpcode::I32Eq:
- case InterpreterOpcode::I32Ne:
- case InterpreterOpcode::I32LtS:
- case InterpreterOpcode::I32LeS:
- case InterpreterOpcode::I32LtU:
- case InterpreterOpcode::I32LeU:
- case InterpreterOpcode::I32GtS:
- case InterpreterOpcode::I32GeS:
- case InterpreterOpcode::I32GtU:
- case InterpreterOpcode::I32GeU:
- case InterpreterOpcode::I32Rotr:
- case InterpreterOpcode::I32Rotl:
- case InterpreterOpcode::F32Add:
- case InterpreterOpcode::F32Sub:
- case InterpreterOpcode::F32Mul:
- case InterpreterOpcode::F32Div:
- case InterpreterOpcode::F32Min:
- case InterpreterOpcode::F32Max:
- case InterpreterOpcode::F32Copysign:
- case InterpreterOpcode::F32Eq:
- case InterpreterOpcode::F32Ne:
- case InterpreterOpcode::F32Lt:
- case InterpreterOpcode::F32Le:
- case InterpreterOpcode::F32Gt:
- case InterpreterOpcode::F32Ge:
- case InterpreterOpcode::I64Add:
- case InterpreterOpcode::I64Sub:
- case InterpreterOpcode::I64Mul:
- case InterpreterOpcode::I64DivS:
- case InterpreterOpcode::I64DivU:
- case InterpreterOpcode::I64RemS:
- case InterpreterOpcode::I64RemU:
- case InterpreterOpcode::I64And:
- case InterpreterOpcode::I64Or:
- case InterpreterOpcode::I64Xor:
- case InterpreterOpcode::I64Shl:
- case InterpreterOpcode::I64ShrU:
- case InterpreterOpcode::I64ShrS:
- case InterpreterOpcode::I64Eq:
- case InterpreterOpcode::I64Ne:
- case InterpreterOpcode::I64LtS:
- case InterpreterOpcode::I64LeS:
- case InterpreterOpcode::I64LtU:
- case InterpreterOpcode::I64LeU:
- case InterpreterOpcode::I64GtS:
- case InterpreterOpcode::I64GeS:
- case InterpreterOpcode::I64GtU:
- case InterpreterOpcode::I64GeU:
- case InterpreterOpcode::I64Rotr:
- case InterpreterOpcode::I64Rotl:
- case InterpreterOpcode::F64Add:
- case InterpreterOpcode::F64Sub:
- case InterpreterOpcode::F64Mul:
- case InterpreterOpcode::F64Div:
- case InterpreterOpcode::F64Min:
- case InterpreterOpcode::F64Max:
- case InterpreterOpcode::F64Copysign:
- case InterpreterOpcode::F64Eq:
- case InterpreterOpcode::F64Ne:
- case InterpreterOpcode::F64Lt:
- case InterpreterOpcode::F64Le:
- case InterpreterOpcode::F64Gt:
- case InterpreterOpcode::F64Ge:
- stream->Writef("%s %%[-2], %%[-1]\n",
- get_interpreter_opcode_name(opcode));
- break;
-
- case InterpreterOpcode::I32Clz:
- case InterpreterOpcode::I32Ctz:
- case InterpreterOpcode::I32Popcnt:
- case InterpreterOpcode::I32Eqz:
- case InterpreterOpcode::I64Clz:
- case InterpreterOpcode::I64Ctz:
- case InterpreterOpcode::I64Popcnt:
- case InterpreterOpcode::I64Eqz:
- case InterpreterOpcode::F32Abs:
- case InterpreterOpcode::F32Neg:
- case InterpreterOpcode::F32Ceil:
- case InterpreterOpcode::F32Floor:
- case InterpreterOpcode::F32Trunc:
- case InterpreterOpcode::F32Nearest:
- case InterpreterOpcode::F32Sqrt:
- case InterpreterOpcode::F64Abs:
- case InterpreterOpcode::F64Neg:
- case InterpreterOpcode::F64Ceil:
- case InterpreterOpcode::F64Floor:
- case InterpreterOpcode::F64Trunc:
- case InterpreterOpcode::F64Nearest:
- case InterpreterOpcode::F64Sqrt:
- case InterpreterOpcode::I32TruncSF32:
- case InterpreterOpcode::I32TruncUF32:
- case InterpreterOpcode::I64TruncSF32:
- case InterpreterOpcode::I64TruncUF32:
- case InterpreterOpcode::F64PromoteF32:
- case InterpreterOpcode::I32ReinterpretF32:
- case InterpreterOpcode::I32TruncSF64:
- case InterpreterOpcode::I32TruncUF64:
- case InterpreterOpcode::I64TruncSF64:
- case InterpreterOpcode::I64TruncUF64:
- case InterpreterOpcode::F32DemoteF64:
- case InterpreterOpcode::I64ReinterpretF64:
- case InterpreterOpcode::I32WrapI64:
- case InterpreterOpcode::F32ConvertSI64:
- case InterpreterOpcode::F32ConvertUI64:
- case InterpreterOpcode::F64ConvertSI64:
- case InterpreterOpcode::F64ConvertUI64:
- case InterpreterOpcode::F64ReinterpretI64:
- case InterpreterOpcode::I64ExtendSI32:
- case InterpreterOpcode::I64ExtendUI32:
- case InterpreterOpcode::F32ConvertSI32:
- case InterpreterOpcode::F32ConvertUI32:
- case InterpreterOpcode::F32ReinterpretI32:
- case InterpreterOpcode::F64ConvertSI32:
- case InterpreterOpcode::F64ConvertUI32:
- stream->Writef("%s %%[-1]\n", get_interpreter_opcode_name(opcode));
- break;
-
- case InterpreterOpcode::GrowMemory: {
+ case Opcode::I32Add:
+ case Opcode::I32Sub:
+ case Opcode::I32Mul:
+ case Opcode::I32DivS:
+ case Opcode::I32DivU:
+ case Opcode::I32RemS:
+ case Opcode::I32RemU:
+ case Opcode::I32And:
+ case Opcode::I32Or:
+ case Opcode::I32Xor:
+ case Opcode::I32Shl:
+ case Opcode::I32ShrU:
+ case Opcode::I32ShrS:
+ case Opcode::I32Eq:
+ case Opcode::I32Ne:
+ case Opcode::I32LtS:
+ case Opcode::I32LeS:
+ case Opcode::I32LtU:
+ case Opcode::I32LeU:
+ case Opcode::I32GtS:
+ case Opcode::I32GeS:
+ case Opcode::I32GtU:
+ case Opcode::I32GeU:
+ case Opcode::I32Rotr:
+ case Opcode::I32Rotl:
+ case Opcode::F32Add:
+ case Opcode::F32Sub:
+ case Opcode::F32Mul:
+ case Opcode::F32Div:
+ case Opcode::F32Min:
+ case Opcode::F32Max:
+ case Opcode::F32Copysign:
+ case Opcode::F32Eq:
+ case Opcode::F32Ne:
+ case Opcode::F32Lt:
+ case Opcode::F32Le:
+ case Opcode::F32Gt:
+ case Opcode::F32Ge:
+ case Opcode::I64Add:
+ case Opcode::I64Sub:
+ case Opcode::I64Mul:
+ case Opcode::I64DivS:
+ case Opcode::I64DivU:
+ case Opcode::I64RemS:
+ case Opcode::I64RemU:
+ case Opcode::I64And:
+ case Opcode::I64Or:
+ case Opcode::I64Xor:
+ case Opcode::I64Shl:
+ case Opcode::I64ShrU:
+ case Opcode::I64ShrS:
+ case Opcode::I64Eq:
+ case Opcode::I64Ne:
+ case Opcode::I64LtS:
+ case Opcode::I64LeS:
+ case Opcode::I64LtU:
+ case Opcode::I64LeU:
+ case Opcode::I64GtS:
+ case Opcode::I64GeS:
+ case Opcode::I64GtU:
+ case Opcode::I64GeU:
+ case Opcode::I64Rotr:
+ case Opcode::I64Rotl:
+ case Opcode::F64Add:
+ case Opcode::F64Sub:
+ case Opcode::F64Mul:
+ case Opcode::F64Div:
+ case Opcode::F64Min:
+ case Opcode::F64Max:
+ case Opcode::F64Copysign:
+ case Opcode::F64Eq:
+ case Opcode::F64Ne:
+ case Opcode::F64Lt:
+ case Opcode::F64Le:
+ case Opcode::F64Gt:
+ case Opcode::F64Ge:
+ stream->Writef("%s %%[-2], %%[-1]\n", get_opcode_name(opcode));
+ break;
+
+ case Opcode::I32Clz:
+ case Opcode::I32Ctz:
+ case Opcode::I32Popcnt:
+ case Opcode::I32Eqz:
+ case Opcode::I64Clz:
+ case Opcode::I64Ctz:
+ case Opcode::I64Popcnt:
+ case Opcode::I64Eqz:
+ case Opcode::F32Abs:
+ case Opcode::F32Neg:
+ case Opcode::F32Ceil:
+ case Opcode::F32Floor:
+ case Opcode::F32Trunc:
+ case Opcode::F32Nearest:
+ case Opcode::F32Sqrt:
+ case Opcode::F64Abs:
+ case Opcode::F64Neg:
+ case Opcode::F64Ceil:
+ case Opcode::F64Floor:
+ case Opcode::F64Trunc:
+ case Opcode::F64Nearest:
+ case Opcode::F64Sqrt:
+ case Opcode::I32TruncSF32:
+ case Opcode::I32TruncUF32:
+ case Opcode::I64TruncSF32:
+ case Opcode::I64TruncUF32:
+ case Opcode::F64PromoteF32:
+ case Opcode::I32ReinterpretF32:
+ case Opcode::I32TruncSF64:
+ case Opcode::I32TruncUF64:
+ case Opcode::I64TruncSF64:
+ case Opcode::I64TruncUF64:
+ case Opcode::F32DemoteF64:
+ case Opcode::I64ReinterpretF64:
+ case Opcode::I32WrapI64:
+ case Opcode::F32ConvertSI64:
+ case Opcode::F32ConvertUI64:
+ case Opcode::F64ConvertSI64:
+ case Opcode::F64ConvertUI64:
+ case Opcode::F64ReinterpretI64:
+ case Opcode::I64ExtendSI32:
+ case Opcode::I64ExtendUI32:
+ case Opcode::F32ConvertSI32:
+ case Opcode::F32ConvertUI32:
+ case Opcode::F32ReinterpretI32:
+ case Opcode::F64ConvertSI32:
+ case Opcode::F64ConvertUI32:
+ stream->Writef("%s %%[-1]\n", get_opcode_name(opcode));
+ break;
+
+ case Opcode::GrowMemory: {
Index memory_index = read_u32(&pc);
- stream->Writef("%s $%" PRIindex ":%%[-1]\n",
- get_interpreter_opcode_name(opcode), memory_index);
+ stream->Writef("%s $%" PRIindex ":%%[-1]\n", get_opcode_name(opcode),
+ memory_index);
break;
}
- case InterpreterOpcode::Alloca:
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- read_u32(&pc));
+ case Opcode::Alloca:
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), read_u32(&pc));
break;
- case InterpreterOpcode::BrUnless:
- stream->Writef("%s @%u, %%[-1]\n", get_interpreter_opcode_name(opcode),
+ case Opcode::BrUnless:
+ stream->Writef("%s @%u, %%[-1]\n", get_opcode_name(opcode),
read_u32(&pc));
break;
- case InterpreterOpcode::DropKeep: {
+ case Opcode::DropKeep: {
uint32_t drop = read_u32(&pc);
uint8_t keep = *pc++;
- stream->Writef("%s $%u $%u\n", get_interpreter_opcode_name(opcode),
- drop, keep);
+ stream->Writef("%s $%u $%u\n", get_opcode_name(opcode), drop, keep);
break;
}
- case InterpreterOpcode::Data: {
+ case Opcode::Data: {
uint32_t num_bytes = read_u32(&pc);
- stream->Writef("%s $%u\n", get_interpreter_opcode_name(opcode),
- num_bytes);
+ stream->Writef("%s $%u\n", get_opcode_name(opcode), num_bytes);
/* for now, the only reason this is emitted is for br_table, so display
* it as a list of table entries */
if (num_bytes % WABT_TABLE_ENTRY_SIZE == 0) {
@@ -2388,12 +2344,11 @@ void disassemble(InterpreterEnvironment* env,
}
}
-void disassemble_module(InterpreterEnvironment* env,
- Stream* stream,
- InterpreterModule* module) {
+void disassemble_module(Environment* env, Stream* stream, Module* module) {
assert(!module->is_host);
disassemble(env, stream, module->as_defined()->istream_start,
module->as_defined()->istream_end);
}
+} // namespace interpreter
} // namespace wabt