GC_find_header (char * h)
{
  long unsigned int h.0;
  long unsigned int D.4989;
  long unsigned int D.4990;
  struct bottom_index * D.4992;
  long unsigned int D.4993;
  long unsigned int D.4994;
  struct hdr * D.4995;
  register struct hdr * result;

  {
    register struct hdr * * _ha;

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        h.0 = (long unsigned int) h;
        hi = h.0 >> 22;
        D.4989 = hi & 2047;
        _bi = GC_arrays._top_index[D.4989];
        goto <D.4836>;
        <D.4835>:
        _bi = _bi->hash_link;
        <D.4836>:
        D.4990 = _bi->key;
        if (D.4990 != hi) goto <D.4991>; else goto <D.4837>;
        <D.4991>:
        D.4992 = GC_arrays._all_nils;
        if (D.4992 != _bi) goto <D.4835>; else goto <D.4837>;
        <D.4837>:
        bi = _bi;
      }
      h.0 = (long unsigned int) h;
      D.4993 = h.0 >> 12;
      D.4994 = D.4993 & 1023;
      _ha = &bi->index[D.4994];
    }
    result = *_ha;
  }
  D.4995 = result;
  return D.4995;
}


GC_scratch_alloc (word bytes)
{
  char * scratch_free_ptr.1;
  char * scratch_free_ptr.2;
  char * D.4999;
  char * D.5002;
  long unsigned int GC_page_size.3;
  long unsigned int D.5006;
  long unsigned int D.5007;
  sizetype D.5008;
  char * scratch_free_ptr.4;
  char * D.5010;
  char * D.5013;
  register char * result;

  result = scratch_free_ptr;
  bytes = bytes + 7;
  bytes = bytes & 18446744073709551608;
  scratch_free_ptr.1 = scratch_free_ptr;
  scratch_free_ptr.2 = scratch_free_ptr.1 + bytes;
  scratch_free_ptr = scratch_free_ptr.2;
  D.4999 = GC_arrays._scratch_end_ptr;
  scratch_free_ptr.1 = scratch_free_ptr;
  if (D.4999 >= scratch_free_ptr.1) goto <D.5000>; else goto <D.5001>;
  <D.5000>:
  D.5002 = result;
  return D.5002;
  <D.5001>:
  {
    word bytes_to_get;

    bytes_to_get = 65536;
    if (bytes_to_get <= bytes) goto <D.5003>; else goto <D.5004>;
    <D.5003>:
    bytes_to_get = bytes;
    GC_page_size.3 = GC_page_size;
    D.5006 = GC_page_size.3 + bytes_to_get;
    bytes_to_get = D.5006 + 18446744073709551615;
    GC_page_size.3 = GC_page_size;
    D.5007 = -GC_page_size.3;
    bytes_to_get = D.5007 & bytes_to_get;
    result = GC_unix_get_mem (bytes_to_get);
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5008 = -bytes;
    scratch_free_ptr.4 = scratch_free_ptr.1 + D.5008;
    scratch_free_ptr = scratch_free_ptr.4;
    D.5010 = result + bytes;
    GC_arrays._scratch_last_end_ptr = D.5010;
    D.5002 = result;
    return D.5002;
    <D.5004>:
    result = GC_unix_get_mem (bytes_to_get);
    if (result == 0B) goto <D.5011>; else goto <D.5012>;
    <D.5011>:
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5008 = -bytes;
    scratch_free_ptr.4 = scratch_free_ptr.1 + D.5008;
    scratch_free_ptr = scratch_free_ptr.4;
    bytes_to_get = bytes;
    GC_page_size.3 = GC_page_size;
    D.5006 = GC_page_size.3 + bytes_to_get;
    bytes_to_get = D.5006 + 18446744073709551615;
    GC_page_size.3 = GC_page_size;
    D.5007 = -GC_page_size.3;
    bytes_to_get = D.5007 & bytes_to_get;
    D.5002 = GC_unix_get_mem (bytes_to_get);
    return D.5002;
    <D.5012>:
    scratch_free_ptr = result;
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5013 = scratch_free_ptr.1 + bytes_to_get;
    GC_arrays._scratch_end_ptr = D.5013;
    D.4999 = GC_arrays._scratch_end_ptr;
    GC_arrays._scratch_last_end_ptr = D.4999;
    D.5002 = GC_scratch_alloc (bytes);
    return D.5002;
  }
}


