mono_bitset_alloc_size (guint32 max_size, guint32 flags)
{
  long unsigned int D.5738;
  long unsigned int D.5739;
  long unsigned int D.5740;
  guint32 D.5741;
  long unsigned int D.5742;
  long unsigned int D.5743;
  unsigned int D.5744;
  guint32 real_size;

  D.5738 = (long unsigned int) max_size;
  D.5739 = D.5738 + 63;
  D.5740 = D.5739 / 64;
  real_size = (guint32) D.5740;
  D.5742 = (long unsigned int) real_size;
  D.5743 = D.5742 + 2;
  D.5744 = (unsigned int) D.5743;
  D.5741 = D.5744 * 8;
  return D.5741;
}


mono_bitset_new (guint32 max_size, guint32 flags)
{
  long unsigned int D.5746;
  long unsigned int D.5747;
  long unsigned int D.5748;
  long unsigned int D.5749;
  long unsigned int D.5750;
  long unsigned int D.5751;
  long unsigned int D.5752;
  long unsigned int D.5753;
  struct MonoBitSet * D.5754;
  guint32 real_size;
  struct MonoBitSet * result;

  D.5746 = (long unsigned int) max_size;
  D.5747 = D.5746 + 63;
  D.5748 = D.5747 / 64;
  real_size = (guint32) D.5748;
  D.5749 = (long unsigned int) real_size;
  D.5750 = D.5749 + 2;
  D.5751 = D.5750 * 8;
  result = monoeg_malloc0 (D.5751);
  D.5749 = (long unsigned int) real_size;
  D.5752 = D.5749 * 64;
  result->size = D.5752;
  D.5753 = (long unsigned int) flags;
  result->flags = D.5753;
  D.5754 = result;
  return D.5754;
}


mono_bitset_mem_new (void * mem, guint32 max_size, guint32 flags)
{
  long unsigned int D.5756;
  long unsigned int D.5757;
  long unsigned int D.5758;
  long unsigned int D.5759;
  long unsigned int D.5760;
  unsigned int D.5761;
  long unsigned int D.5762;
  struct MonoBitSet * D.5763;
  guint32 real_size;
  struct MonoBitSet * result;

  D.5756 = (long unsigned int) max_size;
  D.5757 = D.5756 + 63;
  D.5758 = D.5757 / 64;
  real_size = (guint32) D.5758;
  result = mem;
  D.5759 = (long unsigned int) real_size;
  D.5760 = D.5759 * 64;
  result->size = D.5760;
  D.5761 = flags | 1;
  D.5762 = (long unsigned int) D.5761;
  result->flags = D.5762;
  D.5763 = result;
  return D.5763;
}


mono_bitset_free (struct MonoBitSet * set)
{
  long unsigned int D.5765;
  long unsigned int D.5766;

  D.5765 = set->flags;
  D.5766 = D.5765 & 1;
  if (D.5766 == 0) goto <D.5767>; else goto <D.5768>;
  <D.5767>:
  monoeg_g_free (set);
  <D.5768>:
}


mono_bitset_set (struct MonoBitSet * set, guint32 pos)
{
  unsigned int D.5769;
  int pos.0;
  long unsigned int D.5771;
  long unsigned int D.5772;
  _Bool D.5773;
  long int D.5774;
  long int D.5775;
  long unsigned int D.5778;
  long unsigned int D.5779;
  long unsigned int D.5780;
  int j;
  int bit;

  D.5769 = pos / 64;
  j = (int) D.5769;
  pos.0 = (int) pos;
  bit = pos.0 & 63;
  D.5771 = (long unsigned int) pos;
  D.5772 = set->size;
  D.5773 = D.5771 >= D.5772;
  D.5774 = (long int) D.5773;
  D.5775 = __builtin_expect (D.5774, 0);
  if (D.5775 != 0) goto <D.5776>; else goto <D.5777>;
  <D.5776>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 90, "pos < set->size");
  <D.5777>:
  D.5778 = set->data[j];
  D.5779 = 1 << bit;
  D.5780 = D.5778 | D.5779;
  set->data[j] = D.5780;
}


