main (int argc, char * * argv)
{
  char * * D.24516;
  char * D.24517;
  int D.24521;
  int D.24507;
  int iftmp.0;
  int D.24506;
  const char[7] * D.24525;
  unsigned char D.24526;
  int D.24527;
  unsigned char D.24528;
  int D.24529;
  _Bool D.24530;
  _Bool D.24531;
  _Bool D.24532;
  const unsigned char * D.24535;
  unsigned char D.24536;
  int D.24537;
  const unsigned char * D.24538;
  unsigned char D.24539;
  int D.24540;
  _Bool D.24541;
  _Bool D.24542;
  const unsigned char * D.24545;
  unsigned char D.24546;
  int D.24547;
  const unsigned char * D.24548;
  unsigned char D.24549;
  int D.24550;
  _Bool D.24551;
  _Bool D.24552;
  const unsigned char * D.24555;
  unsigned char D.24556;
  int D.24557;
  const unsigned char * D.24558;
  unsigned char D.24559;
  int D.24560;
  unsigned int i.1;
  unsigned int D.24565;
  char * * D.24566;
  char * D.24567;
  int nacl.2;
  int D.24569;
  unsigned int D.24570;
  unsigned int D.24571;
  char * * D.24572;
  char * D.24573;
  int D.24574;
  unsigned int D.24575;
  unsigned int D.24576;
  char * * D.24577;
  char * D.24578;

  init_table ();
  if (argc == 2) goto <D.24514>; else goto <D.24515>;
  <D.24514>:
  D.24516 = argv + 4;
  D.24517 = *D.24516;
  load_file (D.24517);
  dump ();
  goto <D.24518>;
  <D.24515>:
  if (argc <= 3) goto <D.24519>; else goto <D.24520>;
  <D.24519>:
  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.24521 = 1;
  return D.24521;
  <D.24520>:
  {
    int i;

    i = 3;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = MEM[(char * *)argv + 4B];
        D.24525 = "--nacl";
        D.24526 = MEM[(const unsigned char *)D.24525];
        D.24527 = (int) D.24526;
        D.24528 = *__s2;
        D.24529 = (int) D.24528;
        __result = D.24527 - D.24529;
        {
          D.24530 = __s2_len != 0;
          D.24531 = __result == 0;
          D.24532 = D.24530 & D.24531;
          if (D.24532 != 0) goto <D.24533>; else goto <D.24534>;
          <D.24533>:
          D.24535 = &MEM[(void *)"--nacl" + 1B];
          D.24536 = *D.24535;
          D.24537 = (int) D.24536;
          D.24538 = __s2 + 1;
          D.24539 = *D.24538;
          D.24540 = (int) D.24539;
          __result = D.24537 - D.24540;
          D.24541 = __s2_len > 1;
          D.24531 = __result == 0;
          D.24542 = D.24541 & D.24531;
          if (D.24542 != 0) goto <D.24543>; else goto <D.24544>;
          <D.24543>:
          D.24545 = &MEM[(void *)"--nacl" + 2B];
          D.24546 = *D.24545;
          D.24547 = (int) D.24546;
          D.24548 = __s2 + 2;
          D.24549 = *D.24548;
          D.24550 = (int) D.24549;
          __result = D.24547 - D.24550;
          D.24551 = __s2_len > 2;
          D.24531 = __result == 0;
          D.24552 = D.24551 & D.24531;
          if (D.24552 != 0) goto <D.24553>; else goto <D.24554>;
          <D.24553>:
          D.24555 = &MEM[(void *)"--nacl" + 3B];
          D.24556 = *D.24555;
          D.24557 = (int) D.24556;
          D.24558 = __s2 + 3;
          D.24559 = *D.24558;
          D.24560 = (int) D.24559;
          __result = D.24557 - D.24560;
          <D.24554>:
          <D.24544>:
          <D.24534>:
        }
        D.24506 = __result;
      }
      iftmp.0 = -D.24506;
      goto <D.24561>;
      <D.24524>:
      D.24516 = argv + 4;
      D.24517 = *D.24516;
      iftmp.0 = __builtin_strcmp (D.24517, "--nacl");
      <D.24561>:
      D.24507 = iftmp.0;
    }
    if (D.24507 == 0) goto <D.24562>; else goto <D.24563>;
    <D.24562>:
    nacl = 1;
    i = i + 1;
    <D.24563>:
    goto <D.24509>;
    <D.24508>:
    i.1 = (unsigned int) i;
    D.24565 = i.1 * 4;
    D.24566 = argv + D.24565;
    D.24567 = *D.24566;
    load_file (D.24567);
    i = i + 1;
    <D.24509>:
    if (i < argc) goto <D.24508>; else goto <D.24510>;
    <D.24510>:
    nacl.2 = nacl;
    D.24569 = nacl.2 + 1;
    D.24570 = (unsigned int) D.24569;
    D.24571 = D.24570 * 4;
    D.24572 = argv + D.24571;
    D.24573 = *D.24572;
    nacl.2 = nacl;
    D.24574 = nacl.2 + 2;
    D.24575 = (unsigned int) D.24574;
    D.24576 = D.24575 * 4;
    D.24577 = argv + D.24576;
    D.24578 = *D.24577;
    build_table (D.24573, D.24578);
  }
  <D.24518>:
  D.24521 = 0;
  return D.24521;
}


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.24585;
  const char * D.24586;
  struct GHashTable * table.8;
  const char * D.24588;
  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 (20304);
  opcodes = opcodes.5;
  i = 313;
  goto <D.24456>;
  <D.24455>:
  opcodes.6 = opcodes;
  i.7 = (unsigned int) i;
  D.24585 = i.7 * 24;
  desc = opcodes.6 + D.24585;
  desc->num = i;
  D.24586 = inst_name (i);
  desc->name = D.24586;
  table.8 = table;
  D.24588 = desc->name;
  monoeg_g_hash_table_insert_replace (table.8, D.24588, desc, 0);
  i = i + 1;
  <D.24456>:
  if (i <= 845) goto <D.24455>; else goto <D.24457>;
  <D.24457>:
}


