main (int argc, char * * argv)
{
  char * * D.22002;
  char * D.22003;
  int D.22007;
  int D.21995;
  int iftmp.0;
  int D.21994;
  const char[7] * D.22011;
  unsigned char D.22012;
  int D.22013;
  unsigned char D.22014;
  int D.22015;
  _Bool D.22016;
  _Bool D.22017;
  _Bool D.22018;
  const unsigned char * D.22021;
  unsigned char D.22022;
  int D.22023;
  const unsigned char * D.22024;
  unsigned char D.22025;
  int D.22026;
  _Bool D.22027;
  _Bool D.22028;
  const unsigned char * D.22031;
  unsigned char D.22032;
  int D.22033;
  const unsigned char * D.22034;
  unsigned char D.22035;
  int D.22036;
  _Bool D.22037;
  _Bool D.22038;
  const unsigned char * D.22041;
  unsigned char D.22042;
  int D.22043;
  const unsigned char * D.22044;
  unsigned char D.22045;
  int D.22046;
  unsigned int i.1;
  unsigned int D.22051;
  char * * D.22052;
  char * D.22053;
  int nacl.2;
  int D.22055;
  unsigned int D.22056;
  unsigned int D.22057;
  char * * D.22058;
  char * D.22059;
  int D.22060;
  unsigned int D.22061;
  unsigned int D.22062;
  char * * D.22063;
  char * D.22064;

  init_table ();
  if (argc == 2) goto <D.22000>; else goto <D.22001>;
  <D.22000>:
  D.22002 = argv + 4;
  D.22003 = *D.22002;
  load_file (D.22003);
  dump ();
  goto <D.22004>;
  <D.22001>:
  if (argc <= 3) goto <D.22005>; else goto <D.22006>;
  <D.22005>:
  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.22007 = 1;
  return D.22007;
  <D.22006>:
  {
    int i;

    i = 3;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = MEM[(char * *)argv + 4B];
        D.22011 = "--nacl";
        D.22012 = MEM[(const unsigned char *)D.22011];
        D.22013 = (int) D.22012;
        D.22014 = *__s2;
        D.22015 = (int) D.22014;
        __result = D.22013 - D.22015;
        {
          D.22016 = __s2_len != 0;
          D.22017 = __result == 0;
          D.22018 = D.22016 & D.22017;
          if (D.22018 != 0) goto <D.22019>; else goto <D.22020>;
          <D.22019>:
          D.22021 = &MEM[(void *)"--nacl" + 1B];
          D.22022 = *D.22021;
          D.22023 = (int) D.22022;
          D.22024 = __s2 + 1;
          D.22025 = *D.22024;
          D.22026 = (int) D.22025;
          __result = D.22023 - D.22026;
          D.22027 = __s2_len > 1;
          D.22017 = __result == 0;
          D.22028 = D.22027 & D.22017;
          if (D.22028 != 0) goto <D.22029>; else goto <D.22030>;
          <D.22029>:
          D.22031 = &MEM[(void *)"--nacl" + 2B];
          D.22032 = *D.22031;
          D.22033 = (int) D.22032;
          D.22034 = __s2 + 2;
          D.22035 = *D.22034;
          D.22036 = (int) D.22035;
          __result = D.22033 - D.22036;
          D.22037 = __s2_len > 2;
          D.22017 = __result == 0;
          D.22038 = D.22037 & D.22017;
          if (D.22038 != 0) goto <D.22039>; else goto <D.22040>;
          <D.22039>:
          D.22041 = &MEM[(void *)"--nacl" + 3B];
          D.22042 = *D.22041;
          D.22043 = (int) D.22042;
          D.22044 = __s2 + 3;
          D.22045 = *D.22044;
          D.22046 = (int) D.22045;
          __result = D.22043 - D.22046;
          <D.22040>:
          <D.22030>:
          <D.22020>:
        }
        D.21994 = __result;
      }
      iftmp.0 = -D.21994;
      goto <D.22047>;
      <D.22010>:
      D.22002 = argv + 4;
      D.22003 = *D.22002;
      iftmp.0 = __builtin_strcmp (D.22003, "--nacl");
      <D.22047>:
      D.21995 = iftmp.0;
    }
    if (D.21995 == 0) goto <D.22048>; else goto <D.22049>;
    <D.22048>:
    nacl = 1;
    i = i + 1;
    <D.22049>:
    goto <D.21997>;
    <D.21996>:
    i.1 = (unsigned int) i;
    D.22051 = i.1 * 4;
    D.22052 = argv + D.22051;
    D.22053 = *D.22052;
    load_file (D.22053);
    i = i + 1;
    <D.21997>:
    if (i < argc) goto <D.21996>; else goto <D.21998>;
    <D.21998>:
    nacl.2 = nacl;
    D.22055 = nacl.2 + 2;
    D.22056 = (unsigned int) D.22055;
    D.22057 = D.22056 * 4;
    D.22058 = argv + D.22057;
    D.22059 = *D.22058;
    nacl.2 = nacl;
    D.22060 = nacl.2 + 1;
    D.22061 = (unsigned int) D.22060;
    D.22062 = D.22061 * 4;
    D.22063 = argv + D.22062;
    D.22064 = *D.22063;
    build_table (D.22064, D.22059);
  }
  <D.22004>:
  D.22007 = 0;
  return D.22007;
}


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.22071;
  const char * D.22072;
  const char * D.22073;
  struct GHashTable * table.8;
  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 (25128);
  opcodes = opcodes.5;
  i = 313;
  goto <D.21944>;
  <D.21943>:
  opcodes.6 = opcodes;
  i.7 = (unsigned int) i;
  D.22071 = i.7 * 24;
  desc = opcodes.6 + D.22071;
  desc->num = i;
  D.22072 = inst_name (i);
  desc->name = D.22072;
  D.22073 = desc->name;
  table.8 = table;
  monoeg_g_hash_table_insert_replace (table.8, D.22073, desc, 0);
  i = i + 1;
  <D.21944>:
  if (i <= 1046) goto <D.21943>; else goto <D.21945>;
  <D.21945>:
}


