main (int argc, char * * argv)
{
  char * * D.22530;
  char * D.22531;
  int D.22535;
  int D.22523;
  int iftmp.0;
  int D.22522;
  const char[7] * D.22539;
  unsigned char D.22540;
  int D.22541;
  unsigned char D.22542;
  int D.22543;
  const unsigned char * D.22548;
  unsigned char D.22549;
  int D.22550;
  const unsigned char * D.22551;
  unsigned char D.22552;
  int D.22553;
  const unsigned char * D.22558;
  unsigned char D.22559;
  int D.22560;
  const unsigned char * D.22561;
  unsigned char D.22562;
  int D.22563;
  const unsigned char * D.22568;
  unsigned char D.22569;
  int D.22570;
  const unsigned char * D.22571;
  unsigned char D.22572;
  int D.22573;
  long unsigned int D.22577;
  long unsigned int D.22578;
  char * * D.22579;
  char * D.22580;
  int nacl.1;
  int D.22582;
  long unsigned int D.22583;
  long unsigned int D.22584;
  char * * D.22585;
  char * D.22586;
  int D.22587;
  long unsigned int D.22588;
  long unsigned int D.22589;
  char * * D.22590;
  char * D.22591;

  init_table ();
  if (argc == 2) goto <D.22528>; else goto <D.22529>;
  <D.22528>:
  D.22530 = argv + 8;
  D.22531 = *D.22530;
  load_file (D.22531);
  dump ();
  goto <D.22532>;
  <D.22529>:
  if (argc <= 3) goto <D.22533>; else goto <D.22534>;
  <D.22533>:
  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.22535 = 1;
  return D.22535;
  <D.22534>:
  {
    int i;

    i = 3;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = MEM[(char * *)argv + 8B];
        D.22539 = "--nacl";
        D.22540 = MEM[(const unsigned char *)D.22539];
        D.22541 = (int) D.22540;
        D.22542 = *__s2;
        D.22543 = (int) D.22542;
        __result = D.22541 - D.22543;
        {
          if (__s2_len != 0) goto <D.22544>; else goto <D.22545>;
          <D.22544>:
          if (__result == 0) goto <D.22546>; else goto <D.22547>;
          <D.22546>:
          D.22548 = &MEM[(void *)"--nacl" + 1B];
          D.22549 = *D.22548;
          D.22550 = (int) D.22549;
          D.22551 = __s2 + 1;
          D.22552 = *D.22551;
          D.22553 = (int) D.22552;
          __result = D.22550 - D.22553;
          if (__s2_len > 1) goto <D.22554>; else goto <D.22555>;
          <D.22554>:
          if (__result == 0) goto <D.22556>; else goto <D.22557>;
          <D.22556>:
          D.22558 = &MEM[(void *)"--nacl" + 2B];
          D.22559 = *D.22558;
          D.22560 = (int) D.22559;
          D.22561 = __s2 + 2;
          D.22562 = *D.22561;
          D.22563 = (int) D.22562;
          __result = D.22560 - D.22563;
          if (__s2_len > 2) goto <D.22564>; else goto <D.22565>;
          <D.22564>:
          if (__result == 0) goto <D.22566>; else goto <D.22567>;
          <D.22566>:
          D.22568 = &MEM[(void *)"--nacl" + 3B];
          D.22569 = *D.22568;
          D.22570 = (int) D.22569;
          D.22571 = __s2 + 3;
          D.22572 = *D.22571;
          D.22573 = (int) D.22572;
          __result = D.22570 - D.22573;
          <D.22567>:
          <D.22565>:
          <D.22557>:
          <D.22555>:
          <D.22547>:
          <D.22545>:
        }
        D.22522 = __result;
      }
      iftmp.0 = -D.22522;
      goto <D.22574>;
      <D.22538>:
      D.22530 = argv + 8;
      D.22531 = *D.22530;
      iftmp.0 = __builtin_strcmp (D.22531, "--nacl");
      <D.22574>:
      D.22523 = iftmp.0;
    }
    if (D.22523 == 0) goto <D.22575>; else goto <D.22576>;
    <D.22575>:
    nacl = 1;
    i = i + 1;
    <D.22576>:
    goto <D.22525>;
    <D.22524>:
    D.22577 = (long unsigned int) i;
    D.22578 = D.22577 * 8;
    D.22579 = argv + D.22578;
    D.22580 = *D.22579;
    load_file (D.22580);
    i = i + 1;
    <D.22525>:
    if (i < argc) goto <D.22524>; else goto <D.22526>;
    <D.22526>:
    nacl.1 = nacl;
    D.22582 = nacl.1 + 1;
    D.22583 = (long unsigned int) D.22582;
    D.22584 = D.22583 * 8;
    D.22585 = argv + D.22584;
    D.22586 = *D.22585;
    nacl.1 = nacl;
    D.22587 = nacl.1 + 2;
    D.22588 = (long unsigned int) D.22587;
    D.22589 = D.22588 * 8;
    D.22590 = argv + D.22589;
    D.22591 = *D.22590;
    build_table (D.22586, D.22591);
  }
  <D.22532>:
  D.22535 = 0;
  return D.22535;
}


