main (int argc, char * * argv)
{
  char * * D.22440;
  char * D.22441;
  int D.22445;
  int D.22433;
  int iftmp.0;
  int D.22432;
  const char[7] * D.22449;
  unsigned char D.22450;
  int D.22451;
  unsigned char D.22452;
  int D.22453;
  _Bool D.22454;
  _Bool D.22455;
  _Bool D.22456;
  const unsigned char * D.22459;
  unsigned char D.22460;
  int D.22461;
  const unsigned char * D.22462;
  unsigned char D.22463;
  int D.22464;
  _Bool D.22465;
  _Bool D.22466;
  const unsigned char * D.22469;
  unsigned char D.22470;
  int D.22471;
  const unsigned char * D.22472;
  unsigned char D.22473;
  int D.22474;
  _Bool D.22475;
  _Bool D.22476;
  const unsigned char * D.22479;
  unsigned char D.22480;
  int D.22481;
  const unsigned char * D.22482;
  unsigned char D.22483;
  int D.22484;
  long unsigned int D.22488;
  long unsigned int D.22489;
  char * * D.22490;
  char * D.22491;
  int nacl.1;
  int D.22493;
  long unsigned int D.22494;
  long unsigned int D.22495;
  char * * D.22496;
  char * D.22497;
  int D.22498;
  long unsigned int D.22499;
  long unsigned int D.22500;
  char * * D.22501;
  char * D.22502;

  init_table ();
  if (argc == 2) goto <D.22438>; else goto <D.22439>;
  <D.22438>:
  D.22440 = argv + 8;
  D.22441 = *D.22440;
  load_file (D.22441);
  dump ();
  goto <D.22442>;
  <D.22439>:
  if (argc <= 3) goto <D.22443>; else goto <D.22444>;
  <D.22443>:
  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.22445 = 1;
  return D.22445;
  <D.22444>:
  {
    int i;

    i = 3;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = MEM[(char * *)argv + 8B];
        D.22449 = "--nacl";
        D.22450 = MEM[(const unsigned char *)D.22449];
        D.22451 = (int) D.22450;
        D.22452 = *__s2;
        D.22453 = (int) D.22452;
        __result = D.22451 - D.22453;
        {
          D.22454 = __s2_len != 0;
          D.22455 = __result == 0;
          D.22456 = D.22454 & D.22455;
          if (D.22456 != 0) goto <D.22457>; else goto <D.22458>;
          <D.22457>:
          D.22459 = &MEM[(void *)"--nacl" + 1B];
          D.22460 = *D.22459;
          D.22461 = (int) D.22460;
          D.22462 = __s2 + 1;
          D.22463 = *D.22462;
          D.22464 = (int) D.22463;
          __result = D.22461 - D.22464;
          D.22465 = __s2_len > 1;
          D.22455 = __result == 0;
          D.22466 = D.22465 & D.22455;
          if (D.22466 != 0) goto <D.22467>; else goto <D.22468>;
          <D.22467>:
          D.22469 = &MEM[(void *)"--nacl" + 2B];
          D.22470 = *D.22469;
          D.22471 = (int) D.22470;
          D.22472 = __s2 + 2;
          D.22473 = *D.22472;
          D.22474 = (int) D.22473;
          __result = D.22471 - D.22474;
          D.22475 = __s2_len > 2;
          D.22455 = __result == 0;
          D.22476 = D.22475 & D.22455;
          if (D.22476 != 0) goto <D.22477>; else goto <D.22478>;
          <D.22477>:
          D.22479 = &MEM[(void *)"--nacl" + 3B];
          D.22480 = *D.22479;
          D.22481 = (int) D.22480;
          D.22482 = __s2 + 3;
          D.22483 = *D.22482;
          D.22484 = (int) D.22483;
          __result = D.22481 - D.22484;
          <D.22478>:
          <D.22468>:
          <D.22458>:
        }
        D.22432 = __result;
      }
      iftmp.0 = -D.22432;
      goto <D.22485>;
      <D.22448>:
      D.22440 = argv + 8;
      D.22441 = *D.22440;
      iftmp.0 = __builtin_strcmp (D.22441, "--nacl");
      <D.22485>:
      D.22433 = iftmp.0;
    }
    if (D.22433 == 0) goto <D.22486>; else goto <D.22487>;
    <D.22486>:
    nacl = 1;
    i = i + 1;
    <D.22487>:
    goto <D.22435>;
    <D.22434>:
    D.22488 = (long unsigned int) i;
    D.22489 = D.22488 * 8;
    D.22490 = argv + D.22489;
    D.22491 = *D.22490;
    load_file (D.22491);
    i = i + 1;
    <D.22435>:
    if (i < argc) goto <D.22434>; else goto <D.22436>;
    <D.22436>:
    nacl.1 = nacl;
    D.22493 = nacl.1 + 2;
    D.22494 = (long unsigned int) D.22493;
    D.22495 = D.22494 * 8;
    D.22496 = argv + D.22495;
    D.22497 = *D.22496;
    nacl.1 = nacl;
    D.22498 = nacl.1 + 1;
    D.22499 = (long unsigned int) D.22498;
    D.22500 = D.22499 * 8;
    D.22501 = argv + D.22500;
    D.22502 = *D.22501;
    build_table (D.22502, D.22497);
  }
  <D.22442>:
  D.22445 = 0;
  return D.22445;
}