inst_name (int op)
{
  unsigned int op.9;
  unsigned int D.22076;
  const char * D.22079;
  int D.22080;

  op.9 = (unsigned int) op;
  D.22076 = op.9 + 4294966983;
  if (D.22076 <= 734) goto <D.22077>; else goto <D.22078>;
  <D.22077>:
  D.22080 = op + -313;
  D.22079 = opnames[D.22080];
  return D.22079;
  <D.22078>:
  if (op <= 312) goto <D.22081>; else goto <D.22082>;
  <D.22081>:
  D.22079 = mono_opcode_name (op);
  return D.22079;
  <D.22082>:
  monoeg_g_log (0B, 4, "unknown opcode name for %d", op);
  <D.21783>:
  goto <D.21783>;
  D.22079 = 0B;
  return D.22079;
}


dump ()
{
  struct OpDesc * opcodes.10;
  unsigned int i.11;
  unsigned int D.22086;
  char * D.22087;
  char * D.22090;
  const char * D.22093;
  char * D.22095;
  char * D.22101;
  int i;
  struct OpDesc * desc;

  i = 0;
  goto <D.21977>;
  <D.21976>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.22086 = i.11 * 24;
  desc = opcodes.10 + D.22086;
  D.22087 = desc->comment;
  if (D.22087 != 0B) goto <D.22088>; else goto <D.22089>;
  <D.22088>:
  D.22087 = desc->comment;
  monoeg_g_print ("%s", D.22087);
  <D.22089>:
  D.22090 = desc->desc;
  if (D.22090 == 0B) goto <D.22091>; else goto <D.22092>;
  <D.22091>:
  D.22093 = desc->name;
  monoeg_g_print ("%s:\n", D.22093);
  goto <D.22094>;
  <D.22092>:
  D.22090 = desc->desc;
  D.22093 = desc->name;
  monoeg_g_print ("%s: %s", D.22093, D.22090);
  D.22090 = desc->desc;
  D.22095 = __builtin_strchr (D.22090, 10);
  if (D.22095 == 0B) goto <D.22096>; else goto <D.22097>;
  <D.22096>:
  monoeg_g_print ("\n");
  <D.22097>:
  <D.22094>:
  i = i + 1;
  <D.21977>:
  if (i <= 312) goto <D.21976>; else goto <D.21978>;
  <D.21978>:
  i = 313;
  goto <D.21980>;
  <D.21979>:
  opcodes.10 = opcodes;
  i.11 = (unsigned int) i;
  D.22086 = i.11 * 24;
  desc = opcodes.10 + D.22086;
  D.22090 = desc->desc;
  if (D.22090 == 0B) goto <D.22098>; else goto <D.22099>;
  <D.22098>:
  D.22093 = desc->name;
  monoeg_g_print ("%s:\n", D.22093);
  goto <D.22100>;
  <D.22099>:
  D.22090 = desc->desc;
  D.22093 = desc->name;
  monoeg_g_print ("%s: %s", D.22093, D.22090);
  D.22090 = desc->desc;
  D.22101 = __builtin_strchr (D.22090, 10);
  if (D.22101 == 0B) goto <D.22102>; else goto <D.22103>;
  <D.22102>:
  monoeg_g_print ("\n");
  <D.22103>:
  <D.22100>:
  i = i + 1;
  <D.21980>:
  if (i <= 1046) goto <D.21979>; else goto <D.21981>;
  <D.21981>:
}