inst_name (int op)
{
  unsigned int op.9;
  unsigned int D.24590;
  const char * D.24593;
  int D.24594;

  op.9 = (unsigned int) op;
  D.24590 = op.9 + 4294966983;
  if (D.24590 <= 533) goto <D.24591>; else goto <D.24592>;
  <D.24591>:
  D.24594 = op + -313;
  D.24593 = opnames[D.24594];
  return D.24593;
  <D.24592>:
  if (op <= 312) goto <D.24595>; else goto <D.24596>;
  <D.24595>:
  D.24593 = mono_opcode_name (op);
  return D.24593;
  <D.24596>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.24295>:
  goto <D.24295>;
  D.24593 = 0B;
  return D.24593;
}


dump ()
{
  struct OpDesc * opcodes.10;
  unsigned int i.11;
  unsigned int D.24600;
  char * D.24601;
  char * D.24604;
  const char * D.24607;
  char * D.24609;
  char * D.24615;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.24489>;
  <D.24488>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.24600 = i.11 * 24;
  desc = opcodes.10 + D.24600;
  D.24601 = desc->comment;
  if (D.24601 != 0B) goto <D.24602>; else goto <D.24603>;
  <D.24602>:
  D.24601 = desc->comment;
  monoeg_g_print ("%s", D.24601);
  <D.24603>:
  D.24604 = desc->desc;
  if (D.24604 == 0B) goto <D.24605>; else goto <D.24606>;
  <D.24605>:
  D.24607 = desc->name;
  monoeg_g_print ("%s:\n", D.24607);
  goto <D.24608>;
  <D.24606>:
  D.24607 = desc->name;
  D.24604 = desc->desc;
  monoeg_g_print ("%s: %s", D.24607, D.24604);
  D.24604 = desc->desc;
  D.24609 = __builtin_strchr (D.24604, 10);
  if (D.24609 == 0B) goto <D.24610>; else goto <D.24611>;
  <D.24610>:
  monoeg_g_print ("\n");
  <D.24611>:
  <D.24608>:
  i = i + 1;
  <D.24489>:
  if (i <= 312) goto <D.24488>; else goto <D.24490>;
  <D.24490>:
  i = 313;
  goto <D.24492>;
  <D.24491>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.24600 = i.11 * 24;
  desc = opcodes.10 + D.24600;
  D.24604 = desc->desc;
  if (D.24604 == 0B) goto <D.24612>; else goto <D.24613>;
  <D.24612>:
  D.24607 = desc->name;
  monoeg_g_print ("%s:\n", D.24607);
  goto <D.24614>;
  <D.24613>:
  D.24607 = desc->name;
  D.24604 = desc->desc;
  monoeg_g_print ("%s: %s", D.24607, D.24604);
  D.24604 = desc->desc;
  D.24615 = __builtin_strchr (D.24604, 10);
  if (D.24615 == 0B) goto <D.24616>; else goto <D.24617>;
  <D.24616>:
  monoeg_g_print ("\n");
  <D.24617>:
  <D.24614>:
  i = i + 1;
  <D.24492>:
  if (i <= 845) goto <D.24491>; else goto <D.24493>;
  <D.24493>:
}