mono_bitset_test (const struct MonoBitSet * set, guint32 pos)
{
  unsigned int D.5781;
  int pos.1;
  long unsigned int D.5783;
  long unsigned int D.5784;
  int D.5787;
  long unsigned int D.5788;
  long unsigned int D.5789;
  long unsigned int D.5790;
  _Bool D.5791;
  int j;
  int bit;

  D.5781 = pos / 64;
  j = (int) D.5781;
  pos.1 = (int) pos;
  bit = pos.1 & 63;
  D.5783 = (long unsigned int) pos;
  D.5784 = set->size;
  if (D.5783 >= D.5784) goto <D.5785>; else goto <D.5786>;
  <D.5785>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "monobitset.c", 108, "pos < set->size");
  D.5787 = 0;
  return D.5787;
  <D.5786>:
  D.5788 = set->data[j];
  D.5789 = D.5788 >> bit;
  D.5790 = D.5789 & 1;
  D.5791 = D.5790 != 0;
  D.5787 = (int) D.5791;
  return D.5787;
}


mono_bitset_test_bulk (const struct MonoBitSet * set, guint32 pos)
{
  unsigned int D.5793;
  long unsigned int D.5794;
  long unsigned int D.5795;
  gsize D.5798;
  int j;

  D.5793 = pos / 64;
  j = (int) D.5793;
  D.5794 = (long unsigned int) pos;
  D.5795 = set->size;
  if (D.5794 >= D.5795) goto <D.5796>; else goto <D.5797>;
  <D.5796>:
  D.5798 = 0;
  return D.5798;
  <D.5797>:
  D.5798 = set->data[j];
  return D.5798;
}


mono_bitset_clear (struct MonoBitSet * set, guint32 pos)
{
  unsigned int D.5800;
  int pos.2;
  long unsigned int D.5802;
  long unsigned int D.5803;
  _Bool D.5804;
  long int D.5805;
  long int D.5806;
  long unsigned int D.5809;
  long unsigned int D.5810;
  long unsigned int D.5811;
  long unsigned int D.5812;
  int j;
  int bit;

  D.5800 = pos / 64;
  j = (int) D.5800;
  pos.2 = (int) pos;
  bit = pos.2 & 63;
  D.5802 = (long unsigned int) pos;
  D.5803 = set->size;
  D.5804 = D.5802 >= D.5803;
  D.5805 = (long int) D.5804;
  D.5806 = __builtin_expect (D.5805, 0);
  if (D.5806 != 0) goto <D.5807>; else goto <D.5808>;
  <D.5807>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 143, "pos < set->size");
  <D.5808>:
  D.5809 = set->data[j];
  D.5810 = 1 << bit;
  D.5811 = ~D.5810;
  D.5812 = D.5809 & D.5811;
  set->data[j] = D.5812;
}


mono_bitset_clear_all (struct MonoBitSet * set)
{
  gsize[0:] * D.5813;
  long unsigned int D.5814;
  long unsigned int D.5815;

  D.5813 = &set->data;
  D.5814 = set->size;
  D.5815 = D.5814 / 8;
  memset (D.5813, 0, D.5815);
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.5818;
  int D.5823;
  void * D.5825;
  long unsigned int D.5826;

  D.5818 = __builtin_constant_p (__len);
  if (D.5818 != 0) goto <D.5819>; else goto <D.5820>;
  <D.5819>:
  if (__len == 0) goto <D.5821>; else goto <D.5822>;
  <D.5821>:
  D.5823 = __builtin_constant_p (__ch);
  if (D.5823 == 0) goto <D.5816>; else goto <D.5824>;
  <D.5824>:
  if (__ch != 0) goto <D.5816>; else goto <D.5817>;
  <D.5816>:
  __warn_memset_zero_len ();
  D.5825 = __dest;
  return D.5825;
  <D.5817>:
  <D.5822>:
  <D.5820>:
  D.5826 = __builtin_object_size (__dest, 0);
  D.5825 = __builtin___memset_chk (__dest, __ch, __len, D.5826);
  return D.5825;
}


mono_bitset_set_all (struct MonoBitSet * set)
{
  gsize[0:] * D.5828;
  long unsigned int D.5829;
  long unsigned int D.5830;

  D.5828 = &set->data;
  D.5829 = set->size;
  D.5830 = D.5829 / 8;
  memset (D.5828, -1, D.5830);
}


mono_bitset_invert (struct MonoBitSet * set)
{
  long unsigned int D.5831;
  long unsigned int D.5832;
  long unsigned int D.5833;
  long unsigned int D.5834;
  long unsigned int D.5835;
  int i;

  i = 0;
  goto <D.5586>;
  <D.5585>:
  D.5831 = set->data[i];
  D.5832 = ~D.5831;
  set->data[i] = D.5832;
  i = i + 1;
  <D.5586>:
  D.5833 = (long unsigned int) i;
  D.5834 = set->size;
  D.5835 = D.5834 / 64;
  if (D.5833 < D.5835) goto <D.5585>; else goto <D.5587>;
  <D.5587>:
}