init_table ()
{
  struct GHashTable * template_table.2;
  struct GHashTable * table.3;
  void * opcodes.4;
  struct OpDesc * opcodes.5;
  long unsigned int D.22597;
  long unsigned int D.22598;
  const char * D.22599;
  struct GHashTable * table.6;
  const char * D.22601;
  int i;
  struct OpDesc * desc;

  template_table.2 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  template_table = template_table.2;
  table.3 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  table = table.3;
  opcodes.4 = monoeg_malloc0 (33840);
  opcodes = opcodes.4;
  i = 313;
  goto <D.22472>;
  <D.22471>:
  opcodes.5 = opcodes;
  D.22597 = (long unsigned int) i;
  D.22598 = D.22597 * 40;
  desc = opcodes.5 + D.22598;
  desc->num = i;
  D.22599 = inst_name (i);
  desc->name = D.22599;
  table.6 = table;
  D.22601 = desc->name;
  monoeg_g_hash_table_insert_replace (table.6, D.22601, desc, 0);
  i = i + 1;
  <D.22472>:
  if (i <= 845) goto <D.22471>; else goto <D.22473>;
  <D.22473>:
}


inst_name (int op)
{
  unsigned int op.7;
  unsigned int D.22603;
  const char * D.22606;
  int D.22607;

  op.7 = (unsigned int) op;
  D.22603 = op.7 + 4294966983;
  if (D.22603 <= 533) goto <D.22604>; else goto <D.22605>;
  <D.22604>:
  D.22607 = op + -313;
  D.22606 = opnames[D.22607];
  return D.22606;
  <D.22605>:
  if (op <= 312) goto <D.22608>; else goto <D.22609>;
  <D.22608>:
  D.22606 = mono_opcode_name (op);
  return D.22606;
  <D.22609>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.22311>:
  goto <D.22311>;
  D.22606 = 0B;
  return D.22606;
}