load_file (const char * name)
{
  char D.22106;
  const short unsigned int * * D.22108;
  const short unsigned int * D.22109;
  unsigned int D.22110;
  unsigned int D.22111;
  const short unsigned int * D.22112;
  short unsigned int D.22113;
  int D.22114;
  int D.22115;
  char * p.12;
  char * p.13;
  char * p.14;
  char * p.15;
  char * p.16;
  char D.22127;
  unsigned int D.22129;
  unsigned int D.22130;
  const short unsigned int * D.22131;
  short unsigned int D.22132;
  int D.22133;
  int D.22134;
  int D.21823;
  int iftmp.17;
  int D.21822;
  const char[9] * D.22138;
  unsigned char D.22139;
  int D.22140;
  unsigned char D.22141;
  int D.22142;
  _Bool D.22143;
  _Bool D.22144;
  _Bool D.22145;
  const unsigned char * D.22148;
  unsigned char D.22149;
  int D.22150;
  const unsigned char * D.22151;
  unsigned char D.22152;
  int D.22153;
  _Bool D.22154;
  _Bool D.22155;
  const unsigned char * D.22158;
  unsigned char D.22159;
  int D.22160;
  const unsigned char * D.22161;
  unsigned char D.22162;
  int D.22163;
  _Bool D.22164;
  _Bool D.22165;
  const unsigned char * D.22168;
  unsigned char D.22169;
  int D.22170;
  const unsigned char * D.22171;
  unsigned char D.22172;
  int D.22173;
  struct GHashTable * table.18;
  char * D.22181;
  gchar * D.22184;
  char * D.22185;
  gchar * D.22186;
  int D.22187;
  char D.22190;
  char * p.19;
  int D.22193;
  int D.22197;
  int D.22201;
  int D.22205;
  int D.22209;
  char * p.20;
  char D.22215;
  int D.22217;
  char * p.21;
  int nacl.22;
  char D.22224;
  int D.22226;
  char * p.23;
  int D.22231;
  char * p.24;
  char * p.25;
  struct GHashTable * template_table.26;
  char D.22237;
  char[6] * D.22240;
  char[6] * D.22241;
  int D.22243;
  const char * D.22248;
  char * p.27;
  char * p.28;
  void * D.22254;
  gchar * D.22257;
  int D.22264;
  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.22104>; else goto <D.22105>;
      <D.22104>:
      monoeg_g_log (0B, 4, "Cannot open file \'%s\'", name);
      <D.21804>:
      goto <D.21804>;
      <D.22105>:
      comment = monoeg_g_string_new ("");
      line = 0;
      goto <D.21810>;
      <D.21935>:
      {
        gboolean is_template;
        gboolean nacl_length_set;

        is_template = 0;
        nacl_length_set = 0;
        line = line + 1;
        goto <D.21808>;
        <D.21807>:
        str = str + 1;
        <D.21808>:
        D.22106 = *str;
        if (D.22106 != 0) goto <D.22107>; else goto <D.21809>;
        <D.22107>:
        D.22108 = __ctype_b_loc ();
        D.22109 = *D.22108;
        D.22106 = *str;
        D.22110 = (unsigned int) D.22106;
        D.22111 = D.22110 * 2;
        D.22112 = D.22109 + D.22111;
        D.22113 = *D.22112;
        D.22114 = (int) D.22113;
        D.22115 = D.22114 & 8192;
        if (D.22115 != 0) goto <D.21807>; else goto <D.21809>;
        <D.21809>:
        D.22106 = *str;
        if (D.22106 == 0) goto <D.22116>; else goto <D.22117>;
        <D.22116>:
        // predicted unlikely by continue predictor.
        goto <D.21810>;
        <D.22117>:
        D.22106 = *str;
        if (D.22106 == 35) goto <D.22118>; else goto <D.22119>;
        <D.22118>:
        monoeg_g_string_append (comment, str);
        // predicted unlikely by continue predictor.
        goto <D.21810>;
        <D.22119>:
        p.12 = __builtin_strchr (str, 58);
        p = p.12;
        p.13 = p;
        if (p.13 == 0B) goto <D.22122>; else goto <D.22123>;
        <D.22122>:
        monoeg_g_log (0B, 4, "Invalid format at line %d in %s\n", line, name);
        <D.21811>:
        goto <D.21811>;
        <D.22123>:
        p.13 = p;
        p.14 = p.13;
        p.15 = p.14 + 1;
        p = p.15;
        *p.14 = 0;
        goto <D.21813>;
        <D.21812>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.21813>:
        p.13 = p;
        D.22127 = *p.13;
        if (D.22127 != 0) goto <D.22128>; else goto <D.21814>;
        <D.22128>:
        D.22108 = __ctype_b_loc ();
        D.22109 = *D.22108;
        p.13 = p;
        D.22127 = *p.13;
        D.22129 = (unsigned int) D.22127;
        D.22130 = D.22129 * 2;
        D.22131 = D.22109 + D.22130;
        D.22132 = *D.22131;
        D.22133 = (int) D.22132;
        D.22134 = D.22133 & 8192;
        if (D.22134 != 0) goto <D.21812>; else goto <D.21814>;
        <D.21814>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = str;
            D.22138 = "template";
            D.22139 = MEM[(const unsigned char *)D.22138];
            D.22140 = (int) D.22139;
            D.22141 = *__s2;
            D.22142 = (int) D.22141;
            __result = D.22140 - D.22142;
            {
              D.22143 = __s2_len != 0;
              D.22144 = __result == 0;
              D.22145 = D.22143 & D.22144;
              if (D.22145 != 0) goto <D.22146>; else goto <D.22147>;
              <D.22146>:
              D.22148 = &MEM[(void *)"template" + 1B];
              D.22149 = *D.22148;
              D.22150 = (int) D.22149;
              D.22151 = __s2 + 1;
              D.22152 = *D.22151;
              D.22153 = (int) D.22152;
              __result = D.22150 - D.22153;
              D.22154 = __s2_len > 1;
              D.22144 = __result == 0;
              D.22155 = D.22154 & D.22144;
              if (D.22155 != 0) goto <D.22156>; else goto <D.22157>;
              <D.22156>:
              D.22158 = &MEM[(void *)"template" + 2B];
              D.22159 = *D.22158;
              D.22160 = (int) D.22159;
              D.22161 = __s2 + 2;
              D.22162 = *D.22161;
              D.22163 = (int) D.22162;
              __result = D.22160 - D.22163;
              D.22164 = __s2_len > 2;
              D.22144 = __result == 0;
              D.22165 = D.22164 & D.22144;
              if (D.22165 != 0) goto <D.22166>; else goto <D.22167>;
              <D.22166>:
              D.22168 = &MEM[(void *)"template" + 3B];
              D.22169 = *D.22168;
              D.22170 = (int) D.22169;
              D.22171 = __s2 + 3;
              D.22172 = *D.22171;
              D.22173 = (int) D.22172;
              __result = D.22170 - D.22173;
              <D.22167>:
              <D.22157>:
              <D.22147>:
            }
            D.21822 = __result;
          }
          iftmp.17 = -D.21822;
          goto <D.22174>;
          <D.22137>:
          iftmp.17 = __builtin_strcmp (str, "template");
          <D.22174>:
          D.21823 = iftmp.17;
        }
        if (D.21823 == 0) goto <D.22175>; else goto <D.22176>;
        <D.22175>:
        is_template = 1;
        desc = monoeg_malloc0 (24);
        goto <D.22177>;
        <D.22176>:
        table.18 = table;
        desc = monoeg_g_hash_table_lookup (table.18, str);
        if (desc == 0B) goto <D.22179>; else goto <D.22180>;
        <D.22179>:
        monoeg_g_log (0B, 4, "Invalid opcode \'%s\' at line %d in %s\n", str, line, name);
        <D.21824>:
        goto <D.21824>;
        <D.22180>:
        D.22181 = desc->desc;
        if (D.22181 != 0B) goto <D.22182>; else goto <D.22183>;
        <D.22182>:
        monoeg_g_log (0B, 4, "Duplicated opcode %s at line %d in %s\n", str, line, name);
        <D.21825>:
        goto <D.21825>;
        <D.22183>:
        <D.22177>:
        p.13 = p;
        D.22184 = monoeg_strdup (p.13);
        desc->desc = D.22184;
        D.22185 = comment->str;
        D.22186 = monoeg_strdup (D.22185);
        desc->comment = D.22186;
        monoeg_g_string_truncate (comment, 0);
        goto <D.21932>;
        <D.21931>:
        p.13 = p;
        D.22187 = strncmp (p.13, "dest:", 5);
        if (D.22187 == 0) goto <D.22188>; else goto <D.22189>;
        <D.22188>:
        p.13 = p;
        D.22190 = MEM[(char *)p.13 + 5B];
        desc->spec[0] = D.22190;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.22192>;
        <D.22189>:
        p.13 = p;
        D.22193 = strncmp (p.13, "src1:", 5);
        if (D.22193 == 0) goto <D.22194>; else goto <D.22195>;
        <D.22194>:
        p.13 = p;
        D.22190 = MEM[(char *)p.13 + 5B];
        desc->spec[1] = D.22190;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.22196>;
        <D.22195>:
        p.13 = p;
        D.22197 = strncmp (p.13, "src2:", 5);
        if (D.22197 == 0) goto <D.22198>; else goto <D.22199>;
        <D.22198>:
        p.13 = p;
        D.22190 = MEM[(char *)p.13 + 5B];
        desc->spec[2] = D.22190;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.22200>;
        <D.22199>:
        p.13 = p;
        D.22201 = strncmp (p.13, "src3:", 5);
        if (D.22201 == 0) goto <D.22202>; else goto <D.22203>;
        <D.22202>:
        p.13 = p;
        D.22190 = MEM[(char *)p.13 + 5B];
        desc->spec[3] = D.22190;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.22204>;
        <D.22203>:
        p.13 = p;
        D.22205 = strncmp (p.13, "clob:", 5);
        if (D.22205 == 0) goto <D.22206>; else goto <D.22207>;
        <D.22206>:
        p.13 = p;
        D.22190 = MEM[(char *)p.13 + 5B];
        desc->spec[5] = D.22190;
        p.13 = p;
        p.19 = p.13 + 6;
        p = p.19;
        goto <D.22208>;
        <D.22207>:
        p.13 = p;
        D.22209 = strncmp (p.13, "len:", 4);
        if (D.22209 == 0) goto <D.22210>; else goto <D.22211>;
        <D.22210>:
        {
          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.22213>; else goto <D.22214>;
          <D.22213>:
          D.22215 = (char) size;
          desc->spec[4] = D.22215;
          <D.22214>:
        }
        goto <D.22216>;
        <D.22211>:
        p.13 = p;
        D.22217 = strncmp (p.13, "nacl:", 5);
        if (D.22217 == 0) goto <D.22218>; else goto <D.22219>;
        <D.22218>:
        {
          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.22222>; else goto <D.22223>;
          <D.22222>:
          D.22224 = (char) size;
          desc->spec[4] = D.22224;
          nacl_length_set = 1;
          <D.22223>:
        }
        goto <D.22225>;
        <D.22219>:
        p.13 = p;
        D.22226 = strncmp (p.13, "template:", 9);
        if (D.22226 == 0) goto <D.22227>; else goto <D.22228>;
        <D.22227>:
        {
          char * tname;
          int i;
          struct OpDesc * tdesc;

          p.13 = p;
          p.23 = p.13 + 9;
          p = p.23;
          tname = p;
          goto <D.21904>;
          <D.21903>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.21904>:
          p.13 = p;
          D.22127 = *p.13;
          if (D.22127 != 0) goto <D.22230>; else goto <D.21905>;
          <D.22230>:
          D.22108 = __ctype_b_loc ();
          D.22109 = *D.22108;
          p.13 = p;
          D.22127 = *p.13;
          D.22129 = (unsigned int) D.22127;
          D.22130 = D.22129 * 2;
          D.22131 = D.22109 + D.22130;
          D.22132 = *D.22131;
          D.22133 = (int) D.22132;
          D.22231 = D.22133 & 8;
          if (D.22231 != 0) goto <D.21903>; else goto <D.21905>;
          <D.21905>:
          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.22235>; else goto <D.22236>;
          <D.22235>:
          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.21906>:
          goto <D.21906>;
          <D.22236>:
          i = 0;
          goto <D.21909>;
          <D.21908>:
          D.22237 = desc->spec[i];
          if (D.22237 != 0) goto <D.22238>; else goto <D.22239>;
          <D.22238>:
          monoeg_g_log (0B, 4, "The template overrides any previous value set at line %d in %s\n", line, name);
          <D.21907>:
          goto <D.21907>;
          <D.22239>:
          i = i + 1;
          <D.21909>:
          if (i <= 5) goto <D.21908>; else goto <D.21910>;
          <D.21910>:
          D.22240 = &tdesc->spec;
          D.22241 = &desc->spec;
          memcpy (D.22241, D.22240, 6);
        }
        goto <D.22242>;
        <D.22228>:
        p.13 = p;
        D.22243 = strncmp (p.13, "name:", 5);
        if (D.22243 == 0) goto <D.22244>; else goto <D.22245>;
        <D.22244>:
        {
          char * tname;

          if (is_template == 0) goto <D.22246>; else goto <D.22247>;
          <D.22246>:
          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.21921>:
          goto <D.21921>;
          <D.22247>:
          D.22248 = desc->name;
          if (D.22248 != 0B) goto <D.22249>; else goto <D.22250>;
          <D.22249>:
          p.13 = p;
          D.22248 = desc->name;
          monoeg_g_log (0B, 4, "Duplicated name tag in template %s at \'%s\' at line %d in %s\n", D.22248, p.13, line, name);
          <D.21922>:
          goto <D.21922>;
          <D.22250>:
          p.13 = p;
          p.21 = p.13 + 5;
          p = p.21;
          tname = p;
          goto <D.21924>;
          <D.21923>:
          p.13 = p;
          p.16 = p.13 + 1;
          p = p.16;
          <D.21924>:
          p.13 = p;
          D.22127 = *p.13;
          if (D.22127 != 0) goto <D.22251>; else goto <D.21925>;
          <D.22251>:
          D.22108 = __ctype_b_loc ();
          D.22109 = *D.22108;
          p.13 = p;
          D.22127 = *p.13;
          D.22129 = (unsigned int) D.22127;
          D.22130 = D.22129 * 2;
          D.22131 = D.22109 + D.22130;
          D.22132 = *D.22131;
          D.22133 = (int) D.22132;
          D.22231 = D.22133 & 8;
          if (D.22231 != 0) goto <D.21923>; else goto <D.21925>;
          <D.21925>:
          p.13 = p;
          p.27 = p.13;
          p.28 = p.27 + 1;
          p = p.28;
          *p.27 = 0;
          template_table.26 = template_table;
          D.22254 = monoeg_g_hash_table_lookup (template_table.26, tname);
          if (D.22254 != 0B) goto <D.22255>; else goto <D.22256>;
          <D.22255>:
          monoeg_g_log (0B, 4, "Duplicated template %s at line %d in %s\n", tname, line, name);
          <D.21926>:
          goto <D.21926>;
          <D.22256>:
          D.22257 = monoeg_strdup (tname);
          desc->name = D.22257;
          D.22248 = desc->name;
          template_table.26 = template_table;
          monoeg_g_hash_table_insert_replace (template_table.26, D.22248, desc, 0);
        }
        goto <D.22258>;
        <D.22245>:
        p.13 = p;
        monoeg_g_log (0B, 4, "Parse error at \'%s\' at line %d in %s\n", p.13, line, name);
        <D.21927>:
        goto <D.21927>;
        <D.22258>:
        <D.22242>:
        <D.22225>:
        <D.22216>:
        <D.22208>:
        <D.22204>:
        <D.22200>:
        <D.22196>:
        <D.22192>:
        goto <D.21929>;
        <D.21928>:
        p.13 = p;
        p.16 = p.13 + 1;
        p = p.16;
        <D.21929>:
        p.13 = p;
        D.22127 = *p.13;
        if (D.22127 != 0) goto <D.22259>; else goto <D.21930>;
        <D.22259>:
        D.22108 = __ctype_b_loc ();
        D.22109 = *D.22108;
        p.13 = p;
        D.22127 = *p.13;
        D.22129 = (unsigned int) D.22127;
        D.22130 = D.22129 * 2;
        D.22131 = D.22109 + D.22130;
        D.22132 = *D.22131;
        D.22133 = (int) D.22132;
        D.22134 = D.22133 & 8192;
        if (D.22134 != 0) goto <D.21928>; else goto <D.21930>;
        <D.21930>:
        <D.21932>:
        p.13 = p;
        D.22127 = *p.13;
        if (D.22127 != 0) goto <D.21931>; else goto <D.21933>;
        <D.21933>:
        if (is_template != 0) goto <D.22260>; else goto <D.22261>;
        <D.22260>:
        D.22248 = desc->name;
        if (D.22248 == 0B) goto <D.22262>; else goto <D.22263>;
        <D.22262>:
        monoeg_g_log (0B, 4, "Template without name at line %d in %s\n", line, name);
        <D.21934>:
        goto <D.21934>;
        <D.22263>:
        <D.22261>:
      }
      <D.21810>:
      str = fgets (&buf, 256, f);
      if (str != 0B) goto <D.21935>; else goto <D.21936>;
      <D.21936>:
      fclose (f);
      D.22264 = 0;
      return D.22264;
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


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

  D.22268 = __builtin_object_size (__dest, 0);
  D.22267 = __builtin___memcpy_chk (__dest, __src, __len, D.22268);
  return D.22267;
}


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

  if (str != 0B) goto <D.22270>; else goto <D.22271>;
  <D.22270>:
  D.22272 = __strdup (str);
  return D.22272;
  <D.22271>:
  D.22272 = 0B;
  return D.22272;
}


fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  unsigned int D.22274;
  int D.22279;
  char * D.22281;
  unsigned int D.22282;
  unsigned int __n.29;
  unsigned int D.22284;
  unsigned int D.22287;

  D.22274 = __builtin_object_size (__s, 1);
  if (D.22274 != 4294967295) goto <D.22275>; else goto <D.22276>;
  <D.22275>:
  D.22279 = __builtin_constant_p (__n);
  if (D.22279 == 0) goto <D.22277>; else goto <D.22280>;
  <D.22280>:
  if (__n <= 0) goto <D.22277>; else goto <D.22278>;
  <D.22277>:
  D.22282 = __builtin_object_size (__s, 1);
  D.22281 = __fgets_chk (__s, D.22282, __n, __stream);
  return D.22281;
  <D.22278>:
  __n.29 = (unsigned int) __n;
  D.22284 = __builtin_object_size (__s, 1);
  if (__n.29 > D.22284) goto <D.22285>; else goto <D.22286>;
  <D.22285>:
  D.22287 = __builtin_object_size (__s, 1);
  D.22281 = __fgets_chk_warn (__s, D.22287, __n, __stream);
  return D.22281;
  <D.22286>:
  <D.22276>:
  D.22281 = __fgets_alias (__s, __n, __stream);
  return D.22281;
}