mono_bitset_size (const struct MonoBitSet * set)
{
  guint32 D.5836;
  long unsigned int D.5837;

  D.5837 = set->size;
  D.5836 = (guint32) D.5837;
  return D.5836;
}


mono_bitset_count (const struct MonoBitSet * set)
{
  int D.5841;
  unsigned int D.5842;
  unsigned int D.5844;
  int D.5845;
  unsigned int D.5846;
  long unsigned int D.5847;
  long unsigned int D.5848;
  long unsigned int D.5849;
  guint32 D.5850;
  guint32 i;
  guint32 count;
  gsize d;

  count = 0;
  i = 0;
  goto <D.5598>;
  <D.5597>:
  d = set->data[i];
  if (1 != 0) goto <D.5839>; else goto <D.5840>;
  <D.5839>:
  D.5841 = __builtin_popcountl (d);
  D.5842 = (unsigned int) D.5841;
  count = D.5842 + count;
  goto <D.5843>;
  <D.5840>:
  D.5844 = (unsigned int) d;
  D.5845 = __builtin_popcount (D.5844);
  D.5846 = (unsigned int) D.5845;
  count = D.5846 + count;
  <D.5843>:
  i = i + 1;
  <D.5598>:
  D.5847 = (long unsigned int) i;
  D.5848 = set->size;
  D.5849 = D.5848 / 64;
  if (D.5847 < D.5849) goto <D.5597>; else goto <D.5599>;
  <D.5599>:
  D.5850 = count;
  return D.5850;
}


mono_bitset_find_start (const struct MonoBitSet * set)
{
  long unsigned int D.5852;
  int D.5855;
  int D.5856;
  unsigned int D.5857;
  long unsigned int D.5858;
  unsigned int D.5859;
  unsigned int D.5860;
  unsigned int D.5861;
  long unsigned int D.5862;
  long unsigned int D.5863;
  int i;

  i = 0;
  goto <D.5635>;
  <D.5634>:
  D.5852 = set->data[i];
  if (D.5852 != 0) goto <D.5853>; else goto <D.5854>;
  <D.5853>:
  D.5852 = set->data[i];
  D.5856 = my_g_bit_nth_lsf_nomask (D.5852);
  D.5857 = (unsigned int) D.5856;
  D.5858 = (long unsigned int) i;
  D.5859 = (unsigned int) D.5858;
  D.5860 = D.5859 * 64;
  D.5861 = D.5857 + D.5860;
  D.5855 = (int) D.5861;
  return D.5855;
  <D.5854>:
  i = i + 1;
  <D.5635>:
  D.5858 = (long unsigned int) i;
  D.5862 = set->size;
  D.5863 = D.5862 / 64;
  if (D.5858 < D.5863) goto <D.5634>; else goto <D.5636>;
  <D.5636>:
  D.5855 = -1;
  return D.5855;
}


my_g_bit_nth_lsf_nomask (gsize mask)
{
  long unsigned int D.5865;
  gint D.5866;
  int nth_bit;

  nth_bit = 0;
  goto <D.5612>;
  <D.5611>:
  mask = mask >> 1;
  nth_bit = nth_bit + 1;
  <D.5612>:
  D.5865 = mask & 1;
  if (D.5865 == 0) goto <D.5611>; else goto <D.5613>;
  <D.5613>:
  D.5866 = nth_bit;
  return D.5866;
}