GC_init_headers ()
{
  char * D.5015;
  struct bottom_index * D.5016;
  struct hdr * GC_invalid_header.5;
  struct hdr * GC_invalid_header.6;
  register unsigned int i;

  D.5015 = GC_scratch_alloc (8224);
  GC_arrays._all_nils = D.5015;
  D.5016 = GC_arrays._all_nils;
  memset (D.5016, 0, 8224);
  i = 0;
  goto <D.4858>;
  <D.4857>:
  D.5016 = GC_arrays._all_nils;
  GC_arrays._top_index[i] = D.5016;
  i = i + 1;
  <D.4858>:
  if (i <= 2047) goto <D.4857>; else goto <D.4859>;
  <D.4859>:
  GC_invalid_header.5 = alloc_hdr ();
  GC_invalid_header = GC_invalid_header.5;
  GC_invalid_header.6 = GC_invalid_header;
  GC_invalidate_map (GC_invalid_header.6);
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.5021;
  int D.5026;
  void * D.5028;
  long unsigned int D.5029;

  D.5021 = __builtin_constant_p (__len);
  if (D.5021 != 0) goto <D.5022>; else goto <D.5023>;
  <D.5022>:
  if (__len == 0) goto <D.5024>; else goto <D.5025>;
  <D.5024>:
  D.5026 = __builtin_constant_p (__ch);
  if (D.5026 == 0) goto <D.5019>; else goto <D.5027>;
  <D.5027>:
  if (__ch != 0) goto <D.5019>; else goto <D.5020>;
  <D.5019>:
  __warn_memset_zero_len ();
  D.5028 = __dest;
  return D.5028;
  <D.5020>:
  <D.5025>:
  <D.5023>:
  D.5029 = __builtin_object_size (__dest, 0);
  D.5028 = __builtin___memset_chk (__dest, __ch, __len, D.5029);
  return D.5028;
}


alloc_hdr ()
{
  struct hdr * hdr_free_list.7;
  struct hblk * hdr_free_list.8;
  struct hdr * D.5036;
  register struct hdr * result;

  hdr_free_list.7 = hdr_free_list;
  if (hdr_free_list.7 == 0B) goto <D.5032>; else goto <D.5033>;
  <D.5032>:
  result = GC_scratch_alloc (112);
  goto <D.5034>;
  <D.5033>:
  result = hdr_free_list;
  hdr_free_list.8 = result->hb_next;
  hdr_free_list = hdr_free_list.8;
  <D.5034>:
  D.5036 = result;
  return D.5036;
}


GC_install_header (struct hblk * h)
{
  long unsigned int h.9;
  int D.5039;
  struct hblkhdr * D.5042;
  long unsigned int D.5043;
  long unsigned int D.5044;
  struct bottom_index * D.5046;
  long unsigned int D.5047;
  long unsigned int D.5048;
  long unsigned int GC_gc_no.10;
  short unsigned int D.5050;
  struct hdr * result;

  h.9 = (long unsigned int) h;
  D.5039 = get_index (h.9);
  if (D.5039 == 0) goto <D.5040>; else goto <D.5041>;
  <D.5040>:
  D.5042 = 0B;
  return D.5042;
  <D.5041>:
  result = alloc_hdr ();
  {
    register struct hdr * * _ha;

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        h.9 = (long unsigned int) h;
        hi = h.9 >> 22;
        D.5043 = hi & 2047;
        _bi = GC_arrays._top_index[D.5043];
        goto <D.4885>;
        <D.4884>:
        _bi = _bi->hash_link;
        <D.4885>:
        D.5044 = _bi->key;
        if (D.5044 != hi) goto <D.5045>; else goto <D.4886>;
        <D.5045>:
        D.5046 = GC_arrays._all_nils;
        if (D.5046 != _bi) goto <D.4884>; else goto <D.4886>;
        <D.4886>:
        bi = _bi;
      }
      h.9 = (long unsigned int) h;
      D.5047 = h.9 >> 12;
      D.5048 = D.5047 & 1023;
      _ha = &bi->index[D.5048];
    }
    *_ha = result;
  }
  GC_gc_no.10 = GC_gc_no;
  D.5050 = (short unsigned int) GC_gc_no.10;
  result->hb_last_reclaimed = D.5050;
  D.5042 = result;
  return D.5042;
}