build_table (const char * fname, const char * name)
{
  struct OpDesc * opcodes.30;
  unsigned int i.31;
  unsigned int D.22293;
  char * D.22294;
  const char * iftmp.32;
  const char * D.22298;
  char D.22303;
  int D.22304;
  int D.22305;
  char * D.22306;
  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.22289>; else goto <D.22290>;
  <D.22289>:
  monoeg_g_log (0B, 4, "Cannot open file \'%s\'", fname);
  <D.21961>:
  goto <D.21961>;
  <D.22290>:
  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.21963>;
  <D.21962>:
  fprintf (f, "\\x0");
  j = j + 1;
  <D.21963>:
  if (j <= 5) goto <D.21962>; else goto <D.21964>;
  <D.21964>:
  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.21969>;
  <D.21968>:
  opcodes.30 = opcodes;
  i.31 = (unsigned int) i;
  D.22293 = i.31 * 24;
  desc = opcodes.30 + D.22293;
  D.22294 = desc->desc;
  if (D.22294 == 0B) goto <D.22295>; else goto <D.22296>;
  <D.22295>:
  D.22298 = desc->name;
  if (D.22298 != 0B) goto <D.22299>; else goto <D.22300>;
  <D.22299>:
  iftmp.32 = desc->name;
  goto <D.22301>;
  <D.22300>:
  iftmp.32 = "";
  <D.22301>:
  monoeg_g_string_append_printf (idx_array, "\t0,\t/* %s */\n", iftmp.32);
  goto <D.22302>;
  <D.22296>:
  fprintf (f, "\t\"");
  j = 0;
  goto <D.21966>;
  <D.21965>:
  D.22303 = desc->spec[j];
  D.22304 = (int) D.22303;
  output_char (f, D.22304);
  j = j + 1;
  <D.21966>:
  if (j <= 5) goto <D.21965>; else goto <D.21967>;
  <D.21967>:
  D.22298 = desc->name;
  fprintf (f, "\"\t/* %s */\n", D.22298);
  D.22298 = desc->name;
  D.22305 = idx * 6;
  monoeg_g_string_append_printf (idx_array, "\t%d,\t/* %s */\n", D.22305, D.22298);
  idx = idx + 1;
  <D.22302>:
  i = i + 1;
  <D.21969>:
  if (i <= 1046) goto <D.21968>; else goto <D.21970>;
  <D.21970>:
  fprintf (f, "};\n\n");
  D.22306 = idx_array->str;
  fprintf (f, "%s};\n\n", D.22306);
  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.22307;
  const short unsigned int * D.22308;
  unsigned int D.22309;
  unsigned int D.22310;
  const short unsigned int * D.22311;
  short unsigned int D.22312;
  int D.22313;
  int D.22314;
  int D.22317;

  D.22307 = __ctype_b_loc ();
  D.22308 = *D.22307;
  D.22309 = (unsigned int) c;
  D.22310 = D.22309 * 2;
  D.22311 = D.22308 + D.22310;
  D.22312 = *D.22311;
  D.22313 = (int) D.22312;
  D.22314 = D.22313 & 8;
  if (D.22314 != 0) goto <D.22315>; else goto <D.22316>;
  <D.22315>:
  D.22317 = (int) c;
  fprintf (f, "%c", D.22317);
  goto <D.22318>;
  <D.22316>:
  D.22317 = (int) c;
  fprintf (f, "\\x%x\" \"", D.22317);
  <D.22318>:
}


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

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