mono_bitset_find_first (const struct MonoBitSet * set, gint pos)
{
  long unsigned int D.5871;
  long unsigned int D.5872;
  long unsigned int D.5873;
  _Bool D.5874;
  long int D.5875;
  long int D.5876;
  long unsigned int D.5879;
  int D.5884;
  long unsigned int D.5885;
  unsigned int D.5886;
  unsigned int D.5887;
  unsigned int result.3;
  unsigned int D.5889;
  long unsigned int D.5890;
  int D.5893;
  unsigned int D.5894;
  long unsigned int D.5895;
  unsigned int D.5896;
  unsigned int D.5897;
  unsigned int D.5898;
  long unsigned int D.5899;
  int j;
  int bit;
  int result;
  int i;

  if (pos < 0) goto <D.5868>; else goto <D.5869>;
  <D.5868>:
  j = 0;
  bit = -1;
  goto <D.5870>;
  <D.5869>:
  D.5871 = (long unsigned int) pos;
  D.5872 = D.5871 / 64;
  j = (int) D.5872;
  bit = pos & 63;
  D.5871 = (long unsigned int) pos;
  D.5873 = set->size;
  D.5874 = D.5871 >= D.5873;
  D.5875 = (long int) D.5874;
  D.5876 = __builtin_expect (D.5875, 0);
  if (D.5876 != 0) goto <D.5877>; else goto <D.5878>;
  <D.5877>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 424, "pos < set->size");
  <D.5878>:
  <D.5870>:
  D.5879 = set->data[j];
  if (D.5879 != 0) goto <D.5880>; else goto <D.5881>;
  <D.5880>:
  D.5879 = set->data[j];
  result = my_g_bit_nth_lsf (D.5879, bit);
  if (result != -1) goto <D.5882>; else goto <D.5883>;
  <D.5882>:
  D.5885 = (long unsigned int) j;
  D.5886 = (unsigned int) D.5885;
  D.5887 = D.5886 * 64;
  result.3 = (unsigned int) result;
  D.5889 = D.5887 + result.3;
  D.5884 = (int) D.5889;
  return D.5884;
  <D.5883>:
  <D.5881>:
  j = j + 1;
  i = j;
  goto <D.5646>;
  <D.5645>:
  D.5890 = set->data[i];
  if (D.5890 != 0) goto <D.5891>; else goto <D.5892>;
  <D.5891>:
  D.5890 = set->data[i];
  D.5893 = my_g_bit_nth_lsf (D.5890, -1);
  D.5894 = (unsigned int) D.5893;
  D.5895 = (long unsigned int) i;
  D.5896 = (unsigned int) D.5895;
  D.5897 = D.5896 * 64;
  D.5898 = D.5894 + D.5897;
  D.5884 = (int) D.5898;
  return D.5884;
  <D.5892>:
  i = i + 1;
  <D.5646>:
  D.5895 = (long unsigned int) i;
  D.5873 = set->size;
  D.5899 = D.5873 / 64;
  if (D.5895 < D.5899) goto <D.5645>; else goto <D.5647>;
  <D.5647>:
  D.5884 = -1;
  return D.5884;
}


my_g_bit_nth_lsf (gsize mask, gint nth_bit)
{
  gint D.5904;
  long unsigned int D.5905;

  nth_bit = nth_bit + 1;
  mask = mask >> nth_bit;
  if (mask == 0) goto <D.5901>; else goto <D.5903>;
  <D.5903>:
  if (nth_bit == 64) goto <D.5901>; else goto <D.5902>;
  <D.5901>:
  D.5904 = -1;
  return D.5904;
  <D.5902>:
  goto <D.5605>;
  <D.5604>:
  mask = mask >> 1;
  nth_bit = nth_bit + 1;
  <D.5605>:
  D.5905 = mask & 1;
  if (D.5905 == 0) goto <D.5604>; else goto <D.5606>;
  <D.5606>:
  D.5904 = nth_bit;
  return D.5904;
}


mono_bitset_find_last (const struct MonoBitSet * set, gint pos)
{
  long unsigned int D.5909;
  unsigned int D.5910;
  unsigned int D.5911;
  long unsigned int D.5912;
  long unsigned int D.5913;
  int D.5916;
  long unsigned int D.5917;
  long unsigned int D.5922;
  unsigned int D.5923;
  unsigned int D.5924;
  unsigned int result.4;
  unsigned int D.5926;
  long unsigned int D.5927;
  int D.5930;
  unsigned int D.5931;
  long unsigned int D.5932;
  unsigned int D.5933;
  unsigned int D.5934;
  unsigned int D.5935;
  int j;
  int bit;
  int result;
  int i;

  if (pos < 0) goto <D.5907>; else goto <D.5908>;
  <D.5907>:
  D.5909 = set->size;
  D.5910 = (unsigned int) D.5909;
  D.5911 = D.5910 + 4294967295;
  pos = (gint) D.5911;
  <D.5908>:
  D.5912 = (long unsigned int) pos;
  D.5913 = D.5912 / 64;
  j = (int) D.5913;
  bit = pos & 63;
  D.5912 = (long unsigned int) pos;
  D.5909 = set->size;
  if (D.5912 >= D.5909) goto <D.5914>; else goto <D.5915>;
  <D.5914>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "monobitset.c", 458, "pos < set->size");
  D.5916 = -1;
  return D.5916;
  <D.5915>:
  D.5917 = set->data[j];
  if (D.5917 != 0) goto <D.5918>; else goto <D.5919>;
  <D.5918>:
  D.5917 = set->data[j];
  result = my_g_bit_nth_msf (D.5917, bit);
  if (result != -1) goto <D.5920>; else goto <D.5921>;
  <D.5920>:
  D.5922 = (long unsigned int) j;
  D.5923 = (unsigned int) D.5922;
  D.5924 = D.5923 * 64;
  result.4 = (unsigned int) result;
  D.5926 = D.5924 + result.4;
  D.5916 = (int) D.5926;
  return D.5916;
  <D.5921>:
  <D.5919>:
  j = j + -1;
  i = j;
  goto <D.5657>;
  <D.5656>:
  D.5927 = set->data[i];
  if (D.5927 != 0) goto <D.5928>; else goto <D.5929>;
  <D.5928>:
  D.5927 = set->data[i];
  D.5930 = my_g_bit_nth_msf (D.5927, 64);
  D.5931 = (unsigned int) D.5930;
  D.5932 = (long unsigned int) i;
  D.5933 = (unsigned int) D.5932;
  D.5934 = D.5933 * 64;
  D.5935 = D.5931 + D.5934;
  D.5916 = (int) D.5935;
  return D.5916;
  <D.5929>:
  i = i + -1;
  <D.5657>:
  if (i >= 0) goto <D.5656>; else goto <D.5658>;
  <D.5658>:
  D.5916 = -1;
  return D.5916;
}


