// 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 op = s[0]->str().str;
char buf[33] = {};
memcpy(buf, op.data(), op.size());
switch (buf[0]) {
  case 'a': {
    switch (buf[1]) {
      case 'r': {
        switch (buf[6]) {
          case 'c':
            if (op == "array.copy"sv) { return makeArrayCopy(s); }
            goto parse_error;
          case 'f':
            if (op == "array.fill"sv) { return makeArrayFill(s); }
            goto parse_error;
          case 'g': {
            switch (buf[9]) {
              case '\0':
                if (op == "array.get"sv) { return makeArrayGet(s); }
                goto parse_error;
              case '_': {
                switch (buf[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': {
            switch (buf[11]) {
              case 'd':
                if (op == "array.init_data"sv) { return makeArrayInitData(s); }
                goto parse_error;
              case 'e':
                if (op == "array.init_elem"sv) { return makeArrayInitElem(s); }
                goto parse_error;
              case 's':
                if (op == "array.init_static"sv) { return makeArrayNewFixed(s); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'l':
            if (op == "array.len"sv) { return makeArrayLen(s); }
            goto parse_error;
          case 'n': {
            switch (buf[9]) {
              case '\0':
                if (op == "array.new"sv) { return makeArrayNew(s, false); }
                goto parse_error;
              case '_': {
                switch (buf[10]) {
                  case 'd': {
                    switch (buf[11]) {
                      case 'a':
                        if (op == "array.new_data"sv) { return makeArrayNewData(s); }
                        goto parse_error;
                      case 'e':
                        if (op == "array.new_default"sv) { return makeArrayNew(s, true); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e':
                    if (op == "array.new_elem"sv) { return makeArrayNewElem(s); }
                    goto parse_error;
                  case 'f':
                    if (op == "array.new_fixed"sv) { return makeArrayNewFixed(s); }
                    goto parse_error;
                  default: 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 (buf[1]) {
      case 'l':
        if (op == "block"sv) { return makeBlock(s); }
        goto parse_error;
      case 'r': {
        switch (buf[2]) {
          case '\0':
            if (op == "br"sv) { return makeBreak(s); }
            goto parse_error;
          case '_': {
            switch (buf[3]) {
              case 'i':
                if (op == "br_if"sv) { return makeBreak(s); }
                goto parse_error;
              case 'o': {
                switch (buf[6]) {
                  case 'c': {
                    switch (buf[10]) {
                      case '\0':
                        if (op == "br_on_cast"sv) { return makeBrOnCast(s); }
                        goto parse_error;
                      case '_':
                        if (op == "br_on_cast_fail"sv) { return makeBrOnCast(s, true); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (buf[7]) {
                      case 'o':
                        if (op == "br_on_non_null"sv) { return makeBrOnNull(s, true); }
                        goto parse_error;
                      case 'u':
                        if (op == "br_on_null"sv) { return makeBrOnNull(s); }
                        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 (buf[4]) {
      case '\0':
        if (op == "call"sv) { return makeCall(s, /*isReturn=*/false); }
        goto parse_error;
      case '_': {
        switch (buf[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 (buf[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 (buf[1]) {
      case 'l':
        if (op == "else"sv) { return makeThenOrElse(s); }
        goto parse_error;
      case 'x': {
        switch (buf[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 (buf[1]) {
      case '3': {
        switch (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[5]) {
                  case 'e':
                    if (op == "f32.ceil"sv) { return makeUnary(s, UnaryOp::CeilFloat32); }
                    goto parse_error;
                  case 'o': {
                    switch (buf[6]) {
                      case 'n': {
                        switch (buf[7]) {
                          case 's':
                            if (op == "f32.const"sv) { return makeConst(s, Type::f32); }
                            goto parse_error;
                          case 'v': {
                            switch (buf[13]) {
                              case '3': {
                                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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, /*signed=*/false, 4, /*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 (buf[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 (buf[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 (buf[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, 4, /*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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[7]) {
                  case 'e':
                    if (op == "f32x4.ceil"sv) { return makeUnary(s, UnaryOp::CeilVecF32x4); }
                    goto parse_error;
                  case 'o': {
                    switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'f': {
                        switch (buf[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 (buf[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 (buf[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 (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[5]) {
                  case 'e':
                    if (op == "f64.ceil"sv) { return makeUnary(s, UnaryOp::CeilFloat64); }
                    goto parse_error;
                  case 'o': {
                    switch (buf[6]) {
                      case 'n': {
                        switch (buf[7]) {
                          case 's':
                            if (op == "f64.const"sv) { return makeConst(s, Type::f64); }
                            goto parse_error;
                          case 'v': {
                            switch (buf[13]) {
                              case '3': {
                                switch (buf[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 (buf[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 (buf[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 (buf[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, /*signed=*/false, 8, /*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 (buf[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 (buf[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 (buf[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, 8, /*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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[7]) {
                  case 'e':
                    if (op == "f64x2.ceil"sv) { return makeUnary(s, UnaryOp::CeilVecF64x2); }
                    goto parse_error;
                  case 'o': {
                    switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
                  case 'm': {
                    switch (buf[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 (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'f': {
                        switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[1]) {
      case '1': {
        switch (buf[6]) {
          case 'a': {
            switch (buf[7]) {
              case 'b':
                if (op == "i16x8.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI16x8); }
                goto parse_error;
              case 'd': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i16x8.add"sv) { return makeBinary(s, BinaryOp::AddVecI16x8); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[7]) {
              case 'q':
                if (op == "i16x8.eq"sv) { return makeBinary(s, BinaryOp::EqVecI16x8); }
                goto parse_error;
              case 'x': {
                switch (buf[9]) {
                  case 'a': {
                    switch (buf[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 (buf[13]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[13]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'e': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a':
                if (op == "i16x8.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI16x8); }
                goto parse_error;
              case 'e': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'h': {
                switch (buf[8]) {
                  case 'l':
                    if (op == "i16x8.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8); }
                    goto parse_error;
                  case 'r': {
                    switch (buf[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 (buf[9]) {
                  case '\0':
                    if (op == "i16x8.sub"sv) { return makeBinary(s, BinaryOp::SubVecI16x8); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[2]) {
          case '1': {
            switch (buf[4]) {
              case 'g': {
                switch (buf[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 (buf[3]) {
              case '.': {
                switch (buf[4]) {
                  case 'a': {
                    switch (buf[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 (buf[11]) {
                          case 'l': {
                            switch (buf[15]) {
                              case '\0':
                                if (op == "i32.atomic.load"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 4, /*isAtomic=*/true); }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.load16_u"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 2, /*isAtomic=*/true); }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.load8_u"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 1, /*isAtomic=*/true); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'r': {
                            switch (buf[14]) {
                              case '.': {
                                switch (buf[15]) {
                                  case 'a': {
                                    switch (buf[16]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw.add"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i32, 4); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw.and"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i32, 4); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw.cmpxchg"sv) { return makeAtomicCmpxchg(s, Type::i32, 4); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw.or"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i32, 4); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw.sub"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i32, 4); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[16]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw.xchg"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i32, 4); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw.xor"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i32, 4); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '1': {
                                switch (buf[17]) {
                                  case 'a': {
                                    switch (buf[18]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw16.add_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i32, 2); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw16.and_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i32, 2); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw16.cmpxchg_u"sv) { return makeAtomicCmpxchg(s, Type::i32, 2); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw16.or_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i32, 2); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw16.sub_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i32, 2); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[18]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw16.xchg_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i32, 2); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw16.xor_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i32, 2); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '8': {
                                switch (buf[16]) {
                                  case 'a': {
                                    switch (buf[17]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw8.add_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i32, 1); }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw8.and_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i32, 1); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw8.cmpxchg_u"sv) { return makeAtomicCmpxchg(s, Type::i32, 1); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw8.or_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i32, 1); }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw8.sub_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i32, 1); }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[17]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw8.xchg_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i32, 1); }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw8.xor_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i32, 1); }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 's': {
                            switch (buf[16]) {
                              case '\0':
                                if (op == "i32.atomic.store"sv) { return makeStore(s, Type::i32, 4, /*isAtomic=*/true); }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.store16"sv) { return makeStore(s, Type::i32, 2, /*isAtomic=*/true); }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.store8"sv) { return makeStore(s, Type::i32, 1, /*isAtomic=*/true); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'c': {
                    switch (buf[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 (buf[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 (buf[5]) {
                      case 'q': {
                        switch (buf[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 (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[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 (buf[8]) {
                          case '\0':
                            if (op == "i32.load"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 4, /*isAtomic=*/false); }
                            goto parse_error;
                          case '1': {
                            switch (buf[11]) {
                              case 's':
                                if (op == "i32.load16_s"sv) { return makeLoad(s, Type::i32, /*signed=*/true, 2, /*isAtomic=*/false); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load16_u"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 2, /*isAtomic=*/false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[10]) {
                              case 's':
                                if (op == "i32.load8_s"sv) { return makeLoad(s, Type::i32, /*signed=*/true, 1, /*isAtomic=*/false); }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.load8_u"sv) { return makeLoad(s, Type::i32, /*signed=*/false, 1, /*isAtomic=*/false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[6]) {
                          case 'i':
                            if (op == "i32.reinterpret_f32"sv) { return makeUnary(s, UnaryOp::ReinterpretFloat32); }
                            goto parse_error;
                          case 'm': {
                            switch (buf[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 (buf[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 (buf[5]) {
                      case 'h': {
                        switch (buf[6]) {
                          case 'l':
                            if (op == "i32.shl"sv) { return makeBinary(s, BinaryOp::ShlInt32); }
                            goto parse_error;
                          case 'r': {
                            switch (buf[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 (buf[9]) {
                          case '\0':
                            if (op == "i32.store"sv) { return makeStore(s, Type::i32, 4, /*isAtomic=*/false); }
                            goto parse_error;
                          case '1':
                            if (op == "i32.store16"sv) { return makeStore(s, Type::i32, 2, /*isAtomic=*/false); }
                            goto parse_error;
                          case '8':
                            if (op == "i32.store8"sv) { return makeStore(s, Type::i32, 1, /*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 (buf[10]) {
                      case 'f': {
                        switch (buf[11]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[15]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[6]) {
                  case 'a': {
                    switch (buf[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 (buf[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 (buf[7]) {
                      case 'q':
                        if (op == "i32x4.eq"sv) { return makeBinary(s, BinaryOp::EqVecI32x4); }
                        goto parse_error;
                      case 'x': {
                        switch (buf[9]) {
                          case 'a': {
                            switch (buf[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 (buf[13]) {
                              case 'h': {
                                switch (buf[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 (buf[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 (buf[13]) {
                              case 'h': {
                                switch (buf[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 (buf[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 (buf[7]) {
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[7]) {
                      case 'a':
                        if (op == "i32x4.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI32x4); }
                        goto parse_error;
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[7]) {
                      case 'a': {
                        switch (buf[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 (buf[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 (buf[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 (buf[8]) {
                      case 'l': {
                        switch (buf[21]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[7]) {
                      case 'h': {
                        switch (buf[8]) {
                          case 'l':
                            if (op == "i32x4.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4); }
                            goto parse_error;
                          case 'r': {
                            switch (buf[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 (buf[17]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[11]) {
                      case 'l': {
                        switch (buf[15]) {
                          case '\0':
                            if (op == "i64.atomic.load"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 8, /*isAtomic=*/true); }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.load16_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 2, /*isAtomic=*/true); }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.load32_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 4, /*isAtomic=*/true); }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.load8_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 1, /*isAtomic=*/true); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'r': {
                        switch (buf[14]) {
                          case '.': {
                            switch (buf[15]) {
                              case 'a': {
                                switch (buf[16]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw.add"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i64, 8); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw.and"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i64, 8); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw.cmpxchg"sv) { return makeAtomicCmpxchg(s, Type::i64, 8); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw.or"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i64, 8); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw.sub"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i64, 8); }
                                goto parse_error;
                              case 'x': {
                                switch (buf[16]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw.xchg"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i64, 8); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw.xor"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i64, 8); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '1': {
                            switch (buf[17]) {
                              case 'a': {
                                switch (buf[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw16.add_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i64, 2); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw16.and_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i64, 2); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw16.cmpxchg_u"sv) { return makeAtomicCmpxchg(s, Type::i64, 2); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw16.or_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i64, 2); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw16.sub_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i64, 2); }
                                goto parse_error;
                              case 'x': {
                                switch (buf[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw16.xchg_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i64, 2); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw16.xor_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i64, 2); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '3': {
                            switch (buf[17]) {
                              case 'a': {
                                switch (buf[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw32.add_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i64, 4); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw32.and_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i64, 4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw32.cmpxchg_u"sv) { return makeAtomicCmpxchg(s, Type::i64, 4); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw32.or_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i64, 4); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw32.sub_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i64, 4); }
                                goto parse_error;
                              case 'x': {
                                switch (buf[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw32.xchg_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i64, 4); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw32.xor_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i64, 4); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[16]) {
                              case 'a': {
                                switch (buf[17]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw8.add_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAdd, Type::i64, 1); }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw8.and_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWAnd, Type::i64, 1); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw8.cmpxchg_u"sv) { return makeAtomicCmpxchg(s, Type::i64, 1); }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw8.or_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWOr, Type::i64, 1); }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw8.sub_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWSub, Type::i64, 1); }
                                goto parse_error;
                              case 'x': {
                                switch (buf[17]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw8.xchg_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXchg, Type::i64, 1); }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw8.xor_u"sv) { return makeAtomicRMW(s, AtomicRMWOp::RMWXor, Type::i64, 1); }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (buf[16]) {
                          case '\0':
                            if (op == "i64.atomic.store"sv) { return makeStore(s, Type::i64, 8, /*isAtomic=*/true); }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.store16"sv) { return makeStore(s, Type::i64, 2, /*isAtomic=*/true); }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.store32"sv) { return makeStore(s, Type::i64, 4, /*isAtomic=*/true); }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.store8"sv) { return makeStore(s, Type::i64, 1, /*isAtomic=*/true); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'c': {
                switch (buf[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 (buf[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 (buf[5]) {
                  case 'q': {
                    switch (buf[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 (buf[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 (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[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 (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[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 (buf[8]) {
                      case '\0':
                        if (op == "i64.load"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 8, /*isAtomic=*/false); }
                        goto parse_error;
                      case '1': {
                        switch (buf[11]) {
                          case 's':
                            if (op == "i64.load16_s"sv) { return makeLoad(s, Type::i64, /*signed=*/true, 2, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load16_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 2, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '3': {
                        switch (buf[11]) {
                          case 's':
                            if (op == "i64.load32_s"sv) { return makeLoad(s, Type::i64, /*signed=*/true, 4, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load32_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 4, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (buf[10]) {
                          case 's':
                            if (op == "i64.load8_s"sv) { return makeLoad(s, Type::i64, /*signed=*/true, 1, /*isAtomic=*/false); }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.load8_u"sv) { return makeLoad(s, Type::i64, /*signed=*/false, 1, /*isAtomic=*/false); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[6]) {
                      case 'i':
                        if (op == "i64.reinterpret_f64"sv) { return makeUnary(s, UnaryOp::ReinterpretFloat64); }
                        goto parse_error;
                      case 'm': {
                        switch (buf[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 (buf[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 (buf[5]) {
                  case 'h': {
                    switch (buf[6]) {
                      case 'l':
                        if (op == "i64.shl"sv) { return makeBinary(s, BinaryOp::ShlInt64); }
                        goto parse_error;
                      case 'r': {
                        switch (buf[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 (buf[9]) {
                      case '\0':
                        if (op == "i64.store"sv) { return makeStore(s, Type::i64, 8, /*isAtomic=*/false); }
                        goto parse_error;
                      case '1':
                        if (op == "i64.store16"sv) { return makeStore(s, Type::i64, 2, /*isAtomic=*/false); }
                        goto parse_error;
                      case '3':
                        if (op == "i64.store32"sv) { return makeStore(s, Type::i64, 4, /*isAtomic=*/false); }
                        goto parse_error;
                      case '8':
                        if (op == "i64.store8"sv) { return makeStore(s, Type::i64, 1, /*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 (buf[10]) {
                  case 'f': {
                    switch (buf[11]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[15]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[7]) {
                  case 'q':
                    if (op == "i64x2.eq"sv) { return makeBinary(s, BinaryOp::EqVecI64x2); }
                    goto parse_error;
                  case 'x': {
                    switch (buf[9]) {
                      case 'e': {
                        switch (buf[13]) {
                          case 'h': {
                            switch (buf[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 (buf[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 (buf[13]) {
                          case 'h': {
                            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
                  case 'h': {
                    switch (buf[8]) {
                      case 'l':
                        if (op == "i64x2.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2); }
                        goto parse_error;
                      case 'r': {
                        switch (buf[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 (buf[6]) {
          case 'a': {
            switch (buf[7]) {
              case 'b':
                if (op == "i8x16.abs"sv) { return makeUnary(s, UnaryOp::AbsVecI8x16); }
                goto parse_error;
              case 'd': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i8x16.add"sv) { return makeBinary(s, BinaryOp::AddVecI8x16); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[7]) {
              case 'q':
                if (op == "i8x16.eq"sv) { return makeBinary(s, BinaryOp::EqVecI8x16); }
                goto parse_error;
              case 'x': {
                switch (buf[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 (buf[7]) {
              case 'e': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a':
                if (op == "i8x16.laneselect"sv) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI8x16); }
                goto parse_error;
              case 'e': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'h': {
                switch (buf[8]) {
                  case 'l':
                    if (op == "i8x16.shl"sv) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16); }
                    goto parse_error;
                  case 'r': {
                    switch (buf[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 (buf[9]) {
                  case '\0':
                    if (op == "i8x16.sub"sv) { return makeBinary(s, BinaryOp::SubVecI8x16); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[2]) {
      case 'c': {
        switch (buf[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 (buf[7]) {
      case 'a': {
        switch (buf[14]) {
          case 'n':
            if (op == "memory.atomic.notify"sv) { return makeAtomicNotify(s); }
            goto parse_error;
          case 'w': {
            switch (buf[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 (buf[2]) {
      case 'f': {
        switch (buf[4]) {
          case 'a':
            if (op == "ref.as_non_null"sv) { return makeRefAs(s, RefAsNonNull); }
            goto parse_error;
          case 'c':
            if (op == "ref.cast"sv) { return makeRefCast(s); }
            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':
            if (op == "ref.is_null"sv) { return makeRefIsNull(s); }
            goto parse_error;
          case 'n':
            if (op == "ref.null"sv) { return makeRefNull(s); }
            goto parse_error;
          case 't':
            if (op == "ref.test"sv) { return makeRefTest(s); }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't': {
        switch (buf[3]) {
          case 'h':
            if (op == "rethrow"sv) { return makeRethrow(s); }
            goto parse_error;
          case 'u': {
            switch (buf[6]) {
              case '\0':
                if (op == "return"sv) { return makeReturn(s); }
                goto parse_error;
              case '_': {
                switch (buf[11]) {
                  case '\0':
                    if (op == "return_call"sv) { return makeCall(s, /*isReturn=*/true); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[1]) {
      case 'e':
        if (op == "select"sv) { return makeSelect(s); }
        goto parse_error;
      case 't': {
        switch (buf[3]) {
          case 'i': {
            switch (buf[6]) {
              case '.': {
                switch (buf[7]) {
                  case 'a': {
                    switch (buf[10]) {
                      case 'i':
                        if (op == "string.as_iter"sv) { return makeStringAs(s, StringAsIter); }
                        goto parse_error;
                      case 'w': {
                        switch (buf[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 (buf[9]) {
                      case 'm':
                        if (op == "string.compare"sv) { return makeStringEq(s, StringEqCompare); }
                        goto parse_error;
                      case 'n': {
                        switch (buf[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;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (buf[8]) {
                      case 'n': {
                        switch (buf[17]) {
                          case '1': {
                            switch (buf[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 (buf[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, StringEqEqual); }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'f':
                    if (op == "string.from_code_point"sv) { return makeStringNew(s, StringNewFromCodePoint, false); }
                    goto parse_error;
                  case 'h':
                    if (op == "string.hash"sv) { return makeStringMeasure(s, StringMeasureHash); }
                    goto parse_error;
                  case 'i':
                    if (op == "string.is_usv_sequence"sv) { return makeStringMeasure(s, StringMeasureIsUSV); }
                    goto parse_error;
                  case 'm': {
                    switch (buf[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 (buf[11]) {
                      case 'u': {
                        switch (buf[16]) {
                          case 'a':
                            if (op == "string.new_utf8_array_try"sv) { return makeStringNew(s, StringNewUTF8Array, true); }
                            goto parse_error;
                          case 't':
                            if (op == "string.new_utf8_try"sv) { return makeStringNew(s, StringNewUTF8, true); }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'w': {
                        switch (buf[14]) {
                          case '1': {
                            switch (buf[16]) {
                              case '\0':
                                if (op == "string.new_wtf16"sv) { return makeStringNew(s, StringNewWTF16, false); }
                                goto parse_error;
                              case '_':
                                if (op == "string.new_wtf16_array"sv) { return makeStringNew(s, StringNewWTF16Array, false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[15]) {
                              case '\0':
                                if (op == "string.new_wtf8"sv) { return makeStringNew(s, StringNewWTF8, false); }
                                goto parse_error;
                              case '_':
                                if (op == "string.new_wtf8_array"sv) { return makeStringNew(s, StringNewWTF8Array, false); }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'v': {
                switch (buf[11]) {
                  case 'i': {
                    switch (buf[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 (buf[14]) {
                      case '1': {
                        switch (buf[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 (buf[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 (buf[7]) {
              case 'g': {
                switch (buf[10]) {
                  case '\0':
                    if (op == "struct.get"sv) { return makeStructGet(s); }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[10]) {
                  case '\0':
                    if (op == "struct.new"sv) { return makeStructNew(s, false); }
                    goto parse_error;
                  case '_':
                    if (op == "struct.new_default"sv) { return makeStructNew(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 (buf[1]) {
      case 'a': {
        switch (buf[6]) {
          case 'g': {
            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[5]) {
      case 'a': {
        switch (buf[7]) {
          case 'd': {
            switch (buf[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 (buf[9]) {
          case '\0':
            if (op == "v128.load"sv) { return makeLoad(s, Type::v128, /*signed=*/false, 16, /*isAtomic=*/false); }
            goto parse_error;
          case '1': {
            switch (buf[11]) {
              case '_': {
                switch (buf[12]) {
                  case 'l':
                    if (op == "v128.load16_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load16LaneVec128, 2); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load16_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16SplatVec128, 2); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[14]) {
                  case 's':
                    if (op == "v128.load16x4_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4SVec128, 8); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load16x4_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4UVec128, 8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '3': {
            switch (buf[11]) {
              case '_': {
                switch (buf[12]) {
                  case 'l':
                    if (op == "v128.load32_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load32LaneVec128, 4); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load32_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32SplatVec128, 4); }
                    goto parse_error;
                  case 'z':
                    if (op == "v128.load32_zero"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32ZeroVec128, 4); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[14]) {
                  case 's':
                    if (op == "v128.load32x2_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2SVec128, 8); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load32x2_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2UVec128, 8); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '6': {
            switch (buf[12]) {
              case 'l':
                if (op == "v128.load64_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load64LaneVec128, 8); }
                goto parse_error;
              case 's':
                if (op == "v128.load64_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load64SplatVec128, 8); }
                goto parse_error;
              case 'z':
                if (op == "v128.load64_zero"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load64ZeroVec128, 8); }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '8': {
            switch (buf[10]) {
              case '_': {
                switch (buf[11]) {
                  case 'l':
                    if (op == "v128.load8_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load8LaneVec128, 1); }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load8_splat"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8SplatVec128, 1); }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[13]) {
                  case 's':
                    if (op == "v128.load8x8_s"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8SVec128, 8); }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load8x8_u"sv) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8UVec128, 8); }
                    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 (buf[10]) {
          case '\0':
            if (op == "v128.store"sv) { return makeStore(s, Type::v128, 16, /*isAtomic=*/false); }
            goto parse_error;
          case '1':
            if (op == "v128.store16_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store16LaneVec128, 2); }
            goto parse_error;
          case '3':
            if (op == "v128.store32_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store32LaneVec128, 4); }
            goto parse_error;
          case '6':
            if (op == "v128.store64_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store64LaneVec128, 8); }
            goto parse_error;
          case '8':
            if (op == "v128.store8_lane"sv) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store8LaneVec128, 1); }
            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
auto op = *keyword;
char buf[33] = {};
memcpy(buf, op.data(), op.size());
switch (buf[0]) {
  case 'a': {
    switch (buf[1]) {
      case 'r': {
        switch (buf[6]) {
          case 'c':
            if (op == "array.copy"sv) {
              auto ret = makeArrayCopy(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'f':
            if (op == "array.fill"sv) {
              auto ret = makeArrayFill(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'g': {
            switch (buf[9]) {
              case '\0':
                if (op == "array.get"sv) {
                  auto ret = makeArrayGet(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_': {
                switch (buf[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': {
            switch (buf[11]) {
              case 'd':
                if (op == "array.init_data"sv) {
                  auto ret = makeArrayInitData(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'e':
                if (op == "array.init_elem"sv) {
                  auto ret = makeArrayInitElem(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's':
                if (op == "array.init_static"sv) {
                  auto ret = makeArrayNewFixed(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: 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 (buf[9]) {
              case '\0':
                if (op == "array.new"sv) {
                  auto ret = makeArrayNew(ctx, pos, false);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_': {
                switch (buf[10]) {
                  case 'd': {
                    switch (buf[11]) {
                      case 'a':
                        if (op == "array.new_data"sv) {
                          auto ret = makeArrayNewData(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'e':
                        if (op == "array.new_default"sv) {
                          auto ret = makeArrayNew(ctx, pos, true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e':
                    if (op == "array.new_elem"sv) {
                      auto ret = makeArrayNewElem(ctx, pos);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'f':
                    if (op == "array.new_fixed"sv) {
                      auto ret = makeArrayNewFixed(ctx, pos);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: 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 (buf[1]) {
      case 'l':
        if (op == "block"sv) {
          auto ret = makeBlock(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'r': {
        switch (buf[2]) {
          case '\0':
            if (op == "br"sv) {
              auto ret = makeBreak(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '_': {
            switch (buf[3]) {
              case 'i':
                if (op == "br_if"sv) {
                  auto ret = makeBreak(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'o': {
                switch (buf[6]) {
                  case 'c': {
                    switch (buf[10]) {
                      case '\0':
                        if (op == "br_on_cast"sv) {
                          auto ret = makeBrOnCast(ctx, pos);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '_':
                        if (op == "br_on_cast_fail"sv) {
                          auto ret = makeBrOnCast(ctx, pos, true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (buf[7]) {
                      case 'o':
                        if (op == "br_on_non_null"sv) {
                          auto ret = makeBrOnNull(ctx, pos, true);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "br_on_null"sv) {
                          auto ret = makeBrOnNull(ctx, pos);
                          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 (buf[4]) {
      case '\0':
        if (op == "call"sv) {
          auto ret = makeCall(ctx, pos, /*isReturn=*/false);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case '_': {
        switch (buf[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 (buf[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 (buf[1]) {
      case 'l':
        if (op == "else"sv) {
          auto ret = makeThenOrElse(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 'x': {
        switch (buf[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 (buf[1]) {
      case '3': {
        switch (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[6]) {
                      case 'n': {
                        switch (buf[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 (buf[13]) {
                              case '3': {
                                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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, /*signed=*/false, 4, /*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 (buf[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 (buf[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 (buf[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, 4, /*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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'f': {
                        switch (buf[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 (buf[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 (buf[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 (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[6]) {
                      case 'n': {
                        switch (buf[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 (buf[13]) {
                              case '3': {
                                switch (buf[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 (buf[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 (buf[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 (buf[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, /*signed=*/false, 8, /*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 (buf[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 (buf[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 (buf[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, 8, /*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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
                  case 'm': {
                    switch (buf[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 (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'f': {
                        switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[1]) {
      case '1': {
        switch (buf[6]) {
          case 'a': {
            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[9]) {
                  case 'a': {
                    switch (buf[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 (buf[13]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[13]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'e': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'h': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[2]) {
          case '1': {
            switch (buf[4]) {
              case 'g': {
                switch (buf[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 (buf[3]) {
              case '.': {
                switch (buf[4]) {
                  case 'a': {
                    switch (buf[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 (buf[11]) {
                          case 'l': {
                            switch (buf[15]) {
                              case '\0':
                                if (op == "i32.atomic.load"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*signed=*/false, 4, /*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, /*signed=*/false, 2, /*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, /*signed=*/false, 1, /*isAtomic=*/true);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'r': {
                            switch (buf[14]) {
                              case '.': {
                                switch (buf[15]) {
                                  case 'a': {
                                    switch (buf[16]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw.add"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 4);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw.and"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 4);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw.cmpxchg"sv) {
                                      auto ret = makeAtomicCmpxchg(ctx, pos, Type::i32, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw.or"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw.sub"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[16]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw.xchg"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 4);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw.xor"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 4);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '1': {
                                switch (buf[17]) {
                                  case 'a': {
                                    switch (buf[18]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw16.add_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 2);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw16.and_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 2);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw16.cmpxchg_u"sv) {
                                      auto ret = makeAtomicCmpxchg(ctx, pos, Type::i32, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw16.or_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw16.sub_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[18]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw16.xchg_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 2);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw16.xor_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 2);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              case '8': {
                                switch (buf[16]) {
                                  case 'a': {
                                    switch (buf[17]) {
                                      case 'd':
                                        if (op == "i32.atomic.rmw8.add_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 1);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw8.and_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 1);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  case 'c':
                                    if (op == "i32.atomic.rmw8.cmpxchg_u"sv) {
                                      auto ret = makeAtomicCmpxchg(ctx, pos, Type::i32, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw8.or_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw8.sub_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'x': {
                                    switch (buf[17]) {
                                      case 'c':
                                        if (op == "i32.atomic.rmw8.xchg_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 1);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw8.xor_u"sv) {
                                          auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 1);
                                          CHECK_ERR(ret);
                                          return *ret;
                                        }
                                        goto parse_error;
                                      default: goto parse_error;
                                    }
                                  }
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case 's': {
                            switch (buf[16]) {
                              case '\0':
                                if (op == "i32.atomic.store"sv) {
                                  auto ret = makeStore(ctx, pos, Type::i32, 4, /*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, 2, /*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, 1, /*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 (buf[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 (buf[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 (buf[5]) {
                      case 'q': {
                        switch (buf[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 (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[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 (buf[8]) {
                          case '\0':
                            if (op == "i32.load"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i32, /*signed=*/false, 4, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1': {
                            switch (buf[11]) {
                              case 's':
                                if (op == "i32.load16_s"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*signed=*/true, 2, /*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, /*signed=*/false, 2, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[10]) {
                              case 's':
                                if (op == "i32.load8_s"sv) {
                                  auto ret = makeLoad(ctx, pos, Type::i32, /*signed=*/true, 1, /*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, /*signed=*/false, 1, /*isAtomic=*/false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 't': {
                        switch (buf[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 (buf[5]) {
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[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 (buf[5]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[9]) {
                          case '\0':
                            if (op == "i32.store"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, 4, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i32.store16"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, 2, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i32.store8"sv) {
                              auto ret = makeStore(ctx, pos, Type::i32, 1, /*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 (buf[10]) {
                      case 'f': {
                        switch (buf[11]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[15]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[6]) {
                  case 'a': {
                    switch (buf[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 (buf[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 (buf[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 (buf[9]) {
                          case 'a': {
                            switch (buf[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 (buf[13]) {
                              case 'h': {
                                switch (buf[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 (buf[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 (buf[13]) {
                              case 'h': {
                                switch (buf[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 (buf[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 (buf[7]) {
                      case 'e': {
                        switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
                      case 'a': {
                        switch (buf[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 (buf[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 (buf[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 (buf[8]) {
                      case 'l': {
                        switch (buf[21]) {
                          case '3': {
                            switch (buf[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 (buf[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 (buf[7]) {
                      case 'h': {
                        switch (buf[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 (buf[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 (buf[17]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[3]) {
          case '.': {
            switch (buf[4]) {
              case 'a': {
                switch (buf[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 (buf[11]) {
                      case 'l': {
                        switch (buf[15]) {
                          case '\0':
                            if (op == "i64.atomic.load"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*signed=*/false, 8, /*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, /*signed=*/false, 2, /*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, /*signed=*/false, 4, /*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, /*signed=*/false, 1, /*isAtomic=*/true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'r': {
                        switch (buf[14]) {
                          case '.': {
                            switch (buf[15]) {
                              case 'a': {
                                switch (buf[16]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw.add"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 8);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw.and"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 8);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw.cmpxchg"sv) {
                                  auto ret = makeAtomicCmpxchg(ctx, pos, Type::i64, 8);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw.or"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 8);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw.sub"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 8);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (buf[16]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw.xchg"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 8);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw.xor"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 8);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '1': {
                            switch (buf[17]) {
                              case 'a': {
                                switch (buf[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw16.add_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw16.and_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw16.cmpxchg_u"sv) {
                                  auto ret = makeAtomicCmpxchg(ctx, pos, Type::i64, 2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw16.or_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw16.sub_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 2);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (buf[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw16.xchg_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw16.xor_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 2);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '3': {
                            switch (buf[17]) {
                              case 'a': {
                                switch (buf[18]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw32.add_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw32.and_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw32.cmpxchg_u"sv) {
                                  auto ret = makeAtomicCmpxchg(ctx, pos, Type::i64, 4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw32.or_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw32.sub_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 4);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (buf[18]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw32.xchg_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw32.xor_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 4);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[16]) {
                              case 'a': {
                                switch (buf[17]) {
                                  case 'd':
                                    if (op == "i64.atomic.rmw8.add_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw8.and_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              case 'c':
                                if (op == "i64.atomic.rmw8.cmpxchg_u"sv) {
                                  auto ret = makeAtomicCmpxchg(ctx, pos, Type::i64, 1);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw8.or_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 1);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw8.sub_u"sv) {
                                  auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 1);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case 'x': {
                                switch (buf[17]) {
                                  case 'c':
                                    if (op == "i64.atomic.rmw8.xchg_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw8.xor_u"sv) {
                                      auto ret = makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 1);
                                      CHECK_ERR(ret);
                                      return *ret;
                                    }
                                    goto parse_error;
                                  default: goto parse_error;
                                }
                              }
                              default: goto parse_error;
                            }
                          }
                          default: goto parse_error;
                        }
                      }
                      case 's': {
                        switch (buf[16]) {
                          case '\0':
                            if (op == "i64.atomic.store"sv) {
                              auto ret = makeStore(ctx, pos, Type::i64, 8, /*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, 2, /*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, 4, /*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, 1, /*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 (buf[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 (buf[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 (buf[5]) {
                  case 'q': {
                    switch (buf[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 (buf[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 (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[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 (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[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 (buf[8]) {
                      case '\0':
                        if (op == "i64.load"sv) {
                          auto ret = makeLoad(ctx, pos, Type::i64, /*signed=*/false, 8, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '1': {
                        switch (buf[11]) {
                          case 's':
                            if (op == "i64.load16_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*signed=*/true, 2, /*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, /*signed=*/false, 2, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '3': {
                        switch (buf[11]) {
                          case 's':
                            if (op == "i64.load32_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*signed=*/true, 4, /*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, /*signed=*/false, 4, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case '8': {
                        switch (buf[10]) {
                          case 's':
                            if (op == "i64.load8_s"sv) {
                              auto ret = makeLoad(ctx, pos, Type::i64, /*signed=*/true, 1, /*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, /*signed=*/false, 1, /*isAtomic=*/false);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 't': {
                    switch (buf[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 (buf[5]) {
                  case 'e': {
                    switch (buf[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 (buf[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 (buf[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 (buf[5]) {
                  case 'h': {
                    switch (buf[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 (buf[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 (buf[9]) {
                      case '\0':
                        if (op == "i64.store"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, 8, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '1':
                        if (op == "i64.store16"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, 2, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '3':
                        if (op == "i64.store32"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, 4, /*isAtomic=*/false);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i64.store8"sv) {
                          auto ret = makeStore(ctx, pos, Type::i64, 1, /*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 (buf[10]) {
                  case 'f': {
                    switch (buf[11]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[15]) {
                      case '3': {
                        switch (buf[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 (buf[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 (buf[6]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[9]) {
                      case 'e': {
                        switch (buf[13]) {
                          case 'h': {
                            switch (buf[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 (buf[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 (buf[13]) {
                          case 'h': {
                            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
                  case 'h': {
                    switch (buf[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 (buf[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 (buf[6]) {
          case 'a': {
            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'e': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[7]) {
              case 'a': {
                switch (buf[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 (buf[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 (buf[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 (buf[7]) {
              case 'h': {
                switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[2]) {
      case 'c': {
        switch (buf[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 (buf[7]) {
      case 'a': {
        switch (buf[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 (buf[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 (buf[2]) {
      case 'f': {
        switch (buf[4]) {
          case 'a':
            if (op == "ref.as_non_null"sv) {
              auto ret = makeRefAs(ctx, pos, RefAsNonNull);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'c':
            if (op == "ref.cast"sv) {
              auto ret = makeRefCast(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            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':
            if (op == "ref.is_null"sv) {
              auto ret = makeRefIsNull(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            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"sv) {
              auto ret = makeRefTest(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't': {
        switch (buf[3]) {
          case 'h':
            if (op == "rethrow"sv) {
              auto ret = makeRethrow(ctx, pos);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case 'u': {
            switch (buf[6]) {
              case '\0':
                if (op == "return"sv) {
                  auto ret = makeReturn(ctx, pos);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case '_': {
                switch (buf[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 (buf[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 (buf[1]) {
      case 'e':
        if (op == "select"sv) {
          auto ret = makeSelect(ctx, pos);
          CHECK_ERR(ret);
          return *ret;
        }
        goto parse_error;
      case 't': {
        switch (buf[3]) {
          case 'i': {
            switch (buf[6]) {
              case '.': {
                switch (buf[7]) {
                  case 'a': {
                    switch (buf[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 (buf[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 (buf[9]) {
                      case 'm':
                        if (op == "string.compare"sv) {
                          auto ret = makeStringEq(ctx, pos, StringEqCompare);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      case 'n': {
                        switch (buf[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;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'e': {
                    switch (buf[8]) {
                      case 'n': {
                        switch (buf[17]) {
                          case '1': {
                            switch (buf[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 (buf[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, StringEqEqual);
                          CHECK_ERR(ret);
                          return *ret;
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'f':
                    if (op == "string.from_code_point"sv) {
                      auto ret = makeStringNew(ctx, pos, StringNewFromCodePoint, false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'h':
                    if (op == "string.hash"sv) {
                      auto ret = makeStringMeasure(ctx, pos, StringMeasureHash);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    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 (buf[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 (buf[11]) {
                      case 'u': {
                        switch (buf[16]) {
                          case 'a':
                            if (op == "string.new_utf8_array_try"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewUTF8Array, true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          case 't':
                            if (op == "string.new_utf8_try"sv) {
                              auto ret = makeStringNew(ctx, pos, StringNewUTF8, true);
                              CHECK_ERR(ret);
                              return *ret;
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'w': {
                        switch (buf[14]) {
                          case '1': {
                            switch (buf[16]) {
                              case '\0':
                                if (op == "string.new_wtf16"sv) {
                                  auto ret = makeStringNew(ctx, pos, StringNewWTF16, false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '_':
                                if (op == "string.new_wtf16_array"sv) {
                                  auto ret = makeStringNew(ctx, pos, StringNewWTF16Array, false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case '8': {
                            switch (buf[15]) {
                              case '\0':
                                if (op == "string.new_wtf8"sv) {
                                  auto ret = makeStringNew(ctx, pos, StringNewWTF8, false);
                                  CHECK_ERR(ret);
                                  return *ret;
                                }
                                goto parse_error;
                              case '_':
                                if (op == "string.new_wtf8_array"sv) {
                                  auto ret = makeStringNew(ctx, pos, StringNewWTF8Array, false);
                                  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 'v': {
                switch (buf[11]) {
                  case 'i': {
                    switch (buf[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 (buf[14]) {
                      case '1': {
                        switch (buf[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 (buf[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 (buf[7]) {
              case 'g': {
                switch (buf[10]) {
                  case '\0':
                    if (op == "struct.get"sv) {
                      auto ret = makeStructGet(ctx, pos);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[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 (buf[10]) {
                  case '\0':
                    if (op == "struct.new"sv) {
                      auto ret = makeStructNew(ctx, pos, false);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case '_':
                    if (op == "struct.new_default"sv) {
                      auto ret = makeStructNew(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 (buf[1]) {
      case 'a': {
        switch (buf[6]) {
          case 'g': {
            switch (buf[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 (buf[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 (buf[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 (buf[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 (buf[5]) {
      case 'a': {
        switch (buf[7]) {
          case 'd': {
            switch (buf[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 (buf[9]) {
          case '\0':
            if (op == "v128.load"sv) {
              auto ret = makeLoad(ctx, pos, Type::v128, /*signed=*/false, 16, /*isAtomic=*/false);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '1': {
            switch (buf[11]) {
              case '_': {
                switch (buf[12]) {
                  case 'l':
                    if (op == "v128.load16_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load16LaneVec128, 2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load16_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16SplatVec128, 2);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[14]) {
                  case 's':
                    if (op == "v128.load16x4_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4SVec128, 8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load16x4_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4UVec128, 8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '3': {
            switch (buf[11]) {
              case '_': {
                switch (buf[12]) {
                  case 'l':
                    if (op == "v128.load32_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load32LaneVec128, 4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load32_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32SplatVec128, 4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'z':
                    if (op == "v128.load32_zero"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32ZeroVec128, 4);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[14]) {
                  case 's':
                    if (op == "v128.load32x2_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2SVec128, 8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load32x2_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2UVec128, 8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case '6': {
            switch (buf[12]) {
              case 'l':
                if (op == "v128.load64_lane"sv) {
                  auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load64LaneVec128, 8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 's':
                if (op == "v128.load64_splat"sv) {
                  auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64SplatVec128, 8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              case 'z':
                if (op == "v128.load64_zero"sv) {
                  auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64ZeroVec128, 8);
                  CHECK_ERR(ret);
                  return *ret;
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case '8': {
            switch (buf[10]) {
              case '_': {
                switch (buf[11]) {
                  case 'l':
                    if (op == "v128.load8_lane"sv) {
                      auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load8LaneVec128, 1);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load8_splat"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8SplatVec128, 1);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'x': {
                switch (buf[13]) {
                  case 's':
                    if (op == "v128.load8x8_s"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8SVec128, 8);
                      CHECK_ERR(ret);
                      return *ret;
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load8x8_u"sv) {
                      auto ret = makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8UVec128, 8);
                      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 (buf[10]) {
          case '\0':
            if (op == "v128.store"sv) {
              auto ret = makeStore(ctx, pos, Type::v128, 16, /*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, 2);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '3':
            if (op == "v128.store32_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store32LaneVec128, 4);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '6':
            if (op == "v128.store64_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store64LaneVec128, 8);
              CHECK_ERR(ret);
              return *ret;
            }
            goto parse_error;
          case '8':
            if (op == "v128.store8_lane"sv) {
              auto ret = makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store8LaneVec128, 1);
              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(pos, "unrecognized instruction");
#endif // NEW_INSTRUCTION_PARSER

// clang-format on