dump ()
{
  struct OpDesc * opcodes.8;
  long unsigned int D.22612;
  long unsigned int D.22613;
  char * D.22614;
  char * D.22617;
  const char * D.22620;
  char * D.22622;
  char * D.22628;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.22505>;
  <D.22504>:
  opcodes.8 = opcodes;
  D.22612 = (long unsigned int) i;
  D.22613 = D.22612 * 40;
  desc = opcodes.8 + D.22613;
  D.22614 = desc->comment;
  if (D.22614 != 0B) goto <D.22615>; else goto <D.22616>;
  <D.22615>:
  D.22614 = desc->comment;
  monoeg_g_print ("%s", D.22614);
  <D.22616>:
  D.22617 = desc->desc;
  if (D.22617 == 0B) goto <D.22618>; else goto <D.22619>;
  <D.22618>:
  D.22620 = desc->name;
  monoeg_g_print ("%s:\n", D.22620);
  goto <D.22621>;
  <D.22619>:
  D.22620 = desc->name;
  D.22617 = desc->desc;
  monoeg_g_print ("%s: %s", D.22620, D.22617);
  D.22617 = desc->desc;
  D.22622 = __builtin_strchr (D.22617, 10);
  if (D.22622 == 0B) goto <D.22623>; else goto <D.22624>;
  <D.22623>:
  monoeg_g_print ("\n");
  <D.22624>:
  <D.22621>:
  i = i + 1;
  <D.22505>:
  if (i <= 312) goto <D.22504>; else goto <D.22506>;
  <D.22506>:
  i = 313;
  goto <D.22508>;
  <D.22507>:
  opcodes.8 = opcodes;
  D.22612 = (long unsigned int) i;
  D.22613 = D.22612 * 40;
  desc = opcodes.8 + D.22613;
  D.22617 = desc->desc;
  if (D.22617 == 0B) goto <D.22625>; else goto <D.22626>;
  <D.22625>:
  D.22620 = desc->name;
  monoeg_g_print ("%s:\n", D.22620);
  goto <D.22627>;
  <D.22626>:
  D.22620 = desc->name;
  D.22617 = desc->desc;
  monoeg_g_print ("%s: %s", D.22620, D.22617);
  D.22617 = desc->desc;
  D.22628 = __builtin_strchr (D.22617, 10);
  if (D.22628 == 0B) goto <D.22629>; else goto <D.22630>;
  <D.22629>:
  monoeg_g_print ("\n");
  <D.22630>:
  <D.22627>:
  i = i + 1;
  <D.22508>:
  if (i <= 845) goto <D.22507>; else goto <D.22509>;
  <D.22509>:
}


