summaryrefslogtreecommitdiff
path: root/src/wasm/wasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r--src/wasm/wasm.cpp166
1 files changed, 9 insertions, 157 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 2921f4974..690c96f67 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -102,164 +102,16 @@ void Expression::dump() { std::cout << *this << '\n'; }
const char* getExpressionName(Expression* curr) {
switch (curr->_id) {
- case Expression::Id::InvalidId:
- WASM_UNREACHABLE("invalid expr id");
- case Expression::Id::BlockId:
- return "block";
- case Expression::Id::IfId:
- return "if";
- case Expression::Id::LoopId:
- return "loop";
- case Expression::Id::BreakId:
- return "break";
- case Expression::Id::SwitchId:
- return "switch";
- case Expression::Id::CallId:
- return "call";
- case Expression::Id::CallIndirectId:
- return "call_indirect";
- case Expression::Id::LocalGetId:
- return "local.get";
- case Expression::Id::LocalSetId:
- return "local.set";
- case Expression::Id::GlobalGetId:
- return "global.get";
- case Expression::Id::GlobalSetId:
- return "global.set";
- case Expression::Id::LoadId:
- return "load";
- case Expression::Id::StoreId:
- return "store";
- case Expression::Id::ConstId:
- return "const";
- case Expression::Id::UnaryId:
- return "unary";
- case Expression::Id::BinaryId:
- return "binary";
- case Expression::Id::SelectId:
- return "select";
- case Expression::Id::DropId:
- return "drop";
- case Expression::Id::ReturnId:
- return "return";
- case Expression::Id::MemorySizeId:
- return "memory.size";
- case Expression::Id::MemoryGrowId:
- return "memory.grow";
- case Expression::Id::NopId:
- return "nop";
- case Expression::Id::UnreachableId:
- return "unreachable";
- case Expression::Id::AtomicCmpxchgId:
- return "atomic.cmpxchg";
- case Expression::Id::AtomicRMWId:
- return "atomic.rmw";
- case Expression::Id::AtomicWaitId:
- return "atomic.wait";
- case Expression::Id::AtomicNotifyId:
- return "atomic.notify";
- case Expression::Id::AtomicFenceId:
- return "atomic.fence";
- case Expression::Id::SIMDExtractId:
- return "simd_extract";
- case Expression::Id::SIMDReplaceId:
- return "simd_replace";
- case Expression::Id::SIMDShuffleId:
- return "simd_shuffle";
- case Expression::Id::SIMDTernaryId:
- return "simd_ternary";
- case Expression::Id::SIMDShiftId:
- return "simd_shift";
- case Expression::Id::SIMDLoadId:
- return "simd_load";
- case Expression::Id::SIMDLoadStoreLaneId:
- return "simd_load_store_lane";
- case Expression::Id::PrefetchId:
- return "prefetch";
- case Expression::Id::MemoryInitId:
- return "memory.init";
- case Expression::Id::DataDropId:
- return "data.drop";
- case Expression::Id::MemoryCopyId:
- return "memory.copy";
- case Expression::Id::MemoryFillId:
- return "memory.fill";
- case Expression::Id::PopId:
- return "pop";
- case Expression::Id::RefNullId:
- return "ref.null";
- case Expression::Id::RefIsId:
- switch (curr->cast<RefIs>()->op) {
- case RefIsNull:
- return "ref.is_null";
- case RefIsFunc:
- return "ref.is_func";
- case RefIsData:
- return "ref.is_data";
- case RefIsI31:
- return "ref.is_i31";
- default:
- WASM_UNREACHABLE("unimplemented ref.is_*");
- }
- case Expression::Id::RefFuncId:
- return "ref.func";
- case Expression::Id::RefEqId:
- return "ref.eq";
- case Expression::Id::TryId:
- return "try";
- case Expression::Id::ThrowId:
- return "throw";
- case Expression::Id::RethrowId:
- return "rethrow";
- case Expression::Id::TupleMakeId:
- return "tuple.make";
- case Expression::Id::TupleExtractId:
- return "tuple.extract";
- case Expression::Id::I31NewId:
- return "i31.new";
- case Expression::Id::I31GetId:
- return "i31.get";
- case Expression::Id::CallRefId:
- return "call_ref";
- case Expression::Id::RefTestId:
- return "ref.test";
- case Expression::Id::RefCastId:
- return "ref.cast";
- case Expression::Id::BrOnCastId:
- return "br_on_cast";
- case Expression::Id::RttCanonId:
- return "rtt.canon";
- case Expression::Id::RttSubId:
- return "rtt.sub";
- case Expression::Id::StructNewId:
- return "struct.new";
- case Expression::Id::StructGetId:
- return "struct.get";
- case Expression::Id::StructSetId:
- return "struct.set";
- case Expression::Id::ArrayNewId:
- return "array.new";
- case Expression::Id::ArrayGetId:
- return "array.get";
- case Expression::Id::ArraySetId:
- return "array.set";
- case Expression::Id::ArrayLenId:
- return "array.len";
- case Expression::Id::RefAsId:
- switch (curr->cast<RefAs>()->op) {
- case RefAsFunc:
- return "ref.as_func";
- case RefAsData:
- return "ref.as_data";
- case RefAsI31:
- return "ref.as_i31";
- default:
- WASM_UNREACHABLE("unimplemented ref.is_*");
- }
- case Expression::Id::NumExpressionIds:
- WASM_UNREACHABLE("invalid expr id");
+
+#define DELEGATE(CLASS_TO_VISIT) \
+ case Expression::Id::CLASS_TO_VISIT##Id: \
+ return #CLASS_TO_VISIT;
+
+#include "wasm-delegations.h"
+
+ default:
+ WASM_UNREACHABLE("invalid id");
}
- WASM_UNREACHABLE("invalid expr id");
}
Literal getLiteralFromConstExpression(Expression* curr) {