init_table ()
{
  struct GHashTable * template_table.2;
  struct GHashTable * table.3;
  void * opcodes.4;
  struct OpDesc * opcodes.5;
  long unsigned int D.22508;
  long unsigned int D.22509;
  const char * D.22510;
  const char * D.22511;
  struct GHashTable * table.6;
  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 (43040);
  opcodes = opcodes.4;
  i = 313;
  goto <D.22382>;
  <D.22381>:
  opcodes.5 = opcodes;
  D.22508 = (long unsigned int) i;
  D.22509 = D.22508 * 40;
  desc = opcodes.5 + D.22509;
  desc->num = i;
  D.22510 = inst_name (i);
  desc->name = D.22510;
  D.22511 = desc->name;
  table.6 = table;
  monoeg_g_hash_table_insert_replace (table.6, D.22511, desc, 0);
  i = i + 1;
  <D.22382>:
  if (i <= 1075) goto <D.22381>; else goto <D.22383>;
  <D.22383>:
}


inst_name (int op)
{
  unsigned int op.7;
  unsigned int D.22514;
  const char * D.22517;
  int D.22518;

  op.7 = (unsigned int) op;
  D.22514 = op.7 + 4294966983;
  if (D.22514 <= 763) goto <D.22515>; else goto <D.22516>;
  <D.22515>:
  D.22518 = op + -313;
  D.22517 = opnames[D.22518];
  return D.22517;
  <D.22516>:
  if (op <= 312) goto <D.22519>; else goto <D.22520>;
  <D.22519>:
  D.22517 = mono_opcode_name (op);
  return D.22517;
  <D.22520>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.22221>:
  goto <D.22221>;
  D.22517 = 0B;
  return D.22517;
}


