main (int argc, char * * argv)
{
  char * * D.22261;
  char * D.22262;
  int D.22266;
  int D.22267;
  long unsigned int D.22270;
  long unsigned int D.22271;
  char * * D.22272;
  char * D.22273;
  int nacl.0;
  int D.22275;
  long unsigned int D.22276;
  long unsigned int D.22277;
  char * * D.22278;
  char * D.22279;
  int D.22280;
  long unsigned int D.22281;
  long unsigned int D.22282;
  char * * D.22283;
  char * D.22284;

  {
    init_table ();
    if (argc == 2) goto <D.22259>; else goto <D.22260>;
    <D.22259>:
    D.22261 = argv + 8;
    D.22262 = *D.22261;
    load_file (D.22262);
    dump ();
    goto <D.22263>;
    <D.22260>:
    if (argc <= 3) goto <D.22264>; else goto <D.22265>;
    <D.22264>:
    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.22266 = 1;
    return D.22266;
    <D.22265>:
    {
      int i;

      i = 3;
      D.22261 = argv + 8;
      D.22262 = *D.22261;
      D.22267 = strcmp (D.22262, "--nacl");
      if (D.22267 == 0) goto <D.22268>; else goto <D.22269>;
      <D.22268>:
      nacl = 1;
      i = i + 1;
      <D.22269>:
      goto <D.22256>;
      <D.22255>:
      D.22270 = (long unsigned int) i;
      D.22271 = D.22270 * 8;
      D.22272 = argv + D.22271;
      D.22273 = *D.22272;
      load_file (D.22273);
      i = i + 1;
      <D.22256>:
      if (i < argc) goto <D.22255>; else goto <D.22257>;
      <D.22257>:
      nacl.0 = nacl;
      D.22275 = nacl.0 + 1;
      D.22276 = (long unsigned int) D.22275;
      D.22277 = D.22276 * 8;
      D.22278 = argv + D.22277;
      D.22279 = *D.22278;
      nacl.0 = nacl;
      D.22280 = nacl.0 + 2;
      D.22281 = (long unsigned int) D.22280;
      D.22282 = D.22281 * 8;
      D.22283 = argv + D.22282;
      D.22284 = *D.22283;
      build_table (D.22279, D.22284);
    }
    <D.22263>:
    D.22266 = 0;
    return D.22266;
  }
  D.22266 = 0;
  return D.22266;
}


init_table ()
{
  struct GHashTable * D.22286;
  struct GHashTable * D.22287;
  void * D.22288;
  struct OpDesc * opcodes.1;
  long unsigned int D.22290;
  long unsigned int D.22291;
  const char * D.22292;
  struct GHashTable * table.2;
  const char * D.22294;
  int i;
  struct OpDesc * desc;

  D.22286 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  template_table = D.22286;
  D.22287 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  table = D.22287;
  D.22288 = monoeg_malloc0 (34440);
  opcodes = D.22288;
  i = 313;
  goto <D.22212>;
  <D.22211>:
  opcodes.1 = opcodes;
  D.22290 = (long unsigned int) i;
  D.22291 = D.22290 * 40;
  desc = opcodes.1 + D.22291;
  desc->num = i;
  D.22292 = inst_name (i);
  desc->name = D.22292;
  table.2 = table;
  D.22294 = desc->name;
  monoeg_g_hash_table_insert_replace (table.2, D.22294, desc, 0);
  i = i + 1;
  <D.22212>:
  if (i <= 860) goto <D.22211>; else goto <D.22213>;
  <D.22213>:
}


inst_name (int op)
{
  unsigned int op.3;
  unsigned int D.22296;
  const char * D.22299;
  int D.22300;

  op.3 = (unsigned int) op;
  D.22296 = op.3 + 4294966983;
  if (D.22296 <= 548) goto <D.22297>; else goto <D.22298>;
  <D.22297>:
  D.22300 = op + -313;
  D.22299 = opnames[D.22300];
  return D.22299;
  <D.22298>:
  if (op <= 312) goto <D.22301>; else goto <D.22302>;
  <D.22301>:
  D.22299 = mono_opcode_name (op);
  return D.22299;
  <D.22302>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.22141>:
  goto <D.22141>;
  D.22299 = 0B;
  return D.22299;
}