my_g_bit_nth_msf (gsize mask, gint nth_bit)
{
  int D.5939;
  unsigned int nth_bit.5;
  unsigned int D.5941;
  int D.5942;
  long unsigned int D.5944;
  signed long mask.6;
  unsigned int i.7;
  unsigned int D.5951;
  unsigned int D.5952;
  int i;

  if (nth_bit == 0) goto <D.5937>; else goto <D.5938>;
  <D.5937>:
  D.5939 = -1;
  return D.5939;
  <D.5938>:
  nth_bit.5 = (unsigned int) nth_bit;
  D.5941 = 64 - nth_bit.5;
  D.5942 = (int) D.5941;
  mask = mask << D.5942;
  i = 64;
  goto <D.5620>;
  <D.5619>:
  mask = mask << 8;
  i = i + -8;
  <D.5620>:
  if (i > 0) goto <D.5943>; else goto <D.5621>;
  <D.5943>:
  D.5944 = mask >> 56;
  if (D.5944 == 0) goto <D.5619>; else goto <D.5621>;
  <D.5621>:
  if (mask == 0) goto <D.5945>; else goto <D.5946>;
  <D.5945>:
  D.5939 = -1;
  return D.5939;
  <D.5946>:
  <D.5622>:
  i = i + -1;
  mask.6 = (signed long) mask;
  if (mask.6 < 0) goto <D.5948>; else goto <D.5949>;
  <D.5948>:
  i.7 = (unsigned int) i;
  nth_bit.5 = (unsigned int) nth_bit;
  D.5951 = i.7 + nth_bit.5;
  D.5952 = D.5951 + 4294967232;
  D.5939 = (int) D.5952;
  return D.5939;
  <D.5949>:
  mask = mask << 1;
  if (mask != 0) goto <D.5622>; else goto <D.5623>;
  <D.5623>:
  D.5939 = -1;
  return D.5939;
}