get_index (word addr)
{
  unsigned int D.5052;
  long unsigned int D.5053;
  GC_bool D.5056;
  struct bottom_index * D.5057;
  word hi;
  struct bottom_index * r;
  struct bottom_index * p;
  struct bottom_index * * prev;
  struct bottom_index * pi;
  unsigned int i;
  struct bottom_index * old;

  hi = addr >> 22;
  D.5052 = (unsigned int) hi;
  i = D.5052 & 2047;
  p = GC_arrays._top_index[i];
  old = p;
  goto <D.4871>;
  <D.4870>:
  D.5053 = p->key;
  if (D.5053 == hi) goto <D.5054>; else goto <D.5055>;
  <D.5054>:
  D.5056 = 1;
  return D.5056;
  <D.5055>:
  p = p->hash_link;
  <D.4871>:
  D.5057 = GC_arrays._all_nils;
  if (D.5057 != p) goto <D.4870>; else goto <D.4872>;
  <D.4872>:
  r = GC_scratch_alloc (8224);
  if (r == 0B) goto <D.5058>; else goto <D.5059>;
  <D.5058>:
  D.5056 = 0;
  return D.5056;
  <D.5059>:
  memset (r, 0, 8224);
  r->hash_link = old;
  GC_arrays._top_index[i] = r;
  r->key = hi;
  prev = &GC_all_bottom_indices;
  pi = 0B;
  goto <D.4874>;
  <D.4873>:
  pi = p;
  prev = &p->asc_link;
  <D.4874>:
  p = *prev;
  if (p != 0B) goto <D.5060>; else goto <D.4875>;
  <D.5060>:
  D.5053 = p->key;
  if (D.5053 < hi) goto <D.4873>; else goto <D.4875>;
  <D.4875>:
  r->desc_link = pi;
  if (p == 0B) goto <D.5061>; else goto <D.5062>;
  <D.5061>:
  GC_all_bottom_indices_end = r;
  goto <D.5063>;
  <D.5062>:
  p->desc_link = r;
  <D.5063>:
  r->asc_link = p;
  *prev = r;
  D.5056 = 1;
  return D.5056;
}


GC_install_counts (struct hblk * h, word sz)
{
  long unsigned int hbp.11;
  int D.5066;
  GC_bool D.5069;
  char * D.5070;
  long unsigned int h.12;
  long unsigned int D.5072;
  long unsigned int D.5073;
  int D.5074;
  long int hbp.13;
  long int h.14;
  long int D.5079;
  long int D.5080;
  long unsigned int D.5081;
  long unsigned int D.5082;
  struct bottom_index * D.5084;
  long unsigned int D.5085;
  long unsigned int D.5086;
  unsigned int i.15;
  unsigned int D.5088;
  struct hdr * D.5089;
  register struct hblk * hbp;
  register int i;

  hbp = h;
  goto <D.4894>;
  <D.4893>:
  hbp.11 = (long unsigned int) hbp;
  D.5066 = get_index (hbp.11);
  if (D.5066 == 0) goto <D.5067>; else goto <D.5068>;
  <D.5067>:
  D.5069 = 0;
  return D.5069;
  <D.5068>:
  hbp = hbp + 4194304;
  <D.4894>:
  D.5070 = h + sz;
  if (D.5070 > hbp) goto <D.4893>; else goto <D.4895>;
  <D.4895>:
  h.12 = (long unsigned int) h;
  D.5072 = h.12 + sz;
  D.5073 = D.5072 + 18446744073709551615;
  D.5074 = get_index (D.5073);
  if (D.5074 == 0) goto <D.5075>; else goto <D.5076>;
  <D.5075>:
  D.5069 = 0;
  return D.5069;
  <D.5076>:
  hbp = h + 4096;
  goto <D.4904>;
  <D.4903>:
  hbp.13 = (long int) hbp;
  h.14 = (long int) h;
  D.5079 = hbp.13 - h.14;
  D.5080 = D.5079 >> 12;
  i = (int) D.5080;
  {
    register struct hdr * * _ha;

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        hbp.11 = (long unsigned int) hbp;
        hi = hbp.11 >> 22;
        D.5081 = hi & 2047;
        _bi = GC_arrays._top_index[D.5081];
        goto <D.4901>;
        <D.4900>:
        _bi = _bi->hash_link;
        <D.4901>:
        D.5082 = _bi->key;
        if (D.5082 != hi) goto <D.5083>; else goto <D.4902>;
        <D.5083>:
        D.5084 = GC_arrays._all_nils;
        if (D.5084 != _bi) goto <D.4900>; else goto <D.4902>;
        <D.4902>:
        bi = _bi;
      }
      hbp.11 = (long unsigned int) hbp;
      D.5085 = hbp.11 >> 12;
      D.5086 = D.5085 & 1023;
      _ha = &bi->index[D.5086];
    }
    i.15 = (unsigned int) i;
    D.5088 = MIN_EXPR <i.15, 4095>;
    D.5089 = (struct hdr *) D.5088;
    *_ha = D.5089;
  }
  hbp = hbp + 4096;
  <D.4904>:
  D.5070 = h + sz;
  if (D.5070 > hbp) goto <D.4903>; else goto <D.4905>;
  <D.4905>:
  D.5069 = 1;
  return D.5069;
}


