diff options
Diffstat (limited to 'src/op/tostr.c')
| -rw-r--r-- | src/op/tostr.c | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/src/op/tostr.c b/src/op/tostr.c new file mode 100644 index 0000000..b2ac6dd --- /dev/null +++ b/src/op/tostr.c @@ -0,0 +1,278 @@ +/* + * nanowasm, a tiny WebAssembly/Wasm interpreter + * Copyright (C) 2023-2025 Xavier Del Campo Romero + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include <nanowasm/nw.h> +#include <nw/opcodes.h> + +const char *nwp_op_tostr(const enum opcode op) +{ + static const char *const s[] = + { + "OP_UNREACHABLE", + "OP_NOP", + "OP_BLOCK", + "OP_LOOP", + "OP_IF", + "OP_ELSE", + NULL, + NULL, + NULL, + NULL, + NULL, + "OP_END", + "OP_BR", + "OP_BR_IF", + "OP_BR_TABLE", + "OP_RETURN", + "OP_CALL", + "OP_CALL_INDIRECT", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "OP_DROP", + "OP_SELECT", + NULL, + NULL, + NULL, + NULL, + "OP_GET_LOCAL", + "OP_SET_LOCAL", + "OP_TEE_LOCAL", + "OP_GET_GLOBAL", + "OP_SET_GLOBAL", + NULL, + NULL, + NULL, + "OP_I32_LOAD", + "OP_I64_LOAD", + "OP_F32_LOAD", + "OP_F64_LOAD", + "OP_I32_LOAD8_S", + "OP_I32_LOAD8_U", + "OP_I32_LOAD16_S", + "OP_I32_LOAD16_U", + "OP_I64_LOAD8_S", + "OP_I64_LOAD8_U", + "OP_I64_LOAD16_S", + "OP_I64_LOAD16_U", + "OP_I64_LOAD32_S", + "OP_I64_LOAD32_U", + "OP_I32_STORE", + "OP_I64_STORE", + "OP_F32_STORE", + "OP_F64_STORE", + "OP_I32_STORE8", + "OP_I32_STORE16", + "OP_I64_STORE8", + "OP_I64_STORE16", + "OP_I64_STORE32", + "OP_CURRENT_MEMORY", + "OP_GROW_MEMORY", + "OP_I32_CONST", + "OP_I64_CONST", + "OP_F32_CONST", + "OP_F64_CONST", + "OP_I32_EQZ", + "OP_I32_EQ", + "OP_I32_NE", + "OP_I32_LT_S", + "OP_I32_LT_U", + "OP_I32_GT_S", + "OP_I32_GT_U", + "OP_I32_LE_S", + "OP_I32_LE_U", + "OP_I32_GE_S", + "OP_I32_GE_U", + "OP_I64_EQZ", + "OP_I64_EQ", + "OP_I64_NE", + "OP_I64_LT_S", + "OP_I64_LT_U", + "OP_I64_GT_S", + "OP_I64_GT_U", + "OP_I64_LE_S", + "OP_I64_LE_U", + "OP_I64_GE_S", + "OP_I64_GE_U", + "OP_F32_EQ", + "OP_F32_NE", + "OP_F32_LT", + "OP_F32_GT", + "OP_F32_LE", + "OP_F32_GE", + "OP_F64_EQ", + "OP_F64_NE", + "OP_F64_LT", + "OP_F64_GT", + "OP_F64_LE", + "OP_F64_GE", + "OP_I32_CLZ", + "OP_I32_CTZ", + "OP_I32_POPCNT", + "OP_I32_ADD", + "OP_I32_SUB", + "OP_I32_MUL", + "OP_I32_DIV_S", + "OP_I32_DIV_U", + "OP_I32_REM_S", + "OP_I32_REM_U", + "OP_I32_AND", + "OP_I32_OR", + "OP_I32_XOR", + "OP_I32_SHL", + "OP_I32_SHR_S", + "OP_I32_SHR_U", + "OP_I32_ROTL", + "OP_I32_ROTR", + "OP_I64_CLZ", + "OP_I64_CTZ", + "OP_I64_POPCNT", + "OP_I64_ADD", + "OP_I64_SUB", + "OP_I64_MUL", + "OP_I64_DIV_S", + "OP_I64_DIV_U", + "OP_I64_REM_S", + "OP_I64_REM_U", + "OP_I64_AND", + "OP_I64_OR", + "OP_I64_XOR", + "OP_I64_SHL", + "OP_I64_SHR_S", + "OP_I64_SHR_U", + "OP_I64_ROTL", + "OP_I64_ROTR", + "OP_F32_ABS", + "OP_F32_NEG", + "OP_F32_CEIL", + "OP_F32_FLOOR", + "OP_F32_TRUNC", + "OP_F32_NEAREST", + "OP_F32_SQRT", + "OP_F32_ADD", + "OP_F32_SUB", + "OP_F32_MUL", + "OP_F32_DIV", + "OP_F32_MIN", + "OP_F32_MAX", + "OP_F32_COPYSIGN", + "OP_F64_ABS", + "OP_F64_NEG", + "OP_F64_CEIL", + "OP_F64_FLOOR", + "OP_F64_TRUNC", + "OP_F64_NEAREST", + "OP_F64_SQRT", + "OP_F64_ADD", + "OP_F64_SUB", + "OP_F64_MUL", + "OP_F64_DIV", + "OP_F64_MIN", + "OP_F64_MAX", + "OP_F64_COPYSIGN", + "OP_I32_WRAP_I64", + "OP_I32_TRUNC_S_F32", + "OP_I32_TRUNC_U_F32", + "OP_I32_TRUNC_S_F64", + "OP_I32_TRUNC_U_F64", + "OP_I64_EXTEND_S_I32", + "OP_I64_EXTEND_U_I32", + "OP_I64_TRUNC_S_F32", + "OP_I64_TRUNC_U_F32", + "OP_I64_TRUNC_S_F64", + "OP_I64_TRUNC_U_F64", + "OP_F32_CONVERT_S_I32", + "OP_F32_CONVERT_U_I32", + "OP_F32_CONVERT_S_I64", + "OP_F32_CONVERT_U_I64", + "OP_F32_DEMOTE_F64", + "OP_F64_CONVERT_S_I32", + "OP_F64_CONVERT_U_I32", + "OP_F64_CONVERT_S_I64", + "OP_F64_CONVERT_U_I64", + "OP_F64_PROMOTE_F32", + "OP_I32_REINTERPRET_F32", + "OP_I64_REINTERPRET_F64", + "OP_F32_REINTERPRET_I32", + "OP_F64_REINTERPRET_I64", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "OP_MISC", + }; + + if (op < 0 || op >= sizeof s / sizeof *s) + return "invalid opcode"; + + return s[op]; +} |
