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