GC_remove_header (struct hblk * h)
{
  long unsigned int h.16;
  long unsigned int D.5092;
  long unsigned int D.5093;
  struct bottom_index * D.5095;
  long unsigned int D.5096;
  long unsigned int D.5097;
  struct hdr * D.5098;
  struct hdr * * ha;

  {
    register struct bottom_index * bi;

    {
      register word hi;
      register struct bottom_index * _bi;

      h.16 = (long unsigned int) h;
      hi = h.16 >> 22;
      D.5092 = hi & 2047;
      _bi = GC_arrays._top_index[D.5092];
      goto <D.4914>;
      <D.4913>:
      _bi = _bi->hash_link;
      <D.4914>:
      D.5093 = _bi->key;
      if (D.5093 != hi) goto <D.5094>; else goto <D.4915>;
      <D.5094>:
      D.5095 = GC_arrays._all_nils;
      if (D.5095 != _bi) goto <D.4913>; else goto <D.4915>;
      <D.4915>:
      bi = _bi;
    }
    h.16 = (long unsigned int) h;
    D.5096 = h.16 >> 12;
    D.5097 = D.5096 & 1023;
    ha = &bi->index[D.5097];
  }
  D.5098 = *ha;
  free_hdr (D.5098);
  *ha = 0B;
}


free_hdr (struct hdr * hhdr)
{
  struct hdr * hdr_free_list.17;

  hdr_free_list.17 = hdr_free_list;
  hhdr->hb_next = hdr_free_list.17;
  hdr_free_list = hhdr;
}


GC_remove_counts (struct hblk * h, word sz)
{
  long unsigned int hbp.18;
  long unsigned int D.5101;
  long unsigned int D.5102;
  struct bottom_index * D.5104;
  long unsigned int D.5105;
  long unsigned int D.5106;
  char * D.5107;
  register struct hblk * hbp;

  hbp = h + 4096;
  goto <D.4929>;
  <D.4928>:
  {
    register struct hdr * * _ha;

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        hbp.18 = (long unsigned int) hbp;
        hi = hbp.18 >> 22;
        D.5101 = hi & 2047;
        _bi = GC_arrays._top_index[D.5101];
        goto <D.4926>;
        <D.4925>:
        _bi = _bi->hash_link;
        <D.4926>:
        D.5102 = _bi->key;
        if (D.5102 != hi) goto <D.5103>; else goto <D.4927>;
        <D.5103>:
        D.5104 = GC_arrays._all_nils;
        if (D.5104 != _bi) goto <D.4925>; else goto <D.4927>;
        <D.4927>:
        bi = _bi;
      }
      hbp.18 = (long unsigned int) hbp;
      D.5105 = hbp.18 >> 12;
      D.5106 = D.5105 & 1023;
      _ha = &bi->index[D.5106];
    }
    *_ha = 0B;
  }
  hbp = hbp + 4096;
  <D.4929>:
  D.5107 = h + sz;
  if (D.5107 > hbp) goto <D.4928>; else goto <D.4930>;
  <D.4930>:
}


