// 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':
    if (strcmp(op, "else") == 0) { return makeThenOrElse(s); }
    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':
    if (op == "else"sv) {
      auto ret = makeThenOrElse(ctx, in);
      CHECK_ERR(ret);
      return *ret;
    }
    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
