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

// clang-format off

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

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

// clang-format on