dump ()
{
  struct OpDesc * opcodes.8;
  long unsigned int D.22523;
  long unsigned int D.22524;
  char * D.22525;
  char * D.22528;
  const char * D.22531;
  char * D.22533;
  char * D.22539;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.22415>;
  <D.22414>:
  opcodes.8 = opcodes;
  D.22523 = (long unsigned int) i;
  D.22524 = D.22523 * 40;
  desc = opcodes.8 + D.22524;
  D.22525 = desc->comment;
  if (D.22525 != 0B) goto <D.22526>; else goto <D.22527>;
  <D.22526>:
  D.22525 = desc->comment;
  monoeg_g_print ("%s", D.22525);
  <D.22527>:
  D.22528 = desc->desc;
  if (D.22528 == 0B) goto <D.22529>; else goto <D.22530>;
  <D.22529>:
  D.22531 = desc->name;
  monoeg_g_print ("%s:\n", D.22531);
  goto <D.22532>;
  <D.22530>:
  D.22528 = desc->desc;
  D.22531 = desc->name;
  monoeg_g_print ("%s: %s", D.22531, D.22528);
  D.22528 = desc->desc;
  D.22533 = __builtin_strchr (D.22528, 10);
  if (D.22533 == 0B) goto <D.22534>; else goto <D.22535>;
  <D.22534>:
  monoeg_g_print ("\n");
  <D.22535>:
  <D.22532>:
  i = i + 1;
  <D.22415>:
  if (i <= 312) goto <D.22414>; else goto <D.22416>;
  <D.22416>:
  i = 313;
  goto <D.22418>;
  <D.22417>:
  opcodes.8 = opcodes;
  D.22523 = (long unsigned int) i;
  D.22524 = D.22523 * 40;
  desc = opcodes.8 + D.22524;
  D.22528 = desc->desc;
  if (D.22528 == 0B) goto <D.22536>; else goto <D.22537>;
  <D.22536>:
  D.22531 = desc->name;
  monoeg_g_print ("%s:\n", D.22531);
  goto <D.22538>;
  <D.22537>:
  D.22528 = desc->desc;
  D.22531 = desc->name;
  monoeg_g_print ("%s: %s", D.22531, D.22528);
  D.22528 = desc->desc;
  D.22539 = __builtin_strchr (D.22528, 10);
  if (D.22539 == 0B) goto <D.22540>; else goto <D.22541>;
  <D.22540>:
  monoeg_g_print ("\n");
  <D.22541>:
  <D.22538>:
  i = i + 1;
  <D.22418>:
  if (i <= 1075) goto <D.22417>; else goto <D.22419>;
  <D.22419>:
}


