diff options
Diffstat (limited to 'src/asm_v_wasm.h')
-rw-r--r-- | src/asm_v_wasm.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/asm_v_wasm.h b/src/asm_v_wasm.h new file mode 100644 index 000000000..1bf689802 --- /dev/null +++ b/src/asm_v_wasm.h @@ -0,0 +1,70 @@ +#ifndef _asm_v_wasm_h_ +#define _asm_v_wasm_h_ + +#include "emscripten-optimizer/optimizer.h" + +namespace wasm { + +WasmType asmToWasmType(AsmType asmType) { + switch (asmType) { + case ASM_INT: return WasmType::i32; + case ASM_DOUBLE: return WasmType::f64; + case ASM_FLOAT: return WasmType::f32; + case ASM_NONE: return WasmType::none; + default: {} + } + abort(); +} + +AsmType wasmToAsmType(WasmType type) { + switch (type) { + case WasmType::i32: return ASM_INT; + case WasmType::f32: return ASM_FLOAT; + case WasmType::f64: return ASM_DOUBLE; + case WasmType::none: return ASM_NONE; + default: {} + } + abort(); +} + +char getSig(WasmType type) { + switch (type) { + case i32: return 'i'; + case f32: return 'f'; + case f64: return 'd'; + case none: return 'v'; + default: abort(); + } +} + +std::string getSig(FunctionType *type) { + std::string ret; + ret += getSig(type->result); + for (auto param : type->params) { + ret += getSig(param); + } + return ret; +} + +std::string getSig(Function *func) { + std::string ret; + ret += getSig(func->result); + for (auto param : func->params) { + ret += getSig(param.type); + } + return ret; +} + +std::string getSig(CallBase *call) { + std::string ret; + ret += getSig(call->type); + for (auto operand : call->operands) { + ret += getSig(operand->type); + } + return ret; +} + +} // namespace wasm + +#endif // _asm_v_wasm_h_ + |