diff options
Diffstat (limited to 'tools/translate.c')
-rw-r--r-- | tools/translate.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/tools/translate.c b/tools/translate.c index 4361d6f..bf13bd1 100644 --- a/tools/translate.c +++ b/tools/translate.c @@ -4,7 +4,9 @@ /* WebAssembly opcodes */ #define WASM_END 0x0B #define WASM_CALL 0x10 + #define WASM_LOCAL_GET 0x20 + #define WASM_I32_LOAD 0x28 #define WASM_I32_LOAD8_S 0x2C #define WASM_I32_LOAD8_U 0x2D @@ -14,8 +16,14 @@ #define WASM_I32_STORE8 0x3A #define WASM_I32_STORE16 0x3B #define WASM_I64_STORE32 0x3E + #define WASM_I32_CONST 0x41 + +#define WASM_I32_ADD 0x6A #define WASM_I32_SUB 0x6B +#define WASM_I32_MUL 0x6C +#define WASM_I32_DIV_U 0x6E + int translate(FILE *handle, struct function *function, struct module *module) { @@ -59,11 +67,26 @@ int translate(FILE *handle, struct function *function, struct module *module) // TODO: make a function for each instruction type, // call them through some table... - if (wasm_opcode == WASM_I32_SUB) { + if (wasm_opcode == WASM_I32_ADD) { + if (i_add(&expr)) + goto fail; + + matched = 1; + } else if (wasm_opcode == WASM_I32_SUB) { if (i_sub(&expr)) goto fail; matched = 1; + } else if (wasm_opcode == WASM_I32_MUL) { + if (i_mul(&expr)) + goto fail; + + matched = 1; + } else if (wasm_opcode == WASM_I32_DIV_U) { + if (i_div(&expr)) + goto fail; + + matched = 1; } else if (wasm_opcode == WASM_CALL) { uint32_t funcidx; struct instruction **target; |