// DO NOT EDIT! This file generated by scripts/gen-s-parser.py

// clang-format off

#ifdef INSTRUCTION_PARSER
#undef INSTRUCTION_PARSER
using namespace std::string_view_literals;
auto str = s[0]->str().str;
char buf[33] = {};
memcpy(buf, str.data(), str.size());
std::string_view op = {buf, str.size()};
switch (op[0]) {
  case 'a': {
    switch (op[1]) {
      case 'r': {
        switch (op[6]) {
          case 'c':
            if (op == "array.copy"sv) { return makeArrayCopy(s); }
            goto parse_error;
          case 'g': {
            switch (op[9]) {
              case '\0':
                if (op == "array.get"sv) { return makeArrayGet(s); }
                goto parse_error;
              case '_': {
                switch (op[10]) {
                  case 's':
                    if (op == "array.get_s"sv) { return makeArrayGet(s, true); }
                    goto parse_error;
                  case 'u':
                    if (op == "array.get_u"sv) { return makeArrayGet(s, false); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'i':
            if (op == "array.init_static"sv) { return makeArrayInitStatic(s); }
            goto parse_error;
          case 'l':
            if (op == "array.len"sv) { return makeArrayLen(s); }
            goto parse_error;
          case 'n': {
            switch (op[9]) {
              case '\0':
                if (op == "array.new"sv) { return makeArrayNewStatic(s, false); }
                goto parse_error;
              case '_':
                if (op == "array.new_default"sv) { return makeArrayNewStatic(s, true); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's':
            if (op == "array.set"sv) { return makeArraySet(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't':
        if (op == "atomic.fence"sv) { return makeAtomicFence(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'b': {
    switch (op[1]) {
      case 'l':
        if (op == "block"sv) { return makeBlock(s); }
        goto parse_error;
      case 'r': {
        switch (op[2]) {
          case '\0':
            if (op == "br"sv) { return makeBreak(s); }
            goto parse_error;
          case '_': {
            switch (op[3]) {
              case 'i':
                if (op == "br_if"sv) { return makeBreak(s); }
                goto parse_error;
              case 'o': {
                switch (op[6]) {
                  case 'c': {
                    switch (op[10]) {
                      case '\0':
                        if (op == "br_on_cast"sv) { return makeBrOn(s, BrOnCast); }
                        goto parse_error;
                      case '_': {
                        switch (op[11]) {
                          case 'f':
                            if (op == "br_on_cast_fail"sv) { return makeBrOn(s, BrOnCastFail); }
                            goto parse_error;
                          case 's': {
                            switch (op[17]) {
                              case '\0':
                                if (op == "br_on_cast_static"sv) { return makeBrOnStatic(s, BrOnCast); }
                                goto parse_error;
                              case '_':
                                if (op == "br_on_cast_static_fail"sv) { return makeBrOnStatic(s, BrOnCastFail); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'd':
                    if (op == "br_on_data"sv) { return makeBrOn(s, BrOnData); }
                    goto parse_error;
                  case 'f':
                    if (op == "br_on_func"sv) { return makeBrOn(s, BrOnFunc); }
                    goto parse_error;
                  case 'i':
                    if (op == "br_on_i31"sv) { return makeBrOn(s, BrOnI31); }
                    goto parse_error;
                  case 'n': {
                    switch (op[7]) {
                      case 'o': {
                        switch (op[10]) {
                          case 'd':
                            if (op == "br_on_non_data"sv) { return makeBrOn(s, BrOnNonData); }
                            goto parse_error;
                          case 'f':
                            if (op == "br_on_non_func"sv) { return makeBrOn(s, BrOnNonFunc); }
                            goto parse_error;
                          case 'i':
                            if (op == "br_on_non_i31"sv) { return makeBrOn(s, BrOnNonI31); }
                            goto parse_error;
                          case 'n':
                            if (op == "br_on_non_null"sv) { return makeBrOn(s, BrOnNonNull); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "br_on_null"sv) { return makeBrOn(s, BrOnNull); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "br_table"sv) { return makeBreakTable(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'c': {
    switch (op[4]) {
      case '\0':
        if (op == "call"sv) { return makeCall(s, /*isReturn=*/false); }
        goto parse_error;
      case '_': {
        switch (op[5]) {
          case 'i':
            if (op == "call_indirect"sv) { return makeCallIndirect(s, /*isReturn=*/false); }
            goto parse_error;
          case 'r':
            if (op == "call_ref"sv) { return makeCallRef(s, /*isReturn=*/false); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'd': {
    switch (op[1]) {
      case 'a':
        if (op == "data.drop"sv) { return makeDataDrop(s); }
        goto parse_error;
      case 'r':
        if (op == "drop"sv) { return makeDrop(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'e': {
    switch (op[1]) {
      case 'l':
        if (op == "else"sv) { return makeThenOrElse(s); }
        goto parse_error;
      case 'x': {
        switch (op[7]) {
          case 'e':
            if (op == "extern.externalize"sv) { return makeRefAs(s, ExternExternalize); }
            goto parse_error;
          case 'i':
            if (op == "extern.internalize"sv) { return makeRefAs(s, ExternInternalize); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'f': {
    switch (op[1]) {
      case '3': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'b':
                    if (op == "f32.abs"sv) { return makeUnary(s, UnaryOp::AbsFloat32); }
                    goto parse_error;
                  case 'd':
                    if (op == "f32.add"sv) { return makeBinary(s, BinaryOp::AddFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.ceil"sv) { return makeUnary(s, UnaryOp::CeilFloat32); }
                    goto parse_error;
                  case 'o': {
                    switch (op[6]) {
                      case 'n': {
                        switch (op[7]) {
                          case 's':
                            if (op == "f32.const"sv) { return makeConst(s, Type::f32); }
                            goto parse_error;
                          case 'v': {
                            switch (op[13]) {
                              case '3': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f32.convert_i32_s"sv) { return makeUnary(s, UnaryOp::ConvertSInt32ToFloat32); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i32_u"sv) { return makeUnary(s, UnaryOp::ConvertUInt32ToFloat32); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case '6': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f32.convert_i64_s"sv) { return makeUnary(s, UnaryOp::ConvertSInt64ToFloat32); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i64_u"sv) { return makeUnary(s, UnaryOp::ConvertUInt64ToFloat32); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "f32.copysign"sv) { return makeBinary(s, BinaryOp::CopySignFloat32); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.demote_f64"sv) { return makeUnary(s, UnaryOp::DemoteFloat64); }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.div"sv) { return makeBinary(s, BinaryOp::DivFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e':
                if (op == "f32.eq"sv) { return makeBinary(s, BinaryOp::EqFloat32); }
                goto parse_error;
              case 'f':
                if (op == "f32.floor"sv) { return makeUnary(s, UnaryOp::FloorFloat32); }
                goto parse_error;
              case 'g': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.ge"sv) { return makeBinary(s, BinaryOp::GeFloat32); }
                    goto parse_error;
                  case 't':
                    if (op == "f32.gt"sv) { return makeBinary(s, BinaryOp::GtFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.le"sv) { return makeBinary(s, BinaryOp::LeFloat32); }
                    goto parse_error;
                  case 'o':
                    if (op == "f32.load"sv) { return makeLoad(s, Type::f32, /*isAtomic=*/false); }
                    goto parse_error;
                  case 't':
                    if (op == "f32.lt"sv) { return makeBinary(s, BinaryOp::LtFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[5]) {
                  case 'a':
                    if (op == "f32.max"sv) { return makeBinary(s, BinaryOp::MaxFloat32); }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.min"sv) { return makeBinary(s, BinaryOp::MinFloat32); }
                    goto parse_error;
                  case 'u':
                    if (op == "f32.mul"sv) { return makeBinary(s, BinaryOp::MulFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[6]) {
                  case '\0':
                    if (op == "f32.ne"sv) { return makeBinary(s, BinaryOp::NeFloat32); }
                    goto parse_error;
                  case 'a':
                    if (op == "f32.nearest"sv) { return makeUnary(s, UnaryOp::NearestFloat32); }
                    goto parse_error;
                  case 'g':
                    if (op == "f32.neg"sv) { return makeUnary(s, UnaryOp::NegFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "f32.reinterpret_i32"sv) { return makeUnary(s, UnaryOp::ReinterpretInt32); }
                goto parse_error;
              case 's': {
                switch (op[5]) {
                  case 'q':
                    if (op == "f32.sqrt"sv) { return makeUnary(s, UnaryOp::SqrtFloat32); }
                    goto parse_error;
                  case 't':
                    if (op == "f32.store"sv) { return makeStore(s, Type::f32, /*isAtomic=*/false); }
                    goto parse_error;
                  case 'u':
                    if (op == "f32.sub"sv) { return makeBinary(s, BinaryOp::SubFloat32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32.trunc"sv) { return makeUnary(s, UnaryOp::TruncFloat32); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "f32x4.abs"sv) { return makeUnary(s, UnaryOp::AbsVecF32x4); }
                    goto parse_error;
                  case 'd':
                    if (op == "f32x4.add"sv) { return makeBinary(s, BinaryOp::AddVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.ceil"sv) { return makeUnary(s, UnaryOp::CeilVecF32x4); }
                    goto parse_error;
                  case 'o': {
                    switch (op[20]) {
                      case 's':
                        if (op == "f32x4.convert_i32x4_s"sv) { return makeUnary(s, UnaryOp::ConvertSVecI32x4ToVecF32x4); }
                        goto parse_error;
                      case 'u':
                        if (op == "f32x4.convert_i32x4_u"sv) { return makeUnary(s, UnaryOp::ConvertUVecI32x4ToVecF32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.demote_f64x2_zero"sv) { return makeUnary(s, UnaryOp::DemoteZeroVecF64x2ToVecF32x4); }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.div"sv) { return makeBinary(s, BinaryOp::DivVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "f32x4.eq"sv) { return makeBinary(s, BinaryOp::EqVecF32x4); }
                    goto parse_error;
                  case 'x':
                    if (op == "f32x4.extract_lane"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF32x4, 4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f32x4.floor"sv) { return makeUnary(s, UnaryOp::FloorVecF32x4); }
                goto parse_error;
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.ge"sv) { return makeBinary(s, BinaryOp::GeVecF32x4); }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.gt"sv) { return makeBinary(s, BinaryOp::GtVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.le"sv) { return makeBinary(s, BinaryOp::LeVecF32x4); }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.lt"sv) { return makeBinary(s, BinaryOp::LtVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[7]) {
                  case 'a':
                    if (op == "f32x4.max"sv) { return makeBinary(s, BinaryOp::MaxVecF32x4); }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.min"sv) { return makeBinary(s, BinaryOp::MinVecF32x4); }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.mul"sv) { return makeBinary(s, BinaryOp::MulVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "f32x4.ne"sv) { return makeBinary(s, BinaryOp::NeVecF32x4); }
                    goto parse_error;
                  case 'a':
                    if (op == "f32x4.nearest"sv) { return makeUnary(s, UnaryOp::NearestVecF32x4); }
                    goto parse_error;
                  case 'g':
                    if (op == "f32x4.neg"sv) { return makeUnary(s, UnaryOp::NegVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p': {
                switch (op[8]) {
                  case 'a':
                    if (op == "f32x4.pmax"sv) { return makeBinary(s, BinaryOp::PMaxVecF32x4); }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.pmin"sv) { return makeBinary(s, BinaryOp::PMinVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (op[8]) {
                  case 'l': {
                    switch (op[14]) {
                      case 'f': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "f32x4.relaxed_fma"sv) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF32x4); }
                            goto parse_error;
                          case 's':
                            if (op == "f32x4.relaxed_fms"sv) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[15]) {
                          case 'a':
                            if (op == "f32x4.relaxed_max"sv) { return makeBinary(s, BinaryOp::RelaxedMaxVecF32x4); }
                            goto parse_error;
                          case 'i':
                            if (op == "f32x4.relaxed_min"sv) { return makeBinary(s, BinaryOp::RelaxedMinVecF32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f32x4.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[7]) {
                  case 'p':
                    if (op == "f32x4.splat"sv) { return makeUnary(s, UnaryOp::SplatVecF32x4); }
                    goto parse_error;
                  case 'q':
                    if (op == "f32x4.sqrt"sv) { return makeUnary(s, UnaryOp::SqrtVecF32x4); }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.sub"sv) { return makeBinary(s, BinaryOp::SubVecF32x4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32x4.trunc"sv) { return makeUnary(s, UnaryOp::TruncVecF32x4); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '6': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'b':
                    if (op == "f64.abs"sv) { return makeUnary(s, UnaryOp::AbsFloat64); }
                    goto parse_error;
                  case 'd':
                    if (op == "f64.add"sv) { return makeBinary(s, BinaryOp::AddFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.ceil"sv) { return makeUnary(s, UnaryOp::CeilFloat64); }
                    goto parse_error;
                  case 'o': {
                    switch (op[6]) {
                      case 'n': {
                        switch (op[7]) {
                          case 's':
                            if (op == "f64.const"sv) { return makeConst(s, Type::f64); }
                            goto parse_error;
                          case 'v': {
                            switch (op[13]) {
                              case '3': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f64.convert_i32_s"sv) { return makeUnary(s, UnaryOp::ConvertSInt32ToFloat64); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i32_u"sv) { return makeUnary(s, UnaryOp::ConvertUInt32ToFloat64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case '6': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f64.convert_i64_s"sv) { return makeUnary(s, UnaryOp::ConvertSInt64ToFloat64); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i64_u"sv) { return makeUnary(s, UnaryOp::ConvertUInt64ToFloat64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "f64.copysign"sv) { return makeBinary(s, BinaryOp::CopySignFloat64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd':
                if (op == "f64.div"sv) { return makeBinary(s, BinaryOp::DivFloat64); }
                goto parse_error;
              case 'e':
                if (op == "f64.eq"sv) { return makeBinary(s, BinaryOp::EqFloat64); }
                goto parse_error;
              case 'f':
                if (op == "f64.floor"sv) { return makeUnary(s, UnaryOp::FloorFloat64); }
                goto parse_error;
              case 'g': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.ge"sv) { return makeBinary(s, BinaryOp::GeFloat64); }
                    goto parse_error;
                  case 't':
                    if (op == "f64.gt"sv) { return makeBinary(s, BinaryOp::GtFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.le"sv) { return makeBinary(s, BinaryOp::LeFloat64); }
                    goto parse_error;
                  case 'o':
                    if (op == "f64.load"sv) { return makeLoad(s, Type::f64, /*isAtomic=*/false); }
                    goto parse_error;
                  case 't':
                    if (op == "f64.lt"sv) { return makeBinary(s, BinaryOp::LtFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[5]) {
                  case 'a':
                    if (op == "f64.max"sv) { return makeBinary(s, BinaryOp::MaxFloat64); }
                    goto parse_error;
                  case 'i':
                    if (op == "f64.min"sv) { return makeBinary(s, BinaryOp::MinFloat64); }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.mul"sv) { return makeBinary(s, BinaryOp::MulFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[6]) {
                  case '\0':
                    if (op == "f64.ne"sv) { return makeBinary(s, BinaryOp::NeFloat64); }
                    goto parse_error;
                  case 'a':
                    if (op == "f64.nearest"sv) { return makeUnary(s, UnaryOp::NearestFloat64); }
                    goto parse_error;
                  case 'g':
                    if (op == "f64.neg"sv) { return makeUnary(s, UnaryOp::NegFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "f64.promote_f32"sv) { return makeUnary(s, UnaryOp::PromoteFloat32); }
                goto parse_error;
              case 'r':
                if (op == "f64.reinterpret_i64"sv) { return makeUnary(s, UnaryOp::ReinterpretInt64); }
                goto parse_error;
              case 's': {
                switch (op[5]) {
                  case 'q':
                    if (op == "f64.sqrt"sv) { return makeUnary(s, UnaryOp::SqrtFloat64); }
                    goto parse_error;
                  case 't':
                    if (op == "f64.store"sv) { return makeStore(s, Type::f64, /*isAtomic=*/false); }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.sub"sv) { return makeBinary(s, BinaryOp::SubFloat64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64.trunc"sv) { return makeUnary(s, UnaryOp::TruncFloat64); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "f64x2.abs"sv) { return makeUnary(s, UnaryOp::AbsVecF64x2); }
                    goto parse_error;
                  case 'd':
                    if (op == "f64x2.add"sv) { return makeBinary(s, BinaryOp::AddVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.ceil"sv) { return makeUnary(s, UnaryOp::CeilVecF64x2); }
                    goto parse_error;
                  case 'o': {
                    switch (op[24]) {
                      case 's':
                        if (op == "f64x2.convert_low_i32x4_s"sv) { return makeUnary(s, UnaryOp::ConvertLowSVecI32x4ToVecF64x2); }
                        goto parse_error;
                      case 'u':
                        if (op == "f64x2.convert_low_i32x4_u"sv) { return makeUnary(s, UnaryOp::ConvertLowUVecI32x4ToVecF64x2); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd':
                if (op == "f64x2.div"sv) { return makeBinary(s, BinaryOp::DivVecF64x2); }
                goto parse_error;
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "f64x2.eq"sv) { return makeBinary(s, BinaryOp::EqVecF64x2); }
                    goto parse_error;
                  case 'x':
                    if (op == "f64x2.extract_lane"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF64x2, 2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f64x2.floor"sv) { return makeUnary(s, UnaryOp::FloorVecF64x2); }
                goto parse_error;
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.ge"sv) { return makeBinary(s, BinaryOp::GeVecF64x2); }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.gt"sv) { return makeBinary(s, BinaryOp::GtVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.le"sv) { return makeBinary(s, BinaryOp::LeVecF64x2); }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.lt"sv) { return makeBinary(s, BinaryOp::LtVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[7]) {
                  case 'a':
                    if (op == "f64x2.max"sv) { return makeBinary(s, BinaryOp::MaxVecF64x2); }
                    goto parse_error;
                  case 'i':
                    if (op == "f64x2.min"sv) { return makeBinary(s, BinaryOp::MinVecF64x2); }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.mul"sv) { return makeBinary(s, BinaryOp::MulVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "f64x2.ne"sv) { return makeBinary(s, BinaryOp::NeVecF64x2); }
                    goto parse_error;
                  case 'a':
                    if (op == "f64x2.nearest"sv) { return makeUnary(s, UnaryOp::NearestVecF64x2); }
                    goto parse_error;
                  case 'g':
                    if (op == "f64x2.neg"sv) { return makeUnary(s, UnaryOp::NegVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p': {
                switch (op[7]) {
                  case 'm': {
                    switch (op[8]) {
                      case 'a':
                        if (op == "f64x2.pmax"sv) { return makeBinary(s, BinaryOp::PMaxVecF64x2); }
                        goto parse_error;
                      case 'i':
                        if (op == "f64x2.pmin"sv) { return makeBinary(s, BinaryOp::PMinVecF64x2); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'r':
                    if (op == "f64x2.promote_low_f32x4"sv) { return makeUnary(s, UnaryOp::PromoteLowVecF32x4ToVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (op[8]) {
                  case 'l': {
                    switch (op[14]) {
                      case 'f': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "f64x2.relaxed_fma"sv) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF64x2); }
                            goto parse_error;
                          case 's':
                            if (op == "f64x2.relaxed_fms"sv) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF64x2); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[15]) {
                          case 'a':
                            if (op == "f64x2.relaxed_max"sv) { return makeBinary(s, BinaryOp::RelaxedMaxVecF64x2); }
                            goto parse_error;
                          case 'i':
                            if (op == "f64x2.relaxed_min"sv) { return makeBinary(s, BinaryOp::RelaxedMinVecF64x2); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f64x2.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[7]) {
                  case 'p':
                    if (op == "f64x2.splat"sv) { return makeUnary(s, UnaryOp::SplatVecF64x2); }
                    goto parse_error;
                  case 'q':
                    if (op == "f64x2.sqrt"sv) { return makeUnary(s, UnaryOp::SqrtVecF64x2); }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.sub"sv) { return makeBinary(s, BinaryOp::SubVecF64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64x2.trunc"sv) { return makeUnary(s, UnaryOp::TruncVecF64x2); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'g': {
    switch (op[7]) {
      case 'g':
        if (op == "global.get"sv) { return makeGlobalGet(s); }
        goto parse_error;
      case 's':
        if (op == "global.set"sv) { return makeGlobalSet(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'i': {
    switch (op[1]) {
      case '1': {
        switch (op[6]) {
          case 'a': {
            switch (op[7]) {
              case 'b':
                if (op == "i16x8.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI16x8); }
                goto parse_error;
              case 'd': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i16x8.add"sv) { return makeBinary(s, BinaryOp::AddVecI16x8); }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i16x8.add_sat_s"sv) { return makeBinary(s, BinaryOp::AddSatSVecI16x8); }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.add_sat_u"sv) { return makeBinary(s, BinaryOp::AddSatUVecI16x8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l':
                if (op == "i16x8.all_true"sv) { return makeUnary(s, UnaryOp::AllTrueVecI16x8); }
                goto parse_error;
              case 'v':
                if (op == "i16x8.avgr_u"sv) { return makeBinary(s, BinaryOp::AvgrUVecI16x8); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i16x8.bitmask"sv) { return makeUnary(s, UnaryOp::BitmaskVecI16x8); }
            goto parse_error;
          case 'd':
            if (op == "i16x8.dot_i8x16_i7x16_s"sv) { return makeBinary(s, BinaryOp::DotI8x16I7x16SToVecI16x8); }
            goto parse_error;
          case 'e': {
            switch (op[7]) {
              case 'q':
                if (op == "i16x8.eq"sv) { return makeBinary(s, BinaryOp::EqVecI16x8); }
                goto parse_error;
              case 'x': {
                switch (op[9]) {
                  case 'a': {
                    switch (op[28]) {
                      case 's':
                        if (op == "i16x8.extadd_pairwise_i8x16_s"sv) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8); }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extadd_pairwise_i8x16_u"sv) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[13]) {
                      case 'h': {
                        switch (op[24]) {
                          case 's':
                            if (op == "i16x8.extend_high_i8x16_s"sv) { return makeUnary(s, UnaryOp::ExtendHighSVecI8x16ToVecI16x8); }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_high_i8x16_u"sv) { return makeUnary(s, UnaryOp::ExtendHighUVecI8x16ToVecI16x8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'l': {
                        switch (op[23]) {
                          case 's':
                            if (op == "i16x8.extend_low_i8x16_s"sv) { return makeUnary(s, UnaryOp::ExtendLowSVecI8x16ToVecI16x8); }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_low_i8x16_u"sv) { return makeUnary(s, UnaryOp::ExtendLowUVecI8x16ToVecI16x8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm': {
                    switch (op[13]) {
                      case 'h': {
                        switch (op[24]) {
                          case 's':
                            if (op == "i16x8.extmul_high_i8x16_s"sv) { return makeBinary(s, BinaryOp::ExtMulHighSVecI16x8); }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_high_i8x16_u"sv) { return makeBinary(s, BinaryOp::ExtMulHighUVecI16x8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'l': {
                        switch (op[23]) {
                          case 's':
                            if (op == "i16x8.extmul_low_i8x16_s"sv) { return makeBinary(s, BinaryOp::ExtMulLowSVecI16x8); }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_low_i8x16_u"sv) { return makeBinary(s, BinaryOp::ExtMulLowUVecI16x8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'r': {
                    switch (op[19]) {
                      case 's':
                        if (op == "i16x8.extract_lane_s"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI16x8, 8); }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extract_lane_u"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI16x8, 8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'g': {
            switch (op[7]) {
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.ge_s"sv) { return makeBinary(s, BinaryOp::GeSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.ge_u"sv) { return makeBinary(s, BinaryOp::GeUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.gt_s"sv) { return makeBinary(s, BinaryOp::GtSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.gt_u"sv) { return makeBinary(s, BinaryOp::GtUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'l': {
            switch (op[7]) {
              case 'a':
                if (op == "i16x8.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI16x8); }
                goto parse_error;
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.le_s"sv) { return makeBinary(s, BinaryOp::LeSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.le_u"sv) { return makeBinary(s, BinaryOp::LeUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.lt_s"sv) { return makeBinary(s, BinaryOp::LtSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.lt_u"sv) { return makeBinary(s, BinaryOp::LtUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'm': {
            switch (op[7]) {
              case 'a': {
                switch (op[10]) {
                  case 's':
                    if (op == "i16x8.max_s"sv) { return makeBinary(s, BinaryOp::MaxSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.max_u"sv) { return makeBinary(s, BinaryOp::MaxUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'i': {
                switch (op[10]) {
                  case 's':
                    if (op == "i16x8.min_s"sv) { return makeBinary(s, BinaryOp::MinSVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.min_u"sv) { return makeBinary(s, BinaryOp::MinUVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'u':
                if (op == "i16x8.mul"sv) { return makeBinary(s, BinaryOp::MulVecI16x8); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n': {
            switch (op[7]) {
              case 'a': {
                switch (op[19]) {
                  case 's':
                    if (op == "i16x8.narrow_i32x4_s"sv) { return makeBinary(s, BinaryOp::NarrowSVecI32x4ToVecI16x8); }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.narrow_i32x4_u"sv) { return makeBinary(s, BinaryOp::NarrowUVecI32x4ToVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i16x8.ne"sv) { return makeBinary(s, BinaryOp::NeVecI16x8); }
                    goto parse_error;
                  case 'g':
                    if (op == "i16x8.neg"sv) { return makeUnary(s, UnaryOp::NegVecI16x8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'q':
            if (op == "i16x8.q15mulr_sat_s"sv) { return makeBinary(s, BinaryOp::Q15MulrSatSVecI16x8); }
            goto parse_error;
          case 'r': {
            switch (op[8]) {
              case 'l':
                if (op == "i16x8.relaxed_q15mulr_s"sv) { return makeBinary(s, BinaryOp::RelaxedQ15MulrSVecI16x8); }
                goto parse_error;
              case 'p':
                if (op == "i16x8.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI16x8, 8); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'h': {
                switch (op[8]) {
                  case 'l':
                    if (op == "i16x8.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8); }
                    goto parse_error;
                  case 'r': {
                    switch (op[10]) {
                      case 's':
                        if (op == "i16x8.shr_s"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI16x8); }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.shr_u"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI16x8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "i16x8.splat"sv) { return makeUnary(s, UnaryOp::SplatVecI16x8); }
                goto parse_error;
              case 'u': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i16x8.sub"sv) { return makeBinary(s, BinaryOp::SubVecI16x8); }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i16x8.sub_sat_s"sv) { return makeBinary(s, BinaryOp::SubSatSVecI16x8); }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.sub_sat_u"sv) { return makeBinary(s, BinaryOp::SubSatUVecI16x8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '3': {
        switch (op[2]) {
          case '1': {
            switch (op[4]) {
              case 'g': {
                switch (op[8]) {
                  case 's':
                    if (op == "i31.get_s"sv) { return makeI31Get(s, true); }
                    goto parse_error;
                  case 'u':
                    if (op == "i31.get_u"sv) { return makeI31Get(s, false); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n':
                if (op == "i31.new"sv) { return makeI31New(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '2': {
            switch (op[3]) {
              case '.': {
                switch (op[4]) {
                  case 'a': {
                    switch (op[5]) {
                      case 'd':
                        if (op == "i32.add"sv) { return makeBinary(s, BinaryOp::AddInt32); }
                        goto parse_error;
                      case 'n':
                        if (op == "i32.and"sv) { return makeBinary(s, BinaryOp::AndInt32); }
                        goto parse_error;
                      case 't': {
                        switch (op[11]) {
                          case 'l': {
                            switch (op[15]) {
                              case '\0':
                                if (op == "i32.atomic.load"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.load16_u"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.load8_u"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'r': {
                            switch (op[14]) {
                              case '.': {
                                switch (op[15]) {
                                  case 'a': {
                                    switch (op[16]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw.add"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw.and"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw.cmpxchg"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw.or"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw.sub"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[16]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw.xchg"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw.xor"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '1': {
                                switch (op[17]) {
                                  case 'a': {
                                    switch (op[18]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw16.add_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw16.and_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw16.cmpxchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw16.or_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw16.sub_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[18]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw16.xchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw16.xor_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '8': {
                                switch (op[16]) {
                                  case 'a': {
                                    switch (op[17]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw8.add_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw8.and_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw8.cmpxchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw8.or_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw8.sub_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[17]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw8.xchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw8.xor_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i32); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 's': {
                            switch (op[16]) {
                              case '\0':
                                if (op == "i32.atomic.store"sv) { return makeStore(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.store16"sv) { return makeStore(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.store8"sv) { return makeStore(s, Type::i32, /*isAtomic=*/true); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'c': {
                    switch (op[5]) {
                      case 'l':
                        if (op == "i32.clz"sv) { return makeUnary(s, UnaryOp::ClzInt32); }
                        goto parse_error;
                      case 'o':
                        if (op == "i32.const"sv) { return makeConst(s, Type::i32); }
                        goto parse_error;
                      case 't':
                        if (op == "i32.ctz"sv) { return makeUnary(s, UnaryOp::CtzInt32); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'd': {
                    switch (op[8]) {
                      case 's':
                        if (op == "i32.div_s"sv) { return makeBinary(s, BinaryOp::DivSInt32); }
                        goto parse_error;
                      case 'u':
                        if (op == "i32.div_u"sv) { return makeBinary(s, BinaryOp::DivUInt32); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[5]) {
                      case 'q': {
                        switch (op[6]) {
                          case '\0':
                            if (op == "i32.eq"sv) { return makeBinary(s, BinaryOp::EqInt32); }
                            goto parse_error;
                          case 'z':
                            if (op == "i32.eqz"sv) { return makeUnary(s, UnaryOp::EqZInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'x': {
                        switch (op[10]) {
                          case '1':
                            if (op == "i32.extend16_s"sv) { return makeUnary(s, UnaryOp::ExtendS16Int32); }
                            goto parse_error;
                          case '8':
                            if (op == "i32.extend8_s"sv) { return makeUnary(s, UnaryOp::ExtendS8Int32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'g': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.ge_s"sv) { return makeBinary(s, BinaryOp::GeSInt32); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.ge_u"sv) { return makeBinary(s, BinaryOp::GeUInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.gt_s"sv) { return makeBinary(s, BinaryOp::GtSInt32); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.gt_u"sv) { return makeBinary(s, BinaryOp::GtUInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'l': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.le_s"sv) { return makeBinary(s, BinaryOp::LeSInt32); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.le_u"sv) { return makeBinary(s, BinaryOp::LeUInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'o': {
                        switch (op[8]) {
                          case '\0':
                            if (op == "i32.load"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/false); }
                            goto parse_error;
                          case '1': {
                            switch (op[11]) {
                              case 's':
                                if (op == "i32.load16_s"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/false); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load16_u"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[10]) {
                              case 's':
                                if (op == "i32.load8_s"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/false); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load8_u"sv) { return makeLoad(s, Type::i32, /*isAtomic=*/false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.lt_s"sv) { return makeBinary(s, BinaryOp::LtSInt32); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.lt_u"sv) { return makeBinary(s, BinaryOp::LtUInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm':
                    if (op == "i32.mul"sv) { return makeBinary(s, BinaryOp::MulInt32); }
                    goto parse_error;
                  case 'n':
                    if (op == "i32.ne"sv) { return makeBinary(s, BinaryOp::NeInt32); }
                    goto parse_error;
                  case 'o':
                    if (op == "i32.or"sv) { return makeBinary(s, BinaryOp::OrInt32); }
                    goto parse_error;
                  case 'p':
                    if (op == "i32.popcnt"sv) { return makeUnary(s, UnaryOp::PopcntInt32); }
                    goto parse_error;
                  case 'r': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[6]) {
                          case 'i':
                            if (op == "i32.reinterpret_f32"sv) { return makeUnary(s, UnaryOp::ReinterpretFloat32); }
                            goto parse_error;
                          case 'm': {
                            switch (op[8]) {
                              case 's':
                                if (op == "i32.rem_s"sv) { return makeBinary(s, BinaryOp::RemSInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.rem_u"sv) { return makeBinary(s, BinaryOp::RemUInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'o': {
                        switch (op[7]) {
                          case 'l':
                            if (op == "i32.rotl"sv) { return makeBinary(s, BinaryOp::RotLInt32); }
                            goto parse_error;
                          case 'r':
                            if (op == "i32.rotr"sv) { return makeBinary(s, BinaryOp::RotRInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[5]) {
                      case 'h': {
                        switch (op[6]) {
                          case 'l':
                            if (op == "i32.shl"sv) { return makeBinary(s, BinaryOp::ShlInt32); }
                            goto parse_error;
                          case 'r': {
                            switch (op[8]) {
                              case 's':
                                if (op == "i32.shr_s"sv) { return makeBinary(s, BinaryOp::ShrSInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.shr_u"sv) { return makeBinary(s, BinaryOp::ShrUInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case '\0':
                            if (op == "i32.store"sv) { return makeStore(s, Type::i32, /*isAtomic=*/false); }
                            goto parse_error;
                          case '1':
                            if (op == "i32.store16"sv) { return makeStore(s, Type::i32, /*isAtomic=*/false); }
                            goto parse_error;
                          case '8':
                            if (op == "i32.store8"sv) { return makeStore(s, Type::i32, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "i32.sub"sv) { return makeBinary(s, BinaryOp::SubInt32); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[10]) {
                      case 'f': {
                        switch (op[11]) {
                          case '3': {
                            switch (op[14]) {
                              case 's':
                                if (op == "i32.trunc_f32_s"sv) { return makeUnary(s, UnaryOp::TruncSFloat32ToInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f32_u"sv) { return makeUnary(s, UnaryOp::TruncUFloat32ToInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[14]) {
                              case 's':
                                if (op == "i32.trunc_f64_s"sv) { return makeUnary(s, UnaryOp::TruncSFloat64ToInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f64_u"sv) { return makeUnary(s, UnaryOp::TruncUFloat64ToInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (op[15]) {
                          case '3': {
                            switch (op[18]) {
                              case 's':
                                if (op == "i32.trunc_sat_f32_s"sv) { return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f32_u"sv) { return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[18]) {
                              case 's':
                                if (op == "i32.trunc_sat_f64_s"sv) { return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt32); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f64_u"sv) { return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt32); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'w':
                    if (op == "i32.wrap_i64"sv) { return makeUnary(s, UnaryOp::WrapInt64); }
                    goto parse_error;
                  case 'x':
                    if (op == "i32.xor"sv) { return makeBinary(s, BinaryOp::XorInt32); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[6]) {
                  case 'a': {
                    switch (op[7]) {
                      case 'b':
                        if (op == "i32x4.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI32x4); }
                        goto parse_error;
                      case 'd':
                        if (op == "i32x4.add"sv) { return makeBinary(s, BinaryOp::AddVecI32x4); }
                        goto parse_error;
                      case 'l':
                        if (op == "i32x4.all_true"sv) { return makeUnary(s, UnaryOp::AllTrueVecI32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'b':
                    if (op == "i32x4.bitmask"sv) { return makeUnary(s, UnaryOp::BitmaskVecI32x4); }
                    goto parse_error;
                  case 'd': {
                    switch (op[11]) {
                      case '1':
                        if (op == "i32x4.dot_i16x8_s"sv) { return makeBinary(s, BinaryOp::DotSVecI16x8ToVecI32x4); }
                        goto parse_error;
                      case '8':
                        if (op == "i32x4.dot_i8x16_i7x16_add_s"sv) { return makeSIMDTernary(s, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[7]) {
                      case 'q':
                        if (op == "i32x4.eq"sv) { return makeBinary(s, BinaryOp::EqVecI32x4); }
                        goto parse_error;
                      case 'x': {
                        switch (op[9]) {
                          case 'a': {
                            switch (op[28]) {
                              case 's':
                                if (op == "i32x4.extadd_pairwise_i16x8_s"sv) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.extadd_pairwise_i16x8_u"sv) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'e': {
                            switch (op[13]) {
                              case 'h': {
                                switch (op[24]) {
                                  case 's':
                                    if (op == "i32x4.extend_high_i16x8_s"sv) { return makeUnary(s, UnaryOp::ExtendHighSVecI16x8ToVecI32x4); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_high_i16x8_u"sv) { return makeUnary(s, UnaryOp::ExtendHighUVecI16x8ToVecI32x4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'l': {
                                switch (op[23]) {
                                  case 's':
                                    if (op == "i32x4.extend_low_i16x8_s"sv) { return makeUnary(s, UnaryOp::ExtendLowSVecI16x8ToVecI32x4); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_low_i16x8_u"sv) { return makeUnary(s, UnaryOp::ExtendLowUVecI16x8ToVecI32x4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 'm': {
                            switch (op[13]) {
                              case 'h': {
                                switch (op[24]) {
                                  case 's':
                                    if (op == "i32x4.extmul_high_i16x8_s"sv) { return makeBinary(s, BinaryOp::ExtMulHighSVecI32x4); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_high_i16x8_u"sv) { return makeBinary(s, BinaryOp::ExtMulHighUVecI32x4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'l': {
                                switch (op[23]) {
                                  case 's':
                                    if (op == "i32x4.extmul_low_i16x8_s"sv) { return makeBinary(s, BinaryOp::ExtMulLowSVecI32x4); }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_low_i16x8_u"sv) { return makeBinary(s, BinaryOp::ExtMulLowUVecI32x4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 'r':
                            if (op == "i32x4.extract_lane"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI32x4, 4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'g': {
                    switch (op[7]) {
                      case 'e': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.ge_s"sv) { return makeBinary(s, BinaryOp::GeSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.ge_u"sv) { return makeBinary(s, BinaryOp::GeUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.gt_s"sv) { return makeBinary(s, BinaryOp::GtSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.gt_u"sv) { return makeBinary(s, BinaryOp::GtUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'l': {
                    switch (op[7]) {
                      case 'a':
                        if (op == "i32x4.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI32x4); }
                        goto parse_error;
                      case 'e': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.le_s"sv) { return makeBinary(s, BinaryOp::LeSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.le_u"sv) { return makeBinary(s, BinaryOp::LeUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.lt_s"sv) { return makeBinary(s, BinaryOp::LtSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.lt_u"sv) { return makeBinary(s, BinaryOp::LtUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm': {
                    switch (op[7]) {
                      case 'a': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i32x4.max_s"sv) { return makeBinary(s, BinaryOp::MaxSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.max_u"sv) { return makeBinary(s, BinaryOp::MaxUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'i': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i32x4.min_s"sv) { return makeBinary(s, BinaryOp::MinSVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.min_u"sv) { return makeBinary(s, BinaryOp::MinUVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "i32x4.mul"sv) { return makeBinary(s, BinaryOp::MulVecI32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (op[8]) {
                      case '\0':
                        if (op == "i32x4.ne"sv) { return makeBinary(s, BinaryOp::NeVecI32x4); }
                        goto parse_error;
                      case 'g':
                        if (op == "i32x4.neg"sv) { return makeUnary(s, UnaryOp::NegVecI32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'r': {
                    switch (op[8]) {
                      case 'l': {
                        switch (op[21]) {
                          case '3': {
                            switch (op[26]) {
                              case 's':
                                if (op == "i32x4.relaxed_trunc_f32x4_s"sv) { return makeUnary(s, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f32x4_u"sv) { return makeUnary(s, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[26]) {
                              case 's':
                                if (op == "i32x4.relaxed_trunc_f64x2_s_zero"sv) { return makeUnary(s, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f64x2_u_zero"sv) { return makeUnary(s, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "i32x4.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI32x4, 4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[7]) {
                      case 'h': {
                        switch (op[8]) {
                          case 'l':
                            if (op == "i32x4.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4); }
                            goto parse_error;
                          case 'r': {
                            switch (op[10]) {
                              case 's':
                                if (op == "i32x4.shr_s"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI32x4); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.shr_u"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI32x4); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "i32x4.splat"sv) { return makeUnary(s, UnaryOp::SplatVecI32x4); }
                        goto parse_error;
                      case 'u':
                        if (op == "i32x4.sub"sv) { return makeBinary(s, BinaryOp::SubVecI32x4); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[17]) {
                      case '3': {
                        switch (op[22]) {
                          case 's':
                            if (op == "i32x4.trunc_sat_f32x4_s"sv) { return makeUnary(s, UnaryOp::TruncSatSVecF32x4ToVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f32x4_u"sv) { return makeUnary(s, UnaryOp::TruncSatUVecF32x4ToVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[22]) {
                          case 's':
                            if (op == "i32x4.trunc_sat_f64x2_s_zero"sv) { return makeUnary(s, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4); }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f64x2_u_zero"sv) { return makeUnary(s, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '6': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'd':
                    if (op == "i64.add"sv) { return makeBinary(s, BinaryOp::AddInt64); }
                    goto parse_error;
                  case 'n':
                    if (op == "i64.and"sv) { return makeBinary(s, BinaryOp::AndInt64); }
                    goto parse_error;
                  case 't': {
                    switch (op[11]) {
                      case 'l': {
                        switch (op[15]) {
                          case '\0':
                            if (op == "i64.atomic.load"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.load16_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.load32_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.load8_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'r': {
                        switch (op[14]) {
                          case '.': {
                            switch (op[15]) {
                              case 'a': {
                                switch (op[16]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw.add"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw.and"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw.cmpxchg"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw.or"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw.sub"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'x': {
                                switch (op[16]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw.xchg"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw.xor"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '1': {
                            switch (op[17]) {
                              case 'a': {
                                switch (op[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw16.add_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw16.and_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw16.cmpxchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw16.or_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw16.sub_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'x': {
                                switch (op[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw16.xchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw16.xor_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '3': {
                            switch (op[17]) {
                              case 'a': {
                                switch (op[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw32.add_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw32.and_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw32.cmpxchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw32.or_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw32.sub_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'x': {
                                switch (op[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw32.xchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw32.xor_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[16]) {
                              case 'a': {
                                switch (op[17]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw8.add_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw8.and_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw8.cmpxchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw8.or_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw8.sub_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                goto parse_error;
                              case 'x': {
                                switch (op[17]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw8.xchg_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw8.xor_u"sv) { return makeAtomicRMWOrCmpxchg(s, Type::i64); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (op[16]) {
                          case '\0':
                            if (op == "i64.atomic.store"sv) { return makeStore(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.store16"sv) { return makeStore(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.store32"sv) { return makeStore(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.store8"sv) { return makeStore(s, Type::i64, /*isAtomic=*/true); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'l':
                    if (op == "i64.clz"sv) { return makeUnary(s, UnaryOp::ClzInt64); }
                    goto parse_error;
                  case 'o':
                    if (op == "i64.const"sv) { return makeConst(s, Type::i64); }
                    goto parse_error;
                  case 't':
                    if (op == "i64.ctz"sv) { return makeUnary(s, UnaryOp::CtzInt64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[8]) {
                  case 's':
                    if (op == "i64.div_s"sv) { return makeBinary(s, BinaryOp::DivSInt64); }
                    goto parse_error;
                  case 'u':
                    if (op == "i64.div_u"sv) { return makeBinary(s, BinaryOp::DivUInt64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[5]) {
                  case 'q': {
                    switch (op[6]) {
                      case '\0':
                        if (op == "i64.eq"sv) { return makeBinary(s, BinaryOp::EqInt64); }
                        goto parse_error;
                      case 'z':
                        if (op == "i64.eqz"sv) { return makeUnary(s, UnaryOp::EqZInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'x': {
                    switch (op[10]) {
                      case '1':
                        if (op == "i64.extend16_s"sv) { return makeUnary(s, UnaryOp::ExtendS16Int64); }
                        goto parse_error;
                      case '3':
                        if (op == "i64.extend32_s"sv) { return makeUnary(s, UnaryOp::ExtendS32Int64); }
                        goto parse_error;
                      case '8':
                        if (op == "i64.extend8_s"sv) { return makeUnary(s, UnaryOp::ExtendS8Int64); }
                        goto parse_error;
                      case '_': {
                        switch (op[15]) {
                          case 's':
                            if (op == "i64.extend_i32_s"sv) { return makeUnary(s, UnaryOp::ExtendSInt32); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.extend_i32_u"sv) { return makeUnary(s, UnaryOp::ExtendUInt32); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'g': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.ge_s"sv) { return makeBinary(s, BinaryOp::GeSInt64); }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.ge_u"sv) { return makeBinary(s, BinaryOp::GeUInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.gt_s"sv) { return makeBinary(s, BinaryOp::GtSInt64); }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.gt_u"sv) { return makeBinary(s, BinaryOp::GtUInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.le_s"sv) { return makeBinary(s, BinaryOp::LeSInt64); }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.le_u"sv) { return makeBinary(s, BinaryOp::LeUInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'o': {
                    switch (op[8]) {
                      case '\0':
                        if (op == "i64.load"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                        goto parse_error;
                      case '1': {
                        switch (op[11]) {
                          case 's':
                            if (op == "i64.load16_s"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load16_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '3': {
                        switch (op[11]) {
                          case 's':
                            if (op == "i64.load32_s"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load32_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i64.load8_s"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load8_u"sv) { return makeLoad(s, Type::i64, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.lt_s"sv) { return makeBinary(s, BinaryOp::LtSInt64); }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.lt_u"sv) { return makeBinary(s, BinaryOp::LtUInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'm':
                if (op == "i64.mul"sv) { return makeBinary(s, BinaryOp::MulInt64); }
                goto parse_error;
              case 'n':
                if (op == "i64.ne"sv) { return makeBinary(s, BinaryOp::NeInt64); }
                goto parse_error;
              case 'o':
                if (op == "i64.or"sv) { return makeBinary(s, BinaryOp::OrInt64); }
                goto parse_error;
              case 'p':
                if (op == "i64.popcnt"sv) { return makeUnary(s, UnaryOp::PopcntInt64); }
                goto parse_error;
              case 'r': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[6]) {
                      case 'i':
                        if (op == "i64.reinterpret_f64"sv) { return makeUnary(s, UnaryOp::ReinterpretFloat64); }
                        goto parse_error;
                      case 'm': {
                        switch (op[8]) {
                          case 's':
                            if (op == "i64.rem_s"sv) { return makeBinary(s, BinaryOp::RemSInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.rem_u"sv) { return makeBinary(s, BinaryOp::RemUInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'o': {
                    switch (op[7]) {
                      case 'l':
                        if (op == "i64.rotl"sv) { return makeBinary(s, BinaryOp::RotLInt64); }
                        goto parse_error;
                      case 'r':
                        if (op == "i64.rotr"sv) { return makeBinary(s, BinaryOp::RotRInt64); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[5]) {
                  case 'h': {
                    switch (op[6]) {
                      case 'l':
                        if (op == "i64.shl"sv) { return makeBinary(s, BinaryOp::ShlInt64); }
                        goto parse_error;
                      case 'r': {
                        switch (op[8]) {
                          case 's':
                            if (op == "i64.shr_s"sv) { return makeBinary(s, BinaryOp::ShrSInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.shr_u"sv) { return makeBinary(s, BinaryOp::ShrUInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[9]) {
                      case '\0':
                        if (op == "i64.store"sv) { return makeStore(s, Type::i64, /*isAtomic=*/false); }
                        goto parse_error;
                      case '1':
                        if (op == "i64.store16"sv) { return makeStore(s, Type::i64, /*isAtomic=*/false); }
                        goto parse_error;
                      case '3':
                        if (op == "i64.store32"sv) { return makeStore(s, Type::i64, /*isAtomic=*/false); }
                        goto parse_error;
                      case '8':
                        if (op == "i64.store8"sv) { return makeStore(s, Type::i64, /*isAtomic=*/false); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "i64.sub"sv) { return makeBinary(s, BinaryOp::SubInt64); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[10]) {
                  case 'f': {
                    switch (op[11]) {
                      case '3': {
                        switch (op[14]) {
                          case 's':
                            if (op == "i64.trunc_f32_s"sv) { return makeUnary(s, UnaryOp::TruncSFloat32ToInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f32_u"sv) { return makeUnary(s, UnaryOp::TruncUFloat32ToInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[14]) {
                          case 's':
                            if (op == "i64.trunc_f64_s"sv) { return makeUnary(s, UnaryOp::TruncSFloat64ToInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f64_u"sv) { return makeUnary(s, UnaryOp::TruncUFloat64ToInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[15]) {
                      case '3': {
                        switch (op[18]) {
                          case 's':
                            if (op == "i64.trunc_sat_f32_s"sv) { return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f32_u"sv) { return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[18]) {
                          case 's':
                            if (op == "i64.trunc_sat_f64_s"sv) { return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f64_u"sv) { return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'x':
                if (op == "i64.xor"sv) { return makeBinary(s, BinaryOp::XorInt64); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "i64x2.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI64x2); }
                    goto parse_error;
                  case 'd':
                    if (op == "i64x2.add"sv) { return makeBinary(s, BinaryOp::AddVecI64x2); }
                    goto parse_error;
                  case 'l':
                    if (op == "i64x2.all_true"sv) { return makeUnary(s, UnaryOp::AllTrueVecI64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'b':
                if (op == "i64x2.bitmask"sv) { return makeUnary(s, UnaryOp::BitmaskVecI64x2); }
                goto parse_error;
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "i64x2.eq"sv) { return makeBinary(s, BinaryOp::EqVecI64x2); }
                    goto parse_error;
                  case 'x': {
                    switch (op[9]) {
                      case 'e': {
                        switch (op[13]) {
                          case 'h': {
                            switch (op[24]) {
                              case 's':
                                if (op == "i64x2.extend_high_i32x4_s"sv) { return makeUnary(s, UnaryOp::ExtendHighSVecI32x4ToVecI64x2); }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_high_i32x4_u"sv) { return makeUnary(s, UnaryOp::ExtendHighUVecI32x4ToVecI64x2); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'l': {
                            switch (op[23]) {
                              case 's':
                                if (op == "i64x2.extend_low_i32x4_s"sv) { return makeUnary(s, UnaryOp::ExtendLowSVecI32x4ToVecI64x2); }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_low_i32x4_u"sv) { return makeUnary(s, UnaryOp::ExtendLowUVecI32x4ToVecI64x2); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[13]) {
                          case 'h': {
                            switch (op[24]) {
                              case 's':
                                if (op == "i64x2.extmul_high_i32x4_s"sv) { return makeBinary(s, BinaryOp::ExtMulHighSVecI64x2); }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_high_i32x4_u"sv) { return makeBinary(s, BinaryOp::ExtMulHighUVecI64x2); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'l': {
                            switch (op[23]) {
                              case 's':
                                if (op == "i64x2.extmul_low_i32x4_s"sv) { return makeBinary(s, BinaryOp::ExtMulLowSVecI64x2); }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_low_i32x4_u"sv) { return makeBinary(s, BinaryOp::ExtMulLowUVecI64x2); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'r':
                        if (op == "i64x2.extract_lane"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI64x2, 2); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "i64x2.ge_s"sv) { return makeBinary(s, BinaryOp::GeSVecI64x2); }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.gt_s"sv) { return makeBinary(s, BinaryOp::GtSVecI64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'a':
                    if (op == "i64x2.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI64x2); }
                    goto parse_error;
                  case 'e':
                    if (op == "i64x2.le_s"sv) { return makeBinary(s, BinaryOp::LeSVecI64x2); }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.lt_s"sv) { return makeBinary(s, BinaryOp::LtSVecI64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm':
                if (op == "i64x2.mul"sv) { return makeBinary(s, BinaryOp::MulVecI64x2); }
                goto parse_error;
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i64x2.ne"sv) { return makeBinary(s, BinaryOp::NeVecI64x2); }
                    goto parse_error;
                  case 'g':
                    if (op == "i64x2.neg"sv) { return makeUnary(s, UnaryOp::NegVecI64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "i64x2.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI64x2, 2); }
                goto parse_error;
              case 's': {
                switch (op[7]) {
                  case 'h': {
                    switch (op[8]) {
                      case 'l':
                        if (op == "i64x2.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2); }
                        goto parse_error;
                      case 'r': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i64x2.shr_s"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64x2.shr_u"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI64x2); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "i64x2.splat"sv) { return makeUnary(s, UnaryOp::SplatVecI64x2); }
                    goto parse_error;
                  case 'u':
                    if (op == "i64x2.sub"sv) { return makeBinary(s, BinaryOp::SubVecI64x2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '8': {
        switch (op[6]) {
          case 'a': {
            switch (op[7]) {
              case 'b':
                if (op == "i8x16.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI8x16); }
                goto parse_error;
              case 'd': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i8x16.add"sv) { return makeBinary(s, BinaryOp::AddVecI8x16); }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i8x16.add_sat_s"sv) { return makeBinary(s, BinaryOp::AddSatSVecI8x16); }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.add_sat_u"sv) { return makeBinary(s, BinaryOp::AddSatUVecI8x16); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l':
                if (op == "i8x16.all_true"sv) { return makeUnary(s, UnaryOp::AllTrueVecI8x16); }
                goto parse_error;
              case 'v':
                if (op == "i8x16.avgr_u"sv) { return makeBinary(s, BinaryOp::AvgrUVecI8x16); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i8x16.bitmask"sv) { return makeUnary(s, UnaryOp::BitmaskVecI8x16); }
            goto parse_error;
          case 'e': {
            switch (op[7]) {
              case 'q':
                if (op == "i8x16.eq"sv) { return makeBinary(s, BinaryOp::EqVecI8x16); }
                goto parse_error;
              case 'x': {
                switch (op[19]) {
                  case 's':
                    if (op == "i8x16.extract_lane_s"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI8x16, 16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.extract_lane_u"sv) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI8x16, 16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'g': {
            switch (op[7]) {
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.ge_s"sv) { return makeBinary(s, BinaryOp::GeSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.ge_u"sv) { return makeBinary(s, BinaryOp::GeUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.gt_s"sv) { return makeBinary(s, BinaryOp::GtSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.gt_u"sv) { return makeBinary(s, BinaryOp::GtUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'l': {
            switch (op[7]) {
              case 'a':
                if (op == "i8x16.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI8x16); }
                goto parse_error;
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.le_s"sv) { return makeBinary(s, BinaryOp::LeSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.le_u"sv) { return makeBinary(s, BinaryOp::LeUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.lt_s"sv) { return makeBinary(s, BinaryOp::LtSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.lt_u"sv) { return makeBinary(s, BinaryOp::LtUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'm': {
            switch (op[7]) {
              case 'a': {
                switch (op[10]) {
                  case 's':
                    if (op == "i8x16.max_s"sv) { return makeBinary(s, BinaryOp::MaxSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.max_u"sv) { return makeBinary(s, BinaryOp::MaxUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'i': {
                switch (op[10]) {
                  case 's':
                    if (op == "i8x16.min_s"sv) { return makeBinary(s, BinaryOp::MinSVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.min_u"sv) { return makeBinary(s, BinaryOp::MinUVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'n': {
            switch (op[7]) {
              case 'a': {
                switch (op[19]) {
                  case 's':
                    if (op == "i8x16.narrow_i16x8_s"sv) { return makeBinary(s, BinaryOp::NarrowSVecI16x8ToVecI8x16); }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.narrow_i16x8_u"sv) { return makeBinary(s, BinaryOp::NarrowUVecI16x8ToVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i8x16.ne"sv) { return makeBinary(s, BinaryOp::NeVecI8x16); }
                    goto parse_error;
                  case 'g':
                    if (op == "i8x16.neg"sv) { return makeUnary(s, UnaryOp::NegVecI8x16); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'p':
            if (op == "i8x16.popcnt"sv) { return makeUnary(s, UnaryOp::PopcntVecI8x16); }
            goto parse_error;
          case 'r': {
            switch (op[8]) {
              case 'l':
                if (op == "i8x16.relaxed_swizzle"sv) { return makeBinary(s, BinaryOp::RelaxedSwizzleVecI8x16); }
                goto parse_error;
              case 'p':
                if (op == "i8x16.replace_lane"sv) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI8x16, 16); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'h': {
                switch (op[8]) {
                  case 'l':
                    if (op == "i8x16.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16); }
                    goto parse_error;
                  case 'r': {
                    switch (op[10]) {
                      case 's':
                        if (op == "i8x16.shr_s"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI8x16); }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.shr_u"sv) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI8x16); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "i8x16.shuffle"sv) { return makeSIMDShuffle(s); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "i8x16.splat"sv) { return makeUnary(s, UnaryOp::SplatVecI8x16); }
                goto parse_error;
              case 'u': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i8x16.sub"sv) { return makeBinary(s, BinaryOp::SubVecI8x16); }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i8x16.sub_sat_s"sv) { return makeBinary(s, BinaryOp::SubSatSVecI8x16); }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.sub_sat_u"sv) { return makeBinary(s, BinaryOp::SubSatUVecI8x16); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'w':
                if (op == "i8x16.swizzle"sv) { return makeBinary(s, BinaryOp::SwizzleVecI8x16); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'f':
        if (op == "if"sv) { return makeIf(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'l': {
    switch (op[2]) {
      case 'c': {
        switch (op[6]) {
          case 'g':
            if (op == "local.get"sv) { return makeLocalGet(s); }
            goto parse_error;
          case 's':
            if (op == "local.set"sv) { return makeLocalSet(s); }
            goto parse_error;
          case 't':
            if (op == "local.tee"sv) { return makeLocalTee(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'o':
        if (op == "loop"sv) { return makeLoop(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'm': {
    switch (op[7]) {
      case 'a': {
        switch (op[14]) {
          case 'n':
            if (op == "memory.atomic.notify"sv) { return makeAtomicNotify(s); }
            goto parse_error;
          case 'w': {
            switch (op[18]) {
              case '3':
                if (op == "memory.atomic.wait32"sv) { return makeAtomicWait(s, Type::i32); }
                goto parse_error;
              case '6':
                if (op == "memory.atomic.wait64"sv) { return makeAtomicWait(s, Type::i64); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'c':
        if (op == "memory.copy"sv) { return makeMemoryCopy(s); }
        goto parse_error;
      case 'f':
        if (op == "memory.fill"sv) { return makeMemoryFill(s); }
        goto parse_error;
      case 'g':
        if (op == "memory.grow"sv) { return makeMemoryGrow(s); }
        goto parse_error;
      case 'i':
        if (op == "memory.init"sv) { return makeMemoryInit(s); }
        goto parse_error;
      case 's':
        if (op == "memory.size"sv) { return makeMemorySize(s); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'n':
    if (op == "nop"sv) { return makeNop(); }
    goto parse_error;
  case 'p':
    if (op == "pop"sv) { return makePop(s); }
    goto parse_error;
  case 'r': {
    switch (op[2]) {
      case 'f': {
        switch (op[4]) {
          case 'a': {
            switch (op[7]) {
              case 'd':
                if (op == "ref.as_data"sv) { return makeRefAs(s, RefAsData); }
                goto parse_error;
              case 'f':
                if (op == "ref.as_func"sv) { return makeRefAs(s, RefAsFunc); }
                goto parse_error;
              case 'i':
                if (op == "ref.as_i31"sv) { return makeRefAs(s, RefAsI31); }
                goto parse_error;
              case 'n':
                if (op == "ref.as_non_null"sv) { return makeRefAs(s, RefAsNonNull); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'c': {
            switch (op[9]) {
              case 'n':
                if (op == "ref.cast_nop_static"sv) { return makeRefCastNopStatic(s); }
                goto parse_error;
              case 's':
                if (op == "ref.cast_static"sv) { return makeRefCastStatic(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'e':
            if (op == "ref.eq"sv) { return makeRefEq(s); }
            goto parse_error;
          case 'f':
            if (op == "ref.func"sv) { return makeRefFunc(s); }
            goto parse_error;
          case 'i': {
            switch (op[7]) {
              case 'd':
                if (op == "ref.is_data"sv) { return makeRefIs(s, RefIsData); }
                goto parse_error;
              case 'f':
                if (op == "ref.is_func"sv) { return makeRefIs(s, RefIsFunc); }
                goto parse_error;
              case 'i':
                if (op == "ref.is_i31"sv) { return makeRefIs(s, RefIsI31); }
                goto parse_error;
              case 'n':
                if (op == "ref.is_null"sv) { return makeRefIs(s, RefIsNull); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n':
            if (op == "ref.null"sv) { return makeRefNull(s); }
            goto parse_error;
          case 't':
            if (op == "ref.test_static"sv) { return makeRefTestStatic(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't': {
        switch (op[3]) {
          case 'h':
            if (op == "rethrow"sv) { return makeRethrow(s); }
            goto parse_error;
          case 'u': {
            switch (op[6]) {
              case '\0':
                if (op == "return"sv) { return makeReturn(s); }
                goto parse_error;
              case '_': {
                switch (op[11]) {
                  case '\0':
                    if (op == "return_call"sv) { return makeCall(s, /*isReturn=*/true); }
                    goto parse_error;
                  case '_': {
                    switch (op[12]) {
                      case 'i':
                        if (op == "return_call_indirect"sv) { return makeCallIndirect(s, /*isReturn=*/true); }
                        goto parse_error;
                      case 'r':
                        if (op == "return_call_ref"sv) { return makeCallRef(s, /*isReturn=*/true); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 's': {
    switch (op[1]) {
      case 'e':
        if (op == "select"sv) { return makeSelect(s); }
        goto parse_error;
      case 't': {
        switch (op[3]) {
          case 'i': {
            switch (op[6]) {
              case '.': {
                switch (op[7]) {
                  case 'a': {
                    switch (op[10]) {
                      case 'i':
                        if (op == "string.as_iter"sv) { return makeStringAs(s, StringAsIter); }
                        goto parse_error;
                      case 'w': {
                        switch (op[13]) {
                          case '1':
                            if (op == "string.as_wtf16"sv) { return makeStringAs(s, StringAsWTF16); }
                            goto parse_error;
                          case '8':
                            if (op == "string.as_wtf8"sv) { return makeStringAs(s, StringAsWTF8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'c': {
                    switch (op[10]) {
                      case 'c':
                        if (op == "string.concat"sv) { return makeStringConcat(s); }
                        goto parse_error;
                      case 's':
                        if (op == "string.const"sv) { return makeStringConst(s); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[8]) {
                      case 'n': {
                        switch (op[17]) {
                          case '1': {
                            switch (op[19]) {
                              case '\0':
                                if (op == "string.encode_wtf16"sv) { return makeStringEncode(s, StringEncodeWTF16); }
                                goto parse_error;
                              case '_':
                                if (op == "string.encode_wtf16_array"sv) { return makeStringEncode(s, StringEncodeWTF16Array); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[18]) {
                              case '\0':
                                if (op == "string.encode_wtf8"sv) { return makeStringEncode(s, StringEncodeWTF8); }
                                goto parse_error;
                              case '_':
                                if (op == "string.encode_wtf8_array"sv) { return makeStringEncode(s, StringEncodeWTF8Array); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'q':
                        if (op == "string.eq"sv) { return makeStringEq(s); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'i':
                    if (op == "string.is_usv_sequence"sv) { return makeStringMeasure(s, StringMeasureIsUSV); }
                    goto parse_error;
                  case 'm': {
                    switch (op[18]) {
                      case '1':
                        if (op == "string.measure_wtf16"sv) { return makeStringMeasure(s, StringMeasureWTF16); }
                        goto parse_error;
                      case '8':
                        if (op == "string.measure_wtf8"sv) { return makeStringMeasure(s, StringMeasureWTF8); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (op[14]) {
                      case '1': {
                        switch (op[16]) {
                          case '\0':
                            if (op == "string.new_wtf16"sv) { return makeStringNew(s, StringNewWTF16); }
                            goto parse_error;
                          case '_':
                            if (op == "string.new_wtf16_array"sv) { return makeStringNew(s, StringNewWTF16Array); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[15]) {
                          case '\0':
                            if (op == "string.new_wtf8"sv) { return makeStringNew(s, StringNewWTF8); }
                            goto parse_error;
                          case '_':
                            if (op == "string.new_wtf8_array"sv) { return makeStringNew(s, StringNewWTF8Array); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'v': {
                switch (op[11]) {
                  case 'i': {
                    switch (op[16]) {
                      case 'a':
                        if (op == "stringview_iter.advance"sv) { return makeStringIterMove(s, StringIterMoveAdvance); }
                        goto parse_error;
                      case 'n':
                        if (op == "stringview_iter.next"sv) { return makeStringIterNext(s); }
                        goto parse_error;
                      case 'r':
                        if (op == "stringview_iter.rewind"sv) { return makeStringIterMove(s, StringIterMoveRewind); }
                        goto parse_error;
                      case 's':
                        if (op == "stringview_iter.slice"sv) { return makeStringSliceIter(s); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'w': {
                    switch (op[14]) {
                      case '1': {
                        switch (op[17]) {
                          case 'g':
                            if (op == "stringview_wtf16.get_codeunit"sv) { return makeStringWTF16Get(s); }
                            goto parse_error;
                          case 'l':
                            if (op == "stringview_wtf16.length"sv) { return makeStringMeasure(s, StringMeasureWTF16View); }
                            goto parse_error;
                          case 's':
                            if (op == "stringview_wtf16.slice"sv) { return makeStringSliceWTF(s, StringSliceWTF16); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "stringview_wtf8.advance"sv) { return makeStringWTF8Advance(s); }
                            goto parse_error;
                          case 's':
                            if (op == "stringview_wtf8.slice"sv) { return makeStringSliceWTF(s, StringSliceWTF8); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'u': {
            switch (op[7]) {
              case 'g': {
                switch (op[10]) {
                  case '\0':
                    if (op == "struct.get"sv) { return makeStructGet(s); }
                    goto parse_error;
                  case '_': {
                    switch (op[11]) {
                      case 's':
                        if (op == "struct.get_s"sv) { return makeStructGet(s, true); }
                        goto parse_error;
                      case 'u':
                        if (op == "struct.get_u"sv) { return makeStructGet(s, false); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[10]) {
                  case '\0':
                    if (op == "struct.new"sv) { return makeStructNewStatic(s, false); }
                    goto parse_error;
                  case '_':
                    if (op == "struct.new_default"sv) { return makeStructNewStatic(s, true); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's':
                if (op == "struct.set"sv) { return makeStructSet(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 't': {
    switch (op[1]) {
      case 'a': {
        switch (op[6]) {
          case 'g': {
            switch (op[7]) {
              case 'e':
                if (op == "table.get"sv) { return makeTableGet(s); }
                goto parse_error;
              case 'r':
                if (op == "table.grow"sv) { return makeTableGrow(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'e':
                if (op == "table.set"sv) { return makeTableSet(s); }
                goto parse_error;
              case 'i':
                if (op == "table.size"sv) { return makeTableSize(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'h': {
        switch (op[2]) {
          case 'e':
            if (op == "then"sv) { return makeThenOrElse(s); }
            goto parse_error;
          case 'r':
            if (op == "throw"sv) { return makeThrow(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'r':
        if (op == "try"sv) { return makeTry(s); }
        goto parse_error;
      case 'u': {
        switch (op[6]) {
          case 'e':
            if (op == "tuple.extract"sv) { return makeTupleExtract(s); }
            goto parse_error;
          case 'm':
            if (op == "tuple.make"sv) { return makeTupleMake(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'u':
    if (op == "unreachable"sv) { return makeUnreachable(); }
    goto parse_error;
  case 'v': {
    switch (op[5]) {
      case 'a': {
        switch (op[7]) {
          case 'd': {
            switch (op[8]) {
              case '\0':
                if (op == "v128.and"sv) { return makeBinary(s, BinaryOp::AndVec128); }
                goto parse_error;
              case 'n':
                if (op == "v128.andnot"sv) { return makeBinary(s, BinaryOp::AndNotVec128); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'y':
            if (op == "v128.any_true"sv) { return makeUnary(s, UnaryOp::AnyTrueVec128); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'b':
        if (op == "v128.bitselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::Bitselect); }
        goto parse_error;
      case 'c':
        if (op == "v128.const"sv) { return makeConst(s, Type::v128); }
        goto parse_error;
      case 'l': {
        switch (op[9]) {
          case '\0':
            if (op == "v128.load"sv) { return makeLoad(s, Type::v128, /*isAtomic=*/false); }
            goto parse_error;
          case '1': {
            switch (op[11]) {
              case '_': {
                switch (op[12]) {
                  case 'l':
                    if (op == "v128.load16_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load16LaneVec128); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load16_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16SplatVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[14]) {
                  case 's':
                    if (op == "v128.load16x4_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4SVec128); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load16x4_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4UVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '3': {
            switch (op[11]) {
              case '_': {
                switch (op[12]) {
                  case 'l':
                    if (op == "v128.load32_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load32LaneVec128); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load32_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32SplatVec128); }
                    goto parse_error;
                  case 'z':
                    if (op == "v128.load32_zero"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32ZeroVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[14]) {
                  case 's':
                    if (op == "v128.load32x2_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2SVec128); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load32x2_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2UVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '6': {
            switch (op[12]) {
              case 'l':
                if (op == "v128.load64_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load64LaneVec128); }
                goto parse_error;
              case 's':
                if (op == "v128.load64_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load64SplatVec128); }
                goto parse_error;
              case 'z':
                if (op == "v128.load64_zero"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load64ZeroVec128); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '8': {
            switch (op[10]) {
              case '_': {
                switch (op[11]) {
                  case 'l':
                    if (op == "v128.load8_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load8LaneVec128); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load8_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8SplatVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[13]) {
                  case 's':
                    if (op == "v128.load8x8_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8SVec128); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load8x8_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8UVec128); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'n':
        if (op == "v128.not"sv) { return makeUnary(s, UnaryOp::NotVec128); }
        goto parse_error;
      case 'o':
        if (op == "v128.or"sv) { return makeBinary(s, BinaryOp::OrVec128); }
        goto parse_error;
      case 's': {
        switch (op[10]) {
          case '\0':
            if (op == "v128.store"sv) { return makeStore(s, Type::v128, /*isAtomic=*/false); }
            goto parse_error;
          case '1':
            if (op == "v128.store16_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store16LaneVec128); }
            goto parse_error;
          case '3':
            if (op == "v128.store32_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store32LaneVec128); }
            goto parse_error;
          case '6':
            if (op == "v128.store64_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store64LaneVec128); }
            goto parse_error;
          case '8':
            if (op == "v128.store8_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store8LaneVec128); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'x':
        if (op == "v128.xor"sv) { return makeBinary(s, BinaryOp::XorVec128); }
        goto parse_error;
      default: goto parse_error;
    }
  }
  default: goto parse_error;
}
parse_error:
  throw ParseException(std::string(op), s.line, s.col);
#endif // INSTRUCTION_PARSER

#ifdef NEW_INSTRUCTION_PARSER
#undef NEW_INSTRUCTION_PARSER
switch (op[0]) {
  case 'a': {
    switch (op[1]) {
      case 'r': {
        switch (op[6]) {
          case 'c':
            if (op == "array.copy"sv) {
              auto ret = makeArrayCopy(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'g': {
            switch (op[9]) {
              case '\0':
                if (op == "array.get"sv) {
                  auto ret = makeArrayGet(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_': {
                switch (op[10]) {
                  case 's':
                    if (op == "array.get_s"sv) {
                      auto ret = makeArrayGet(ctx, pos, true);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "array.get_u"sv) {
                      auto ret = makeArrayGet(ctx, pos, false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'i':
            if (op == "array.init_static"sv) {
              auto ret = makeArrayInitStatic(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'l':
            if (op == "array.len"sv) {
              auto ret = makeArrayLen(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'n': {
            switch (op[9]) {
              case '\0':
                if (op == "array.new"sv) {
                  auto ret = makeArrayNewStatic(ctx, pos, false);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_':
                if (op == "array.new_default"sv) {
                  auto ret = makeArrayNewStatic(ctx, pos, true);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's':
            if (op == "array.set"sv) {
              auto ret = makeArraySet(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't':
        if (op == "atomic.fence"sv) {
          auto ret = makeAtomicFence(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'b': {
    switch (op[1]) {
      case 'l':
        if (op == "block"sv) {
          auto ret = makeBlock(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'r': {
        switch (op[2]) {
          case '\0':
            if (op == "br"sv) {
              auto ret = makeBreak(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '_': {
            switch (op[3]) {
              case 'i':
                if (op == "br_if"sv) {
                  auto ret = makeBreak(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'o': {
                switch (op[6]) {
                  case 'c': {
                    switch (op[10]) {
                      case '\0':
                        if (op == "br_on_cast"sv) {
                          auto ret = makeBrOn(ctx, pos, BrOnCast);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '_': {
                        switch (op[11]) {
                          case 'f':
                            if (op == "br_on_cast_fail"sv) {
                              auto ret = makeBrOn(ctx, pos, BrOnCastFail);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 's': {
                            switch (op[17]) {
                              case '\0':
                                if (op == "br_on_cast_static"sv) {
                                  auto ret = makeBrOnStatic(ctx, pos, BrOnCast);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '_':
                                if (op == "br_on_cast_static_fail"sv) {
                                  auto ret = makeBrOnStatic(ctx, pos, BrOnCastFail);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'd':
                    if (op == "br_on_data"sv) {
                      auto ret = makeBrOn(ctx, pos, BrOnData);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'f':
                    if (op == "br_on_func"sv) {
                      auto ret = makeBrOn(ctx, pos, BrOnFunc);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "br_on_i31"sv) {
                      auto ret = makeBrOn(ctx, pos, BrOnI31);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'n': {
                    switch (op[7]) {
                      case 'o': {
                        switch (op[10]) {
                          case 'd':
                            if (op == "br_on_non_data"sv) {
                              auto ret = makeBrOn(ctx, pos, BrOnNonData);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'f':
                            if (op == "br_on_non_func"sv) {
                              auto ret = makeBrOn(ctx, pos, BrOnNonFunc);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'i':
                            if (op == "br_on_non_i31"sv) {
                              auto ret = makeBrOn(ctx, pos, BrOnNonI31);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'n':
                            if (op == "br_on_non_null"sv) {
                              auto ret = makeBrOn(ctx, pos, BrOnNonNull);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "br_on_null"sv) {
                          auto ret = makeBrOn(ctx, pos, BrOnNull);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "br_table"sv) {
                  auto ret = makeBreakTable(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'c': {
    switch (op[4]) {
      case '\0':
        if (op == "call"sv) {
          auto ret = makeCall(ctx, pos, /*isReturn=*/false);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case '_': {
        switch (op[5]) {
          case 'i':
            if (op == "call_indirect"sv) {
              auto ret = makeCallIndirect(ctx, pos, /*isReturn=*/false);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'r':
            if (op == "call_ref"sv) {
              auto ret = makeCallRef(ctx, pos, /*isReturn=*/false);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'd': {
    switch (op[1]) {
      case 'a':
        if (op == "data.drop"sv) {
          auto ret = makeDataDrop(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'r':
        if (op == "drop"sv) {
          auto ret = makeDrop(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'e': {
    switch (op[1]) {
      case 'l':
        if (op == "else"sv) {
          auto ret = makeThenOrElse(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'x': {
        switch (op[7]) {
          case 'e':
            if (op == "extern.externalize"sv) {
              auto ret = makeRefAs(ctx, pos, ExternExternalize);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'i':
            if (op == "extern.internalize"sv) {
              auto ret = makeRefAs(ctx, pos, ExternInternalize);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'f': {
    switch (op[1]) {
      case '3': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'b':
                    if (op == "f32.abs"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AbsFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f32.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.ceil"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::CeilFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o': {
                    switch (op[6]) {
                      case 'n': {
                        switch (op[7]) {
                          case 's':
                            if (op == "f32.const"sv) {
                              auto ret = makeConst(ctx, pos, Type::f32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'v': {
                            switch (op[13]) {
                              case '3': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f32.convert_i32_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertSInt32ToFloat32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i32_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertUInt32ToFloat32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case '6': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f32.convert_i64_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertSInt64ToFloat32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i64_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertUInt64ToFloat32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "f32.copysign"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::CopySignFloat32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.demote_f64"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::DemoteFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.div"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::DivFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e':
                if (op == "f32.eq"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::EqFloat32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'f':
                if (op == "f32.floor"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::FloorFloat32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'g': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.ge"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32.gt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f32.le"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "f32.load"sv) {
                      auto ret = makeLoad(ctx, pos, Type::f32, /*isAtomic=*/false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32.lt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[5]) {
                  case 'a':
                    if (op == "f32.max"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.min"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32.mul"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MulFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[6]) {
                  case '\0':
                    if (op == "f32.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f32.nearest"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NearestFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f32.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "f32.reinterpret_i32"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::ReinterpretInt32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's': {
                switch (op[5]) {
                  case 'q':
                    if (op == "f32.sqrt"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SqrtFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32.store"sv) {
                      auto ret = makeStore(ctx, pos, Type::f32, /*isAtomic=*/false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubFloat32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32.trunc"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncFloat32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "f32x4.abs"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f32x4.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.ceil"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::CeilVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o': {
                    switch (op[20]) {
                      case 's':
                        if (op == "f32x4.convert_i32x4_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ConvertSVecI32x4ToVecF32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "f32x4.convert_i32x4_u"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ConvertUVecI32x4ToVecF32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.demote_f64x2_zero"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::DemoteZeroVecF64x2ToVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.div"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::DivVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "f32x4.eq"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::EqVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "f32x4.extract_lane"sv) {
                      auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecF32x4, 4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f32x4.floor"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::FloorVecF32x4);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.ge"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.gt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f32x4.le"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.lt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[7]) {
                  case 'a':
                    if (op == "f32x4.max"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.min"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.mul"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MulVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "f32x4.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f32x4.nearest"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NearestVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f32x4.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p': {
                switch (op[8]) {
                  case 'a':
                    if (op == "f32x4.pmax"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::PMaxVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.pmin"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::PMinVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (op[8]) {
                  case 'l': {
                    switch (op[14]) {
                      case 'f': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "f32x4.relaxed_fma"sv) {
                              auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmaVecF32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 's':
                            if (op == "f32x4.relaxed_fms"sv) {
                              auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmsVecF32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[15]) {
                          case 'a':
                            if (op == "f32x4.relaxed_max"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedMaxVecF32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'i':
                            if (op == "f32x4.relaxed_min"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedMinVecF32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f32x4.replace_lane"sv) {
                      auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecF32x4, 4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[7]) {
                  case 'p':
                    if (op == "f32x4.splat"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'q':
                    if (op == "f32x4.sqrt"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SqrtVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubVecF32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32x4.trunc"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncVecF32x4);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '6': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'b':
                    if (op == "f64.abs"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AbsFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f64.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.ceil"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::CeilFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o': {
                    switch (op[6]) {
                      case 'n': {
                        switch (op[7]) {
                          case 's':
                            if (op == "f64.const"sv) {
                              auto ret = makeConst(ctx, pos, Type::f64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'v': {
                            switch (op[13]) {
                              case '3': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f64.convert_i32_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertSInt32ToFloat64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i32_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertUInt32ToFloat64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case '6': {
                                switch (op[16]) {
                                  case 's':
                                    if (op == "f64.convert_i64_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertSInt64ToFloat64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i64_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ConvertUInt64ToFloat64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "f64.copysign"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::CopySignFloat64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd':
                if (op == "f64.div"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::DivFloat64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e':
                if (op == "f64.eq"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::EqFloat64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'f':
                if (op == "f64.floor"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::FloorFloat64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'g': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.ge"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.gt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e':
                    if (op == "f64.le"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "f64.load"sv) {
                      auto ret = makeLoad(ctx, pos, Type::f64, /*isAtomic=*/false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.lt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[5]) {
                  case 'a':
                    if (op == "f64.max"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f64.min"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.mul"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MulFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[6]) {
                  case '\0':
                    if (op == "f64.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f64.nearest"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NearestFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f64.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "f64.promote_f32"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::PromoteFloat32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'r':
                if (op == "f64.reinterpret_i64"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::ReinterpretInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's': {
                switch (op[5]) {
                  case 'q':
                    if (op == "f64.sqrt"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SqrtFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.store"sv) {
                      auto ret = makeStore(ctx, pos, Type::f64, /*isAtomic=*/false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubFloat64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64.trunc"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncFloat64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "f64x2.abs"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f64x2.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.ceil"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::CeilVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o': {
                    switch (op[24]) {
                      case 's':
                        if (op == "f64x2.convert_low_i32x4_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ConvertLowSVecI32x4ToVecF64x2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "f64x2.convert_low_i32x4_u"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ConvertLowUVecI32x4ToVecF64x2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'd':
                if (op == "f64x2.div"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::DivVecF64x2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "f64x2.eq"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::EqVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "f64x2.extract_lane"sv) {
                      auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecF64x2, 2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f64x2.floor"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::FloorVecF64x2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.ge"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.gt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'e':
                    if (op == "f64x2.le"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.lt"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm': {
                switch (op[7]) {
                  case 'a':
                    if (op == "f64x2.max"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f64x2.min"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.mul"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MulVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "f64x2.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f64x2.nearest"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NearestVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f64x2.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p': {
                switch (op[7]) {
                  case 'm': {
                    switch (op[8]) {
                      case 'a':
                        if (op == "f64x2.pmax"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::PMaxVecF64x2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'i':
                        if (op == "f64x2.pmin"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::PMinVecF64x2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'r':
                    if (op == "f64x2.promote_low_f32x4"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::PromoteLowVecF32x4ToVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (op[8]) {
                  case 'l': {
                    switch (op[14]) {
                      case 'f': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "f64x2.relaxed_fma"sv) {
                              auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmaVecF64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 's':
                            if (op == "f64x2.relaxed_fms"sv) {
                              auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmsVecF64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[15]) {
                          case 'a':
                            if (op == "f64x2.relaxed_max"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedMaxVecF64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'i':
                            if (op == "f64x2.relaxed_min"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedMinVecF64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f64x2.replace_lane"sv) {
                      auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecF64x2, 2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[7]) {
                  case 'p':
                    if (op == "f64x2.splat"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'q':
                    if (op == "f64x2.sqrt"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SqrtVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubVecF64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64x2.trunc"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncVecF64x2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'g': {
    switch (op[7]) {
      case 'g':
        if (op == "global.get"sv) {
          auto ret = makeGlobalGet(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 's':
        if (op == "global.set"sv) {
          auto ret = makeGlobalSet(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'i': {
    switch (op[1]) {
      case '1': {
        switch (op[6]) {
          case 'a': {
            switch (op[7]) {
              case 'b':
                if (op == "i16x8.abs"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'd': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i16x8.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i16x8.add_sat_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddSatSVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.add_sat_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddSatUVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l':
                if (op == "i16x8.all_true"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::AllTrueVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'v':
                if (op == "i16x8.avgr_u"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::AvgrUVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i16x8.bitmask"sv) {
              auto ret = makeUnary(ctx, pos, UnaryOp::BitmaskVecI16x8);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'd':
            if (op == "i16x8.dot_i8x16_i7x16_s"sv) {
              auto ret = makeBinary(ctx, pos, BinaryOp::DotI8x16I7x16SToVecI16x8);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'e': {
            switch (op[7]) {
              case 'q':
                if (op == "i16x8.eq"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::EqVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'x': {
                switch (op[9]) {
                  case 'a': {
                    switch (op[28]) {
                      case 's':
                        if (op == "i16x8.extadd_pairwise_i8x16_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extadd_pairwise_i8x16_u"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[13]) {
                      case 'h': {
                        switch (op[24]) {
                          case 's':
                            if (op == "i16x8.extend_high_i8x16_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI8x16ToVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_high_i8x16_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI8x16ToVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'l': {
                        switch (op[23]) {
                          case 's':
                            if (op == "i16x8.extend_low_i8x16_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI8x16ToVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_low_i8x16_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI8x16ToVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm': {
                    switch (op[13]) {
                      case 'h': {
                        switch (op[24]) {
                          case 's':
                            if (op == "i16x8.extmul_high_i8x16_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_high_i8x16_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'l': {
                        switch (op[23]) {
                          case 's':
                            if (op == "i16x8.extmul_low_i8x16_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_low_i8x16_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI16x8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'r': {
                    switch (op[19]) {
                      case 's':
                        if (op == "i16x8.extract_lane_s"sv) {
                          auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneSVecI16x8, 8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extract_lane_u"sv) {
                          auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneUVecI16x8, 8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'g': {
            switch (op[7]) {
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.ge_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.ge_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.gt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.gt_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'l': {
            switch (op[7]) {
              case 'a':
                if (op == "i16x8.laneselect"sv) {
                  auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.le_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.le_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i16x8.lt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.lt_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'm': {
            switch (op[7]) {
              case 'a': {
                switch (op[10]) {
                  case 's':
                    if (op == "i16x8.max_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.max_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'i': {
                switch (op[10]) {
                  case 's':
                    if (op == "i16x8.min_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinSVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.min_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinUVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'u':
                if (op == "i16x8.mul"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::MulVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n': {
            switch (op[7]) {
              case 'a': {
                switch (op[19]) {
                  case 's':
                    if (op == "i16x8.narrow_i32x4_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NarrowSVecI32x4ToVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.narrow_i32x4_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NarrowUVecI32x4ToVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i16x8.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i16x8.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'q':
            if (op == "i16x8.q15mulr_sat_s"sv) {
              auto ret = makeBinary(ctx, pos, BinaryOp::Q15MulrSatSVecI16x8);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'r': {
            switch (op[8]) {
              case 'l':
                if (op == "i16x8.relaxed_q15mulr_s"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedQ15MulrSVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'p':
                if (op == "i16x8.replace_lane"sv) {
                  auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI16x8, 8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'h': {
                switch (op[8]) {
                  case 'l':
                    if (op == "i16x8.shl"sv) {
                      auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'r': {
                    switch (op[10]) {
                      case 's':
                        if (op == "i16x8.shr_s"sv) {
                          auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.shr_u"sv) {
                          auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "i16x8.splat"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecI16x8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'u': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i16x8.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubVecI16x8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i16x8.sub_sat_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubSatSVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.sub_sat_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubSatUVecI16x8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '3': {
        switch (op[2]) {
          case '1': {
            switch (op[4]) {
              case 'g': {
                switch (op[8]) {
                  case 's':
                    if (op == "i31.get_s"sv) {
                      auto ret = makeI31Get(ctx, pos, true);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i31.get_u"sv) {
                      auto ret = makeI31Get(ctx, pos, false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'n':
                if (op == "i31.new"sv) {
                  auto ret = makeI31New(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '2': {
            switch (op[3]) {
              case '.': {
                switch (op[4]) {
                  case 'a': {
                    switch (op[5]) {
                      case 'd':
                        if (op == "i32.add"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'n':
                        if (op == "i32.and"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AndInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 't': {
                        switch (op[11]) {
                          case 'l': {
                            switch (op[15]) {
                              case '\0':
                                if (op == "i32.atomic.load"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.load16_u"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.load8_u"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'r': {
                            switch (op[14]) {
                              case '.': {
                                switch (op[15]) {
                                  case 'a': {
                                    switch (op[16]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw.add"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw.and"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw.cmpxchg"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw.or"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw.sub"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[16]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw.xchg"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw.xor"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '1': {
                                switch (op[17]) {
                                  case 'a': {
                                    switch (op[18]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw16.add_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw16.and_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw16.cmpxchg_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw16.or_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw16.sub_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[18]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw16.xchg_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw16.xor_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '8': {
                                switch (op[16]) {
                                  case 'a': {
                                    switch (op[17]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw8.add_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw8.and_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw8.cmpxchg_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw8.or_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw8.sub_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (op[17]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw8.xchg_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw8.xor_u"sv) {
                                          auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i32);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 's': {
                            switch (op[16]) {
                              case '\0':
                                if (op == "i32.atomic.store"sv) {
                                  auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.store16"sv) {
                                  auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.store8"sv) {
                                  auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'c': {
                    switch (op[5]) {
                      case 'l':
                        if (op == "i32.clz"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ClzInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'o':
                        if (op == "i32.const"sv) {
                          auto ret = makeConst(ctx, pos, Type::i32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 't':
                        if (op == "i32.ctz"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::CtzInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'd': {
                    switch (op[8]) {
                      case 's':
                        if (op == "i32.div_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::DivSInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i32.div_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::DivUInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[5]) {
                      case 'q': {
                        switch (op[6]) {
                          case '\0':
                            if (op == "i32.eq"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::EqInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'z':
                            if (op == "i32.eqz"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::EqZInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'x': {
                        switch (op[10]) {
                          case '1':
                            if (op == "i32.extend16_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendS16Int32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i32.extend8_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendS8Int32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'g': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.ge_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GeSInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.ge_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GeUInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.gt_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GtSInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.gt_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GtUInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'l': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.le_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LeSInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.le_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LeUInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'o': {
                        switch (op[8]) {
                          case '\0':
                            if (op == "i32.load"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1': {
                            switch (op[11]) {
                              case 's':
                                if (op == "i32.load16_s"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load16_u"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[10]) {
                              case 's':
                                if (op == "i32.load8_s"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load8_u"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[7]) {
                          case 's':
                            if (op == "i32.lt_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LtSInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.lt_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LtUInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm':
                    if (op == "i32.mul"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MulInt32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'n':
                    if (op == "i32.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeInt32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "i32.or"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::OrInt32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'p':
                    if (op == "i32.popcnt"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::PopcntInt32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'r': {
                    switch (op[5]) {
                      case 'e': {
                        switch (op[6]) {
                          case 'i':
                            if (op == "i32.reinterpret_f32"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ReinterpretFloat32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'm': {
                            switch (op[8]) {
                              case 's':
                                if (op == "i32.rem_s"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::RemSInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.rem_u"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::RemUInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'o': {
                        switch (op[7]) {
                          case 'l':
                            if (op == "i32.rotl"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RotLInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'r':
                            if (op == "i32.rotr"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RotRInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[5]) {
                      case 'h': {
                        switch (op[6]) {
                          case 'l':
                            if (op == "i32.shl"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ShlInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'r': {
                            switch (op[8]) {
                              case 's':
                                if (op == "i32.shr_s"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ShrSInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.shr_u"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ShrUInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case '\0':
                            if (op == "i32.store"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i32.store16"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i32.store8"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "i32.sub"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubInt32);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[10]) {
                      case 'f': {
                        switch (op[11]) {
                          case '3': {
                            switch (op[14]) {
                              case 's':
                                if (op == "i32.trunc_f32_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSFloat32ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f32_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncUFloat32ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[14]) {
                              case 's':
                                if (op == "i32.trunc_f64_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSFloat64ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f64_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncUFloat64ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (op[15]) {
                          case '3': {
                            switch (op[18]) {
                              case 's':
                                if (op == "i32.trunc_sat_f32_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatSFloat32ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f32_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatUFloat32ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[18]) {
                              case 's':
                                if (op == "i32.trunc_sat_f64_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatSFloat64ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f64_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatUFloat64ToInt32);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'w':
                    if (op == "i32.wrap_i64"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::WrapInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "i32.xor"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::XorInt32);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[6]) {
                  case 'a': {
                    switch (op[7]) {
                      case 'b':
                        if (op == "i32x4.abs"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'd':
                        if (op == "i32x4.add"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'l':
                        if (op == "i32x4.all_true"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::AllTrueVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'b':
                    if (op == "i32x4.bitmask"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::BitmaskVecI32x4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd': {
                    switch (op[11]) {
                      case '1':
                        if (op == "i32x4.dot_i16x8_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::DotSVecI16x8ToVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i32x4.dot_i8x16_i7x16_add_s"sv) {
                          auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[7]) {
                      case 'q':
                        if (op == "i32x4.eq"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::EqVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'x': {
                        switch (op[9]) {
                          case 'a': {
                            switch (op[28]) {
                              case 's':
                                if (op == "i32x4.extadd_pairwise_i16x8_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.extadd_pairwise_i16x8_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'e': {
                            switch (op[13]) {
                              case 'h': {
                                switch (op[24]) {
                                  case 's':
                                    if (op == "i32x4.extend_high_i16x8_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI16x8ToVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_high_i16x8_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI16x8ToVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'l': {
                                switch (op[23]) {
                                  case 's':
                                    if (op == "i32x4.extend_low_i16x8_s"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI16x8ToVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_low_i16x8_u"sv) {
                                      auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI16x8ToVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 'm': {
                            switch (op[13]) {
                              case 'h': {
                                switch (op[24]) {
                                  case 's':
                                    if (op == "i32x4.extmul_high_i16x8_s"sv) {
                                      auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_high_i16x8_u"sv) {
                                      auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'l': {
                                switch (op[23]) {
                                  case 's':
                                    if (op == "i32x4.extmul_low_i16x8_s"sv) {
                                      auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_low_i16x8_u"sv) {
                                      auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI32x4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 'r':
                            if (op == "i32x4.extract_lane"sv) {
                              auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecI32x4, 4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'g': {
                    switch (op[7]) {
                      case 'e': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.ge_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GeSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.ge_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GeUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.gt_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GtSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.gt_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::GtUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'l': {
                    switch (op[7]) {
                      case 'a':
                        if (op == "i32x4.laneselect"sv) {
                          auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'e': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.le_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LeSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.le_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LeUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (op[9]) {
                          case 's':
                            if (op == "i32x4.lt_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LtSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.lt_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::LtUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'm': {
                    switch (op[7]) {
                      case 'a': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i32x4.max_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::MaxSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.max_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::MaxUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'i': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i32x4.min_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::MinSVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.min_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::MinUVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "i32x4.mul"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::MulVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (op[8]) {
                      case '\0':
                        if (op == "i32x4.ne"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::NeVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'g':
                        if (op == "i32x4.neg"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::NegVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'r': {
                    switch (op[8]) {
                      case 'l': {
                        switch (op[21]) {
                          case '3': {
                            switch (op[26]) {
                              case 's':
                                if (op == "i32x4.relaxed_trunc_f32x4_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f32x4_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '6': {
                            switch (op[26]) {
                              case 's':
                                if (op == "i32x4.relaxed_trunc_f64x2_s_zero"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f64x2_u_zero"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "i32x4.replace_lane"sv) {
                          auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI32x4, 4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[7]) {
                      case 'h': {
                        switch (op[8]) {
                          case 'l':
                            if (op == "i32x4.shl"sv) {
                              auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'r': {
                            switch (op[10]) {
                              case 's':
                                if (op == "i32x4.shr_s"sv) {
                                  auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.shr_u"sv) {
                                  auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI32x4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'p':
                        if (op == "i32x4.splat"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i32x4.sub"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubVecI32x4);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[17]) {
                      case '3': {
                        switch (op[22]) {
                          case 's':
                            if (op == "i32x4.trunc_sat_f32x4_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatSVecF32x4ToVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f32x4_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatUVecF32x4ToVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[22]) {
                          case 's':
                            if (op == "i32x4.trunc_sat_f64x2_s_zero"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f64x2_u_zero"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '6': {
        switch (op[3]) {
          case '.': {
            switch (op[4]) {
              case 'a': {
                switch (op[5]) {
                  case 'd':
                    if (op == "i64.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'n':
                    if (op == "i64.and"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AndInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't': {
                    switch (op[11]) {
                      case 'l': {
                        switch (op[15]) {
                          case '\0':
                            if (op == "i64.atomic.load"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.load16_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.load32_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.load8_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'r': {
                        switch (op[14]) {
                          case '.': {
                            switch (op[15]) {
                              case 'a': {
                                switch (op[16]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw.add"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw.and"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw.cmpxchg"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw.or"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw.sub"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (op[16]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw.xchg"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw.xor"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '1': {
                            switch (op[17]) {
                              case 'a': {
                                switch (op[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw16.add_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw16.and_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw16.cmpxchg_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw16.or_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw16.sub_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (op[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw16.xchg_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw16.xor_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '3': {
                            switch (op[17]) {
                              case 'a': {
                                switch (op[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw32.add_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw32.and_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw32.cmpxchg_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw32.or_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw32.sub_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (op[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw32.xchg_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw32.xor_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[16]) {
                              case 'a': {
                                switch (op[17]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw8.add_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw8.and_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw8.cmpxchg_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw8.or_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw8.sub_u"sv) {
                                  auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (op[17]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw8.xchg_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw8.xor_u"sv) {
                                      auto ret = makeAtomicRMWOrCmpxchg(ctx, pos, Type::i64);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (op[16]) {
                          case '\0':
                            if (op == "i64.atomic.store"sv) {
                              auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.store16"sv) {
                              auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.store32"sv) {
                              auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.store8"sv) {
                              auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (op[5]) {
                  case 'l':
                    if (op == "i64.clz"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::ClzInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "i64.const"sv) {
                      auto ret = makeConst(ctx, pos, Type::i64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64.ctz"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::CtzInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'd': {
                switch (op[8]) {
                  case 's':
                    if (op == "i64.div_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::DivSInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i64.div_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::DivUInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[5]) {
                  case 'q': {
                    switch (op[6]) {
                      case '\0':
                        if (op == "i64.eq"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::EqInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'z':
                        if (op == "i64.eqz"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::EqZInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'x': {
                    switch (op[10]) {
                      case '1':
                        if (op == "i64.extend16_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ExtendS16Int64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '3':
                        if (op == "i64.extend32_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ExtendS32Int64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i64.extend8_s"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ExtendS8Int64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '_': {
                        switch (op[15]) {
                          case 's':
                            if (op == "i64.extend_i32_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendSInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.extend_i32_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::ExtendUInt32);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'g': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.ge_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::GeSInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.ge_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::GeUInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.gt_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::GtSInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.gt_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::GtUInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.le_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::LeSInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.le_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::LeUInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'o': {
                    switch (op[8]) {
                      case '\0':
                        if (op == "i64.load"sv) {
                          auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '1': {
                        switch (op[11]) {
                          case 's':
                            if (op == "i64.load16_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load16_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '3': {
                        switch (op[11]) {
                          case 's':
                            if (op == "i64.load32_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load32_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i64.load8_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load8_u"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[7]) {
                      case 's':
                        if (op == "i64.lt_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::LtSInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.lt_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::LtUInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'm':
                if (op == "i64.mul"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::MulInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'n':
                if (op == "i64.ne"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::NeInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'o':
                if (op == "i64.or"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::OrInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'p':
                if (op == "i64.popcnt"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::PopcntInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'r': {
                switch (op[5]) {
                  case 'e': {
                    switch (op[6]) {
                      case 'i':
                        if (op == "i64.reinterpret_f64"sv) {
                          auto ret = makeUnary(ctx, pos, UnaryOp::ReinterpretFloat64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'm': {
                        switch (op[8]) {
                          case 's':
                            if (op == "i64.rem_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RemSInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.rem_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::RemUInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'o': {
                    switch (op[7]) {
                      case 'l':
                        if (op == "i64.rotl"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::RotLInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'r':
                        if (op == "i64.rotr"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::RotRInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 's': {
                switch (op[5]) {
                  case 'h': {
                    switch (op[6]) {
                      case 'l':
                        if (op == "i64.shl"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::ShlInt64);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'r': {
                        switch (op[8]) {
                          case 's':
                            if (op == "i64.shr_s"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ShrSInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.shr_u"sv) {
                              auto ret = makeBinary(ctx, pos, BinaryOp::ShrUInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (op[9]) {
                      case '\0':
                        if (op == "i64.store"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '1':
                        if (op == "i64.store16"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '3':
                        if (op == "i64.store32"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i64.store8"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "i64.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubInt64);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[10]) {
                  case 'f': {
                    switch (op[11]) {
                      case '3': {
                        switch (op[14]) {
                          case 's':
                            if (op == "i64.trunc_f32_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSFloat32ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f32_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncUFloat32ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[14]) {
                          case 's':
                            if (op == "i64.trunc_f64_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSFloat64ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f64_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncUFloat64ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 's': {
                    switch (op[15]) {
                      case '3': {
                        switch (op[18]) {
                          case 's':
                            if (op == "i64.trunc_sat_f32_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatSFloat32ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f32_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatUFloat32ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '6': {
                        switch (op[18]) {
                          case 's':
                            if (op == "i64.trunc_sat_f64_s"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatSFloat64ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f64_u"sv) {
                              auto ret = makeUnary(ctx, pos, UnaryOp::TruncSatUFloat64ToInt64);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'x':
                if (op == "i64.xor"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::XorInt64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'x': {
            switch (op[6]) {
              case 'a': {
                switch (op[7]) {
                  case 'b':
                    if (op == "i64x2.abs"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "i64x2.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'l':
                    if (op == "i64x2.all_true"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::AllTrueVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'b':
                if (op == "i64x2.bitmask"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::BitmaskVecI64x2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e': {
                switch (op[7]) {
                  case 'q':
                    if (op == "i64x2.eq"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::EqVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'x': {
                    switch (op[9]) {
                      case 'e': {
                        switch (op[13]) {
                          case 'h': {
                            switch (op[24]) {
                              case 's':
                                if (op == "i64x2.extend_high_i32x4_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI32x4ToVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_high_i32x4_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI32x4ToVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'l': {
                            switch (op[23]) {
                              case 's':
                                if (op == "i64x2.extend_low_i32x4_s"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI32x4ToVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_low_i32x4_u"sv) {
                                  auto ret = makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI32x4ToVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'm': {
                        switch (op[13]) {
                          case 'h': {
                            switch (op[24]) {
                              case 's':
                                if (op == "i64x2.extmul_high_i32x4_s"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_high_i32x4_u"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'l': {
                            switch (op[23]) {
                              case 's':
                                if (op == "i64x2.extmul_low_i32x4_s"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_low_i32x4_u"sv) {
                                  auto ret = makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI64x2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'r':
                        if (op == "i64x2.extract_lane"sv) {
                          auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecI64x2, 2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'g': {
                switch (op[7]) {
                  case 'e':
                    if (op == "i64x2.ge_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeSVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.gt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtSVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'l': {
                switch (op[7]) {
                  case 'a':
                    if (op == "i64x2.laneselect"sv) {
                      auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'e':
                    if (op == "i64x2.le_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeSVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.lt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtSVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm':
                if (op == "i64x2.mul"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::MulVecI64x2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'n': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i64x2.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i64x2.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "i64x2.replace_lane"sv) {
                  auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI64x2, 2);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's': {
                switch (op[7]) {
                  case 'h': {
                    switch (op[8]) {
                      case 'l':
                        if (op == "i64x2.shl"sv) {
                          auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI64x2);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'r': {
                        switch (op[10]) {
                          case 's':
                            if (op == "i64x2.shr_s"sv) {
                              auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64x2.shr_u"sv) {
                              auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI64x2);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "i64x2.splat"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i64x2.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubVecI64x2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '8': {
        switch (op[6]) {
          case 'a': {
            switch (op[7]) {
              case 'b':
                if (op == "i8x16.abs"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::AbsVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'd': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i8x16.add"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::AddVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i8x16.add_sat_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddSatSVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.add_sat_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::AddSatUVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'l':
                if (op == "i8x16.all_true"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::AllTrueVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'v':
                if (op == "i8x16.avgr_u"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::AvgrUVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i8x16.bitmask"sv) {
              auto ret = makeUnary(ctx, pos, UnaryOp::BitmaskVecI8x16);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'e': {
            switch (op[7]) {
              case 'q':
                if (op == "i8x16.eq"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::EqVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'x': {
                switch (op[19]) {
                  case 's':
                    if (op == "i8x16.extract_lane_s"sv) {
                      auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneSVecI8x16, 16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.extract_lane_u"sv) {
                      auto ret = makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneUVecI8x16, 16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'g': {
            switch (op[7]) {
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.ge_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.ge_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GeUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.gt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.gt_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::GtUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'l': {
            switch (op[7]) {
              case 'a':
                if (op == "i8x16.laneselect"sv) {
                  auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.le_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.le_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LeUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't': {
                switch (op[9]) {
                  case 's':
                    if (op == "i8x16.lt_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.lt_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::LtUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'm': {
            switch (op[7]) {
              case 'a': {
                switch (op[10]) {
                  case 's':
                    if (op == "i8x16.max_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.max_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MaxUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'i': {
                switch (op[10]) {
                  case 's':
                    if (op == "i8x16.min_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinSVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.min_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::MinUVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'n': {
            switch (op[7]) {
              case 'a': {
                switch (op[19]) {
                  case 's':
                    if (op == "i8x16.narrow_i16x8_s"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NarrowSVecI16x8ToVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.narrow_i16x8_u"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NarrowUVecI16x8ToVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e': {
                switch (op[8]) {
                  case '\0':
                    if (op == "i8x16.ne"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::NeVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i8x16.neg"sv) {
                      auto ret = makeUnary(ctx, pos, UnaryOp::NegVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'p':
            if (op == "i8x16.popcnt"sv) {
              auto ret = makeUnary(ctx, pos, UnaryOp::PopcntVecI8x16);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'r': {
            switch (op[8]) {
              case 'l':
                if (op == "i8x16.relaxed_swizzle"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::RelaxedSwizzleVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'p':
                if (op == "i8x16.replace_lane"sv) {
                  auto ret = makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI8x16, 16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'h': {
                switch (op[8]) {
                  case 'l':
                    if (op == "i8x16.shl"sv) {
                      auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'r': {
                    switch (op[10]) {
                      case 's':
                        if (op == "i8x16.shr_s"sv) {
                          auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.shr_u"sv) {
                          auto ret = makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "i8x16.shuffle"sv) {
                      auto ret = makeSIMDShuffle(ctx, pos);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "i8x16.splat"sv) {
                  auto ret = makeUnary(ctx, pos, UnaryOp::SplatVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'u': {
                switch (op[9]) {
                  case '\0':
                    if (op == "i8x16.sub"sv) {
                      auto ret = makeBinary(ctx, pos, BinaryOp::SubVecI8x16);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[14]) {
                      case 's':
                        if (op == "i8x16.sub_sat_s"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubSatSVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.sub_sat_u"sv) {
                          auto ret = makeBinary(ctx, pos, BinaryOp::SubSatUVecI8x16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'w':
                if (op == "i8x16.swizzle"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::SwizzleVecI8x16);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'f':
        if (op == "if"sv) {
          auto ret = makeIf(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'l': {
    switch (op[2]) {
      case 'c': {
        switch (op[6]) {
          case 'g':
            if (op == "local.get"sv) {
              auto ret = makeLocalGet(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 's':
            if (op == "local.set"sv) {
              auto ret = makeLocalSet(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 't':
            if (op == "local.tee"sv) {
              auto ret = makeLocalTee(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'o':
        if (op == "loop"sv) {
          auto ret = makeLoop(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'm': {
    switch (op[7]) {
      case 'a': {
        switch (op[14]) {
          case 'n':
            if (op == "memory.atomic.notify"sv) {
              auto ret = makeAtomicNotify(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'w': {
            switch (op[18]) {
              case '3':
                if (op == "memory.atomic.wait32"sv) {
                  auto ret = makeAtomicWait(ctx, pos, Type::i32);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '6':
                if (op == "memory.atomic.wait64"sv) {
                  auto ret = makeAtomicWait(ctx, pos, Type::i64);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'c':
        if (op == "memory.copy"sv) {
          auto ret = makeMemoryCopy(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'f':
        if (op == "memory.fill"sv) {
          auto ret = makeMemoryFill(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'g':
        if (op == "memory.grow"sv) {
          auto ret = makeMemoryGrow(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'i':
        if (op == "memory.init"sv) {
          auto ret = makeMemoryInit(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 's':
        if (op == "memory.size"sv) {
          auto ret = makeMemorySize(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'n':
    if (op == "nop"sv) {
      auto ret = makeNop(ctx, pos);
      CHECK_ERR(ret);
      return *ret;
    }
    goto parse_error;
  case 'p':
    if (op == "pop"sv) {
      auto ret = makePop(ctx, pos);
      CHECK_ERR(ret);
      return *ret;
    }
    goto parse_error;
  case 'r': {
    switch (op[2]) {
      case 'f': {
        switch (op[4]) {
          case 'a': {
            switch (op[7]) {
              case 'd':
                if (op == "ref.as_data"sv) {
                  auto ret = makeRefAs(ctx, pos, RefAsData);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'f':
                if (op == "ref.as_func"sv) {
                  auto ret = makeRefAs(ctx, pos, RefAsFunc);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'i':
                if (op == "ref.as_i31"sv) {
                  auto ret = makeRefAs(ctx, pos, RefAsI31);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'n':
                if (op == "ref.as_non_null"sv) {
                  auto ret = makeRefAs(ctx, pos, RefAsNonNull);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'c': {
            switch (op[9]) {
              case 'n':
                if (op == "ref.cast_nop_static"sv) {
                  auto ret = makeRefCastNopStatic(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's':
                if (op == "ref.cast_static"sv) {
                  auto ret = makeRefCastStatic(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'e':
            if (op == "ref.eq"sv) {
              auto ret = makeRefEq(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'f':
            if (op == "ref.func"sv) {
              auto ret = makeRefFunc(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'i': {
            switch (op[7]) {
              case 'd':
                if (op == "ref.is_data"sv) {
                  auto ret = makeRefIs(ctx, pos, RefIsData);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'f':
                if (op == "ref.is_func"sv) {
                  auto ret = makeRefIs(ctx, pos, RefIsFunc);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'i':
                if (op == "ref.is_i31"sv) {
                  auto ret = makeRefIs(ctx, pos, RefIsI31);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'n':
                if (op == "ref.is_null"sv) {
                  auto ret = makeRefIs(ctx, pos, RefIsNull);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n':
            if (op == "ref.null"sv) {
              auto ret = makeRefNull(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 't':
            if (op == "ref.test_static"sv) {
              auto ret = makeRefTestStatic(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't': {
        switch (op[3]) {
          case 'h':
            if (op == "rethrow"sv) {
              auto ret = makeRethrow(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'u': {
            switch (op[6]) {
              case '\0':
                if (op == "return"sv) {
                  auto ret = makeReturn(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_': {
                switch (op[11]) {
                  case '\0':
                    if (op == "return_call"sv) {
                      auto ret = makeCall(ctx, pos, /*isReturn=*/true);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[12]) {
                      case 'i':
                        if (op == "return_call_indirect"sv) {
                          auto ret = makeCallIndirect(ctx, pos, /*isReturn=*/true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'r':
                        if (op == "return_call_ref"sv) {
                          auto ret = makeCallRef(ctx, pos, /*isReturn=*/true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 's': {
    switch (op[1]) {
      case 'e':
        if (op == "select"sv) {
          auto ret = makeSelect(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 't': {
        switch (op[3]) {
          case 'i': {
            switch (op[6]) {
              case '.': {
                switch (op[7]) {
                  case 'a': {
                    switch (op[10]) {
                      case 'i':
                        if (op == "string.as_iter"sv) {
                          auto ret = makeStringAs(ctx, pos, StringAsIter);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'w': {
                        switch (op[13]) {
                          case '1':
                            if (op == "string.as_wtf16"sv) {
                              auto ret = makeStringAs(ctx, pos, StringAsWTF16);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "string.as_wtf8"sv) {
                              auto ret = makeStringAs(ctx, pos, StringAsWTF8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'c': {
                    switch (op[10]) {
                      case 'c':
                        if (op == "string.concat"sv) {
                          auto ret = makeStringConcat(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 's':
                        if (op == "string.const"sv) {
                          auto ret = makeStringConst(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (op[8]) {
                      case 'n': {
                        switch (op[17]) {
                          case '1': {
                            switch (op[19]) {
                              case '\0':
                                if (op == "string.encode_wtf16"sv) {
                                  auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '_':
                                if (op == "string.encode_wtf16_array"sv) {
                                  auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16Array);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (op[18]) {
                              case '\0':
                                if (op == "string.encode_wtf8"sv) {
                                  auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '_':
                                if (op == "string.encode_wtf8_array"sv) {
                                  auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8Array);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 'q':
                        if (op == "string.eq"sv) {
                          auto ret = makeStringEq(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'i':
                    if (op == "string.is_usv_sequence"sv) {
                      auto ret = makeStringMeasure(ctx, pos, StringMeasureIsUSV);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'm': {
                    switch (op[18]) {
                      case '1':
                        if (op == "string.measure_wtf16"sv) {
                          auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF16);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '8':
                        if (op == "string.measure_wtf8"sv) {
                          auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF8);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (op[14]) {
                      case '1': {
                        switch (op[16]) {
                          case '\0':
                            if (op == "string.new_wtf16"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewWTF16);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '_':
                            if (op == "string.new_wtf16_array"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewWTF16Array);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[15]) {
                          case '\0':
                            if (op == "string.new_wtf8"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewWTF8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '_':
                            if (op == "string.new_wtf8_array"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewWTF8Array);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'v': {
                switch (op[11]) {
                  case 'i': {
                    switch (op[16]) {
                      case 'a':
                        if (op == "stringview_iter.advance"sv) {
                          auto ret = makeStringIterMove(ctx, pos, StringIterMoveAdvance);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'n':
                        if (op == "stringview_iter.next"sv) {
                          auto ret = makeStringIterNext(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'r':
                        if (op == "stringview_iter.rewind"sv) {
                          auto ret = makeStringIterMove(ctx, pos, StringIterMoveRewind);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 's':
                        if (op == "stringview_iter.slice"sv) {
                          auto ret = makeStringSliceIter(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'w': {
                    switch (op[14]) {
                      case '1': {
                        switch (op[17]) {
                          case 'g':
                            if (op == "stringview_wtf16.get_codeunit"sv) {
                              auto ret = makeStringWTF16Get(ctx, pos);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 'l':
                            if (op == "stringview_wtf16.length"sv) {
                              auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF16View);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 's':
                            if (op == "stringview_wtf16.slice"sv) {
                              auto ret = makeStringSliceWTF(ctx, pos, StringSliceWTF16);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (op[16]) {
                          case 'a':
                            if (op == "stringview_wtf8.advance"sv) {
                              auto ret = makeStringWTF8Advance(ctx, pos);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 's':
                            if (op == "stringview_wtf8.slice"sv) {
                              auto ret = makeStringSliceWTF(ctx, pos, StringSliceWTF8);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'u': {
            switch (op[7]) {
              case 'g': {
                switch (op[10]) {
                  case '\0':
                    if (op == "struct.get"sv) {
                      auto ret = makeStructGet(ctx, pos);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (op[11]) {
                      case 's':
                        if (op == "struct.get_s"sv) {
                          auto ret = makeStructGet(ctx, pos, true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "struct.get_u"sv) {
                          auto ret = makeStructGet(ctx, pos, false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'n': {
                switch (op[10]) {
                  case '\0':
                    if (op == "struct.new"sv) {
                      auto ret = makeStructNewStatic(ctx, pos, false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_':
                    if (op == "struct.new_default"sv) {
                      auto ret = makeStructNewStatic(ctx, pos, true);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's':
                if (op == "struct.set"sv) {
                  auto ret = makeStructSet(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 't': {
    switch (op[1]) {
      case 'a': {
        switch (op[6]) {
          case 'g': {
            switch (op[7]) {
              case 'e':
                if (op == "table.get"sv) {
                  auto ret = makeTableGet(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'r':
                if (op == "table.grow"sv) {
                  auto ret = makeTableGrow(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (op[7]) {
              case 'e':
                if (op == "table.set"sv) {
                  auto ret = makeTableSet(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'i':
                if (op == "table.size"sv) {
                  auto ret = makeTableSize(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'h': {
        switch (op[2]) {
          case 'e':
            if (op == "then"sv) {
              auto ret = makeThenOrElse(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'r':
            if (op == "throw"sv) {
              auto ret = makeThrow(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'r':
        if (op == "try"sv) {
          auto ret = makeTry(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'u': {
        switch (op[6]) {
          case 'e':
            if (op == "tuple.extract"sv) {
              auto ret = makeTupleExtract(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'm':
            if (op == "tuple.make"sv) {
              auto ret = makeTupleMake(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'u':
    if (op == "unreachable"sv) {
      auto ret = makeUnreachable(ctx, pos);
      CHECK_ERR(ret);
      return *ret;
    }
    goto parse_error;
  case 'v': {
    switch (op[5]) {
      case 'a': {
        switch (op[7]) {
          case 'd': {
            switch (op[8]) {
              case '\0':
                if (op == "v128.and"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::AndVec128);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'n':
                if (op == "v128.andnot"sv) {
                  auto ret = makeBinary(ctx, pos, BinaryOp::AndNotVec128);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'y':
            if (op == "v128.any_true"sv) {
              auto ret = makeUnary(ctx, pos, UnaryOp::AnyTrueVec128);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'b':
        if (op == "v128.bitselect"sv) {
          auto ret = makeSIMDTernary(ctx, pos, SIMDTernaryOp::Bitselect);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'c':
        if (op == "v128.const"sv) {
          auto ret = makeConst(ctx, pos, Type::v128);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'l': {
        switch (op[9]) {
          case '\0':
            if (op == "v128.load"sv) {
              auto ret = makeLoad(ctx, pos, Type::v128, /*isAtomic=*/false);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '1': {
            switch (op[11]) {
              case '_': {
                switch (op[12]) {
                  case 'l':
                    if (op == "v128.load16_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load16LaneVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load16_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16SplatVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[14]) {
                  case 's':
                    if (op == "v128.load16x4_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4SVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load16x4_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4UVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '3': {
            switch (op[11]) {
              case '_': {
                switch (op[12]) {
                  case 'l':
                    if (op == "v128.load32_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load32LaneVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load32_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32SplatVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'z':
                    if (op == "v128.load32_zero"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32ZeroVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[14]) {
                  case 's':
                    if (op == "v128.load32x2_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2SVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load32x2_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2UVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '6': {
            switch (op[12]) {
              case 'l':
                if (op == "v128.load64_lane"sv) {
                  auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load64LaneVec128);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's':
                if (op == "v128.load64_splat"sv) {
                  auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64SplatVec128);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'z':
                if (op == "v128.load64_zero"sv) {
                  auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64ZeroVec128);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '8': {
            switch (op[10]) {
              case '_': {
                switch (op[11]) {
                  case 'l':
                    if (op == "v128.load8_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load8LaneVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load8_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8SplatVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (op[13]) {
                  case 's':
                    if (op == "v128.load8x8_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8SVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load8x8_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8UVec128);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'n':
        if (op == "v128.not"sv) {
          auto ret = makeUnary(ctx, pos, UnaryOp::NotVec128);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'o':
        if (op == "v128.or"sv) {
          auto ret = makeBinary(ctx, pos, BinaryOp::OrVec128);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 's': {
        switch (op[10]) {
          case '\0':
            if (op == "v128.store"sv) {
              auto ret = makeStore(ctx, pos, Type::v128, /*isAtomic=*/false);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '1':
            if (op == "v128.store16_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store16LaneVec128);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '3':
            if (op == "v128.store32_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store32LaneVec128);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '6':
            if (op == "v128.store64_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store64LaneVec128);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '8':
            if (op == "v128.store8_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store8LaneVec128);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'x':
        if (op == "v128.xor"sv) {
          auto ret = makeBinary(ctx, pos, BinaryOp::XorVec128);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  default: goto parse_error;
}
parse_error:
  return ctx.in.err("unrecognized instruction");
#endif // NEW_INSTRUCTION_PARSER

// clang-format on