load_file (const char * name)
{
  char D.22544;
  const short unsigned int * * D.22546;
  const short unsigned int * D.22547;
  long unsigned int D.22548;
  long unsigned int D.22549;
  const short unsigned int * D.22550;
  short unsigned int D.22551;
  int D.22552;
  int D.22553;
  char * p.9;
  char * p.10;
  char * p.11;
  char * p.12;
  char * p.13;
  char D.22565;
  long unsigned int D.22567;
  long unsigned int D.22568;
  const short unsigned int * D.22569;
  short unsigned int D.22570;
  int D.22571;
  int D.22572;
  int D.22261;
  int iftmp.14;
  int D.22260;
  const char[9] * D.22576;
  unsigned char D.22577;
  int D.22578;
  unsigned char D.22579;
  int D.22580;
  _Bool D.22581;
  _Bool D.22582;
  _Bool D.22583;
  const unsigned char * D.22586;
  unsigned char D.22587;
  int D.22588;
  const unsigned char * D.22589;
  unsigned char D.22590;
  int D.22591;
  _Bool D.22592;
  _Bool D.22593;
  const unsigned char * D.22596;
  unsigned char D.22597;
  int D.22598;
  const unsigned char * D.22599;
  unsigned char D.22600;
  int D.22601;
  _Bool D.22602;
  _Bool D.22603;
  const unsigned char * D.22606;
  unsigned char D.22607;
  int D.22608;
  const unsigned char * D.22609;
  unsigned char D.22610;
  int D.22611;
  struct GHashTable * table.15;
  char * D.22619;
  gchar * D.22622;
  char * D.22623;
  gchar * D.22624;
  int D.22625;
  char D.22628;
  char * p.16;
  int D.22631;
  int D.22635;
  int D.22639;
  int D.22643;
  int D.22647;
  char * p.17;
  char D.22653;
  int D.22655;
  char * p.18;
  int nacl.19;
  char D.22662;
  int D.22664;
  char * p.20;
  int D.22669;
  char * p.21;
  char * p.22;
  struct GHashTable * template_table.23;
  char D.22675;
  char[6] * D.22678;
  char[6] * D.22679;
  int D.22681;
  const char * D.22686;
  char * p.24;
  char * p.25;
  void * D.22692;
  gchar * D.22695;
  int D.22702;
  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.22542>; else goto <D.22543>;
      <D.22542>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.22242>:
      goto <D.22242>;
      <D.22543>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.22248>;
      <D.22373>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.22246>;
        <D.22245>:
        str = str + 1;
        <D.22246>:
        D.22544 = *str;
        if (D.22544 != 0) goto <D.22545>; else goto <D.22247>;
        <D.22545>:
        D.22546 = __ctype_b_loc ();
        D.22547 = *D.22546;
        D.22544 = *str;
        D.22548 = (long unsigned int) D.22544;
        D.22549 = D.22548 * 2;
        D.22550 = D.22547 + D.22549;
        D.22551 = *D.22550;
        D.22552 = (int) D.22551;
        D.22553 = D.22552 & 8192;
        if (D.22553 != 0) goto <D.22245>; else goto <D.22247>;
        <D.22247>:
        D.22544 = *str;
        if (D.22544 == 0) goto <D.22554>; else goto <D.22555>;
        <D.22554>:
        // predicted unlikely by continue predictor.
        goto <D.22248>;
        <D.22555>:
        D.22544 = *str;
        if (D.22544 == 35) goto <D.22556>; else goto <D.22557>;
        <D.22556>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.22248>;
        <D.22557>:
        p.9 = __builtin_strchr (str, 58);
        p = p.9;
        p.10 = p;
        if (p.10 == 0B) goto <D.22560>; else goto <D.22561>;
        <D.22560>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.22249>:
        goto <D.22249>;
        <D.22561>:
        p.10 = p;
        p.11 = p.10;
        p.12 = p.11 + 1;
        p = p.12;
        *p.11 = 0;
        goto <D.22251>;
        <D.22250>:
        p.10 = p;
        p.13 = p.10 + 1;
        p = p.13;
        <D.22251>:
        p.10 = p;
        D.22565 = *p.10;
        if (D.22565 != 0) goto <D.22566>; else goto <D.22252>;
        <D.22566>:
        D.22546 = __ctype_b_loc ();
        D.22547 = *D.22546;
        p.10 = p;
        D.22565 = *p.10;
        D.22567 = (long unsigned int) D.22565;
        D.22568 = D.22567 * 2;
        D.22569 = D.22547 + D.22568;
        D.22570 = *D.22569;
        D.22571 = (int) D.22570;
        D.22572 = D.22571 & 8192;
        if (D.22572 != 0) goto <D.22250>; else goto <D.22252>;
        <D.22252>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = str;
            D.22576 = "template";
            D.22577 = MEM[(const unsigned char *)D.22576];
            D.22578 = (int) D.22577;
            D.22579 = *__s2;
            D.22580 = (int) D.22579;
            __result = D.22578 - D.22580;
            {
              D.22581 = __s2_len != 0;
              D.22582 = __result == 0;
              D.22583 = D.22581 & D.22582;
              if (D.22583 != 0) goto <D.22584>; else goto <D.22585>;
              <D.22584>:
              D.22586 = &MEM[(void *)"template" + 1B];
              D.22587 = *D.22586;
              D.22588 = (int) D.22587;
              D.22589 = __s2 + 1;
              D.22590 = *D.22589;
              D.22591 = (int) D.22590;
              __result = D.22588 - D.22591;
              D.22592 = __s2_len > 1;
              D.22582 = __result == 0;
              D.22593 = D.22592 & D.22582;
              if (D.22593 != 0) goto <D.22594>; else goto <D.22595>;
              <D.22594>:
              D.22596 = &MEM[(void *)"template" + 2B];
              D.22597 = *D.22596;
              D.22598 = (int) D.22597;
              D.22599 = __s2 + 2;
              D.22600 = *D.22599;
              D.22601 = (int) D.22600;
              __result = D.22598 - D.22601;
              D.22602 = __s2_len > 2;
              D.22582 = __result == 0;
              D.22603 = D.22602 & D.22582;
              if (D.22603 != 0) goto <D.22604>; else goto <D.22605>;
              <D.22604>:
              D.22606 = &MEM[(void *)"template" + 3B];
              D.22607 = *D.22606;
              D.22608 = (int) D.22607;
              D.22609 = __s2 + 3;
              D.22610 = *D.22609;
              D.22611 = (int) D.22610;
              __result = D.22608 - D.22611;
              <D.22605>:
              <D.22595>:
              <D.22585>:
            }
            D.22260 = __result;
          }
          iftmp.14 = -D.22260;
          goto <D.22612>;
          <D.22575>:
          iftmp.14 = __builtin_strcmp (str, "template");
          <D.22612>:
          D.22261 = iftmp.14;
        }
        if (D.22261 == 0) goto <D.22613>; else goto <D.22614>;
        <D.22613>:
        is_template = 1;
        desc = monoeg_malloc0 (40);
        goto <D.22615>;
        <D.22614>:
        table.15 = table;
        desc = monoeg_g_hash_table_lookup (table.15, str);
        if (desc == 0B) goto <D.22617>; else goto <D.22618>;
        <D.22617>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.22262>:
        goto <D.22262>;
        <D.22618>:
        D.22619 = desc->desc;
        if (D.22619 != 0B) goto <D.22620>; else goto <D.22621>;
        <D.22620>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.22263>:
        goto <D.22263>;
        <D.22621>:
        <D.22615>:
        p.10 = p;
        D.22622 = monoeg_strdup (p.10);
        desc->desc = D.22622;
        D.22623 = comment->str;
        D.22624 = monoeg_strdup (D.22623);
        desc->comment = D.22624;
        monoeg_g_string_truncate (comment, 0);
        goto <D.22370>;
        <D.22369>:
        p.10 = p;
        D.22625 = strncmp (p.10, "dest:", 5);
        if (D.22625 == 0) goto <D.22626>; else goto <D.22627>;
        <D.22626>:
        p.10 = p;
        D.22628 = MEM[(char *)p.10 + 5B];
        desc->spec[0] = D.22628;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22630>;
        <D.22627>:
        p.10 = p;
        D.22631 = strncmp (p.10, "src1:", 5);
        if (D.22631 == 0) goto <D.22632>; else goto <D.22633>;
        <D.22632>:
        p.10 = p;
        D.22628 = MEM[(char *)p.10 + 5B];
        desc->spec[1] = D.22628;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22634>;
        <D.22633>:
        p.10 = p;
        D.22635 = strncmp (p.10, "src2:", 5);
        if (D.22635 == 0) goto <D.22636>; else goto <D.22637>;
        <D.22636>:
        p.10 = p;
        D.22628 = MEM[(char *)p.10 + 5B];
        desc->spec[2] = D.22628;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22638>;
        <D.22637>:
        p.10 = p;
        D.22639 = strncmp (p.10, "src3:", 5);
        if (D.22639 == 0) goto <D.22640>; else goto <D.22641>;
        <D.22640>:
        p.10 = p;
        D.22628 = MEM[(char *)p.10 + 5B];
        desc->spec[3] = D.22628;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22642>;
        <D.22641>:
        p.10 = p;
        D.22643 = strncmp (p.10, "clob:", 5);
        if (D.22643 == 0) goto <D.22644>; else goto <D.22645>;
        <D.22644>:
        p.10 = p;
        D.22628 = MEM[(char *)p.10 + 5B];
        desc->spec[5] = D.22628;
        p.10 = p;
        p.16 = p.10 + 6;
        p = p.16;
        goto <D.22646>;
        <D.22645>:
        p.10 = p;
        D.22647 = strncmp (p.10, "len:", 4);
        if (D.22647 == 0) goto <D.22648>; else goto <D.22649>;
        <D.22648>:
        {
          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.22651>; else goto <D.22652>;
          <D.22651>:
          D.22653 = (char) size;
          desc->spec[4] = D.22653;
          <D.22652>:
        }
        goto <D.22654>;
        <D.22649>:
        p.10 = p;
        D.22655 = strncmp (p.10, "nacl:", 5);
        if (D.22655 == 0) goto <D.22656>; else goto <D.22657>;
        <D.22656>:
        {
          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.22660>; else goto <D.22661>;
          <D.22660>:
          D.22662 = (char) size;
          desc->spec[4] = D.22662;
          nacl_length_set = 1;
          <D.22661>:
        }
        goto <D.22663>;
        <D.22657>:
        p.10 = p;
        D.22664 = strncmp (p.10, "template:", 9);
        if (D.22664 == 0) goto <D.22665>; else goto <D.22666>;
        <D.22665>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.10 = p;
          p.20 = p.10 + 9;
          p = p.20;
          tname = p;
          goto <D.22342>;
          <D.22341>:
          p.10 = p;
          p.13 = p.10 + 1;
          p = p.13;
          <D.22342>:
          p.10 = p;
          D.22565 = *p.10;
          if (D.22565 != 0) goto <D.22668>; else goto <D.22343>;
          <D.22668>:
          D.22546 = __ctype_b_loc ();
          D.22547 = *D.22546;
          p.10 = p;
          D.22565 = *p.10;
          D.22567 = (long unsigned int) D.22565;
          D.22568 = D.22567 * 2;
          D.22569 = D.22547 + D.22568;
          D.22570 = *D.22569;
          D.22571 = (int) D.22570;
          D.22669 = D.22571 & 8;
          if (D.22669 != 0) goto <D.22341>; else goto <D.22343>;
          <D.22343>:
          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.22673>; else goto <D.22674>;
          <D.22673>:
          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.22344>:
          goto <D.22344>;
          <D.22674>:
          i = 0;
          goto <D.22347>;
          <D.22346>:
          D.22675 = desc->spec[i];
          if (D.22675 != 0) goto <D.22676>; else goto <D.22677>;
          <D.22676>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.22345>:
          goto <D.22345>;
          <D.22677>:
          i = i + 1;
          <D.22347>:
          if (i <= 5) goto <D.22346>; else goto <D.22348>;
          <D.22348>:
          D.22678 = &tdesc->spec;
          D.22679 = &desc->spec;
          memcpy (D.22679, D.22678, 6);
        }
        goto <D.22680>;
        <D.22666>:
        p.10 = p;
        D.22681 = strncmp (p.10, "name:", 5);
        if (D.22681 == 0) goto <D.22682>; else goto <D.22683>;
        <D.22682>:
        {
          char * tname;

          if (is_template == 0) goto <D.22684>; else goto <D.22685>;
          <D.22684>:
          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.22359>:
          goto <D.22359>;
          <D.22685>:
          D.22686 = desc->name;
          if (D.22686 != 0B) goto <D.22687>; else goto <D.22688>;
          <D.22687>:
          p.10 = p;
          D.22686 = desc->name;
          monoeg_g_log (0B, 4, "Duplicated name tag in template %s at \'%s\' at line %d in %s\n", D.22686, p.10, line, name);
          <D.22360>:
          goto <D.22360>;
          <D.22688>:
          p.10 = p;
          p.18 = p.10 + 5;
          p = p.18;
          tname = p;
          goto <D.22362>;
          <D.22361>:
          p.10 = p;
          p.13 = p.10 + 1;
          p = p.13;
          <D.22362>:
          p.10 = p;
          D.22565 = *p.10;
          if (D.22565 != 0) goto <D.22689>; else goto <D.22363>;
          <D.22689>:
          D.22546 = __ctype_b_loc ();
          D.22547 = *D.22546;
          p.10 = p;
          D.22565 = *p.10;
          D.22567 = (long unsigned int) D.22565;
          D.22568 = D.22567 * 2;
          D.22569 = D.22547 + D.22568;
          D.22570 = *D.22569;
          D.22571 = (int) D.22570;
          D.22669 = D.22571 & 8;
          if (D.22669 != 0) goto <D.22361>; else goto <D.22363>;
          <D.22363>:
          p.10 = p;
          p.24 = p.10;
          p.25 = p.24 + 1;
          p = p.25;
          *p.24 = 0;
          template_table.23 = template_table;
          D.22692 = monoeg_g_hash_table_lookup (template_table.23, tname);
          if (D.22692 != 0B) goto <D.22693>; else goto <D.22694>;
          <D.22693>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.22364>:
          goto <D.22364>;
          <D.22694>:
          D.22695 = monoeg_strdup (tname);
          desc->name = D.22695;
          D.22686 = desc->name;
          template_table.23 = template_table;
          monoeg_g_hash_table_insert_replace (template_table.23, D.22686, desc, 0);
        }
        goto <D.22696>;
        <D.22683>:
        p.10 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.10, line, name);
        <D.22365>:
        goto <D.22365>;
        <D.22696>:
        <D.22680>:
        <D.22663>:
        <D.22654>:
        <D.22646>:
        <D.22642>:
        <D.22638>:
        <D.22634>:
        <D.22630>:
        goto <D.22367>;
        <D.22366>:
        p.10 = p;
        p.13 = p.10 + 1;
        p = p.13;
        <D.22367>:
        p.10 = p;
        D.22565 = *p.10;
        if (D.22565 != 0) goto <D.22697>; else goto <D.22368>;
        <D.22697>:
        D.22546 = __ctype_b_loc ();
        D.22547 = *D.22546;
        p.10 = p;
        D.22565 = *p.10;
        D.22567 = (long unsigned int) D.22565;
        D.22568 = D.22567 * 2;
        D.22569 = D.22547 + D.22568;
        D.22570 = *D.22569;
        D.22571 = (int) D.22570;
        D.22572 = D.22571 & 8192;
        if (D.22572 != 0) goto <D.22366>; else goto <D.22368>;
        <D.22368>:
        <D.22370>:
        p.10 = p;
        D.22565 = *p.10;
        if (D.22565 != 0) goto <D.22369>; else goto <D.22371>;
        <D.22371>:
        if (is_template != 0) goto <D.22698>; else goto <D.22699>;
        <D.22698>:
        D.22686 = desc->name;
        if (D.22686 == 0B) goto <D.22700>; else goto <D.22701>;
        <D.22700>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.22372>:
        goto <D.22372>;
        <D.22701>:
        <D.22699>:
      }
      <D.22248>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.22373>; else goto <D.22374>;
      <D.22374>:
      fclose (f);
      D.22702 = 0;
      return D.22702;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


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

  D.22706 = __builtin_object_size (__dest, 0);
  D.22705 = __builtin___memcpy_chk (__dest, __src, __len, D.22706);
  return D.22705;
}


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

  if (str != 0B) goto <D.22708>; else goto <D.22709>;
  <D.22708>:
  D.22710 = __strdup (str);
  return D.22710;
  <D.22709>:
  D.22710 = 0B;
  return D.22710;
}


fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  long unsigned int D.22712;
  int D.22717;
  char * D.22719;
  long unsigned int D.22720;
  long unsigned int D.22721;
  long unsigned int D.22722;
  long unsigned int D.22725;

  D.22712 = __builtin_object_size (__s, 1);
  if (D.22712 != 18446744073709551615) goto <D.22713>; else goto <D.22714>;
  <D.22713>:
  D.22717 = __builtin_constant_p (__n);
  if (D.22717 == 0) goto <D.22715>; else goto <D.22718>;
  <D.22718>:
  if (__n <= 0) goto <D.22715>; else goto <D.22716>;
  <D.22715>:
  D.22720 = __builtin_object_size (__s, 1);
  D.22719 = __fgets_chk (__s, D.22720, __n, __stream);
  return D.22719;
  <D.22716>:
  D.22721 = (long unsigned int) __n;
  D.22722 = __builtin_object_size (__s, 1);
  if (D.22721 > D.22722) goto <D.22723>; else goto <D.22724>;
  <D.22723>:
  D.22725 = __builtin_object_size (__s, 1);
  D.22719 = __fgets_chk_warn (__s, D.22725, __n, __stream);
  return D.22719;
  <D.22724>:
  <D.22714>:
  D.22719 = __fgets_alias (__s, __n, __stream);
  return D.22719;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.26;
  long unsigned int D.22730;
  long unsigned int D.22731;
  char * D.22732;
  const char * iftmp.27;
  const char * D.22736;
  char D.22741;
  int D.22742;
  int D.22743;
  char * D.22744;
  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.22727>; else goto <D.22728>;
  <D.22727>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.22399>:
  goto <D.22399>;
  <D.22728>:
  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.22401>;
  <D.22400>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.22401>:
  if (j <= 5) goto <D.22400>; else goto <D.22402>;
  <D.22402>:
  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.22407>;
  <D.22406>:
  opcodes.26 = opcodes;
  D.22730 = (long unsigned int) i;
  D.22731 = D.22730 * 40;
  desc = opcodes.26 + D.22731;
  D.22732 = desc->desc;
  if (D.22732 == 0B) goto <D.22733>; else goto <D.22734>;
  <D.22733>:
  D.22736 = desc->name;
  if (D.22736 != 0B) goto <D.22737>; else goto <D.22738>;
  <D.22737>:
  iftmp.27 = desc->name;
  goto <D.22739>;
  <D.22738>:
  iftmp.27 = "";
  <D.22739>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.27);
  goto <D.22740>;
  <D.22734>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.22404>;
  <D.22403>:
  D.22741 = desc->spec[j];
  D.22742 = (int) D.22741;
  output_char (f, D.22742);
  j = j + 1;
  <D.22404>:
  if (j <= 5) goto <D.22403>; else goto <D.22405>;
  <D.22405>:
  D.22736 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.22736);
  D.22736 = desc->name;
  D.22743 = idx * 6;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.22743, D.22736);
  idx = idx + 1;
  <D.22740>:
  i = i + 1;
  <D.22407>:
  if (i <= 1075) goto <D.22406>; else goto <D.22408>;
  <D.22408>:
  fprintf (f, "};\n\n");
  D.22744 = idx_array->str;
  fprintf (f, "%s};\n\n", D.22744);
  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.22745;
  const short unsigned int * D.22746;
  long unsigned int D.22747;
  long unsigned int D.22748;
  const short unsigned int * D.22749;
  short unsigned int D.22750;
  int D.22751;
  int D.22752;
  int D.22755;

  D.22745 = __ctype_b_loc ();
  D.22746 = *D.22745;
  D.22747 = (long unsigned int) c;
  D.22748 = D.22747 * 2;
  D.22749 = D.22746 + D.22748;
  D.22750 = *D.22749;
  D.22751 = (int) D.22750;
  D.22752 = D.22751 & 8;
  if (D.22752 != 0) goto <D.22753>; else goto <D.22754>;
  <D.22753>:
  D.22755 = (int) c;
  fprintf (f, "%c", D.22755);
  goto <D.22756>;
  <D.22754>:
  D.22755 = (int) c;
  fprintf (f, "\\x%x\" \"", D.22755);
  <D.22756>:
}


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

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