GC_apply_to_all_blocks (void (*<Tcd0>) (struct hblk *, word) fn, word client_data)
{
  struct hdr * D.5108;
  long unsigned int D.5109;
  map_entry_type * D.5112;
  map_entry_type * GC_invalid_map.19;
  long unsigned int D.5116;
  long unsigned int D.5117;
  long unsigned int D.5118;
  long unsigned int D.5119;
  long unsigned int D.5120;
  struct hblk * D.5121;
  unsigned int j.20;
  long int D.5127;
  unsigned int D.5128;
  unsigned int D.5129;
  register int j;
  register struct bottom_index * index_p;

  index_p = GC_all_bottom_indices;
  goto <D.4943>;
  <D.4942>:
  j = 1023;
  goto <D.4940>;
  <D.4939>:
  D.5108 = index_p->index[j];
  D.5109 = (long unsigned int) D.5108;
  if (D.5109 > 4095) goto <D.5110>; else goto <D.5111>;
  <D.5110>:
  D.5108 = index_p->index[j];
  D.5112 = D.5108->hb_map;
  GC_invalid_map.19 = GC_invalid_map;
  if (D.5112 != GC_invalid_map.19) goto <D.5114>; else goto <D.5115>;
  <D.5114>:
  D.5116 = index_p->key;
  D.5117 = D.5116 << 10;
  D.5118 = (long unsigned int) j;
  D.5119 = D.5117 + D.5118;
  D.5120 = D.5119 << 12;
  D.5121 = (struct hblk *) D.5120;
  fn (D.5121, client_data);
  <D.5115>:
  j = j + -1;
  goto <D.5122>;
  <D.5111>:
  D.5108 = index_p->index[j];
  if (D.5108 == 0B) goto <D.5123>; else goto <D.5124>;
  <D.5123>:
  j = j + -1;
  goto <D.5125>;
  <D.5124>:
  j.20 = (unsigned int) j;
  D.5108 = index_p->index[j];
  D.5127 = (long int) D.5108;
  D.5128 = (unsigned int) D.5127;
  D.5129 = j.20 - D.5128;
  j = (int) D.5129;
  <D.5125>:
  <D.5122>:
  <D.4940>:
  if (j >= 0) goto <D.4939>; else goto <D.4941>;
  <D.4941>:
  index_p = index_p->asc_link;
  <D.4943>:
  if (index_p != 0B) goto <D.4942>; else goto <D.4944>;
  <D.4944>:
}


GC_next_used_block (struct hblk * h)
{
  long unsigned int h.21;
  long unsigned int D.5131;
  long unsigned int D.5132;
  long unsigned int D.5133;
  struct bottom_index * D.5135;
  long unsigned int D.5139;
  long unsigned int hhdr.22;
  map_entry_type * D.5144;
  map_entry_type * GC_invalid_map.23;
  struct hblk * D.5148;
  long unsigned int D.5149;
  long unsigned int D.5150;
  long unsigned int D.5151;
  long unsigned int D.5152;
  long unsigned int D.5153;
  register struct bottom_index * bi;
  register word j;

  h.21 = (long unsigned int) h;
  D.5131 = h.21 >> 12;
  j = D.5131 & 1023;
  {
    register word hi;
    register struct bottom_index * _bi;

    h.21 = (long unsigned int) h;
    hi = h.21 >> 22;
    D.5132 = hi & 2047;
    _bi = GC_arrays._top_index[D.5132];
    goto <D.4953>;
    <D.4952>:
    _bi = _bi->hash_link;
    <D.4953>:
    D.5133 = _bi->key;
    if (D.5133 != hi) goto <D.5134>; else goto <D.4954>;
    <D.5134>:
    D.5135 = GC_arrays._all_nils;
    if (D.5135 != _bi) goto <D.4952>; else goto <D.4954>;
    <D.4954>:
    bi = _bi;
  }
  D.5135 = GC_arrays._all_nils;
  if (D.5135 == bi) goto <D.5136>; else goto <D.5137>;
  <D.5136>:
  {
    register word hi;

    h.21 = (long unsigned int) h;
    hi = h.21 >> 22;
    bi = GC_all_bottom_indices;
    goto <D.4957>;
    <D.4956>:
    bi = bi->asc_link;
    <D.4957>:
    if (bi != 0B) goto <D.5138>; else goto <D.4958>;
    <D.5138>:
    D.5139 = bi->key;
    if (D.5139 < hi) goto <D.4956>; else goto <D.4958>;
    <D.4958>:
    j = 0;
  }
  <D.5137>:
  goto <D.4964>;
  <D.4963>:
  goto <D.4961>;
  <D.4960>:
  {
    struct hdr * hhdr;

    hhdr = bi->index[j];
    hhdr.22 = (long unsigned int) hhdr;
    if (hhdr.22 <= 4095) goto <D.5141>; else goto <D.5142>;
    <D.5141>:
    j = j + 1;
    goto <D.5143>;
    <D.5142>:
    D.5144 = hhdr->hb_map;
    GC_invalid_map.23 = GC_invalid_map;
    if (D.5144 != GC_invalid_map.23) goto <D.5146>; else goto <D.5147>;
    <D.5146>:
    D.5139 = bi->key;
    D.5149 = D.5139 << 10;
    D.5150 = D.5149 + j;
    D.5151 = D.5150 << 12;
    D.5148 = (struct hblk *) D.5151;
    return D.5148;
    <D.5147>:
    D.5152 = hhdr->hb_sz;
    D.5153 = D.5152 >> 12;
    j = D.5153 + j;
    <D.5143>:
  }
  <D.4961>:
  if (j <= 1023) goto <D.4960>; else goto <D.4962>;
  <D.4962>:
  j = 0;
  bi = bi->asc_link;
  <D.4964>:
  if (bi != 0B) goto <D.4963>; else goto <D.4965>;
  <D.4965>:
  D.5148 = 0B;
  return D.5148;
}


