main (int argc, char * * argv)
{
  char * * D.21681;
  char * D.21682;
  int D.21686;
  int D.21674;
  int iftmp.0;
  int D.21673;
  const char[7] * D.21690;
  unsigned char D.21691;
  int D.21692;
  unsigned char D.21693;
  int D.21694;
  const unsigned char * D.21699;
  unsigned char D.21700;
  int D.21701;
  const unsigned char * D.21702;
  unsigned char D.21703;
  int D.21704;
  const unsigned char * D.21709;
  unsigned char D.21710;
  int D.21711;
  const unsigned char * D.21712;
  unsigned char D.21713;
  int D.21714;
  const unsigned char * D.21719;
  unsigned char D.21720;
  int D.21721;
  const unsigned char * D.21722;
  unsigned char D.21723;
  int D.21724;
  unsigned int i.1;
  unsigned int D.21729;
  char * * D.21730;
  char * D.21731;
  int nacl.2;
  int D.21733;
  unsigned int D.21734;
  unsigned int D.21735;
  char * * D.21736;
  char * D.21737;
  int D.21738;
  unsigned int D.21739;
  unsigned int D.21740;
  char * * D.21741;
  char * D.21742;

  init_table ();
  if (argc == 2) goto <D.21679>; else goto <D.21680>;
  <D.21679>:
  D.21681 = argv + 4;
  D.21682 = *D.21681;
  load_file (D.21682);
  dump ();
  goto <D.21683>;
  <D.21680>:
  if (argc <= 3) goto <D.21684>; else goto <D.21685>;
  <D.21684>:
  monoeg_g_print ("Usage: genmdesc arguments\n");
  monoeg_g_print ("\tgenmdesc desc     Output to stdout the description file.\n");
  monoeg_g_print ("\tgenmdesc [--nacl] output name desc [desc1...]\n                     Write to output the description in a table named \'name\',\n                     use --nacl to generate Google NativeClient code\n");
  D.21686 = 1;
  return D.21686;
  <D.21685>:
  {
    int i;

    i = 3;
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.21688>; else goto <D.21689>;
      <D.21688>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = MEM[(char * *)argv + 4B];
        D.21690 = "--nacl";
        D.21691 = MEM[(const unsigned char *)D.21690];
        D.21692 = (int) D.21691;
        D.21693 = *__s2;
        D.21694 = (int) D.21693;
        __result = D.21692 - D.21694;
        {
          if (__s2_len != 0) goto <D.21695>; else goto <D.21696>;
          <D.21695>:
          if (__result == 0) goto <D.21697>; else goto <D.21698>;
          <D.21697>:
          D.21699 = &MEM[(void *)"--nacl" + 1B];
          D.21700 = *D.21699;
          D.21701 = (int) D.21700;
          D.21702 = __s2 + 1;
          D.21703 = *D.21702;
          D.21704 = (int) D.21703;
          __result = D.21701 - D.21704;
          if (__s2_len > 1) goto <D.21705>; else goto <D.21706>;
          <D.21705>:
          if (__result == 0) goto <D.21707>; else goto <D.21708>;
          <D.21707>:
          D.21709 = &MEM[(void *)"--nacl" + 2B];
          D.21710 = *D.21709;
          D.21711 = (int) D.21710;
          D.21712 = __s2 + 2;
          D.21713 = *D.21712;
          D.21714 = (int) D.21713;
          __result = D.21711 - D.21714;
          if (__s2_len > 2) goto <D.21715>; else goto <D.21716>;
          <D.21715>:
          if (__result == 0) goto <D.21717>; else goto <D.21718>;
          <D.21717>:
          D.21719 = &MEM[(void *)"--nacl" + 3B];
          D.21720 = *D.21719;
          D.21721 = (int) D.21720;
          D.21722 = __s2 + 3;
          D.21723 = *D.21722;
          D.21724 = (int) D.21723;
          __result = D.21721 - D.21724;
          <D.21718>:
          <D.21716>:
          <D.21708>:
          <D.21706>:
          <D.21698>:
          <D.21696>:
        }
        D.21673 = __result;
      }
      iftmp.0 = -D.21673;
      goto <D.21725>;
      <D.21689>:
      D.21681 = argv + 4;
      D.21682 = *D.21681;
      iftmp.0 = __builtin_strcmp (D.21682, "--nacl");
      <D.21725>:
      D.21674 = iftmp.0;
    }
    if (D.21674 == 0) goto <D.21726>; else goto <D.21727>;
    <D.21726>:
    nacl = 1;
    i = i + 1;
    <D.21727>:
    goto <D.21676>;
    <D.21675>:
    i.1 = (unsigned int) i;
    D.21729 = i.1 * 4;
    D.21730 = argv + D.21729;
    D.21731 = *D.21730;
    load_file (D.21731);
    i = i + 1;
    <D.21676>:
    if (i < argc) goto <D.21675>; else goto <D.21677>;
    <D.21677>:
    nacl.2 = nacl;
    D.21733 = nacl.2 + 1;
    D.21734 = (unsigned int) D.21733;
    D.21735 = D.21734 * 4;
    D.21736 = argv + D.21735;
    D.21737 = *D.21736;
    nacl.2 = nacl;
    D.21738 = nacl.2 + 2;
    D.21739 = (unsigned int) D.21738;
    D.21740 = D.21739 * 4;
    D.21741 = argv + D.21740;
    D.21742 = *D.21741;
    build_table (D.21737, D.21742);
  }
  <D.21683>:
  D.21686 = 0;
  return D.21686;
}