dump ()
{
  struct OpDesc * opcodes.4;
  long unsigned int D.22305;
  long unsigned int D.22306;
  char * D.22307;
  char * D.22310;
  const char * D.22313;
  char * D.22315;
  char * D.22321;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.22245>;
  <D.22244>:
  opcodes.4 = opcodes;
  D.22305 = (long unsigned int) i;
  D.22306 = D.22305 * 40;
  desc = opcodes.4 + D.22306;
  D.22307 = desc->comment;
  if (D.22307 != 0B) goto <D.22308>; else goto <D.22309>;
  <D.22308>:
  D.22307 = desc->comment;
  monoeg_g_print ("%s", D.22307);
  <D.22309>:
  D.22310 = desc->desc;
  if (D.22310 == 0B) goto <D.22311>; else goto <D.22312>;
  <D.22311>:
  D.22313 = desc->name;
  monoeg_g_print ("%s:\n", D.22313);
  goto <D.22314>;
  <D.22312>:
  D.22313 = desc->name;
  D.22310 = desc->desc;
  monoeg_g_print ("%s: %s", D.22313, D.22310);
  D.22310 = desc->desc;
  D.22315 = __builtin_strchr (D.22310, 10);
  if (D.22315 == 0B) goto <D.22316>; else goto <D.22317>;
  <D.22316>:
  monoeg_g_print ("\n");
  <D.22317>:
  <D.22314>:
  i = i + 1;
  <D.22245>:
  if (i <= 312) goto <D.22244>; else goto <D.22246>;
  <D.22246>:
  i = 313;
  goto <D.22248>;
  <D.22247>:
  opcodes.4 = opcodes;
  D.22305 = (long unsigned int) i;
  D.22306 = D.22305 * 40;
  desc = opcodes.4 + D.22306;
  D.22310 = desc->desc;
  if (D.22310 == 0B) goto <D.22318>; else goto <D.22319>;
  <D.22318>:
  D.22313 = desc->name;
  monoeg_g_print ("%s:\n", D.22313);
  goto <D.22320>;
  <D.22319>:
  D.22313 = desc->name;
  D.22310 = desc->desc;
  monoeg_g_print ("%s: %s", D.22313, D.22310);
  D.22310 = desc->desc;
  D.22321 = __builtin_strchr (D.22310, 10);
  if (D.22321 == 0B) goto <D.22322>; else goto <D.22323>;
  <D.22322>:
  monoeg_g_print ("\n");
  <D.22323>:
  <D.22320>:
  i = i + 1;
  <D.22248>:
  if (i <= 860) goto <D.22247>; else goto <D.22249>;
  <D.22249>:
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.5;
  int iftmp.6;
  int D.22332;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.22325>; else goto <D.22326>;
  <D.22325>:
  if (__ret == 1) goto <D.22328>; else goto <D.22329>;
  <D.22328>:
  iftmp.6 = -1;
  goto <D.22330>;
  <D.22329>:
  iftmp.6 = 1;
  <D.22330>:
  iftmp.5 = iftmp.6;
  goto <D.22331>;
  <D.22326>:
  iftmp.5 = 0;
  <D.22331>:
  __ret = iftmp.5;
  D.22332 = __ret;
  return D.22332;
}