mono_bitset_find_first_unset (const struct MonoBitSet * set, gint pos)
{
  long unsigned int D.5957;
  long unsigned int D.5958;
  long unsigned int D.5959;
  int D.5962;
  long unsigned int D.5963;
  long unsigned int D.5968;
  unsigned int D.5969;
  unsigned int D.5970;
  unsigned int result.8;
  unsigned int D.5972;
  long unsigned int D.5973;
  int D.5976;
  unsigned int D.5977;
  long unsigned int D.5978;
  unsigned int D.5979;
  unsigned int D.5980;
  unsigned int D.5981;
  long unsigned int D.5982;
  int j;
  int bit;
  int result;
  int i;

  if (pos < 0) goto <D.5954>; else goto <D.5955>;
  <D.5954>:
  j = 0;
  bit = -1;
  goto <D.5956>;
  <D.5955>:
  D.5957 = (long unsigned int) pos;
  D.5958 = D.5957 / 64;
  j = (int) D.5958;
  bit = pos & 63;
  D.5957 = (long unsigned int) pos;
  D.5959 = set->size;
  if (D.5957 >= D.5959) goto <D.5960>; else goto <D.5961>;
  <D.5960>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "monobitset.c", 492, "pos < set->size");
  D.5962 = -1;
  return D.5962;
  <D.5961>:
  <D.5956>:
  D.5963 = set->data[j];
  if (D.5963 != 18446744073709551615) goto <D.5964>; else goto <D.5965>;
  <D.5964>:
  D.5963 = set->data[j];
  result = find_first_unset (D.5963, bit);
  if (result != -1) goto <D.5966>; else goto <D.5967>;
  <D.5966>:
  D.5968 = (long unsigned int) j;
  D.5969 = (unsigned int) D.5968;
  D.5970 = D.5969 * 64;
  result.8 = (unsigned int) result;
  D.5972 = D.5970 + result.8;
  D.5962 = (int) D.5972;
  return D.5962;
  <D.5967>:
  <D.5965>:
  j = j + 1;
  i = j;
  goto <D.5668>;
  <D.5667>:
  D.5973 = set->data[i];
  if (D.5973 != 18446744073709551615) goto <D.5974>; else goto <D.5975>;
  <D.5974>:
  D.5973 = set->data[i];
  D.5976 = find_first_unset (D.5973, -1);
  D.5977 = (unsigned int) D.5976;
  D.5978 = (long unsigned int) i;
  D.5979 = (unsigned int) D.5978;
  D.5980 = D.5979 * 64;
  D.5981 = D.5977 + D.5980;
  D.5962 = (int) D.5981;
  return D.5962;
  <D.5975>:
  i = i + 1;
  <D.5668>:
  D.5978 = (long unsigned int) i;
  D.5959 = set->size;
  D.5982 = D.5959 / 64;
  if (D.5978 < D.5982) goto <D.5667>; else goto <D.5669>;
  <D.5669>:
  D.5962 = -1;
  return D.5962;
}


find_first_unset (gsize mask, gint nth_bit)
{
  long unsigned int D.5984;
  long unsigned int D.5985;
  int D.5990;
  unsigned int nth_bit.9;

  <D.5628>:
  nth_bit = nth_bit + 1;
  D.5984 = mask >> nth_bit;
  D.5985 = D.5984 & 1;
  if (D.5985 == 0) goto <D.5986>; else goto <D.5987>;
  <D.5986>:
  if (nth_bit == 64) goto <D.5988>; else goto <D.5989>;
  <D.5988>:
  D.5990 = -1;
  return D.5990;
  <D.5989>:
  D.5990 = nth_bit;
  return D.5990;
  <D.5987>:
  nth_bit.9 = (unsigned int) nth_bit;
  if (nth_bit.9 <= 63) goto <D.5628>; else goto <D.5629>;
  <D.5629>:
  D.5990 = -1;
  return D.5990;
}


mono_bitset_clone (const struct MonoBitSet * set, guint32 new_size)
{
  long unsigned int D.5995;
  long unsigned int D.5996;
  unsigned int D.5997;
  long unsigned int D.5998;
  long unsigned int D.5999;
  gsize[0:] * D.6000;
  const gsize[0:] * D.6001;
  long unsigned int D.6002;
  struct MonoBitSet * D.6003;
  struct MonoBitSet * result;

  if (new_size == 0) goto <D.5993>; else goto <D.5994>;
  <D.5993>:
  D.5995 = set->size;
  new_size = (guint32) D.5995;
  <D.5994>:
  D.5996 = set->flags;
  D.5997 = (unsigned int) D.5996;
  result = mono_bitset_new (new_size, D.5997);
  D.5998 = result->flags;
  D.5999 = D.5998 & 18446744073709551614;
  result->flags = D.5999;
  D.6000 = &result->data;
  D.6001 = &set->data;
  D.5995 = set->size;
  D.6002 = D.5995 / 8;
  memcpy (D.6000, D.6001, D.6002);
  D.6003 = result;
  return D.6003;
}


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

  D.6006 = __builtin_object_size (__dest, 0);
  D.6005 = __builtin___memcpy_chk (__dest, __src, __len, D.6006);
  return D.6005;
}


mono_bitset_copyto (const struct MonoBitSet * src, struct MonoBitSet * dest)
{
  long unsigned int D.6008;
  long unsigned int D.6009;
  _Bool D.6010;
  long int D.6011;
  long int D.6012;
  gsize[0:] * D.6015;
  const gsize[0:] * D.6016;
  long unsigned int D.6017;

  D.6008 = dest->size;
  D.6009 = src->size;
  D.6010 = D.6008 > D.6009;
  D.6011 = (long int) D.6010;
  D.6012 = __builtin_expect (D.6011, 0);
  if (D.6012 != 0) goto <D.6013>; else goto <D.6014>;
  <D.6013>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 539, "dest->size <= src->size");
  <D.6014>:
  D.6015 = &dest->data;
  D.6016 = &src->data;
  D.6008 = dest->size;
  D.6017 = D.6008 / 8;
  memcpy (D.6015, D.6016, D.6017);
}