init_table ()
{
  struct GHashTable * template_table.3;
  struct GHashTable * table.4;
  void * opcodes.5;
  struct OpDesc * opcodes.6;
  unsigned int i.7;
  unsigned int D.21749;
  const char * D.21750;
  struct GHashTable * table.8;
  const char * D.21752;
  int i;
  struct OpDesc * desc;

  template_table.3 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  template_table = template_table.3;
  table.4 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  table = table.4;
  opcodes.5 = monoeg_malloc0 (21624);
  opcodes = opcodes.5;
  i = 313;
  goto <D.21623>;
  <D.21622>:
  opcodes.6 = opcodes;
  i.7 = (unsigned int) i;
  D.21749 = i.7 * 24;
  desc = opcodes.6 + D.21749;
  desc->num = i;
  D.21750 = inst_name (i);
  desc->name = D.21750;
  table.8 = table;
  D.21752 = desc->name;
  monoeg_g_hash_table_insert_replace (table.8, D.21752, desc, 0);
  i = i + 1;
  <D.21623>:
  if (i <= 900) goto <D.21622>; else goto <D.21624>;
  <D.21624>:
}


inst_name (int op)
{
  unsigned int op.9;
  unsigned int D.21754;
  const char * D.21757;
  int D.21758;

  op.9 = (unsigned int) op;
  D.21754 = op.9 + 4294966983;
  if (D.21754 <= 588) goto <D.21755>; else goto <D.21756>;
  <D.21755>:
  D.21758 = op + -313;
  D.21757 = opnames[D.21758];
  return D.21757;
  <D.21756>:
  if (op <= 312) goto <D.21759>; else goto <D.21760>;
  <D.21759>:
  D.21757 = mono_opcode_name (op);
  return D.21757;
  <D.21760>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.21462>:
  goto <D.21462>;
  D.21757 = 0B;
  return D.21757;
}


