summaryrefslogtreecommitdiff
path: root/src/asm_v_wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/asm_v_wasm.h')
-rw-r--r--src/asm_v_wasm.h70
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_
+