mono_bitset_union (struct MonoBitSet * dest, const struct MonoBitSet * src)
{
  long unsigned int D.6018;
  long unsigned int D.6019;
  _Bool D.6020;
  long int D.6021;
  long int D.6022;
  long unsigned int D.6025;
  long unsigned int D.6026;
  long unsigned int D.6027;
  long unsigned int D.6028;
  int i;
  int size;

  D.6018 = src->size;
  D.6019 = dest->size;
  D.6020 = D.6018 > D.6019;
  D.6021 = (long int) D.6020;
  D.6022 = __builtin_expect (D.6021, 0);
  if (D.6022 != 0) goto <D.6023>; else goto <D.6024>;
  <D.6023>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 555, "src->size <= dest->size");
  <D.6024>:
  D.6019 = dest->size;
  D.6025 = D.6019 / 64;
  size = (int) D.6025;
  i = 0;
  goto <D.5686>;
  <D.5685>:
  D.6026 = dest->data[i];
  D.6027 = src->data[i];
  D.6028 = D.6026 | D.6027;
  dest->data[i] = D.6028;
  i = i + 1;
  <D.5686>:
  if (i < size) goto <D.5685>; else goto <D.5687>;
  <D.5687>:
}


mono_bitset_intersection (struct MonoBitSet * dest, const struct MonoBitSet * src)
{
  long unsigned int D.6029;
  long unsigned int D.6030;
  _Bool D.6031;
  long int D.6032;
  long int D.6033;
  long unsigned int D.6036;
  long unsigned int D.6037;
  long unsigned int D.6038;
  long unsigned int D.6039;
  int i;
  int size;

  D.6029 = src->size;
  D.6030 = dest->size;
  D.6031 = D.6029 > D.6030;
  D.6032 = (long int) D.6031;
  D.6033 = __builtin_expect (D.6032, 0);
  if (D.6033 != 0) goto <D.6034>; else goto <D.6035>;
  <D.6034>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 573, "src->size <= dest->size");
  <D.6035>:
  D.6030 = dest->size;
  D.6036 = D.6030 / 64;
  size = (int) D.6036;
  i = 0;
  goto <D.5695>;
  <D.5694>:
  D.6037 = dest->data[i];
  D.6038 = src->data[i];
  D.6039 = D.6037 & D.6038;
  dest->data[i] = D.6039;
  i = i + 1;
  <D.5695>:
  if (i < size) goto <D.5694>; else goto <D.5696>;
  <D.5696>:
}


mono_bitset_intersection_2 (struct MonoBitSet * dest, const struct MonoBitSet * src1, const struct MonoBitSet * src2)
{
  long unsigned int D.6040;
  long unsigned int D.6041;
  _Bool D.6042;
  long int D.6043;
  long int D.6044;
  long unsigned int D.6047;
  _Bool D.6048;
  long int D.6049;
  long int D.6050;
  long unsigned int D.6053;
  long unsigned int D.6054;
  long unsigned int D.6055;
  long unsigned int D.6056;
  int i;
  int size;

  D.6040 = src1->size;
  D.6041 = dest->size;
  D.6042 = D.6040 > D.6041;
  D.6043 = (long int) D.6042;
  D.6044 = __builtin_expect (D.6043, 0);
  if (D.6044 != 0) goto <D.6045>; else goto <D.6046>;
  <D.6045>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 592, "src1->size <= dest->size");
  <D.6046>:
  D.6047 = src2->size;
  D.6041 = dest->size;
  D.6048 = D.6047 > D.6041;
  D.6049 = (long int) D.6048;
  D.6050 = __builtin_expect (D.6049, 0);
  if (D.6050 != 0) goto <D.6051>; else goto <D.6052>;
  <D.6051>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 593, "src2->size <= dest->size");
  <D.6052>:
  D.6041 = dest->size;
  D.6053 = D.6041 / 64;
  size = (int) D.6053;
  i = 0;
  goto <D.5705>;
  <D.5704>:
  D.6054 = src1->data[i];
  D.6055 = src2->data[i];
  D.6056 = D.6054 & D.6055;
  dest->data[i] = D.6056;
  i = i + 1;
  <D.5705>:
  if (i < size) goto <D.5704>; else goto <D.5706>;
  <D.5706>:
}