load_file (const char * name)
{
  char D.22633;
  const short unsigned int * * D.22635;
  const short unsigned int * D.22636;
  long unsigned int D.22637;
  long unsigned int D.22638;
  const short unsigned int * D.22639;
  short unsigned int D.22640;
  int D.22641;
  int D.22642;
  char * p.9;
  char * p.10;
  char * p.11;
  char * p.12;
  char * p.13;
  char D.22654;
  long unsigned int D.22656;
  long unsigned int D.22657;
  const short unsigned int * D.22658;
  short unsigned int D.22659;
  int D.22660;
  int D.22661;
  int D.22351;
  int iftmp.14;
  int D.22350;
  const char[9] * D.22665;
  unsigned char D.22666;
  int D.22667;
  unsigned char D.22668;
  int D.22669;
  const unsigned char * D.22674;
  unsigned char D.22675;
  int D.22676;
  const unsigned char * D.22677;
  unsigned char D.22678;
  int D.22679;
  const unsigned char * D.22684;
  unsigned char D.22685;
  int D.22686;
  const unsigned char * D.22687;
  unsigned char D.22688;
  int D.22689;
  const unsigned char * D.22694;
  unsigned char D.22695;
  int D.22696;
  const unsigned char * D.22697;
  unsigned char D.22698;
  int D.22699;
  struct GHashTable * table.15;
  char * D.22707;
  gchar * D.22710;
  char * D.22711;
  gchar * D.22712;
  int D.22713;
  char D.22716;
  char * p.16;
  int D.22719;
  int D.22723;
  int D.22727;
  int D.22731;
  int D.22735;
  char * p.17;
  char D.22741;
  int D.22743;
  char * p.18;
  int nacl.19;
  char D.22750;
  int D.22752;
  char * p.20;
  int D.22757;
  char * p.21;
  char * p.22;
  struct GHashTable * template_table.23;
  char D.22763;
  char[6] * D.22766;
  char[6] * D.22767;
  int D.22769;
  const char * D.22774;
  char * p.24;
  char * p.25;
  void * D.22780;
  gchar * D.22783;
  int D.22790;
  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.22631>; else goto <D.22632>;
      <D.22631>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.22332>:
      goto <D.22332>;
      <D.22632>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.22338>;
      <D.22463>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.22336>;
        <D.22335>:
        str = str + 1;
        <D.22336>:
        D.22633 = *str;
        if (D.22633 != 0) goto <D.22634>; else goto <D.22337>;
        <D.22634>:
        D.22635 = __ctype_b_loc ();
        D.22636 = *D.22635;
        D.22633 = *str;
        D.22637 = (long unsigned int) D.22633;
        D.22638 = D.22637 * 2;
        D.22639 = D.22636 + D.22638;
        D.22640 = *D.22639;
        D.22641 = (int) D.22640;
        D.22642 = D.22641 & 8192;
        if (D.22642 != 0) goto <D.22335>; else goto <D.22337>;
        <D.22337>:
        D.22633 = *str;
        if (D.22633 == 0) goto <D.22643>; else goto <D.22644>;
        <D.22643>:
        // predicted unlikely by continue predictor.
        goto <D.22338>;
        <D.22644>:
        D.22633 = *str;
        if (D.22633 == 35) goto <D.22645>; else goto <D.22646>;
        <D.22645>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.22338>;
        <D.22646>:
        p.9 = __builtin_strchr (str, 58);
        p = p.9;
        p.10 = p;
        if (p.10 == 0B) goto <D.22649>; else goto <D.22650>;
        <D.22649>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.22339>:
        goto <D.22339>;
        <D.22650>:
        p.10 = p;
        p.11 = p.10;
        p.12 = p.11 + 1;
        p = p.12;
        *p.11 = 0;
        goto <D.22341>;
        <D.22340>:
        p.10 = p;
        p.13 = p.10 + 1;
        p = p.13;
        <D.22341>:
        p.10 = p;
        D.22654 = *p.10;
        if (D.22654 != 0) goto <D.22655>; else goto <D.22342>;
        <D.22655>:
        D.22635 = __ctype_b_loc ();
        D.22636 = *D.22635;
        p.10 = p;
        D.22654 = *p.10;
        D.22656 = (long unsigned int) D.22654;
        D.22657 = D.22656 * 2;
        D.22658 = D.22636 + D.22657;
        D.22659 = *D.22658;
        D.22660 = (int) D.22659;
        D.22661 = D.22660 & 8192;
        if (D.22661 != 0) goto <D.22340>; else goto <D.22342>;
        <D.22342>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = str;
            D.22665 = "template";
            D.22666 = MEM[(const unsigned char *)D.22665];
            D.22667 = (int) D.22666;
            D.22668 = *__s2;
            D.22669 = (int) D.22668;
            __result = D.22667 - D.22669;
            {
              if (__s2_len != 0) goto <D.22670>; else goto <D.22671>;
              <D.22670>:
              if (__result == 0) goto <D.22672>; else goto <D.22673>;
              <D.22672>:
              D.22674 = &MEM[(void *)"template" + 1B];
              D.22675 = *D.22674;
              D.22676 = (int) D.22675;
              D.22677 = __s2 + 1;
              D.22678 = *D.22677;
              D.22679 = (int) D.22678;
              __result = D.22676 - D.22679;
              if (__s2_len > 1) goto <D.22680>; else goto <D.22681>;
              <D.22680>:
              if (__result == 0) goto <D.22682>; else goto <D.22683>;
              <D.22682>:
              D.22684 = &MEM[(void *)"template" + 2B];
              D.22685 = *D.22684;
              D.22686 = (int) D.22685;
              D.22687 = __s2 + 2;
              D.22688 = *D.22687;
              D.22689 = (int) D.22688;
              __result = D.22686 - D.22689;
              if (__s2_len > 2) goto <D.22690>; else goto <D.22691>;
              <D.22690>:
              if (__result == 0) goto <D.22692>; else goto <D.22693>;
              <D.22692>:
              D.22694 = &MEM[(void *)"template" + 3B];
              D.22695 = *D.22694;
              D.22696 = (int) D.22695;
              D.22697 = __s2 + 3;
              D.22698 = *D.22697;
              D.22699 = (int) D.22698;
              __result = D.22696 - D.22699;
              <D.22693>:
              <D.22691>:
              <D.22683>:
              <D.22681>:
              <D.22673>:
              <D.22671>:
            }
            D.22350 = __result;
          }
          iftmp.14 = -D.22350;
          goto <D.22700>;
          <D.22664>:
          iftmp.14 = __builtin_strcmp (str, "template");
          <D.22700>:
          D.22351 = iftmp.14;
        }
        if (D.22351 == 0) goto <D.22701>; else goto <D.22702>;
        <D.22701>:
        is_template = 1;
        desc = monoeg_malloc0 (40);
        goto <D.22703>;
        <D.22702>:
        table.15 = table;
        desc = monoeg_g_hash_table_lookup (table.15, str);
        if (desc == 0B) goto <D.22705>; else goto <D.22706>;
        <D.22705>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.22352>:
        goto <D.22352>;
        <D.22706>:
        D.22707 = desc->desc;
        if (D.22707 != 0B) goto <D.22708>; else goto <D.22709>;
        <D.22708>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.22353>:
        goto <D.22353>;
        <D.22709>:
        <D.22703>:
        p.10 = p;
        D.22710 = monoeg_strdup (p.10);
        desc->desc = D.22710;
        D.22711 = comment->str;
        D.22712 = monoeg_strdup (D.22711);
        desc->comment = D.22712;
        monoeg_g_string_truncate (comment, 0);
        goto <D.22460>;
        <D.22459>:
        p.10 = p;
        D.22713 = strncmp (p.10, "dest:", 5);
        if (D.22713 == 0) goto <D.22714>; else goto <D.22715>;
        <D.22714>:
        p.10 = p;
        D.22716 = MEM[(char *)p.10 + 5B];
        desc->spec[0] = D.22716;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22718>;
        <D.22715>:
        p.10 = p;
        D.22719 = strncmp (p.10, "src1:", 5);
        if (D.22719 == 0) goto <D.22720>; else goto <D.22721>;
        <D.22720>:
        p.10 = p;
        D.22716 = MEM[(char *)p.10 + 5B];
        desc->spec[1] = D.22716;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22722>;
        <D.22721>:
        p.10 = p;
        D.22723 = strncmp (p.10, "src2:", 5);
        if (D.22723 == 0) goto <D.22724>; else goto <D.22725>;
        <D.22724>:
        p.10 = p;
        D.22716 = MEM[(char *)p.10 + 5B];
        desc->spec[2] = D.22716;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22726>;
        <D.22725>:
        p.10 = p;
        D.22727 = strncmp (p.10, "src3:", 5);
        if (D.22727 == 0) goto <D.22728>; else goto <D.22729>;
        <D.22728>:
        p.10 = p;
        D.22716 = MEM[(char *)p.10 + 5B];
        desc->spec[3] = D.22716;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22730>;
        <D.22729>:
        p.10 = p;
        D.22731 = strncmp (p.10, "clob:", 5);
        if (D.22731 == 0) goto <D.22732>; else goto <D.22733>;
        <D.22732>:
        p.10 = p;
        D.22716 = MEM[(char *)p.10 + 5B];
        desc->spec[5] = D.22716;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22734>;
        <D.22733>:
        p.10 = p;
        D.22735 = strncmp (p.10, "len:", 4);
        if (D.22735 == 0) goto <D.22736>; else goto <D.22737>;
        <D.22736>:
        {
          long unsigned int size;

          p.10 = p;
          p.17 = p.10 + 4;
          p = p.17;
          p.10 = p;
          size = strtoul (p.10, &p, 10);
          if (nacl_length_set == 0) goto <D.22739>; else goto <D.22740>;
          <D.22739>:
          D.22741 = (char) size;
          desc->spec[4] = D.22741;
          <D.22740>:
        }
        goto <D.22742>;
        <D.22737>:
        p.10 = p;
        D.22743 = strncmp (p.10, "nacl:", 5);
        if (D.22743 == 0) goto <D.22744>; else goto <D.22745>;
        <D.22744>:
        {
          long unsigned int size;

          p.10 = p;
          p.18 = p.10 + 5;
          p = p.18;
          p.10 = p;
          size = strtoul (p.10, &p, 10);
          nacl.19 = nacl;
          if (nacl.19 != 0) goto <D.22748>; else goto <D.22749>;
          <D.22748>:
          D.22750 = (char) size;
          desc->spec[4] = D.22750;
          nacl_length_set = 1;
          <D.22749>:
        }
        goto <D.22751>;
        <D.22745>:
        p.10 = p;
        D.22752 = strncmp (p.10, "template:", 9);
        if (D.22752 == 0) goto <D.22753>; else goto <D.22754>;
        <D.22753>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.10 = p;
          p.20 = p.10 + 9;
          p = p.20;
          tname = p;
          goto <D.22432>;
          <D.22431>:
          p.10 = p;
          p.13 = p.10 + 1;
          p = p.13;
          <D.22432>:
          p.10 = p;
          D.22654 = *p.10;
          if (D.22654 != 0) goto <D.22756>; else goto <D.22433>;
          <D.22756>:
          D.22635 = __ctype_b_loc ();
          D.22636 = *D.22635;
          p.10 = p;
          D.22654 = *p.10;
          D.22656 = (long unsigned int) D.22654;
          D.22657 = D.22656 * 2;
          D.22658 = D.22636 + D.22657;
          D.22659 = *D.22658;
          D.22660 = (int) D.22659;
          D.22757 = D.22660 & 8;
          if (D.22757 != 0) goto <D.22431>; else goto <D.22433>;
          <D.22433>:
          p.10 = p;
          p.21 = p.10;
          p.22 = p.21 + 1;
          p = p.22;
          *p.21 = 0;
          template_table.23 = template_table;
          tdesc = monoeg_g_hash_table_lookup (template_table.23, tname);
          if (tdesc == 0B) goto <D.22761>; else goto <D.22762>;
          <D.22761>:
          p.10 = p;
          monoeg_g_log (0B, 4, "Invalid template name %s at \'%s\' at line %d in %s\n", tname, p.10, line, name);
          <D.22434>:
          goto <D.22434>;
          <D.22762>:
          i = 0;
          goto <D.22437>;
          <D.22436>:
          D.22763 = desc->spec[i];
          if (D.22763 != 0) goto <D.22764>; else goto <D.22765>;
          <D.22764>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.22435>:
          goto <D.22435>;
          <D.22765>:
          i = i + 1;
          <D.22437>:
          if (i <= 5) goto <D.22436>; else goto <D.22438>;
          <D.22438>:
          D.22766 = &desc->spec;
          D.22767 = &tdesc->spec;
          memcpy (D.22766, D.22767, 6);
        }
        goto <D.22768>;
        <D.22754>:
        p.10 = p;
        D.22769 = strncmp (p.10, "name:", 5);
        if (D.22769 == 0) goto <D.22770>; else goto <D.22771>;
        <D.22770>:
        {
          char * tname;

          if (is_template == 0) goto <D.22772>; else goto <D.22773>;
          <D.22772>:
          p.10 = p;
          monoeg_g_log (0B, 4, "name tag only valid in templates at \'%s\' at line %d in %s\n", p.10, line, name);
          <D.22449>:
          goto <D.22449>;
          <D.22773>:
          D.22774 = desc->name;
          if (D.22774 != 0B) goto <D.22775>; else goto <D.22776>;
          <D.22775>:
          D.22774 = desc->name;
          p.10 = p;
          monoeg_g_log (0B, 4, "Duplicated name tag in template %s at \'%s\' at line %d in %s\n", D.22774, p.10, line, name);
          <D.22450>:
          goto <D.22450>;
          <D.22776>:
          p.10 = p;
          p.18 = p.10 + 5;
          p = p.18;
          tname = p;
          goto <D.22452>;
          <D.22451>:
          p.10 = p;
          p.13 = p.10 + 1;
          p = p.13;
          <D.22452>:
          p.10 = p;
          D.22654 = *p.10;
          if (D.22654 != 0) goto <D.22777>; else goto <D.22453>;
          <D.22777>:
          D.22635 = __ctype_b_loc ();
          D.22636 = *D.22635;
          p.10 = p;
          D.22654 = *p.10;
          D.22656 = (long unsigned int) D.22654;
          D.22657 = D.22656 * 2;
          D.22658 = D.22636 + D.22657;
          D.22659 = *D.22658;
          D.22660 = (int) D.22659;
          D.22757 = D.22660 & 8;
          if (D.22757 != 0) goto <D.22451>; else goto <D.22453>;
          <D.22453>:
          p.10 = p;
          p.24 = p.10;
          p.25 = p.24 + 1;
          p = p.25;
          *p.24 = 0;
          template_table.23 = template_table;
          D.22780 = monoeg_g_hash_table_lookup (template_table.23, tname);
          if (D.22780 != 0B) goto <D.22781>; else goto <D.22782>;
          <D.22781>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.22454>:
          goto <D.22454>;
          <D.22782>:
          D.22783 = monoeg_strdup (tname);
          desc->name = D.22783;
          template_table.23 = template_table;
          D.22774 = desc->name;
          monoeg_g_hash_table_insert_replace (template_table.23, D.22774, desc, 0);
        }
        goto <D.22784>;
        <D.22771>:
        p.10 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.10, line, name);
        <D.22455>:
        goto <D.22455>;
        <D.22784>:
        <D.22768>:
        <D.22751>:
        <D.22742>:
        <D.22734>:
        <D.22730>:
        <D.22726>:
        <D.22722>:
        <D.22718>:
        goto <D.22457>;
        <D.22456>:
        p.10 = p;
        p.13 = p.10 + 1;
        p = p.13;
        <D.22457>:
        p.10 = p;
        D.22654 = *p.10;
        if (D.22654 != 0) goto <D.22785>; else goto <D.22458>;
        <D.22785>:
        D.22635 = __ctype_b_loc ();
        D.22636 = *D.22635;
        p.10 = p;
        D.22654 = *p.10;
        D.22656 = (long unsigned int) D.22654;
        D.22657 = D.22656 * 2;
        D.22658 = D.22636 + D.22657;
        D.22659 = *D.22658;
        D.22660 = (int) D.22659;
        D.22661 = D.22660 & 8192;
        if (D.22661 != 0) goto <D.22456>; else goto <D.22458>;
        <D.22458>:
        <D.22460>:
        p.10 = p;
        D.22654 = *p.10;
        if (D.22654 != 0) goto <D.22459>; else goto <D.22461>;
        <D.22461>:
        if (is_template != 0) goto <D.22786>; else goto <D.22787>;
        <D.22786>:
        D.22774 = desc->name;
        if (D.22774 == 0B) goto <D.22788>; else goto <D.22789>;
        <D.22788>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.22462>:
        goto <D.22462>;
        <D.22789>:
        <D.22787>:
      }
      <D.22338>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.22463>; else goto <D.22464>;
      <D.22464>:
      fclose (f);
      D.22790 = 0;
      return D.22790;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.22793;
  long unsigned int D.22794;

  D.22794 = __builtin_object_size (__dest, 0);
  D.22793 = __builtin___memcpy_chk (__dest, __src, __len, D.22794);
  return D.22793;
}


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

  if (str != 0B) goto <D.22796>; else goto <D.22797>;
  <D.22796>:
  D.22798 = __strdup (str);
  return D.22798;
  <D.22797>:
  D.22798 = 0B;
  return D.22798;
}


fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  long unsigned int D.22800;
  int D.22805;
  char * D.22807;
  long unsigned int D.22808;
  long unsigned int D.22809;
  long unsigned int D.22810;
  long unsigned int D.22813;

  D.22800 = __builtin_object_size (__s, 1);
  if (D.22800 != 18446744073709551615) goto <D.22801>; else goto <D.22802>;
  <D.22801>:
  D.22805 = __builtin_constant_p (__n);
  if (D.22805 == 0) goto <D.22803>; else goto <D.22806>;
  <D.22806>:
  if (__n <= 0) goto <D.22803>; else goto <D.22804>;
  <D.22803>:
  D.22808 = __builtin_object_size (__s, 1);
  D.22807 = __fgets_chk (__s, D.22808, __n, __stream);
  return D.22807;
  <D.22804>:
  D.22809 = (long unsigned int) __n;
  D.22810 = __builtin_object_size (__s, 1);
  if (D.22809 > D.22810) goto <D.22811>; else goto <D.22812>;
  <D.22811>:
  D.22813 = __builtin_object_size (__s, 1);
  D.22807 = __fgets_chk_warn (__s, D.22813, __n, __stream);
  return D.22807;
  <D.22812>:
  <D.22802>:
  D.22807 = __fgets_alias (__s, __n, __stream);
  return D.22807;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.26;
  long unsigned int D.22818;
  long unsigned int D.22819;
  char * D.22820;
  const char * iftmp.27;
  const char * D.22824;
  char D.22829;
  int D.22830;
  char * D.22831;
  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.22815>; else goto <D.22816>;
  <D.22815>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.22489>:
  goto <D.22489>;
  <D.22816>:
  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.22491>;
  <D.22490>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.22491>:
  if (j <= 5) goto <D.22490>; else goto <D.22492>;
  <D.22492>:
  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.22497>;
  <D.22496>:
  opcodes.26 = opcodes;
  D.22818 = (long unsigned int) i;
  D.22819 = D.22818 * 40;
  desc = opcodes.26 + D.22819;
  D.22820 = desc->desc;
  if (D.22820 == 0B) goto <D.22821>; else goto <D.22822>;
  <D.22821>:
  D.22824 = desc->name;
  if (D.22824 != 0B) goto <D.22825>; else goto <D.22826>;
  <D.22825>:
  iftmp.27 = desc->name;
  goto <D.22827>;
  <D.22826>:
  iftmp.27 = "";
  <D.22827>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.27);
  goto <D.22828>;
  <D.22822>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.22494>;
  <D.22493>:
  D.22829 = desc->spec[j];
  output_char (f, D.22829);
  j = j + 1;
  <D.22494>:
  if (j <= 5) goto <D.22493>; else goto <D.22495>;
  <D.22495>:
  D.22824 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.22824);
  D.22830 = idx * 6;
  D.22824 = desc->name;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.22830, D.22824);
  idx = idx + 1;
  <D.22828>:
  i = i + 1;
  <D.22497>:
  if (i <= 845) goto <D.22496>; else goto <D.22498>;
  <D.22498>:
  fprintf (f, "};\n\n");
  D.22831 = idx_array->str;
  fprintf (f, "%s};\n\n", D.22831);
  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.22832;
  const short unsigned int * D.22833;
  long unsigned int D.22834;
  long unsigned int D.22835;
  const short unsigned int * D.22836;
  short unsigned int D.22837;
  int D.22838;
  int D.22839;
  int D.22842;

  D.22832 = __ctype_b_loc ();
  D.22833 = *D.22832;
  D.22834 = (long unsigned int) c;
  D.22835 = D.22834 * 2;
  D.22836 = D.22833 + D.22835;
  D.22837 = *D.22836;
  D.22838 = (int) D.22837;
  D.22839 = D.22838 & 8;
  if (D.22839 != 0) goto <D.22840>; else goto <D.22841>;
  <D.22840>:
  D.22842 = (int) c;
  fprintf (f, "%c", D.22842);
  goto <D.22843>;
  <D.22841>:
  D.22842 = (int) c;
  fprintf (f, "\\x%x\" \"", D.22842);
  <D.22843>:
}


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

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