dump ()
{
  struct OpDesc * opcodes.10;
  unsigned int i.11;
  unsigned int D.21764;
  char * D.21765;
  char * D.21768;
  const char * D.21771;
  char * D.21773;
  char * D.21779;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.21656>;
  <D.21655>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.21764 = i.11 * 24;
  desc = opcodes.10 + D.21764;
  D.21765 = desc->comment;
  if (D.21765 != 0B) goto <D.21766>; else goto <D.21767>;
  <D.21766>:
  D.21765 = desc->comment;
  monoeg_g_print ("%s", D.21765);
  <D.21767>:
  D.21768 = desc->desc;
  if (D.21768 == 0B) goto <D.21769>; else goto <D.21770>;
  <D.21769>:
  D.21771 = desc->name;
  monoeg_g_print ("%s:\n", D.21771);
  goto <D.21772>;
  <D.21770>:
  D.21771 = desc->name;
  D.21768 = desc->desc;
  monoeg_g_print ("%s: %s", D.21771, D.21768);
  D.21768 = desc->desc;
  D.21773 = __builtin_strchr (D.21768, 10);
  if (D.21773 == 0B) goto <D.21774>; else goto <D.21775>;
  <D.21774>:
  monoeg_g_print ("\n");
  <D.21775>:
  <D.21772>:
  i = i + 1;
  <D.21656>:
  if (i <= 312) goto <D.21655>; else goto <D.21657>;
  <D.21657>:
  i = 313;
  goto <D.21659>;
  <D.21658>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.21764 = i.11 * 24;
  desc = opcodes.10 + D.21764;
  D.21768 = desc->desc;
  if (D.21768 == 0B) goto <D.21776>; else goto <D.21777>;
  <D.21776>:
  D.21771 = desc->name;
  monoeg_g_print ("%s:\n", D.21771);
  goto <D.21778>;
  <D.21777>:
  D.21771 = desc->name;
  D.21768 = desc->desc;
  monoeg_g_print ("%s: %s", D.21771, D.21768);
  D.21768 = desc->desc;
  D.21779 = __builtin_strchr (D.21768, 10);
  if (D.21779 == 0B) goto <D.21780>; else goto <D.21781>;
  <D.21780>:
  monoeg_g_print ("\n");
  <D.21781>:
  <D.21778>:
  i = i + 1;
  <D.21659>:
  if (i <= 900) goto <D.21658>; else goto <D.21660>;
  <D.21660>:
}