mono_bitset_sub (struct MonoBitSet * dest, const struct MonoBitSet * src)
{
  long unsigned int D.6057;
  long unsigned int D.6058;
  _Bool D.6059;
  long int D.6060;
  long int D.6061;
  long unsigned int D.6064;
  long unsigned int D.6065;
  long unsigned int D.6066;
  long unsigned int D.6067;
  long unsigned int D.6068;
  int i;
  int size;

  D.6057 = src->size;
  D.6058 = dest->size;
  D.6059 = D.6057 > D.6058;
  D.6060 = (long int) D.6059;
  D.6061 = __builtin_expect (D.6060, 0);
  if (D.6061 != 0) goto <D.6062>; else goto <D.6063>;
  <D.6062>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "monobitset.c", 611, "src->size <= dest->size");
  <D.6063>:
  D.6057 = src->size;
  D.6064 = D.6057 / 64;
  size = (int) D.6064;
  i = 0;
  goto <D.5714>;
  <D.5713>:
  D.6065 = dest->data[i];
  D.6066 = src->data[i];
  D.6067 = ~D.6066;
  D.6068 = D.6065 & D.6067;
  dest->data[i] = D.6068;
  i = i + 1;
  <D.5714>:
  if (i < size) goto <D.5713>; else goto <D.5715>;
  <D.5715>:
}


mono_bitset_equal (const struct MonoBitSet * src, const struct MonoBitSet * src1)
{
  long unsigned int D.6069;
  long unsigned int D.6070;
  gboolean D.6073;
  long unsigned int D.6074;
  long unsigned int D.6075;
  long unsigned int D.6078;
  long unsigned int D.6079;
  int i;

  D.6069 = src->size;
  D.6070 = src1->size;
  if (D.6069 != D.6070) goto <D.6071>; else goto <D.6072>;
  <D.6071>:
  D.6073 = 0;
  return D.6073;
  <D.6072>:
  i = 0;
  goto <D.5722>;
  <D.5721>:
  D.6074 = src->data[i];
  D.6075 = src1->data[i];
  if (D.6074 != D.6075) goto <D.6076>; else goto <D.6077>;
  <D.6076>:
  D.6073 = 0;
  return D.6073;
  <D.6077>:
  i = i + 1;
  <D.5722>:
  D.6078 = (long unsigned int) i;
  D.6069 = src->size;
  D.6079 = D.6069 / 64;
  if (D.6078 < D.6079) goto <D.5721>; else goto <D.5723>;
  <D.5723>:
  D.6073 = 1;
  return D.6073;
}


mono_bitset_foreach (struct MonoBitSet * set, void (*MonoBitSetFunc) (guint, void *) func, void * data)
{
  long unsigned int D.6081;
  long unsigned int D.6084;
  long unsigned int D.6085;
  long unsigned int D.6088;
  unsigned int D.6089;
  unsigned int D.6090;
  unsigned int j.10;
  unsigned int D.6092;
  unsigned int j.11;
  long unsigned int D.6094;
  long unsigned int D.6095;
  int i;
  int j;

  i = 0;
  goto <D.5735>;
  <D.5734>:
  D.6081 = set->data[i];
  if (D.6081 != 0) goto <D.6082>; else goto <D.6083>;
  <D.6082>:
  j = 0;
  goto <D.5732>;
  <D.5731>:
  D.6081 = set->data[i];
  D.6084 = D.6081 >> j;
  D.6085 = D.6084 & 1;
  if (D.6085 != 0) goto <D.6086>; else goto <D.6087>;
  <D.6086>:
  D.6088 = (long unsigned int) i;
  D.6089 = (unsigned int) D.6088;
  D.6090 = D.6089 * 64;
  j.10 = (unsigned int) j;
  D.6092 = D.6090 + j.10;
  func (D.6092, data);
  <D.6087>:
  j = j + 1;
  <D.5732>:
  j.11 = (unsigned int) j;
  if (j.11 <= 63) goto <D.5731>; else goto <D.5733>;
  <D.5733>:
  <D.6083>:
  i = i + 1;
  <D.5735>:
  D.6088 = (long unsigned int) i;
  D.6094 = set->size;
  D.6095 = D.6094 / 64;
  if (D.6088 < D.6095) goto <D.5734>; else goto <D.5736>;
  <D.5736>:
}