GC_prev_block (struct hblk * h)
{
  long unsigned int h.24;
  long unsigned int D.5156;
  long int D.5157;
  long unsigned int D.5158;
  long unsigned int D.5159;
  struct bottom_index * D.5161;
  long unsigned int D.5165;
  long unsigned int hhdr.25;
  long int hhdr.26;
  struct hblk * D.5174;
  long unsigned int D.5175;
  long unsigned int j.27;
  long unsigned int D.5177;
  long unsigned int D.5178;
  register struct bottom_index * bi;
  register signed_word j;

  h.24 = (long unsigned int) h;
  D.5156 = h.24 >> 12;
  D.5157 = (long int) D.5156;
  j = D.5157 & 1023;
  {
    register word hi;
    register struct bottom_index * _bi;

    h.24 = (long unsigned int) h;
    hi = h.24 >> 22;
    D.5158 = hi & 2047;
    _bi = GC_arrays._top_index[D.5158];
    goto <D.4974>;
    <D.4973>:
    _bi = _bi->hash_link;
    <D.4974>:
    D.5159 = _bi->key;
    if (D.5159 != hi) goto <D.5160>; else goto <D.4975>;
    <D.5160>:
    D.5161 = GC_arrays._all_nils;
    if (D.5161 != _bi) goto <D.4973>; else goto <D.4975>;
    <D.4975>:
    bi = _bi;
  }
  D.5161 = GC_arrays._all_nils;
  if (D.5161 == bi) goto <D.5162>; else goto <D.5163>;
  <D.5162>:
  {
    register word hi;

    h.24 = (long unsigned int) h;
    hi = h.24 >> 22;
    bi = GC_all_bottom_indices_end;
    goto <D.4978>;
    <D.4977>:
    bi = bi->desc_link;
    <D.4978>:
    if (bi != 0B) goto <D.5164>; else goto <D.4979>;
    <D.5164>:
    D.5165 = bi->key;
    if (D.5165 > hi) goto <D.4977>; else goto <D.4979>;
    <D.4979>:
    j = 1023;
  }
  <D.5163>:
  goto <D.4985>;
  <D.4984>:
  goto <D.4982>;
  <D.4981>:
  {
    struct hdr * hhdr;

    hhdr = bi->index[j];
    if (hhdr == 0B) goto <D.5166>; else goto <D.5167>;
    <D.5166>:
    j = j + -1;
    goto <D.5168>;
    <D.5167>:
    hhdr.25 = (long unsigned int) hhdr;
    if (hhdr.25 <= 4095) goto <D.5170>; else goto <D.5171>;
    <D.5170>:
    hhdr.26 = (long int) hhdr;
    j = j - hhdr.26;
    goto <D.5173>;
    <D.5171>:
    D.5165 = bi->key;
    D.5175 = D.5165 << 10;
    j.27 = (long unsigned int) j;
    D.5177 = D.5175 + j.27;
    D.5178 = D.5177 << 12;
    D.5174 = (struct hblk *) D.5178;
    return D.5174;
    <D.5173>:
    <D.5168>:
  }
  <D.4982>:
  if (j >= 0) goto <D.4981>; else goto <D.4983>;
  <D.4983>:
  j = 1023;
  bi = bi->desc_link;
  <D.4985>:
  if (bi != 0B) goto <D.4984>; else goto <D.4986>;
  <D.4986>:
  D.5174 = 0B;
  return D.5174;
}