load_file (const char * name)
{
  char D.24620;
  const short unsigned int * * D.24622;
  const short unsigned int * D.24623;
  unsigned int D.24624;
  unsigned int D.24625;
  const short unsigned int * D.24626;
  short unsigned int D.24627;
  int D.24628;
  int D.24629;
  char * p.12;
  char * p.13;
  char * p.14;
  char * p.15;
  char * p.16;
  char D.24641;
  unsigned int D.24643;
  unsigned int D.24644;
  const short unsigned int * D.24645;
  short unsigned int D.24646;
  int D.24647;
  int D.24648;
  int D.24335;
  int iftmp.17;
  int D.24334;
  const char[9] * D.24652;
  unsigned char D.24653;
  int D.24654;
  unsigned char D.24655;
  int D.24656;
  _Bool D.24657;
  _Bool D.24658;
  _Bool D.24659;
  const unsigned char * D.24662;
  unsigned char D.24663;
  int D.24664;
  const unsigned char * D.24665;
  unsigned char D.24666;
  int D.24667;
  _Bool D.24668;
  _Bool D.24669;
  const unsigned char * D.24672;
  unsigned char D.24673;
  int D.24674;
  const unsigned char * D.24675;
  unsigned char D.24676;
  int D.24677;
  _Bool D.24678;
  _Bool D.24679;
  const unsigned char * D.24682;
  unsigned char D.24683;
  int D.24684;
  const unsigned char * D.24685;
  unsigned char D.24686;
  int D.24687;
  struct GHashTable * table.18;
  char * D.24695;
  gchar * D.24698;
  char * D.24699;
  gchar * D.24700;
  int D.24701;
  char D.24704;
  char * p.19;
  int D.24707;
  int D.24711;
  int D.24715;
  int D.24719;
  int D.24723;
  char * p.20;
  char D.24729;
  int D.24731;
  char * p.21;
  int nacl.22;
  char D.24738;
  int D.24740;
  char * p.23;
  int D.24745;
  char * p.24;
  char * p.25;
  struct GHashTable * template_table.26;
  char D.24751;
  char[6] * D.24754;
  char[6] * D.24755;
  int D.24757;
  const char * D.24762;
  char * p.27;
  char * p.28;
  void * D.24768;
  gchar * D.24771;
  int D.24778;
  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.24618>; else goto <D.24619>;
      <D.24618>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.24316>:
      goto <D.24316>;
      <D.24619>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.24322>;
      <D.24447>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.24320>;
        <D.24319>:
        str = str + 1;
        <D.24320>:
        D.24620 = *str;
        if (D.24620 != 0) goto <D.24621>; else goto <D.24321>;
        <D.24621>:
        D.24622 = __ctype_b_loc ();
        D.24623 = *D.24622;
        D.24620 = *str;
        D.24624 = (unsigned int) D.24620;
        D.24625 = D.24624 * 2;
        D.24626 = D.24623 + D.24625;
        D.24627 = *D.24626;
        D.24628 = (int) D.24627;
        D.24629 = D.24628 & 8192;
        if (D.24629 != 0) goto <D.24319>; else goto <D.24321>;
        <D.24321>:
        D.24620 = *str;
        if (D.24620 == 0) goto <D.24630>; else goto <D.24631>;
        <D.24630>:
        // predicted unlikely by continue predictor.
        goto <D.24322>;
        <D.24631>:
        D.24620 = *str;
        if (D.24620 == 35) goto <D.24632>; else goto <D.24633>;
        <D.24632>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.24322>;
        <D.24633>:
        p.12 = __builtin_strchr (str, 58);
        p = p.12;
        p.13 = p;
        if (p.13 == 0B) goto <D.24636>; else goto <D.24637>;
        <D.24636>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.24323>:
        goto <D.24323>;
        <D.24637>:
        p.13 = p;
        p.14 = p.13;
        p.15 = p.14 + 1;
        p = p.15;
        *p.14 = 0;
        goto <D.24325>;
        <D.24324>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.24325>:
        p.13 = p;
        D.24641 = *p.13;
        if (D.24641 != 0) goto <D.24642>; else goto <D.24326>;
        <D.24642>:
        D.24622 = __ctype_b_loc ();
        D.24623 = *D.24622;
        p.13 = p;
        D.24641 = *p.13;
        D.24643 = (unsigned int) D.24641;
        D.24644 = D.24643 * 2;
        D.24645 = D.24623 + D.24644;
        D.24646 = *D.24645;
        D.24647 = (int) D.24646;
        D.24648 = D.24647 & 8192;
        if (D.24648 != 0) goto <D.24324>; else goto <D.24326>;
        <D.24326>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = str;
            D.24652 = "template";
            D.24653 = MEM[(const unsigned char *)D.24652];
            D.24654 = (int) D.24653;
            D.24655 = *__s2;
            D.24656 = (int) D.24655;
            __result = D.24654 - D.24656;
            {
              D.24657 = __s2_len != 0;
              D.24658 = __result == 0;
              D.24659 = D.24657 & D.24658;
              if (D.24659 != 0) goto <D.24660>; else goto <D.24661>;
              <D.24660>:
              D.24662 = &MEM[(void *)"template" + 1B];
              D.24663 = *D.24662;
              D.24664 = (int) D.24663;
              D.24665 = __s2 + 1;
              D.24666 = *D.24665;
              D.24667 = (int) D.24666;
              __result = D.24664 - D.24667;
              D.24668 = __s2_len > 1;
              D.24658 = __result == 0;
              D.24669 = D.24668 & D.24658;
              if (D.24669 != 0) goto <D.24670>; else goto <D.24671>;
              <D.24670>:
              D.24672 = &MEM[(void *)"template" + 2B];
              D.24673 = *D.24672;
              D.24674 = (int) D.24673;
              D.24675 = __s2 + 2;
              D.24676 = *D.24675;
              D.24677 = (int) D.24676;
              __result = D.24674 - D.24677;
              D.24678 = __s2_len > 2;
              D.24658 = __result == 0;
              D.24679 = D.24678 & D.24658;
              if (D.24679 != 0) goto <D.24680>; else goto <D.24681>;
              <D.24680>:
              D.24682 = &MEM[(void *)"template" + 3B];
              D.24683 = *D.24682;
              D.24684 = (int) D.24683;
              D.24685 = __s2 + 3;
              D.24686 = *D.24685;
              D.24687 = (int) D.24686;
              __result = D.24684 - D.24687;
              <D.24681>:
              <D.24671>:
              <D.24661>:
            }
            D.24334 = __result;
          }
          iftmp.17 = -D.24334;
          goto <D.24688>;
          <D.24651>:
          iftmp.17 = __builtin_strcmp (str, "template");
          <D.24688>:
          D.24335 = iftmp.17;
        }
        if (D.24335 == 0) goto <D.24689>; else goto <D.24690>;
        <D.24689>:
        is_template = 1;
        desc = monoeg_malloc0 (24);
        goto <D.24691>;
        <D.24690>:
        table.18 = table;
        desc = monoeg_g_hash_table_lookup (table.18, str);
        if (desc == 0B) goto <D.24693>; else goto <D.24694>;
        <D.24693>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.24336>:
        goto <D.24336>;
        <D.24694>:
        D.24695 = desc->desc;
        if (D.24695 != 0B) goto <D.24696>; else goto <D.24697>;
        <D.24696>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.24337>:
        goto <D.24337>;
        <D.24697>:
        <D.24691>:
        p.13 = p;
        D.24698 = monoeg_strdup (p.13);
        desc->desc = D.24698;
        D.24699 = comment->str;
        D.24700 = monoeg_strdup (D.24699);
        desc->comment = D.24700;
        monoeg_g_string_truncate (comment, 0);
        goto <D.24444>;
        <D.24443>:
        p.13 = p;
        D.24701 = strncmp (p.13, "dest:", 5);
        if (D.24701 == 0) goto <D.24702>; else goto <D.24703>;
        <D.24702>:
        p.13 = p;
        D.24704 = MEM[(char *)p.13 + 5B];
        desc->spec[0] = D.24704;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.24706>;
        <D.24703>:
        p.13 = p;
        D.24707 = strncmp (p.13, "src1:", 5);
        if (D.24707 == 0) goto <D.24708>; else goto <D.24709>;
        <D.24708>:
        p.13 = p;
        D.24704 = MEM[(char *)p.13 + 5B];
        desc->spec[1] = D.24704;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.24710>;
        <D.24709>:
        p.13 = p;
        D.24711 = strncmp (p.13, "src2:", 5);
        if (D.24711 == 0) goto <D.24712>; else goto <D.24713>;
        <D.24712>:
        p.13 = p;
        D.24704 = MEM[(char *)p.13 + 5B];
        desc->spec[2] = D.24704;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.24714>;
        <D.24713>:
        p.13 = p;
        D.24715 = strncmp (p.13, "src3:", 5);
        if (D.24715 == 0) goto <D.24716>; else goto <D.24717>;
        <D.24716>:
        p.13 = p;
        D.24704 = MEM[(char *)p.13 + 5B];
        desc->spec[3] = D.24704;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.24718>;
        <D.24717>:
        p.13 = p;
        D.24719 = strncmp (p.13, "clob:", 5);
        if (D.24719 == 0) goto <D.24720>; else goto <D.24721>;
        <D.24720>:
        p.13 = p;
        D.24704 = MEM[(char *)p.13 + 5B];
        desc->spec[5] = D.24704;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.24722>;
        <D.24721>:
        p.13 = p;
        D.24723 = strncmp (p.13, "len:", 4);
        if (D.24723 == 0) goto <D.24724>; else goto <D.24725>;
        <D.24724>:
        {
          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.24727>; else goto <D.24728>;
          <D.24727>:
          D.24729 = (char) size;
          desc->spec[4] = D.24729;
          <D.24728>:
        }
        goto <D.24730>;
        <D.24725>:
        p.13 = p;
        D.24731 = strncmp (p.13, "nacl:", 5);
        if (D.24731 == 0) goto <D.24732>; else goto <D.24733>;
        <D.24732>:
        {
          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.24736>; else goto <D.24737>;
          <D.24736>:
          D.24738 = (char) size;
          desc->spec[4] = D.24738;
          nacl_length_set = 1;
          <D.24737>:
        }
        goto <D.24739>;
        <D.24733>:
        p.13 = p;
        D.24740 = strncmp (p.13, "template:", 9);
        if (D.24740 == 0) goto <D.24741>; else goto <D.24742>;
        <D.24741>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.13 = p;
          p.23 = p.13 + 9;
          p = p.23;
          tname = p;
          goto <D.24416>;
          <D.24415>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.24416>:
          p.13 = p;
          D.24641 = *p.13;
          if (D.24641 != 0) goto <D.24744>; else goto <D.24417>;
          <D.24744>:
          D.24622 = __ctype_b_loc ();
          D.24623 = *D.24622;
          p.13 = p;
          D.24641 = *p.13;
          D.24643 = (unsigned int) D.24641;
          D.24644 = D.24643 * 2;
          D.24645 = D.24623 + D.24644;
          D.24646 = *D.24645;
          D.24647 = (int) D.24646;
          D.24745 = D.24647 & 8;
          if (D.24745 != 0) goto <D.24415>; else goto <D.24417>;
          <D.24417>:
          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.24749>; else goto <D.24750>;
          <D.24749>:
          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.24418>:
          goto <D.24418>;
          <D.24750>:
          i = 0;
          goto <D.24421>;
          <D.24420>:
          D.24751 = desc->spec[i];
          if (D.24751 != 0) goto <D.24752>; else goto <D.24753>;
          <D.24752>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.24419>:
          goto <D.24419>;
          <D.24753>:
          i = i + 1;
          <D.24421>:
          if (i <= 5) goto <D.24420>; else goto <D.24422>;
          <D.24422>:
          D.24754 = &desc->spec;
          D.24755 = &tdesc->spec;
          memcpy (D.24754, D.24755, 6);
        }
        goto <D.24756>;
        <D.24742>:
        p.13 = p;
        D.24757 = strncmp (p.13, "name:", 5);
        if (D.24757 == 0) goto <D.24758>; else goto <D.24759>;
        <D.24758>:
        {
          char * tname;

          if (is_template == 0) goto <D.24760>; else goto <D.24761>;
          <D.24760>:
          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.24433>:
          goto <D.24433>;
          <D.24761>:
          D.24762 = desc->name;
          if (D.24762 != 0B) goto <D.24763>; else goto <D.24764>;
          <D.24763>:
          D.24762 = 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.24762, p.13, line, name);
          <D.24434>:
          goto <D.24434>;
          <D.24764>:
          p.13 = p;
          p.21 = p.13 + 5;
          p = p.21;
          tname = p;
          goto <D.24436>;
          <D.24435>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.24436>:
          p.13 = p;
          D.24641 = *p.13;
          if (D.24641 != 0) goto <D.24765>; else goto <D.24437>;
          <D.24765>:
          D.24622 = __ctype_b_loc ();
          D.24623 = *D.24622;
          p.13 = p;
          D.24641 = *p.13;
          D.24643 = (unsigned int) D.24641;
          D.24644 = D.24643 * 2;
          D.24645 = D.24623 + D.24644;
          D.24646 = *D.24645;
          D.24647 = (int) D.24646;
          D.24745 = D.24647 & 8;
          if (D.24745 != 0) goto <D.24435>; else goto <D.24437>;
          <D.24437>:
          p.13 = p;
          p.27 = p.13;
          p.28 = p.27 + 1;
          p = p.28;
          *p.27 = 0;
          template_table.26 = template_table;
          D.24768 = monoeg_g_hash_table_lookup (template_table.26, tname);
          if (D.24768 != 0B) goto <D.24769>; else goto <D.24770>;
          <D.24769>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.24438>:
          goto <D.24438>;
          <D.24770>:
          D.24771 = monoeg_strdup (tname);
          desc->name = D.24771;
          template_table.26 = template_table;
          D.24762 = desc->name;
          monoeg_g_hash_table_insert_replace (template_table.26, D.24762, desc, 0);
        }
        goto <D.24772>;
        <D.24759>:
        p.13 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.13, line, name);
        <D.24439>:
        goto <D.24439>;
        <D.24772>:
        <D.24756>:
        <D.24739>:
        <D.24730>:
        <D.24722>:
        <D.24718>:
        <D.24714>:
        <D.24710>:
        <D.24706>:
        goto <D.24441>;
        <D.24440>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.24441>:
        p.13 = p;
        D.24641 = *p.13;
        if (D.24641 != 0) goto <D.24773>; else goto <D.24442>;
        <D.24773>:
        D.24622 = __ctype_b_loc ();
        D.24623 = *D.24622;
        p.13 = p;
        D.24641 = *p.13;
        D.24643 = (unsigned int) D.24641;
        D.24644 = D.24643 * 2;
        D.24645 = D.24623 + D.24644;
        D.24646 = *D.24645;
        D.24647 = (int) D.24646;
        D.24648 = D.24647 & 8192;
        if (D.24648 != 0) goto <D.24440>; else goto <D.24442>;
        <D.24442>:
        <D.24444>:
        p.13 = p;
        D.24641 = *p.13;
        if (D.24641 != 0) goto <D.24443>; else goto <D.24445>;
        <D.24445>:
        if (is_template != 0) goto <D.24774>; else goto <D.24775>;
        <D.24774>:
        D.24762 = desc->name;
        if (D.24762 == 0B) goto <D.24776>; else goto <D.24777>;
        <D.24776>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.24446>:
        goto <D.24446>;
        <D.24777>:
        <D.24775>:
      }
      <D.24322>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.24447>; else goto <D.24448>;
      <D.24448>:
      fclose (f);
      D.24778 = 0;
      return D.24778;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


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

  D.24782 = __builtin_object_size (__dest, 0);
  D.24781 = __builtin___memcpy_chk (__dest, __src, __len, D.24782);
  return D.24781;
}


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

  if (str != 0B) goto <D.24784>; else goto <D.24785>;
  <D.24784>:
  D.24786 = __strdup (str);
  return D.24786;
  <D.24785>:
  D.24786 = 0B;
  return D.24786;
}


fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  unsigned int D.24788;
  int D.24793;
  char * D.24795;
  unsigned int D.24796;
  unsigned int __n.29;
  unsigned int D.24798;
  unsigned int D.24801;

  D.24788 = __builtin_object_size (__s, 1);
  if (D.24788 != 4294967295) goto <D.24789>; else goto <D.24790>;
  <D.24789>:
  D.24793 = __builtin_constant_p (__n);
  if (D.24793 == 0) goto <D.24791>; else goto <D.24794>;
  <D.24794>:
  if (__n <= 0) goto <D.24791>; else goto <D.24792>;
  <D.24791>:
  D.24796 = __builtin_object_size (__s, 1);
  D.24795 = __fgets_chk (__s, D.24796, __n, __stream);
  return D.24795;
  <D.24792>:
  __n.29 = (unsigned int) __n;
  D.24798 = __builtin_object_size (__s, 1);
  if (__n.29 > D.24798) goto <D.24799>; else goto <D.24800>;
  <D.24799>:
  D.24801 = __builtin_object_size (__s, 1);
  D.24795 = __fgets_chk_warn (__s, D.24801, __n, __stream);
  return D.24795;
  <D.24800>:
  <D.24790>:
  D.24795 = __fgets_alias (__s, __n, __stream);
  return D.24795;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.30;
  unsigned int i.31;
  unsigned int D.24807;
  char * D.24808;
  const char * iftmp.32;
  const char * D.24812;
  char D.24817;
  int D.24818;
  char * D.24819;
  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.24803>; else goto <D.24804>;
  <D.24803>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.24473>:
  goto <D.24473>;
  <D.24804>:
  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.24475>;
  <D.24474>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.24475>:
  if (j <= 5) goto <D.24474>; else goto <D.24476>;
  <D.24476>:
  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.24481>;
  <D.24480>:
  opcodes.30 = opcodes;
  i.31 = (unsigned int) i;
  D.24807 = i.31 * 24;
  desc = opcodes.30 + D.24807;
  D.24808 = desc->desc;
  if (D.24808 == 0B) goto <D.24809>; else goto <D.24810>;
  <D.24809>:
  D.24812 = desc->name;
  if (D.24812 != 0B) goto <D.24813>; else goto <D.24814>;
  <D.24813>:
  iftmp.32 = desc->name;
  goto <D.24815>;
  <D.24814>:
  iftmp.32 = "";
  <D.24815>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.32);
  goto <D.24816>;
  <D.24810>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.24478>;
  <D.24477>:
  D.24817 = desc->spec[j];
  output_char (f, D.24817);
  j = j + 1;
  <D.24478>:
  if (j <= 5) goto <D.24477>; else goto <D.24479>;
  <D.24479>:
  D.24812 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.24812);
  D.24818 = idx * 6;
  D.24812 = desc->name;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.24818, D.24812);
  idx = idx + 1;
  <D.24816>:
  i = i + 1;
  <D.24481>:
  if (i <= 845) goto <D.24480>; else goto <D.24482>;
  <D.24482>:
  fprintf (f, "};\n\n");
  D.24819 = idx_array->str;
  fprintf (f, "%s};\n\n", D.24819);
  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.24820;
  const short unsigned int * D.24821;
  unsigned int D.24822;
  unsigned int D.24823;
  const short unsigned int * D.24824;
  short unsigned int D.24825;
  int D.24826;
  int D.24827;
  int D.24830;

  D.24820 = __ctype_b_loc ();
  D.24821 = *D.24820;
  D.24822 = (unsigned int) c;
  D.24823 = D.24822 * 2;
  D.24824 = D.24821 + D.24823;
  D.24825 = *D.24824;
  D.24826 = (int) D.24825;
  D.24827 = D.24826 & 8;
  if (D.24827 != 0) goto <D.24828>; else goto <D.24829>;
  <D.24828>:
  D.24830 = (int) c;
  fprintf (f, "%c", D.24830);
  goto <D.24831>;
  <D.24829>:
  D.24830 = (int) c;
  fprintf (f, "\\x%x\" \"", D.24830);
  <D.24831>:
}


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

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