load_file (const char * name)
{
  char D.22336;
  const short unsigned int * * D.22338;
  const short unsigned int * D.22339;
  long unsigned int D.22340;
  long unsigned int D.22341;
  const short unsigned int * D.22342;
  short unsigned int D.22343;
  int D.22344;
  int D.22345;
  char * p.7;
  char * p.8;
  char * p.9;
  char * p.10;
  char * p.11;
  char D.22357;
  long unsigned int D.22359;
  long unsigned int D.22360;
  const short unsigned int * D.22361;
  short unsigned int D.22362;
  int D.22363;
  int D.22364;
  int D.22365;
  struct GHashTable * table.12;
  char * D.22372;
  gchar * D.22375;
  char * D.22376;
  gchar * D.22377;
  _Bool iftmp.13;
  long unsigned int D.22379;
  int D.22382;
  int D.22384;
  char D.22387;
  char * p.14;
  _Bool iftmp.15;
  long unsigned int D.22391;
  int D.22394;
  int D.22396;
  _Bool iftmp.16;
  long unsigned int D.22401;
  int D.22404;
  int D.22406;
  _Bool iftmp.17;
  long unsigned int D.22411;
  int D.22414;
  int D.22416;
  _Bool iftmp.18;
  long unsigned int D.22421;
  int D.22424;
  int D.22426;
  _Bool iftmp.19;
  long unsigned int D.22431;
  int D.22434;
  int D.22436;
  char * p.20;
  char D.22442;
  _Bool iftmp.21;
  long unsigned int D.22445;
  int D.22448;
  int D.22450;
  char * p.22;
  int nacl.23;
  char D.22457;
  _Bool iftmp.24;
  long unsigned int D.22460;
  int D.22463;
  int D.22465;
  char * p.25;
  int D.22470;
  char * p.26;
  char * p.27;
  struct GHashTable * template_table.28;
  char D.22476;
  char[6] * D.22479;
  char[6] * D.22480;
  _Bool iftmp.29;
  long unsigned int D.22483;
  int D.22486;
  int D.22488;
  const char * D.22493;
  char * p.30;
  char * p.31;
  void * D.22499;
  gchar * D.22502;
  int D.22509;
  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.22334>; else goto <D.22335>;
      <D.22334>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.22162>:
      goto <D.22162>;
      <D.22335>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.22168>;
      <D.22203>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.22166>;
        <D.22165>:
        str = str + 1;
        <D.22166>:
        D.22336 = *str;
        if (D.22336 != 0) goto <D.22337>; else goto <D.22167>;
        <D.22337>:
        D.22338 = __ctype_b_loc ();
        D.22339 = *D.22338;
        D.22336 = *str;
        D.22340 = (long unsigned int) D.22336;
        D.22341 = D.22340 * 2;
        D.22342 = D.22339 + D.22341;
        D.22343 = *D.22342;
        D.22344 = (int) D.22343;
        D.22345 = D.22344 & 32;
        if (D.22345 != 0) goto <D.22165>; else goto <D.22167>;
        <D.22167>:
        D.22336 = *str;
        if (D.22336 == 0) goto <D.22346>; else goto <D.22347>;
        <D.22346>:
        // predicted unlikely by continue predictor.
        goto <D.22168>;
        <D.22347>:
        D.22336 = *str;
        if (D.22336 == 35) goto <D.22348>; else goto <D.22349>;
        <D.22348>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.22168>;
        <D.22349>:
        p.7 = __builtin_strchr (str, 58);
        p = p.7;
        p.8 = p;
        if (p.8 == 0B) goto <D.22352>; else goto <D.22353>;
        <D.22352>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.22169>:
        goto <D.22169>;
        <D.22353>:
        p.8 = p;
        p.9 = p.8;
        p.10 = p.9 + 1;
        p = p.10;
        *p.9 = 0;
        goto <D.22171>;
        <D.22170>:
        p.8 = p;
        p.11 = p.8 + 1;
        p = p.11;
        <D.22171>:
        p.8 = p;
        D.22357 = *p.8;
        if (D.22357 != 0) goto <D.22358>; else goto <D.22172>;
        <D.22358>:
        D.22338 = __ctype_b_loc ();
        D.22339 = *D.22338;
        p.8 = p;
        D.22357 = *p.8;
        D.22359 = (long unsigned int) D.22357;
        D.22360 = D.22359 * 2;
        D.22361 = D.22339 + D.22360;
        D.22362 = *D.22361;
        D.22363 = (int) D.22362;
        D.22364 = D.22363 & 32;
        if (D.22364 != 0) goto <D.22170>; else goto <D.22172>;
        <D.22172>:
        D.22365 = strcmp (str, "template");
        if (D.22365 == 0) goto <D.22366>; else goto <D.22367>;
        <D.22366>:
        is_template = 1;
        desc = monoeg_malloc0 (40);
        goto <D.22368>;
        <D.22367>:
        table.12 = table;
        desc = monoeg_g_hash_table_lookup (table.12, str);
        if (desc == 0B) goto <D.22370>; else goto <D.22371>;
        <D.22370>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.22173>:
        goto <D.22173>;
        <D.22371>:
        D.22372 = desc->desc;
        if (D.22372 != 0B) goto <D.22373>; else goto <D.22374>;
        <D.22373>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.22174>:
        goto <D.22174>;
        <D.22374>:
        <D.22368>:
        p.8 = p;
        D.22375 = monoeg_strdup (p.8);
        desc->desc = D.22375;
        D.22376 = comment->str;
        D.22377 = monoeg_strdup (D.22376);
        desc->comment = D.22377;
        monoeg_g_string_truncate (comment, 0);
        goto <D.22200>;
        <D.22199>:
        D.22379 = __strlen_g ("dest:");
        if (D.22379 <= 4) goto <D.22380>; else goto <D.22381>;
        <D.22380>:
        p.8 = p;
        D.22382 = strcmp (p.8, "dest:");
        iftmp.13 = D.22382 == 0;
        goto <D.22383>;
        <D.22381>:
        p.8 = p;
        D.22384 = strncmp (p.8, "dest:", 5);
        iftmp.13 = D.22384 == 0;
        <D.22383>:
        if (iftmp.13 != 0) goto <D.22385>; else goto <D.22386>;
        <D.22385>:
        p.8 = p;
        D.22387 = MEM[(char *)p.8 + 5B];
        desc->spec[0] = D.22387;
        p.8 = p;
        p.14 = p.8 + 6;
        p = p.14;
        goto <D.22389>;
        <D.22386>:
        D.22391 = __strlen_g ("src1:");
        if (D.22391 <= 4) goto <D.22392>; else goto <D.22393>;
        <D.22392>:
        p.8 = p;
        D.22394 = strcmp (p.8, "src1:");
        iftmp.15 = D.22394 == 0;
        goto <D.22395>;
        <D.22393>:
        p.8 = p;
        D.22396 = strncmp (p.8, "src1:", 5);
        iftmp.15 = D.22396 == 0;
        <D.22395>:
        if (iftmp.15 != 0) goto <D.22397>; else goto <D.22398>;
        <D.22397>:
        p.8 = p;
        D.22387 = MEM[(char *)p.8 + 5B];
        desc->spec[1] = D.22387;
        p.8 = p;
        p.14 = p.8 + 6;
        p = p.14;
        goto <D.22399>;
        <D.22398>:
        D.22401 = __strlen_g ("src2:");
        if (D.22401 <= 4) goto <D.22402>; else goto <D.22403>;
        <D.22402>:
        p.8 = p;
        D.22404 = strcmp (p.8, "src2:");
        iftmp.16 = D.22404 == 0;
        goto <D.22405>;
        <D.22403>:
        p.8 = p;
        D.22406 = strncmp (p.8, "src2:", 5);
        iftmp.16 = D.22406 == 0;
        <D.22405>:
        if (iftmp.16 != 0) goto <D.22407>; else goto <D.22408>;
        <D.22407>:
        p.8 = p;
        D.22387 = MEM[(char *)p.8 + 5B];
        desc->spec[2] = D.22387;
        p.8 = p;
        p.14 = p.8 + 6;
        p = p.14;
        goto <D.22409>;
        <D.22408>:
        D.22411 = __strlen_g ("src3:");
        if (D.22411 <= 4) goto <D.22412>; else goto <D.22413>;
        <D.22412>:
        p.8 = p;
        D.22414 = strcmp (p.8, "src3:");
        iftmp.17 = D.22414 == 0;
        goto <D.22415>;
        <D.22413>:
        p.8 = p;
        D.22416 = strncmp (p.8, "src3:", 5);
        iftmp.17 = D.22416 == 0;
        <D.22415>:
        if (iftmp.17 != 0) goto <D.22417>; else goto <D.22418>;
        <D.22417>:
        p.8 = p;
        D.22387 = MEM[(char *)p.8 + 5B];
        desc->spec[3] = D.22387;
        p.8 = p;
        p.14 = p.8 + 6;
        p = p.14;
        goto <D.22419>;
        <D.22418>:
        D.22421 = __strlen_g ("clob:");
        if (D.22421 <= 4) goto <D.22422>; else goto <D.22423>;
        <D.22422>:
        p.8 = p;
        D.22424 = strcmp (p.8, "clob:");
        iftmp.18 = D.22424 == 0;
        goto <D.22425>;
        <D.22423>:
        p.8 = p;
        D.22426 = strncmp (p.8, "clob:", 5);
        iftmp.18 = D.22426 == 0;
        <D.22425>:
        if (iftmp.18 != 0) goto <D.22427>; else goto <D.22428>;
        <D.22427>:
        p.8 = p;
        D.22387 = MEM[(char *)p.8 + 5B];
        desc->spec[5] = D.22387;
        p.8 = p;
        p.14 = p.8 + 6;
        p = p.14;
        goto <D.22429>;
        <D.22428>:
        D.22431 = __strlen_g ("len:");
        if (D.22431 <= 3) goto <D.22432>; else goto <D.22433>;
        <D.22432>:
        p.8 = p;
        D.22434 = strcmp (p.8, "len:");
        iftmp.19 = D.22434 == 0;
        goto <D.22435>;
        <D.22433>:
        p.8 = p;
        D.22436 = strncmp (p.8, "len:", 4);
        iftmp.19 = D.22436 == 0;
        <D.22435>:
        if (iftmp.19 != 0) goto <D.22437>; else goto <D.22438>;
        <D.22437>:
        {
          long unsigned int size;

          p.8 = p;
          p.20 = p.8 + 4;
          p = p.20;
          p.8 = p;
          size = strtoul (p.8, &p, 10);
          if (nacl_length_set == 0) goto <D.22440>; else goto <D.22441>;
          <D.22440>:
          D.22442 = (char) size;
          desc->spec[4] = D.22442;
          <D.22441>:
        }
        goto <D.22443>;
        <D.22438>:
        D.22445 = __strlen_g ("nacl:");
        if (D.22445 <= 4) goto <D.22446>; else goto <D.22447>;
        <D.22446>:
        p.8 = p;
        D.22448 = strcmp (p.8, "nacl:");
        iftmp.21 = D.22448 == 0;
        goto <D.22449>;
        <D.22447>:
        p.8 = p;
        D.22450 = strncmp (p.8, "nacl:", 5);
        iftmp.21 = D.22450 == 0;
        <D.22449>:
        if (iftmp.21 != 0) goto <D.22451>; else goto <D.22452>;
        <D.22451>:
        {
          long unsigned int size;

          p.8 = p;
          p.22 = p.8 + 5;
          p = p.22;
          p.8 = p;
          size = strtoul (p.8, &p, 10);
          nacl.23 = nacl;
          if (nacl.23 != 0) goto <D.22455>; else goto <D.22456>;
          <D.22455>:
          D.22457 = (char) size;
          desc->spec[4] = D.22457;
          nacl_length_set = 1;
          <D.22456>:
        }
        goto <D.22458>;
        <D.22452>:
        D.22460 = __strlen_g ("template:");
        if (D.22460 <= 8) goto <D.22461>; else goto <D.22462>;
        <D.22461>:
        p.8 = p;
        D.22463 = strcmp (p.8, "template:");
        iftmp.24 = D.22463 == 0;
        goto <D.22464>;
        <D.22462>:
        p.8 = p;
        D.22465 = strncmp (p.8, "template:", 9);
        iftmp.24 = D.22465 == 0;
        <D.22464>:
        if (iftmp.24 != 0) goto <D.22466>; else goto <D.22467>;
        <D.22466>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.8 = p;
          p.25 = p.8 + 9;
          p = p.25;
          tname = p;
          goto <D.22181>;
          <D.22180>:
          p.8 = p;
          p.11 = p.8 + 1;
          p = p.11;
          <D.22181>:
          p.8 = p;
          D.22357 = *p.8;
          if (D.22357 != 0) goto <D.22469>; else goto <D.22182>;
          <D.22469>:
          D.22338 = __ctype_b_loc ();
          D.22339 = *D.22338;
          p.8 = p;
          D.22357 = *p.8;
          D.22359 = (long unsigned int) D.22357;
          D.22360 = D.22359 * 2;
          D.22361 = D.22339 + D.22360;
          D.22362 = *D.22361;
          D.22363 = (int) D.22362;
          D.22470 = D.22363 & 2048;
          if (D.22470 != 0) goto <D.22180>; else goto <D.22182>;
          <D.22182>:
          p.8 = p;
          p.26 = p.8;
          p.27 = p.26 + 1;
          p = p.27;
          *p.26 = 0;
          template_table.28 = template_table;
          tdesc = monoeg_g_hash_table_lookup (template_table.28, tname);
          if (tdesc == 0B) goto <D.22474>; else goto <D.22475>;
          <D.22474>:
          p.8 = p;
          monoeg_g_log (0B, 4, "Invalid template name %s at \'%s\' at line %d in %s\n", tname, p.8, line, name);
          <D.22183>:
          goto <D.22183>;
          <D.22475>:
          i = 0;
          goto <D.22186>;
          <D.22185>:
          D.22476 = desc->spec[i];
          if (D.22476 != 0) goto <D.22477>; else goto <D.22478>;
          <D.22477>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.22184>:
          goto <D.22184>;
          <D.22478>:
          i = i + 1;
          <D.22186>:
          if (i <= 5) goto <D.22185>; else goto <D.22187>;
          <D.22187>:
          D.22479 = &desc->spec;
          D.22480 = &tdesc->spec;
          memcpy (D.22479, D.22480, 6);
        }
        goto <D.22481>;
        <D.22467>:
        D.22483 = __strlen_g ("name:");
        if (D.22483 <= 4) goto <D.22484>; else goto <D.22485>;
        <D.22484>:
        p.8 = p;
        D.22486 = strcmp (p.8, "name:");
        iftmp.29 = D.22486 == 0;
        goto <D.22487>;
        <D.22485>:
        p.8 = p;
        D.22488 = strncmp (p.8, "name:", 5);
        iftmp.29 = D.22488 == 0;
        <D.22487>:
        if (iftmp.29 != 0) goto <D.22489>; else goto <D.22490>;
        <D.22489>:
        {
          char * tname;

          if (is_template == 0) goto <D.22491>; else goto <D.22492>;
          <D.22491>:
          p.8 = p;
          monoeg_g_log (0B, 4, "name tag only valid in templates at \'%s\' at line %d in %s\n", p.8, line, name);
          <D.22189>:
          goto <D.22189>;
          <D.22492>:
          D.22493 = desc->name;
          if (D.22493 != 0B) goto <D.22494>; else goto <D.22495>;
          <D.22494>:
          D.22493 = desc->name;
          p.8 = p;
          monoeg_g_log (0B, 4, "Duplicated name tag in template %s at \'%s\' at line %d in %s\n", D.22493, p.8, line, name);
          <D.22190>:
          goto <D.22190>;
          <D.22495>:
          p.8 = p;
          p.22 = p.8 + 5;
          p = p.22;
          tname = p;
          goto <D.22192>;
          <D.22191>:
          p.8 = p;
          p.11 = p.8 + 1;
          p = p.11;
          <D.22192>:
          p.8 = p;
          D.22357 = *p.8;
          if (D.22357 != 0) goto <D.22496>; else goto <D.22193>;
          <D.22496>:
          D.22338 = __ctype_b_loc ();
          D.22339 = *D.22338;
          p.8 = p;
          D.22357 = *p.8;
          D.22359 = (long unsigned int) D.22357;
          D.22360 = D.22359 * 2;
          D.22361 = D.22339 + D.22360;
          D.22362 = *D.22361;
          D.22363 = (int) D.22362;
          D.22470 = D.22363 & 2048;
          if (D.22470 != 0) goto <D.22191>; else goto <D.22193>;
          <D.22193>:
          p.8 = p;
          p.30 = p.8;
          p.31 = p.30 + 1;
          p = p.31;
          *p.30 = 0;
          template_table.28 = template_table;
          D.22499 = monoeg_g_hash_table_lookup (template_table.28, tname);
          if (D.22499 != 0B) goto <D.22500>; else goto <D.22501>;
          <D.22500>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.22194>:
          goto <D.22194>;
          <D.22501>:
          D.22502 = monoeg_strdup (tname);
          desc->name = D.22502;
          template_table.28 = template_table;
          D.22493 = desc->name;
          monoeg_g_hash_table_insert_replace (template_table.28, D.22493, desc, 0);
        }
        goto <D.22503>;
        <D.22490>:
        p.8 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.8, line, name);
        <D.22195>:
        goto <D.22195>;
        <D.22503>:
        <D.22481>:
        <D.22458>:
        <D.22443>:
        <D.22429>:
        <D.22419>:
        <D.22409>:
        <D.22399>:
        <D.22389>:
        goto <D.22197>;
        <D.22196>:
        p.8 = p;
        p.11 = p.8 + 1;
        p = p.11;
        <D.22197>:
        p.8 = p;
        D.22357 = *p.8;
        if (D.22357 != 0) goto <D.22504>; else goto <D.22198>;
        <D.22504>:
        D.22338 = __ctype_b_loc ();
        D.22339 = *D.22338;
        p.8 = p;
        D.22357 = *p.8;
        D.22359 = (long unsigned int) D.22357;
        D.22360 = D.22359 * 2;
        D.22361 = D.22339 + D.22360;
        D.22362 = *D.22361;
        D.22363 = (int) D.22362;
        D.22364 = D.22363 & 32;
        if (D.22364 != 0) goto <D.22196>; else goto <D.22198>;
        <D.22198>:
        <D.22200>:
        p.8 = p;
        D.22357 = *p.8;
        if (D.22357 != 0) goto <D.22199>; else goto <D.22201>;
        <D.22201>:
        if (is_template != 0) goto <D.22505>; else goto <D.22506>;
        <D.22505>:
        D.22493 = desc->name;
        if (D.22493 == 0B) goto <D.22507>; else goto <D.22508>;
        <D.22507>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.22202>:
        goto <D.22202>;
        <D.22508>:
        <D.22506>:
      }
      <D.22168>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.22203>; else goto <D.22204>;
      <D.22204>:
      fclose (f);
      D.22509 = 0;
      return D.22509;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.22512;
  long unsigned int D.22513;

  D.22513 = __builtin_object_size (__dest, 0);
  D.22512 = __builtin___memcpy_chk (__dest, __src, __len, D.22513);
  return D.22512;
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.22515;
  long int __ptr.32;
  long int __str.33;
  long int D.22518;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.32 = (long int) __ptr;
  __str.33 = (long int) __str;
  D.22518 = __ptr.32 - __str.33;
  D.22515 = (size_t) D.22518;
  return D.22515;
}


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

  if (str != 0B) goto <D.22520>; else goto <D.22521>;
  <D.22520>:
  D.22522 = __strdup (str);
  return D.22522;
  <D.22521>:
  D.22522 = 0B;
  return D.22522;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  long unsigned int D.22524;
  int D.22529;
  char * D.22531;
  long unsigned int D.22532;
  long unsigned int D.22533;
  long unsigned int D.22534;
  long unsigned int D.22537;

  D.22524 = __builtin_object_size (__s, 1);
  if (D.22524 != 18446744073709551615) goto <D.22525>; else goto <D.22526>;
  <D.22525>:
  D.22529 = __builtin_constant_p (__n);
  if (D.22529 == 0) goto <D.22527>; else goto <D.22530>;
  <D.22530>:
  if (__n <= 0) goto <D.22527>; else goto <D.22528>;
  <D.22527>:
  D.22532 = __builtin_object_size (__s, 1);
  D.22531 = __fgets_chk (__s, D.22532, __n, __stream);
  return D.22531;
  <D.22528>:
  D.22533 = (long unsigned int) __n;
  D.22534 = __builtin_object_size (__s, 1);
  if (D.22533 > D.22534) goto <D.22535>; else goto <D.22536>;
  <D.22535>:
  D.22537 = __builtin_object_size (__s, 1);
  D.22531 = __fgets_chk_warn (__s, D.22537, __n, __stream);
  return D.22531;
  <D.22536>:
  <D.22526>:
  D.22531 = __fgets_alias (__s, __n, __stream);
  return D.22531;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.34;
  long unsigned int D.22542;
  long unsigned int D.22543;
  char * D.22544;
  const char * iftmp.35;
  const char * D.22548;
  char D.22553;
  int D.22554;
  char * D.22555;
  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.22539>; else goto <D.22540>;
  <D.22539>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.22229>:
  goto <D.22229>;
  <D.22540>:
  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.22231>;
  <D.22230>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.22231>:
  if (j <= 5) goto <D.22230>; else goto <D.22232>;
  <D.22232>:
  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.22237>;
  <D.22236>:
  opcodes.34 = opcodes;
  D.22542 = (long unsigned int) i;
  D.22543 = D.22542 * 40;
  desc = opcodes.34 + D.22543;
  D.22544 = desc->desc;
  if (D.22544 == 0B) goto <D.22545>; else goto <D.22546>;
  <D.22545>:
  D.22548 = desc->name;
  if (D.22548 != 0B) goto <D.22549>; else goto <D.22550>;
  <D.22549>:
  iftmp.35 = desc->name;
  goto <D.22551>;
  <D.22550>:
  iftmp.35 = "";
  <D.22551>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.35);
  goto <D.22552>;
  <D.22546>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.22234>;
  <D.22233>:
  D.22553 = desc->spec[j];
  output_char (f, D.22553);
  j = j + 1;
  <D.22234>:
  if (j <= 5) goto <D.22233>; else goto <D.22235>;
  <D.22235>:
  D.22548 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.22548);
  D.22554 = idx * 6;
  D.22548 = desc->name;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.22554, D.22548);
  idx = idx + 1;
  <D.22552>:
  i = i + 1;
  <D.22237>:
  if (i <= 860) goto <D.22236>; else goto <D.22238>;
  <D.22238>:
  fprintf (f, "};\n\n");
  D.22555 = idx_array->str;
  fprintf (f, "%s};\n\n", D.22555);
  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.22556;
  const short unsigned int * D.22557;
  long unsigned int D.22558;
  long unsigned int D.22559;
  const short unsigned int * D.22560;
  short unsigned int D.22561;
  int D.22562;
  int D.22563;
  int D.22566;

  D.22556 = __ctype_b_loc ();
  D.22557 = *D.22556;
  D.22558 = (long unsigned int) c;
  D.22559 = D.22558 * 2;
  D.22560 = D.22557 + D.22559;
  D.22561 = *D.22560;
  D.22562 = (int) D.22561;
  D.22563 = D.22562 & 2048;
  if (D.22563 != 0) goto <D.22564>; else goto <D.22565>;
  <D.22564>:
  D.22566 = (int) c;
  fprintf (f, "%c", D.22566);
  goto <D.22567>;
  <D.22565>:
  D.22566 = (int) c;
  fprintf (f, "\\x%x\" \"", D.22566);
  <D.22567>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.22568;

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


