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

// clang-format off

// NOLINTBEGIN

auto op = *keyword;
char buf[33] = {};
// Ensure we do not copy more than the buffer can hold
if (op.size() >= sizeof(buf)) {
  goto parse_error;
}
memcpy(buf, op.data(), op.size());
switch (buf[0]) {
  case 'a': {
    switch (buf[1]) {
      case 'n':
        if (op == "any.convert_extern"sv) {
          CHECK_ERR(makeRefAs(ctx, pos, annotations, AnyConvertExtern));
          return Ok{};
        }
        goto parse_error;
      case 'r': {
        switch (buf[6]) {
          case 'a': {
            switch (buf[13]) {
              case 'g': {
                switch (buf[16]) {
                  case '\0':
                    if (op == "array.atomic.get"sv) {
                      CHECK_ERR(makeAtomicArrayGet(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[17]) {
                      case 's':
                        if (op == "array.atomic.get_s"sv) {
                          CHECK_ERR(makeAtomicArrayGet(ctx, pos, annotations, true));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "array.atomic.get_u"sv) {
                          CHECK_ERR(makeAtomicArrayGet(ctx, pos, annotations, false));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (buf[17]) {
                  case 'a': {
                    switch (buf[18]) {
                      case 'd':
                        if (op == "array.atomic.rmw.add"sv) {
                          CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWAdd));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'n':
                        if (op == "array.atomic.rmw.and"sv) {
                          CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWAnd));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'c':
                    if (op == "array.atomic.rmw.cmpxchg"sv) {
                      CHECK_ERR(makeArrayCmpxchg(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "array.atomic.rmw.or"sv) {
                      CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWOr));
                      return Ok{};
                    }
                    goto parse_error;
                  case 's':
                    if (op == "array.atomic.rmw.sub"sv) {
                      CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWSub));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'x': {
                    switch (buf[18]) {
                      case 'c':
                        if (op == "array.atomic.rmw.xchg"sv) {
                          CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWXchg));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'o':
                        if (op == "array.atomic.rmw.xor"sv) {
                          CHECK_ERR(makeArrayRMW(ctx, pos, annotations, RMWXor));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 's':
                if (op == "array.atomic.set"sv) {
                  CHECK_ERR(makeAtomicArraySet(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'c':
            if (op == "array.copy"sv) {
              CHECK_ERR(makeArrayCopy(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'f':
            if (op == "array.fill"sv) {
              CHECK_ERR(makeArrayFill(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'g': {
            switch (buf[9]) {
              case '\0':
                if (op == "array.get"sv) {
                  CHECK_ERR(makeArrayGet(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              case '_': {
                switch (buf[10]) {
                  case 's':
                    if (op == "array.get_s"sv) {
                      CHECK_ERR(makeArrayGet(ctx, pos, annotations, true));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "array.get_u"sv) {
                      CHECK_ERR(makeArrayGet(ctx, pos, annotations, 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, annotations));
                  return Ok{};
                }
                goto parse_error;
              case 'e':
                if (op == "array.init_elem"sv) {
                  CHECK_ERR(makeArrayInitElem(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'l':
            if (op == "array.len"sv) {
              CHECK_ERR(makeArrayLen(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'n': {
            switch (buf[9]) {
              case '\0':
                if (op == "array.new"sv) {
                  CHECK_ERR(makeArrayNew(ctx, pos, annotations, 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, annotations));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'e':
                        if (op == "array.new_default"sv) {
                          CHECK_ERR(makeArrayNew(ctx, pos, annotations, true));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'e':
                    if (op == "array.new_elem"sv) {
                      CHECK_ERR(makeArrayNewElem(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'f':
                    if (op == "array.new_fixed"sv) {
                      CHECK_ERR(makeArrayNewFixed(ctx, pos, annotations));
                      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, annotations));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 't':
        if (op == "atomic.fence"sv) {
          CHECK_ERR(makeAtomicFence(ctx, pos, annotations));
          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, annotations, false));
          return Ok{};
        }
        goto parse_error;
      case '_': {
        switch (buf[3]) {
          case 'i':
            if (op == "br_if"sv) {
              CHECK_ERR(makeBreak(ctx, pos, annotations, true));
              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, annotations, BrOnCast));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[11]) {
                      case 'd': {
                        switch (buf[15]) {
                          case '\0':
                            if (op == "br_on_cast_desc"sv) {
                              CHECK_ERR(makeBrOnCast(ctx, pos, annotations, BrOnCastDesc));
                              return Ok{};
                            }
                            goto parse_error;
                          case '_':
                            if (op == "br_on_cast_desc_fail"sv) {
                              CHECK_ERR(makeBrOnCast(ctx, pos, annotations, BrOnCastDescFail));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'f':
                        if (op == "br_on_cast_fail"sv) {
                          CHECK_ERR(makeBrOnCast(ctx, pos, annotations, BrOnCastFail));
                          return Ok{};
                        }
                        goto parse_error;
                      default: 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, annotations, true));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "br_on_null"sv) {
                      CHECK_ERR(makeBrOnNull(ctx, pos, annotations));
                      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, annotations));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'c': {
    switch (buf[1]) {
      case 'a': {
        switch (buf[4]) {
          case '\0':
            if (op == "call"sv) {
              CHECK_ERR(makeCall(ctx, pos, annotations, /*isReturn=*/false));
              return Ok{};
            }
            goto parse_error;
          case '_': {
            switch (buf[5]) {
              case 'i':
                if (op == "call_indirect"sv) {
                  CHECK_ERR(makeCallIndirect(ctx, pos, annotations, /*isReturn=*/false));
                  return Ok{};
                }
                goto parse_error;
              case 'r':
                if (op == "call_ref"sv) {
                  CHECK_ERR(makeCallRef(ctx, pos, annotations, /*isReturn=*/false));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'o': {
        switch (buf[5]) {
          case 'b':
            if (op == "cont.bind"sv) {
              CHECK_ERR(makeContBind(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'n':
            if (op == "cont.new"sv) {
              CHECK_ERR(makeContNew(ctx, pos, annotations));
              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, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'r':
        if (op == "drop"sv) {
          CHECK_ERR(makeDrop(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'e': {
    switch (buf[1]) {
      case 'l':
        if (op == "elem.drop"sv) {
          CHECK_ERR(makeElemDrop(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'x': {
        switch (buf[7]) {
          case 'c':
            if (op == "extern.convert_any"sv) {
              CHECK_ERR(makeRefAs(ctx, pos, annotations, ExternConvertAny));
              return Ok{};
            }
            goto parse_error;
          case 'e':
            if (op == "extern.externalize"sv) {
              CHECK_ERR(makeRefAs(ctx, pos, annotations, ExternConvertAny));
              return Ok{};
            }
            goto parse_error;
          case 'i':
            if (op == "extern.internalize"sv) {
              CHECK_ERR(makeRefAs(ctx, pos, annotations, AnyConvertExtern));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'f': {
    switch (buf[1]) {
      case '1': {
        switch (buf[6]) {
          case 'a': {
            switch (buf[7]) {
              case 'b':
                if (op == "f16x8.abs"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'd':
                if (op == "f16x8.add"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'c': {
            switch (buf[7]) {
              case 'e':
                if (op == "f16x8.ceil"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CeilVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'o': {
                switch (buf[20]) {
                  case 's':
                    if (op == "f16x8.convert_i16x8_s"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSVecI16x8ToVecF16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f16x8.convert_i16x8_u"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUVecI16x8ToVecF16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'd':
            if (op == "f16x8.div"sv) {
              CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivVecF16x8));
              return Ok{};
            }
            goto parse_error;
          case 'e': {
            switch (buf[7]) {
              case 'q':
                if (op == "f16x8.eq"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'x':
                if (op == "f16x8.extract_lane"sv) {
                  CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecF16x8, 8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'f':
            if (op == "f16x8.floor"sv) {
              CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorVecF16x8));
              return Ok{};
            }
            goto parse_error;
          case 'g': {
            switch (buf[7]) {
              case 'e':
                if (op == "f16x8.ge"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 't':
                if (op == "f16x8.gt"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'l': {
            switch (buf[7]) {
              case 'e':
                if (op == "f16x8.le"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 't':
                if (op == "f16x8.lt"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'm': {
            switch (buf[7]) {
              case 'a':
                if (op == "f16x8.max"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'i':
                if (op == "f16x8.min"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'u':
                if (op == "f16x8.mul"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n': {
            switch (buf[8]) {
              case '\0':
                if (op == "f16x8.ne"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'a':
                if (op == "f16x8.nearest"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'g':
                if (op == "f16x8.neg"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'p': {
            switch (buf[8]) {
              case 'a':
                if (op == "f16x8.pmax"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMaxVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'i':
                if (op == "f16x8.pmin"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMinVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'r': {
            switch (buf[8]) {
              case 'l': {
                switch (buf[14]) {
                  case 'm':
                    if (op == "f16x8.relaxed_madd"sv) {
                      CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedMaddVecF16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'n':
                    if (op == "f16x8.relaxed_nmadd"sv) {
                      CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedNmaddVecF16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "f16x8.replace_lane"sv) {
                  CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecF16x8, 8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 's': {
            switch (buf[7]) {
              case 'p':
                if (op == "f16x8.splat"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'q':
                if (op == "f16x8.sqrt"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'u':
                if (op == "f16x8.sub"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecF16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 't':
            if (op == "f16x8.trunc"sv) {
              CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncVecF16x8));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      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, annotations, UnaryOp::AbsFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f32.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, UnaryOp::ConvertSInt32ToFloat32));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i32_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ConvertSInt64ToFloat32));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f32.convert_i64_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::DemoteFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.div"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'e':
                if (op == "f32.eq"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqFloat32));
                  return Ok{};
                }
                goto parse_error;
              case 'f':
                if (op == "f32.floor"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorFloat32));
                  return Ok{};
                }
                goto parse_error;
              case 'g': {
                switch (buf[5]) {
                  case 'e':
                    if (op == "f32.ge"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32.gt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'o': {
                    switch (buf[8]) {
                      case '\0':
                        if (op == "f32.load"sv) {
                          CHECK_ERR(makeLoad(ctx, pos, annotations, Type::f32, /*signed=*/false, 4, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      case '_':
                        if (op == "f32.load_f16"sv) {
                          CHECK_ERR(makeLoad(ctx, pos, annotations, Type::f32, /*signed=*/false, 2, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't':
                    if (op == "f32.lt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32.min"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32.mul"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f32.nearest"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f32.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "f32.reinterpret_i32"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretInt32));
                  return Ok{};
                }
                goto parse_error;
              case 's': {
                switch (buf[5]) {
                  case 'q':
                    if (op == "f32.sqrt"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't': {
                    switch (buf[9]) {
                      case '\0':
                        if (op == "f32.store"sv) {
                          CHECK_ERR(makeStore(ctx, pos, annotations, Type::f32, 4, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      case '_':
                        if (op == "f32.store_f16"sv) {
                          CHECK_ERR(makeStore(ctx, pos, annotations, Type::f32, 2, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "f32.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubFloat32));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32.trunc"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::AbsVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f32x4.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::ConvertSVecI32x4ToVecF32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "f32x4.convert_i32x4_u"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::DemoteZeroVecF64x2ToVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.div"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::EqVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "f32x4.extract_lane"sv) {
                      CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecF32x4, 4));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f32x4.floor"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorVecF32x4));
                  return Ok{};
                }
                goto parse_error;
              case 'g': {
                switch (buf[7]) {
                  case 'e':
                    if (op == "f32x4.ge"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.gt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f32x4.lt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.min"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.mul"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f32x4.nearest"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f32x4.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::PMaxVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f32x4.pmin"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMinVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'm': {
                        switch (buf[15]) {
                          case 'a': {
                            switch (buf[16]) {
                              case 'd':
                                if (op == "f32x4.relaxed_madd"sv) {
                                  CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedMaddVecF32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'x':
                                if (op == "f32x4.relaxed_max"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMaxVecF32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'i':
                            if (op == "f32x4.relaxed_min"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMinVecF32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'n':
                        if (op == "f32x4.relaxed_nmadd"sv) {
                          CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedNmaddVecF32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f32x4.replace_lane"sv) {
                      CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, 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, annotations, UnaryOp::SplatVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'q':
                    if (op == "f32x4.sqrt"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f32x4.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecF32x4));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f32x4.trunc"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::AbsFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f64.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, UnaryOp::ConvertSInt32ToFloat64));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i32_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ConvertSInt64ToFloat64));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "f64.convert_i64_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::DivFloat64));
                  return Ok{};
                }
                goto parse_error;
              case 'e':
                if (op == "f64.eq"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqFloat64));
                  return Ok{};
                }
                goto parse_error;
              case 'f':
                if (op == "f64.floor"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorFloat64));
                  return Ok{};
                }
                goto parse_error;
              case 'g': {
                switch (buf[5]) {
                  case 'e':
                    if (op == "f64.ge"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.gt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "f64.load"sv) {
                      CHECK_ERR(makeLoad(ctx, pos, annotations, Type::f64, /*signed=*/false, 8, /*isAtomic=*/false));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.lt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f64.min"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.mul"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f64.nearest"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f64.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "f64.promote_f32"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PromoteFloat32));
                  return Ok{};
                }
                goto parse_error;
              case 'r':
                if (op == "f64.reinterpret_i64"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretInt64));
                  return Ok{};
                }
                goto parse_error;
              case 's': {
                switch (buf[5]) {
                  case 'q':
                    if (op == "f64.sqrt"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64.store"sv) {
                      CHECK_ERR(makeStore(ctx, pos, annotations, Type::f64, 8, /*isAtomic=*/false));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubFloat64));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64.trunc"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::AbsVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "f64x2.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::ConvertLowSVecI32x4ToVecF64x2));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "f64x2.convert_low_i32x4_u"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::DivVecF64x2));
                  return Ok{};
                }
                goto parse_error;
              case 'e': {
                switch (buf[7]) {
                  case 'q':
                    if (op == "f64x2.eq"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "f64x2.extract_lane"sv) {
                      CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecF64x2, 2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'f':
                if (op == "f64x2.floor"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorVecF64x2));
                  return Ok{};
                }
                goto parse_error;
              case 'g': {
                switch (buf[7]) {
                  case 'e':
                    if (op == "f64x2.ge"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.gt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "f64x2.lt"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'i':
                    if (op == "f64x2.min"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.mul"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'a':
                    if (op == "f64x2.nearest"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "f64x2.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::PMaxVecF64x2));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'i':
                        if (op == "f64x2.pmin"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::PromoteLowVecF32x4ToVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r': {
                switch (buf[8]) {
                  case 'l': {
                    switch (buf[14]) {
                      case 'm': {
                        switch (buf[15]) {
                          case 'a': {
                            switch (buf[16]) {
                              case 'd':
                                if (op == "f64x2.relaxed_madd"sv) {
                                  CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedMaddVecF64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'x':
                                if (op == "f64x2.relaxed_max"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMaxVecF64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              default: goto parse_error;
                            }
                          }
                          case 'i':
                            if (op == "f64x2.relaxed_min"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMinVecF64x2));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'n':
                        if (op == "f64x2.relaxed_nmadd"sv) {
                          CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedNmaddVecF64x2));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'p':
                    if (op == "f64x2.replace_lane"sv) {
                      CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, 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, annotations, UnaryOp::SplatVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'q':
                    if (op == "f64x2.sqrt"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "f64x2.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecF64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 't':
                if (op == "f64x2.trunc"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations));
          return Ok{};
        }
        goto parse_error;
      case 's':
        if (op == "global.set"sv) {
          CHECK_ERR(makeGlobalSet(ctx, pos, annotations));
          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, annotations, UnaryOp::AbsVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'd': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i16x8.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::AddSatSVecI16x8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.add_sat_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::AllTrueVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'v':
                if (op == "i16x8.avgr_u"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AvgrUVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i16x8.bitmask"sv) {
              CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI16x8));
              return Ok{};
            }
            goto parse_error;
          case 'd':
            if (op == "i16x8.dot_i8x16_i7x16_s"sv) {
              CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DotI8x16I7x16SToVecI16x8));
              return Ok{};
            }
            goto parse_error;
          case 'e': {
            switch (buf[7]) {
              case 'q':
                if (op == "i16x8.eq"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extadd_pairwise_i8x16_u"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendHighSVecI8x16ToVecI16x8));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_high_i8x16_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendLowSVecI8x16ToVecI16x8));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extend_low_i8x16_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulHighSVecI16x8));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_high_i8x16_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulLowSVecI16x8));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i16x8.extmul_low_i8x16_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, SIMDExtractOp::ExtractLaneSVecI16x8, 8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.extract_lane_u"sv) {
                          CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, 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, annotations, BinaryOp::GeSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.ge_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::GtSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.gt_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::LeSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.le_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LtSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.lt_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.max_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MinSVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.min_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinUVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'u':
                if (op == "i16x8.mul"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NarrowSVecI32x4ToVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i16x8.narrow_i32x4_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeVecI16x8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i16x8.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::RelaxedQ15MulrSVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'p':
                if (op == "i16x8.replace_lane"sv) {
                  CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, 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, annotations, 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, annotations, SIMDShiftOp::ShrSVecI16x8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.shr_u"sv) {
                          CHECK_ERR(makeSIMDShift(ctx, pos, annotations, 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, annotations, UnaryOp::SplatVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'u': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i16x8.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::SubSatSVecI16x8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i16x8.sub_sat_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubSatUVecI16x8));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 't': {
            switch (buf[22]) {
              case 's':
                if (op == "i16x8.trunc_sat_f16x8_s"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSVecF16x8ToVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              case 'u':
                if (op == "i16x8.trunc_sat_f16x8_u"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUVecF16x8ToVecI16x8));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case '3': {
        switch (buf[2]) {
          case '1': {
            switch (buf[8]) {
              case 's':
                if (op == "i31.get_s"sv) {
                  CHECK_ERR(makeI31Get(ctx, pos, annotations, true));
                  return Ok{};
                }
                goto parse_error;
              case 'u':
                if (op == "i31.get_u"sv) {
                  CHECK_ERR(makeI31Get(ctx, pos, annotations, false));
                  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, annotations, BinaryOp::AddInt32));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'n':
                        if (op == "i32.and"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, AtomicRMWOp::RMWAdd, Type::i32, 4));
                                          return Ok{};
                                        }
                                        goto parse_error;
                                      case 'n':
                                        if (op == "i32.atomic.rmw.and"sv) {
                                          CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, Type::i32, 4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw.or"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i32, 4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 's':
                                    if (op == "i32.atomic.rmw.sub"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, AtomicRMWOp::RMWXchg, Type::i32, 4));
                                          return Ok{};
                                        }
                                        goto parse_error;
                                      case 'o':
                                        if (op == "i32.atomic.rmw.xor"sv) {
                                          CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i32, 2));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw16.or_u"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i32, 1));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i32.atomic.rmw8.or_u"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i32, 4, /*isAtomic=*/true));
                                  return Ok{};
                                }
                                goto parse_error;
                              case '1':
                                if (op == "i32.atomic.store16"sv) {
                                  CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 2, /*isAtomic=*/true));
                                  return Ok{};
                                }
                                goto parse_error;
                              case '8':
                                if (op == "i32.atomic.store8"sv) {
                                  CHECK_ERR(makeStore(ctx, pos, annotations, 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, annotations, UnaryOp::ClzInt32));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'o':
                        if (op == "i32.const"sv) {
                          CHECK_ERR(makeConst(ctx, pos, annotations, Type::i32));
                          return Ok{};
                        }
                        goto parse_error;
                      case 't':
                        if (op == "i32.ctz"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::DivSInt32));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i32.div_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::EqInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'z':
                            if (op == "i32.eqz"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendS16Int32));
                              return Ok{};
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i32.extend8_s"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::GeSInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.ge_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::GtSInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.gt_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeSInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.le_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, BinaryOp::LtSInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32.lt_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MulInt32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'n':
                    if (op == "i32.ne"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeInt32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "i32.or"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrInt32));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'p':
                    if (op == "i32.popcnt"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::RemSInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.rem_u"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::RotLInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'r':
                            if (op == "i32.rotr"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::ShrSInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.shr_u"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, Type::i32, 4, /*isAtomic=*/false));
                              return Ok{};
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i32.store16"sv) {
                              CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 2, /*isAtomic=*/false));
                              return Ok{};
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i32.store8"sv) {
                              CHECK_ERR(makeStore(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::TruncSFloat32ToInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f32_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSFloat64ToInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_f64_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatSFloat32ToInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f32_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatSFloat64ToInt32));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32.trunc_sat_f64_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::WrapInt64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'x':
                    if (op == "i32.xor"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::AbsVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'd':
                        if (op == "i32x4.add"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'l':
                        if (op == "i32x4.all_true"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'b':
                    if (op == "i32x4.bitmask"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::DotSVecI16x8ToVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i32x4.dot_i8x16_i7x16_add_s"sv) {
                          CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.extadd_pairwise_i16x8_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendHighSVecI16x8ToVecI32x4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_high_i16x8_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendLowSVecI16x8ToVecI32x4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extend_low_i16x8_u"sv) {
                                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulHighSVecI32x4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_high_i16x8_u"sv) {
                                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulLowSVecI32x4));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'u':
                                    if (op == "i32x4.extmul_low_i16x8_u"sv) {
                                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::GeSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.ge_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::GtSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.gt_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::LeSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.le_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LtSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.lt_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.max_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MinSVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.min_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinUVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'u':
                        if (op == "i32x4.mul"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'g':
                        if (op == "i32x4.neg"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f32x4_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.relaxed_trunc_f64x2_u_zero"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, SIMDShiftOp::ShrSVecI32x4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i32x4.shr_u"sv) {
                                  CHECK_ERR(makeSIMDShift(ctx, pos, annotations, 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, annotations, UnaryOp::SplatVecI32x4));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i32x4.sub"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatSVecF32x4ToVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f32x4_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i32x4.trunc_sat_f64x2_u_zero"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::AddInt64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'n':
                    if (op == "i64.and"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, AtomicRMWOp::RMWAdd, Type::i64, 8));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'n':
                                    if (op == "i64.atomic.rmw.and"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, Type::i64, 8));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw.or"sv) {
                                  CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i64, 8));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 's':
                                if (op == "i64.atomic.rmw.sub"sv) {
                                  CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, AtomicRMWOp::RMWXchg, Type::i64, 8));
                                      return Ok{};
                                    }
                                    goto parse_error;
                                  case 'o':
                                    if (op == "i64.atomic.rmw.xor"sv) {
                                      CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i64, 2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw16.or_u"sv) {
                                  CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i64, 4));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw32.or_u"sv) {
                                  CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i64, 1));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'o':
                                if (op == "i64.atomic.rmw8.or_u"sv) {
                                  CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, Type::i64, 8, /*isAtomic=*/true));
                              return Ok{};
                            }
                            goto parse_error;
                          case '1':
                            if (op == "i64.atomic.store16"sv) {
                              CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 2, /*isAtomic=*/true));
                              return Ok{};
                            }
                            goto parse_error;
                          case '3':
                            if (op == "i64.atomic.store32"sv) {
                              CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 4, /*isAtomic=*/true));
                              return Ok{};
                            }
                            goto parse_error;
                          case '8':
                            if (op == "i64.atomic.store8"sv) {
                              CHECK_ERR(makeStore(ctx, pos, annotations, 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, annotations, UnaryOp::ClzInt64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'o':
                    if (op == "i64.const"sv) {
                      CHECK_ERR(makeConst(ctx, pos, annotations, Type::i64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64.ctz"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::DivSInt64));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i64.div_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::EqInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'z':
                        if (op == "i64.eqz"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendS16Int64));
                          return Ok{};
                        }
                        goto parse_error;
                      case '3':
                        if (op == "i64.extend32_s"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS32Int64));
                          return Ok{};
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i64.extend8_s"sv) {
                          CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendSInt32));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.extend_i32_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::GeSInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.ge_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::GtSInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.gt_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LeSInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.le_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, 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, annotations, BinaryOp::LtSInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i64.lt_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MulInt64));
                  return Ok{};
                }
                goto parse_error;
              case 'n':
                if (op == "i64.ne"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeInt64));
                  return Ok{};
                }
                goto parse_error;
              case 'o':
                if (op == "i64.or"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrInt64));
                  return Ok{};
                }
                goto parse_error;
              case 'p':
                if (op == "i64.popcnt"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::RemSInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.rem_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::RotLInt64));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'r':
                        if (op == "i64.rotr"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::ShrSInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.shr_u"sv) {
                              CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, Type::i64, 8, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      case '1':
                        if (op == "i64.store16"sv) {
                          CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 2, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      case '3':
                        if (op == "i64.store32"sv) {
                          CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 4, /*isAtomic=*/false));
                          return Ok{};
                        }
                        goto parse_error;
                      case '8':
                        if (op == "i64.store8"sv) {
                          CHECK_ERR(makeStore(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::TruncSFloat32ToInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f32_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSFloat64ToInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_f64_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatSFloat32ToInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f32_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::TruncSatSFloat64ToInt64));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64.trunc_sat_f64_u"sv) {
                              CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, UnaryOp::AbsVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'd':
                    if (op == "i64x2.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'l':
                    if (op == "i64x2.all_true"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'b':
                if (op == "i64x2.bitmask"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI64x2));
                  return Ok{};
                }
                goto parse_error;
              case 'e': {
                switch (buf[7]) {
                  case 'q':
                    if (op == "i64x2.eq"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendHighSVecI32x4ToVecI64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_high_i32x4_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, UnaryOp::ExtendLowSVecI32x4ToVecI64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extend_low_i32x4_u"sv) {
                                  CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulHighSVecI64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_high_i32x4_u"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::ExtMulLowSVecI64x2));
                                  return Ok{};
                                }
                                goto parse_error;
                              case 'u':
                                if (op == "i64x2.extmul_low_i32x4_u"sv) {
                                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::GeSVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.gt_s"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, SIMDTernaryOp::LaneselectI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'e':
                    if (op == "i64x2.le_s"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 't':
                    if (op == "i64x2.lt_s"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'm':
                if (op == "i64x2.mul"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecI64x2));
                  return Ok{};
                }
                goto parse_error;
              case 'n': {
                switch (buf[8]) {
                  case '\0':
                    if (op == "i64x2.ne"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i64x2.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'r':
                if (op == "i64x2.replace_lane"sv) {
                  CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, 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, annotations, 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, annotations, SIMDShiftOp::ShrSVecI64x2));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "i64x2.shr_u"sv) {
                              CHECK_ERR(makeSIMDShift(ctx, pos, annotations, 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, annotations, UnaryOp::SplatVecI64x2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i64x2.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::AbsVecI8x16));
                  return Ok{};
                }
                goto parse_error;
              case 'd': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i8x16.add"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::AddSatSVecI8x16));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.add_sat_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, UnaryOp::AllTrueVecI8x16));
                  return Ok{};
                }
                goto parse_error;
              case 'v':
                if (op == "i8x16.avgr_u"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AvgrUVecI8x16));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'b':
            if (op == "i8x16.bitmask"sv) {
              CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI8x16));
              return Ok{};
            }
            goto parse_error;
          case 'e': {
            switch (buf[7]) {
              case 'q':
                if (op == "i8x16.eq"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, SIMDExtractOp::ExtractLaneSVecI8x16, 16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.extract_lane_u"sv) {
                      CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, 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, annotations, BinaryOp::GeSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.ge_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::GtSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.gt_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::LeSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.le_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::LtSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.lt_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MaxSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.max_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::MinSVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.min_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NarrowSVecI16x8ToVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "i8x16.narrow_i16x8_u"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::NeVecI8x16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'g':
                    if (op == "i8x16.neg"sv) {
                      CHECK_ERR(makeUnary(ctx, pos, annotations, 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, annotations, 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, annotations, BinaryOp::RelaxedSwizzleVecI8x16));
                  return Ok{};
                }
                goto parse_error;
              case 'p':
                if (op == "i8x16.replace_lane"sv) {
                  CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, 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, annotations, 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, annotations, SIMDShiftOp::ShrSVecI8x16));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.shr_u"sv) {
                          CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrUVecI8x16));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'u':
                    if (op == "i8x16.shuffle"sv) {
                      CHECK_ERR(makeSIMDShuffle(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'p':
                if (op == "i8x16.splat"sv) {
                  CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecI8x16));
                  return Ok{};
                }
                goto parse_error;
              case 'u': {
                switch (buf[9]) {
                  case '\0':
                    if (op == "i8x16.sub"sv) {
                      CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, BinaryOp::SubSatSVecI8x16));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "i8x16.sub_sat_u"sv) {
                          CHECK_ERR(makeBinary(ctx, pos, annotations, 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, annotations, 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, annotations));
          return Ok{};
        }
        goto parse_error;
      case 's':
        if (op == "local.set"sv) {
          CHECK_ERR(makeLocalSet(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 't':
        if (op == "local.tee"sv) {
          CHECK_ERR(makeLocalTee(ctx, pos, annotations));
          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, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'w': {
            switch (buf[18]) {
              case '3':
                if (op == "memory.atomic.wait32"sv) {
                  CHECK_ERR(makeAtomicWait(ctx, pos, annotations, Type::i32));
                  return Ok{};
                }
                goto parse_error;
              case '6':
                if (op == "memory.atomic.wait64"sv) {
                  CHECK_ERR(makeAtomicWait(ctx, pos, annotations, 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, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'f':
        if (op == "memory.fill"sv) {
          CHECK_ERR(makeMemoryFill(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'g':
        if (op == "memory.grow"sv) {
          CHECK_ERR(makeMemoryGrow(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'i':
        if (op == "memory.init"sv) {
          CHECK_ERR(makeMemoryInit(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 's':
        if (op == "memory.size"sv) {
          CHECK_ERR(makeMemorySize(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  case 'n':
    if (op == "nop"sv) {
      CHECK_ERR(makeNop(ctx, pos, annotations));
      return Ok{};
    }
    goto parse_error;
  case 'p': {
    switch (buf[1]) {
      case 'a':
        if (op == "pause"sv) {
          CHECK_ERR(makePause(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'o':
        if (op == "pop"sv) {
          CHECK_ERR(makePop(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      default: 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, annotations, RefAsNonNull));
              return Ok{};
            }
            goto parse_error;
          case 'c': {
            switch (buf[8]) {
              case '\0':
                if (op == "ref.cast"sv) {
                  CHECK_ERR(makeRefCast(ctx, pos, annotations, false));
                  return Ok{};
                }
                goto parse_error;
              case '_':
                if (op == "ref.cast_desc"sv) {
                  CHECK_ERR(makeRefCast(ctx, pos, annotations, true));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'e':
            if (op == "ref.eq"sv) {
              CHECK_ERR(makeRefEq(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'f':
            if (op == "ref.func"sv) {
              CHECK_ERR(makeRefFunc(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'g':
            if (op == "ref.get_desc"sv) {
              CHECK_ERR(makeRefGetDesc(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'i': {
            switch (buf[5]) {
              case '3': {
                switch (buf[7]) {
                  case '\0':
                    if (op == "ref.i31"sv) {
                      CHECK_ERR(makeRefI31(ctx, pos, annotations, Unshared));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_':
                    if (op == "ref.i31_shared"sv) {
                      CHECK_ERR(makeRefI31(ctx, pos, annotations, Shared));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 's':
                if (op == "ref.is_null"sv) {
                  CHECK_ERR(makeRefIsNull(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'n':
            if (op == "ref.null"sv) {
              CHECK_ERR(makeRefNull(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 't':
            if (op == "ref.test"sv) {
              CHECK_ERR(makeRefTest(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 's': {
        switch (buf[6]) {
          case '\0':
            if (op == "resume"sv) {
              CHECK_ERR(makeResume(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case '_': {
            switch (buf[12]) {
              case '\0':
                if (op == "resume_throw"sv) {
                  CHECK_ERR(makeResumeThrow(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              case '_':
                if (op == "resume_throw_ref"sv) {
                  CHECK_ERR(makeResumeThrowRef(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 't': {
        switch (buf[3]) {
          case 'h':
            if (op == "rethrow"sv) {
              CHECK_ERR(makeRethrow(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'u': {
            switch (buf[6]) {
              case '\0':
                if (op == "return"sv) {
                  CHECK_ERR(makeReturn(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              case '_': {
                switch (buf[11]) {
                  case '\0':
                    if (op == "return_call"sv) {
                      CHECK_ERR(makeCall(ctx, pos, annotations, /*isReturn=*/true));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[12]) {
                      case 'i':
                        if (op == "return_call_indirect"sv) {
                          CHECK_ERR(makeCallIndirect(ctx, pos, annotations, /*isReturn=*/true));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'r':
                        if (op == "return_call_ref"sv) {
                          CHECK_ERR(makeCallRef(ctx, pos, annotations, /*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, annotations));
          return Ok{};
        }
        goto parse_error;
      case 't': {
        switch (buf[3]) {
          case 'i': {
            switch (buf[6]) {
              case '.': {
                switch (buf[7]) {
                  case 'a':
                    if (op == "string.as_wtf16"sv) {
                      CHECK_ERR(ignore(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'c': {
                    switch (buf[9]) {
                      case 'm':
                        if (op == "string.compare"sv) {
                          CHECK_ERR(makeStringEq(ctx, pos, annotations, StringEqCompare));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'n': {
                        switch (buf[10]) {
                          case 'c':
                            if (op == "string.concat"sv) {
                              CHECK_ERR(makeStringConcat(ctx, pos, annotations));
                              return Ok{};
                            }
                            goto parse_error;
                          case 's':
                            if (op == "string.const"sv) {
                              CHECK_ERR(makeStringConst(ctx, pos, annotations));
                              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':
                            if (op == "string.encode_lossy_utf8_array"sv) {
                              CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeLossyUTF8Array));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'w':
                            if (op == "string.encode_wtf16_array"sv) {
                              CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeWTF16Array));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'q':
                        if (op == "string.eq"sv) {
                          CHECK_ERR(makeStringEq(ctx, pos, annotations, StringEqEqual));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'f':
                    if (op == "string.from_code_point"sv) {
                      CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewFromCodePoint));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'm': {
                    switch (buf[15]) {
                      case 'u':
                        if (op == "string.measure_utf8"sv) {
                          CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureUTF8));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'w':
                        if (op == "string.measure_wtf16"sv) {
                          CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureWTF16));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 'n': {
                    switch (buf[11]) {
                      case 'l':
                        if (op == "string.new_lossy_utf8_array"sv) {
                          CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewLossyUTF8Array));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'w':
                        if (op == "string.new_wtf16_array"sv) {
                          CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewWTF16Array));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  case 't':
                    if (op == "string.test"sv) {
                      CHECK_ERR(makeStringTest(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'v': {
                switch (buf[17]) {
                  case 'g':
                    if (op == "stringview_wtf16.get_codeunit"sv) {
                      CHECK_ERR(makeStringWTF16Get(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'l':
                    if (op == "stringview_wtf16.length"sv) {
                      CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureWTF16));
                      return Ok{};
                    }
                    goto parse_error;
                  case 's':
                    if (op == "stringview_wtf16.slice"sv) {
                      CHECK_ERR(makeStringSliceWTF(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              default: goto parse_error;
            }
          }
          case 'u': {
            switch (buf[7]) {
              case 'a': {
                switch (buf[14]) {
                  case 'g': {
                    switch (buf[17]) {
                      case '\0':
                        if (op == "struct.atomic.get"sv) {
                          CHECK_ERR(makeAtomicStructGet(ctx, pos, annotations));
                          return Ok{};
                        }
                        goto parse_error;
                      case '_': {
                        switch (buf[18]) {
                          case 's':
                            if (op == "struct.atomic.get_s"sv) {
                              CHECK_ERR(makeAtomicStructGet(ctx, pos, annotations, true));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'u':
                            if (op == "struct.atomic.get_u"sv) {
                              CHECK_ERR(makeAtomicStructGet(ctx, pos, annotations, false));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 'r': {
                    switch (buf[18]) {
                      case 'a': {
                        switch (buf[19]) {
                          case 'd':
                            if (op == "struct.atomic.rmw.add"sv) {
                              CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWAdd));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'n':
                            if (op == "struct.atomic.rmw.and"sv) {
                              CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWAnd));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 'c':
                        if (op == "struct.atomic.rmw.cmpxchg"sv) {
                          CHECK_ERR(makeStructCmpxchg(ctx, pos, annotations));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'o':
                        if (op == "struct.atomic.rmw.or"sv) {
                          CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWOr));
                          return Ok{};
                        }
                        goto parse_error;
                      case 's':
                        if (op == "struct.atomic.rmw.sub"sv) {
                          CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWSub));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'x': {
                        switch (buf[19]) {
                          case 'c':
                            if (op == "struct.atomic.rmw.xchg"sv) {
                              CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWXchg));
                              return Ok{};
                            }
                            goto parse_error;
                          case 'o':
                            if (op == "struct.atomic.rmw.xor"sv) {
                              CHECK_ERR(makeStructRMW(ctx, pos, annotations, RMWXor));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      default: goto parse_error;
                    }
                  }
                  case 's':
                    if (op == "struct.atomic.set"sv) {
                      CHECK_ERR(makeAtomicStructSet(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  default: goto parse_error;
                }
              }
              case 'g': {
                switch (buf[10]) {
                  case '\0':
                    if (op == "struct.get"sv) {
                      CHECK_ERR(makeStructGet(ctx, pos, annotations));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[11]) {
                      case 's':
                        if (op == "struct.get_s"sv) {
                          CHECK_ERR(makeStructGet(ctx, pos, annotations, true));
                          return Ok{};
                        }
                        goto parse_error;
                      case 'u':
                        if (op == "struct.get_u"sv) {
                          CHECK_ERR(makeStructGet(ctx, pos, annotations, 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, annotations, false, false));
                      return Ok{};
                    }
                    goto parse_error;
                  case '_': {
                    switch (buf[13]) {
                      case 'f': {
                        switch (buf[18]) {
                          case '\0':
                            if (op == "struct.new_default"sv) {
                              CHECK_ERR(makeStructNew(ctx, pos, annotations, true, false));
                              return Ok{};
                            }
                            goto parse_error;
                          case '_':
                            if (op == "struct.new_default_desc"sv) {
                              CHECK_ERR(makeStructNew(ctx, pos, annotations, true, true));
                              return Ok{};
                            }
                            goto parse_error;
                          default: goto parse_error;
                        }
                      }
                      case 's':
                        if (op == "struct.new_desc"sv) {
                          CHECK_ERR(makeStructNew(ctx, pos, annotations, false, true));
                          return Ok{};
                        }
                        goto parse_error;
                      default: goto parse_error;
                    }
                  }
                  default: goto parse_error;
                }
              }
              case 's':
                if (op == "struct.set"sv) {
                  CHECK_ERR(makeStructSet(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'u':
        if (op == "suspend"sv) {
          CHECK_ERR(makeSuspend(ctx, pos, annotations));
          return Ok{};
        }
        goto parse_error;
      case 'w':
        if (op == "switch"sv) {
          CHECK_ERR(makeStackSwitch(ctx, pos, annotations));
          return Ok{};
        }
        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, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'f':
            if (op == "table.fill"sv) {
              CHECK_ERR(makeTableFill(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'g': {
            switch (buf[7]) {
              case 'e':
                if (op == "table.get"sv) {
                  CHECK_ERR(makeTableGet(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              case 'r':
                if (op == "table.grow"sv) {
                  CHECK_ERR(makeTableGrow(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'i':
            if (op == "table.init"sv) {
              CHECK_ERR(makeTableInit(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 's': {
            switch (buf[7]) {
              case 'e':
                if (op == "table.set"sv) {
                  CHECK_ERR(makeTableSet(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              case 'i':
                if (op == "table.size"sv) {
                  CHECK_ERR(makeTableSize(ctx, pos, annotations));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          default: goto parse_error;
        }
      }
      case 'h': {
        switch (buf[5]) {
          case '\0':
            if (op == "throw"sv) {
              CHECK_ERR(makeThrow(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case '_':
            if (op == "throw_ref"sv) {
              CHECK_ERR(makeThrowRef(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'u': {
        switch (buf[6]) {
          case 'd':
            if (op == "tuple.drop"sv) {
              CHECK_ERR(makeTupleDrop(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'e':
            if (op == "tuple.extract"sv) {
              CHECK_ERR(makeTupleExtract(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          case 'm':
            if (op == "tuple.make"sv) {
              CHECK_ERR(makeTupleMake(ctx, pos, annotations));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      default: goto parse_error;
    }
  }
  case 'u':
    if (op == "unreachable"sv) {
      CHECK_ERR(makeUnreachable(ctx, pos, annotations));
      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, annotations, BinaryOp::AndVec128));
                  return Ok{};
                }
                goto parse_error;
              case 'n':
                if (op == "v128.andnot"sv) {
                  CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AndNotVec128));
                  return Ok{};
                }
                goto parse_error;
              default: goto parse_error;
            }
          }
          case 'y':
            if (op == "v128.any_true"sv) {
              CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AnyTrueVec128));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'b':
        if (op == "v128.bitselect"sv) {
          CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::Bitselect));
          return Ok{};
        }
        goto parse_error;
      case 'c':
        if (op == "v128.const"sv) {
          CHECK_ERR(makeConst(ctx, pos, annotations, Type::v128));
          return Ok{};
        }
        goto parse_error;
      case 'l': {
        switch (buf[9]) {
          case '\0':
            if (op == "v128.load"sv) {
              CHECK_ERR(makeLoad(ctx, pos, annotations, 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, annotations, SIMDLoadStoreLaneOp::Load16LaneVec128, 2));
                      return Ok{};
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load16_splat"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadOp::Load16x4SVec128, 8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load16x4_u"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadStoreLaneOp::Load32LaneVec128, 4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load32_splat"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load32SplatVec128, 4));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'z':
                    if (op == "v128.load32_zero"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadOp::Load32x2SVec128, 8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load32x2_u"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadStoreLaneOp::Load64LaneVec128, 8));
                  return Ok{};
                }
                goto parse_error;
              case 's':
                if (op == "v128.load64_splat"sv) {
                  CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load64SplatVec128, 8));
                  return Ok{};
                }
                goto parse_error;
              case 'z':
                if (op == "v128.load64_zero"sv) {
                  CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadStoreLaneOp::Load8LaneVec128, 1));
                      return Ok{};
                    }
                    goto parse_error;
                  case 's':
                    if (op == "v128.load8_splat"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, SIMDLoadOp::Load8x8SVec128, 8));
                      return Ok{};
                    }
                    goto parse_error;
                  case 'u':
                    if (op == "v128.load8x8_u"sv) {
                      CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, 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, annotations, UnaryOp::NotVec128));
          return Ok{};
        }
        goto parse_error;
      case 'o':
        if (op == "v128.or"sv) {
          CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrVec128));
          return Ok{};
        }
        goto parse_error;
      case 's': {
        switch (buf[10]) {
          case '\0':
            if (op == "v128.store"sv) {
              CHECK_ERR(makeStore(ctx, pos, annotations, Type::v128, 16, /*isAtomic=*/false));
              return Ok{};
            }
            goto parse_error;
          case '1':
            if (op == "v128.store16_lane"sv) {
              CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store16LaneVec128, 2));
              return Ok{};
            }
            goto parse_error;
          case '3':
            if (op == "v128.store32_lane"sv) {
              CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store32LaneVec128, 4));
              return Ok{};
            }
            goto parse_error;
          case '6':
            if (op == "v128.store64_lane"sv) {
              CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store64LaneVec128, 8));
              return Ok{};
            }
            goto parse_error;
          case '8':
            if (op == "v128.store8_lane"sv) {
              CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store8LaneVec128, 1));
              return Ok{};
            }
            goto parse_error;
          default: goto parse_error;
        }
      }
      case 'x':
        if (op == "v128.xor"sv) {
          CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::XorVec128));
          return Ok{};
        }
        goto parse_error;
      default: goto parse_error;
    }
  }
  default: goto parse_error;
}
parse_error:
  return ctx.in.err(pos, "unrecognized instruction");

// NOLINTEND

// clang-format on