load_file (const char * name)
{
  char D.21784;
  const short unsigned int * * D.21786;
  const short unsigned int * D.21787;
  unsigned int D.21788;
  unsigned int D.21789;
  const short unsigned int * D.21790;
  short unsigned int D.21791;
  int D.21792;
  int D.21793;
  char * p.12;
  char * p.13;
  char * p.14;
  char * p.15;
  char * p.16;
  char D.21805;
  unsigned int D.21807;
  unsigned int D.21808;
  const short unsigned int * D.21809;
  short unsigned int D.21810;
  int D.21811;
  int D.21812;
  int D.21502;
  int iftmp.17;
  int D.21501;
  const char[9] * D.21816;
  unsigned char D.21817;
  int D.21818;
  unsigned char D.21819;
  int D.21820;
  const unsigned char * D.21825;
  unsigned char D.21826;
  int D.21827;
  const unsigned char * D.21828;
  unsigned char D.21829;
  int D.21830;
  const unsigned char * D.21835;
  unsigned char D.21836;
  int D.21837;
  const unsigned char * D.21838;
  unsigned char D.21839;
  int D.21840;
  const unsigned char * D.21845;
  unsigned char D.21846;
  int D.21847;
  const unsigned char * D.21848;
  unsigned char D.21849;
  int D.21850;
  struct GHashTable * table.18;
  char * D.21858;
  gchar * D.21861;
  char * D.21862;
  gchar * D.21863;
  int D.21864;
  char D.21867;
  char * p.19;
  int D.21870;
  int D.21874;
  int D.21878;
  int D.21882;
  int D.21886;
  char * p.20;
  char D.21892;
  int D.21894;
  char * p.21;
  int nacl.22;
  char D.21901;
  int D.21903;
  char * p.23;
  int D.21908;
  char * p.24;
  char * p.25;
  struct GHashTable * template_table.26;
  char D.21914;
  char[6] * D.21917;
  char[6] * D.21918;
  int D.21920;
  const char * D.21925;
  char * p.27;
  char * p.28;
  void * D.21931;
  gchar * D.21934;
  int D.21941;
  struct FILE * f;
  char buf[256];
  char * str;
  char * p;
  int line;
  struct OpDesc * desc;
  struct GString * comment;

  try
    {
      f = fopen (name, "r");
      if (f == 0B) goto <D.21782>; else goto <D.21783>;
      <D.21782>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.21483>:
      goto <D.21483>;
      <D.21783>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.21489>;
      <D.21614>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.21487>;
        <D.21486>:
        str = str + 1;
        <D.21487>:
        D.21784 = *str;
        if (D.21784 != 0) goto <D.21785>; else goto <D.21488>;
        <D.21785>:
        D.21786 = __ctype_b_loc ();
        D.21787 = *D.21786;
        D.21784 = *str;
        D.21788 = (unsigned int) D.21784;
        D.21789 = D.21788 * 2;
        D.21790 = D.21787 + D.21789;
        D.21791 = *D.21790;
        D.21792 = (int) D.21791;
        D.21793 = D.21792 & 8192;
        if (D.21793 != 0) goto <D.21486>; else goto <D.21488>;
        <D.21488>:
        D.21784 = *str;
        if (D.21784 == 0) goto <D.21794>; else goto <D.21795>;
        <D.21794>:
        // predicted unlikely by continue predictor.
        goto <D.21489>;
        <D.21795>:
        D.21784 = *str;
        if (D.21784 == 35) goto <D.21796>; else goto <D.21797>;
        <D.21796>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.21489>;
        <D.21797>:
        p.12 = __builtin_strchr (str, 58);
        p = p.12;
        p.13 = p;
        if (p.13 == 0B) goto <D.21800>; else goto <D.21801>;
        <D.21800>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.21490>:
        goto <D.21490>;
        <D.21801>:
        p.13 = p;
        p.14 = p.13;
        p.15 = p.14 + 1;
        p = p.15;
        *p.14 = 0;
        goto <D.21492>;
        <D.21491>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.21492>:
        p.13 = p;
        D.21805 = *p.13;
        if (D.21805 != 0) goto <D.21806>; else goto <D.21493>;
        <D.21806>:
        D.21786 = __ctype_b_loc ();
        D.21787 = *D.21786;
        p.13 = p;
        D.21805 = *p.13;
        D.21807 = (unsigned int) D.21805;
        D.21808 = D.21807 * 2;
        D.21809 = D.21787 + D.21808;
        D.21810 = *D.21809;
        D.21811 = (int) D.21810;
        D.21812 = D.21811 & 8192;
        if (D.21812 != 0) goto <D.21491>; else goto <D.21493>;
        <D.21493>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.21814>; else goto <D.21815>;
          <D.21814>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = str;
            D.21816 = "template";
            D.21817 = MEM[(const unsigned char *)D.21816];
            D.21818 = (int) D.21817;
            D.21819 = *__s2;
            D.21820 = (int) D.21819;
            __result = D.21818 - D.21820;
            {
              if (__s2_len != 0) goto <D.21821>; else goto <D.21822>;
              <D.21821>:
              if (__result == 0) goto <D.21823>; else goto <D.21824>;
              <D.21823>:
              D.21825 = &MEM[(void *)"template" + 1B];
              D.21826 = *D.21825;
              D.21827 = (int) D.21826;
              D.21828 = __s2 + 1;
              D.21829 = *D.21828;
              D.21830 = (int) D.21829;
              __result = D.21827 - D.21830;
              if (__s2_len > 1) goto <D.21831>; else goto <D.21832>;
              <D.21831>:
              if (__result == 0) goto <D.21833>; else goto <D.21834>;
              <D.21833>:
              D.21835 = &MEM[(void *)"template" + 2B];
              D.21836 = *D.21835;
              D.21837 = (int) D.21836;
              D.21838 = __s2 + 2;
              D.21839 = *D.21838;
              D.21840 = (int) D.21839;
              __result = D.21837 - D.21840;
              if (__s2_len > 2) goto <D.21841>; else goto <D.21842>;
              <D.21841>:
              if (__result == 0) goto <D.21843>; else goto <D.21844>;
              <D.21843>:
              D.21845 = &MEM[(void *)"template" + 3B];
              D.21846 = *D.21845;
              D.21847 = (int) D.21846;
              D.21848 = __s2 + 3;
              D.21849 = *D.21848;
              D.21850 = (int) D.21849;
              __result = D.21847 - D.21850;
              <D.21844>:
              <D.21842>:
              <D.21834>:
              <D.21832>:
              <D.21824>:
              <D.21822>:
            }
            D.21501 = __result;
          }
          iftmp.17 = -D.21501;
          goto <D.21851>;
          <D.21815>:
          iftmp.17 = __builtin_strcmp (str, "template");
          <D.21851>:
          D.21502 = iftmp.17;
        }
        if (D.21502 == 0) goto <D.21852>; else goto <D.21853>;
        <D.21852>:
        is_template = 1;
        desc = monoeg_malloc0 (24);
        goto <D.21854>;
        <D.21853>:
        table.18 = table;
        desc = monoeg_g_hash_table_lookup (table.18, str);
        if (desc == 0B) goto <D.21856>; else goto <D.21857>;
        <D.21856>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.21503>:
        goto <D.21503>;
        <D.21857>:
        D.21858 = desc->desc;
        if (D.21858 != 0B) goto <D.21859>; else goto <D.21860>;
        <D.21859>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.21504>:
        goto <D.21504>;
        <D.21860>:
        <D.21854>:
        p.13 = p;
        D.21861 = monoeg_strdup (p.13);
        desc->desc = D.21861;
        D.21862 = comment->str;
        D.21863 = monoeg_strdup (D.21862);
        desc->comment = D.21863;
        monoeg_g_string_truncate (comment, 0);
        goto <D.21611>;
        <D.21610>:
        p.13 = p;
        D.21864 = strncmp (p.13, "dest:", 5);
        if (D.21864 == 0) goto <D.21865>; else goto <D.21866>;
        <D.21865>:
        p.13 = p;
        D.21867 = MEM[(char *)p.13 + 5B];
        desc->spec[0] = D.21867;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.21869>;
        <D.21866>:
        p.13 = p;
        D.21870 = strncmp (p.13, "src1:", 5);
        if (D.21870 == 0) goto <D.21871>; else goto <D.21872>;
        <D.21871>:
        p.13 = p;
        D.21867 = MEM[(char *)p.13 + 5B];
        desc->spec[1] = D.21867;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.21873>;
        <D.21872>:
        p.13 = p;
        D.21874 = strncmp (p.13, "src2:", 5);
        if (D.21874 == 0) goto <D.21875>; else goto <D.21876>;
        <D.21875>:
        p.13 = p;
        D.21867 = MEM[(char *)p.13 + 5B];
        desc->spec[2] = D.21867;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.21877>;
        <D.21876>:
        p.13 = p;
        D.21878 = strncmp (p.13, "src3:", 5);
        if (D.21878 == 0) goto <D.21879>; else goto <D.21880>;
        <D.21879>:
        p.13 = p;
        D.21867 = MEM[(char *)p.13 + 5B];
        desc->spec[3] = D.21867;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.21881>;
        <D.21880>:
        p.13 = p;
        D.21882 = strncmp (p.13, "clob:", 5);
        if (D.21882 == 0) goto <D.21883>; else goto <D.21884>;
        <D.21883>:
        p.13 = p;
        D.21867 = MEM[(char *)p.13 + 5B];
        desc->spec[5] = D.21867;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.21885>;
        <D.21884>:
        p.13 = p;
        D.21886 = strncmp (p.13, "len:", 4);
        if (D.21886 == 0) goto <D.21887>; else goto <D.21888>;
        <D.21887>:
        {
          long unsigned int size;

          p.13 = p;
          p.20 = p.13 + 4;
          p = p.20;
          p.13 = p;
          size = strtoul (p.13, &p, 10);
          if (nacl_length_set == 0) goto <D.21890>; else goto <D.21891>;
          <D.21890>:
          D.21892 = (char) size;
          desc->spec[4] = D.21892;
          <D.21891>:
        }
        goto <D.21893>;
        <D.21888>:
        p.13 = p;
        D.21894 = strncmp (p.13, "nacl:", 5);
        if (D.21894 == 0) goto <D.21895>; else goto <D.21896>;
        <D.21895>:
        {
          long unsigned int size;

          p.13 = p;
          p.21 = p.13 + 5;
          p = p.21;
          p.13 = p;
          size = strtoul (p.13, &p, 10);
          nacl.22 = nacl;
          if (nacl.22 != 0) goto <D.21899>; else goto <D.21900>;
          <D.21899>:
          D.21901 = (char) size;
          desc->spec[4] = D.21901;
          nacl_length_set = 1;
          <D.21900>:
        }
        goto <D.21902>;
        <D.21896>:
        p.13 = p;
        D.21903 = strncmp (p.13, "template:", 9);
        if (D.21903 == 0) goto <D.21904>; else goto <D.21905>;
        <D.21904>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.13 = p;
          p.23 = p.13 + 9;
          p = p.23;
          tname = p;
          goto <D.21583>;
          <D.21582>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.21583>:
          p.13 = p;
          D.21805 = *p.13;
          if (D.21805 != 0) goto <D.21907>; else goto <D.21584>;
          <D.21907>:
          D.21786 = __ctype_b_loc ();
          D.21787 = *D.21786;
          p.13 = p;
          D.21805 = *p.13;
          D.21807 = (unsigned int) D.21805;
          D.21808 = D.21807 * 2;
          D.21809 = D.21787 + D.21808;
          D.21810 = *D.21809;
          D.21811 = (int) D.21810;
          D.21908 = D.21811 & 8;
          if (D.21908 != 0) goto <D.21582>; else goto <D.21584>;
          <D.21584>:
          p.13 = p;
          p.24 = p.13;
          p.25 = p.24 + 1;
          p = p.25;
          *p.24 = 0;
          template_table.26 = template_table;
          tdesc = monoeg_g_hash_table_lookup (template_table.26, tname);
          if (tdesc == 0B) goto <D.21912>; else goto <D.21913>;
          <D.21912>:
          p.13 = p;
          monoeg_g_log (0B, 4, "Invalid template name %s at \'%s\' at line %d in %s\n", tname, p.13, line, name);
          <D.21585>:
          goto <D.21585>;
          <D.21913>:
          i = 0;
          goto <D.21588>;
          <D.21587>:
          D.21914 = desc->spec[i];
          if (D.21914 != 0) goto <D.21915>; else goto <D.21916>;
          <D.21915>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.21586>:
          goto <D.21586>;
          <D.21916>:
          i = i + 1;
          <D.21588>:
          if (i <= 5) goto <D.21587>; else goto <D.21589>;
          <D.21589>:
          D.21917 = &desc->spec;
          D.21918 = &tdesc->spec;
          memcpy (D.21917, D.21918, 6);
        }
        goto <D.21919>;
        <D.21905>:
        p.13 = p;
        D.21920 = strncmp (p.13, "name:", 5);
        if (D.21920 == 0) goto <D.21921>; else goto <D.21922>;
        <D.21921>:
        {
          char * tname;

          if (is_template == 0) goto <D.21923>; else goto <D.21924>;
          <D.21923>:
          p.13 = p;
          monoeg_g_log (0B, 4, "name tag only valid in templates at \'%s\' at line %d in %s\n", p.13, line, name);
          <D.21600>:
          goto <D.21600>;
          <D.21924>:
          D.21925 = desc->name;
          if (D.21925 != 0B) goto <D.21926>; else goto <D.21927>;
          <D.21926>:
          D.21925 = desc->name;
          p.13 = p;
          monoeg_g_log (0B, 4, "Duplicated name tag in template %s at \'%s\' at line %d in %s\n", D.21925, p.13, line, name);
          <D.21601>:
          goto <D.21601>;
          <D.21927>:
          p.13 = p;
          p.21 = p.13 + 5;
          p = p.21;
          tname = p;
          goto <D.21603>;
          <D.21602>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.21603>:
          p.13 = p;
          D.21805 = *p.13;
          if (D.21805 != 0) goto <D.21928>; else goto <D.21604>;
          <D.21928>:
          D.21786 = __ctype_b_loc ();
          D.21787 = *D.21786;
          p.13 = p;
          D.21805 = *p.13;
          D.21807 = (unsigned int) D.21805;
          D.21808 = D.21807 * 2;
          D.21809 = D.21787 + D.21808;
          D.21810 = *D.21809;
          D.21811 = (int) D.21810;
          D.21908 = D.21811 & 8;
          if (D.21908 != 0) goto <D.21602>; else goto <D.21604>;
          <D.21604>:
          p.13 = p;
          p.27 = p.13;
          p.28 = p.27 + 1;
          p = p.28;
          *p.27 = 0;
          template_table.26 = template_table;
          D.21931 = monoeg_g_hash_table_lookup (template_table.26, tname);
          if (D.21931 != 0B) goto <D.21932>; else goto <D.21933>;
          <D.21932>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.21605>:
          goto <D.21605>;
          <D.21933>:
          D.21934 = monoeg_strdup (tname);
          desc->name = D.21934;
          template_table.26 = template_table;
          D.21925 = desc->name;
          monoeg_g_hash_table_insert_replace (template_table.26, D.21925, desc, 0);
        }
        goto <D.21935>;
        <D.21922>:
        p.13 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.13, line, name);
        <D.21606>:
        goto <D.21606>;
        <D.21935>:
        <D.21919>:
        <D.21902>:
        <D.21893>:
        <D.21885>:
        <D.21881>:
        <D.21877>:
        <D.21873>:
        <D.21869>:
        goto <D.21608>;
        <D.21607>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.21608>:
        p.13 = p;
        D.21805 = *p.13;
        if (D.21805 != 0) goto <D.21936>; else goto <D.21609>;
        <D.21936>:
        D.21786 = __ctype_b_loc ();
        D.21787 = *D.21786;
        p.13 = p;
        D.21805 = *p.13;
        D.21807 = (unsigned int) D.21805;
        D.21808 = D.21807 * 2;
        D.21809 = D.21787 + D.21808;
        D.21810 = *D.21809;
        D.21811 = (int) D.21810;
        D.21812 = D.21811 & 8192;
        if (D.21812 != 0) goto <D.21607>; else goto <D.21609>;
        <D.21609>:
        <D.21611>:
        p.13 = p;
        D.21805 = *p.13;
        if (D.21805 != 0) goto <D.21610>; else goto <D.21612>;
        <D.21612>:
        if (is_template != 0) goto <D.21937>; else goto <D.21938>;
        <D.21937>:
        D.21925 = desc->name;
        if (D.21925 == 0B) goto <D.21939>; else goto <D.21940>;
        <D.21939>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.21613>:
        goto <D.21613>;
        <D.21940>:
        <D.21938>:
      }
      <D.21489>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.21614>; else goto <D.21615>;
      <D.21615>:
      fclose (f);
      D.21941 = 0;
      return D.21941;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.21944;
  unsigned int D.21945;

  D.21945 = __builtin_object_size (__dest, 0);
  D.21944 = __builtin___memcpy_chk (__dest, __src, __len, D.21945);
  return D.21944;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.21949;

  if (str != 0B) goto <D.21947>; else goto <D.21948>;
  <D.21947>:
  D.21949 = __strdup (str);
  return D.21949;
  <D.21948>:
  D.21949 = 0B;
  return D.21949;
}


fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  unsigned int D.21951;
  int D.21956;
  char * D.21958;
  unsigned int D.21959;
  unsigned int __n.29;
  unsigned int D.21961;
  unsigned int D.21964;

  D.21951 = __builtin_object_size (__s, 1);
  if (D.21951 != 4294967295) goto <D.21952>; else goto <D.21953>;
  <D.21952>:
  D.21956 = __builtin_constant_p (__n);
  if (D.21956 == 0) goto <D.21954>; else goto <D.21957>;
  <D.21957>:
  if (__n <= 0) goto <D.21954>; else goto <D.21955>;
  <D.21954>:
  D.21959 = __builtin_object_size (__s, 1);
  D.21958 = __fgets_chk (__s, D.21959, __n, __stream);
  return D.21958;
  <D.21955>:
  __n.29 = (unsigned int) __n;
  D.21961 = __builtin_object_size (__s, 1);
  if (__n.29 > D.21961) goto <D.21962>; else goto <D.21963>;
  <D.21962>:
  D.21964 = __builtin_object_size (__s, 1);
  D.21958 = __fgets_chk_warn (__s, D.21964, __n, __stream);
  return D.21958;
  <D.21963>:
  <D.21953>:
  D.21958 = __fgets_alias (__s, __n, __stream);
  return D.21958;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.30;
  unsigned int i.31;
  unsigned int D.21970;
  char * D.21971;
  const char * iftmp.32;
  const char * D.21975;
  char D.21980;
  int D.21981;
  int D.21982;
  char * D.21983;
  struct FILE * f;
  int i;
  int j;
  int idx;
  struct OpDesc * desc;
  struct GString * idx_array;
  struct GHashTable * desc_ht;

  idx_array = monoeg_g_string_new ("");
  desc_ht = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  f = fopen (fname, "w");
  if (f == 0B) goto <D.21966>; else goto <D.21967>;
  <D.21966>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.21640>:
  goto <D.21640>;
  <D.21967>:
  fprintf (f, "/* File automatically generated by genmdesc, don\'t change */\n\n");
  fprintf (f, "const char %s [] = {\n", name);
  fprintf (f, "\t\"");
  j = 0;
  goto <D.21642>;
  <D.21641>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.21642>:
  if (j <= 5) goto <D.21641>; else goto <D.21643>;
  <D.21643>:
  fprintf (f, "\"\t/* null entry */\n");
  idx = 1;
  monoeg_g_string_append_printf (idx_array, "const guint16 %s_idx [] = {\n", name);
  i = 313;
  goto <D.21648>;
  <D.21647>:
  opcodes.30 = opcodes;
  i.31 = (unsigned int) i;
  D.21970 = i.31 * 24;
  desc = opcodes.30 + D.21970;
  D.21971 = desc->desc;
  if (D.21971 == 0B) goto <D.21972>; else goto <D.21973>;
  <D.21972>:
  D.21975 = desc->name;
  if (D.21975 != 0B) goto <D.21976>; else goto <D.21977>;
  <D.21976>:
  iftmp.32 = desc->name;
  goto <D.21978>;
  <D.21977>:
  iftmp.32 = "";
  <D.21978>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.32);
  goto <D.21979>;
  <D.21973>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.21645>;
  <D.21644>:
  D.21980 = desc->spec[j];
  D.21981 = (int) D.21980;
  output_char (f, D.21981);
  j = j + 1;
  <D.21645>:
  if (j <= 5) goto <D.21644>; else goto <D.21646>;
  <D.21646>:
  D.21975 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.21975);
  D.21982 = idx * 6;
  D.21975 = desc->name;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.21982, D.21975);
  idx = idx + 1;
  <D.21979>:
  i = i + 1;
  <D.21648>:
  if (i <= 900) goto <D.21647>; else goto <D.21649>;
  <D.21649>:
  fprintf (f, "};\n\n");
  D.21983 = idx_array->str;
  fprintf (f, "%s};\n\n", D.21983);
  fclose (f);
  monoeg_g_string_free (idx_array, 1);
  monoeg_g_hash_table_destroy (desc_ht);
}


output_char (struct FILE * f, char c)
{
  const short unsigned int * * D.21984;
  const short unsigned int * D.21985;
  unsigned int D.21986;
  unsigned int D.21987;
  const short unsigned int * D.21988;
  short unsigned int D.21989;
  int D.21990;
  int D.21991;
  int D.21994;

  D.21984 = __ctype_b_loc ();
  D.21985 = *D.21984;
  D.21986 = (unsigned int) c;
  D.21987 = D.21986 * 2;
  D.21988 = D.21985 + D.21987;
  D.21989 = *D.21988;
  D.21990 = (int) D.21989;
  D.21991 = D.21990 & 8;
  if (D.21991 != 0) goto <D.21992>; else goto <D.21993>;
  <D.21992>:
  D.21994 = (int) c;
  fprintf (f, "%c", D.21994);
  goto <D.21995>;
  <D.21993>:
  D.21994 = (int) c;
  fprintf (f, "\\x%x\" \"", D.21994);
  <D.21995>:
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.21996;

  D.21996 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.21996;
}


