GC_find_header (char * h)
{
  long unsigned int h.0;
  long unsigned int D.5482;
  long unsigned int D.5483;
  struct bottom_index * D.5485;
  long unsigned int D.5486;
  long unsigned int D.5487;
  struct hdr * D.5488;
  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.5482 = hi & 2047;
        _bi = GC_arrays._top_index[D.5482];
        goto <D.5329>;
        <D.5328>:
        _bi = _bi->hash_link;
        <D.5329>:
        D.5483 = _bi->key;
        if (D.5483 != hi) goto <D.5484>; else goto <D.5330>;
        <D.5484>:
        D.5485 = GC_arrays._all_nils;
        if (D.5485 != _bi) goto <D.5328>; else goto <D.5330>;
        <D.5330>:
        bi = _bi;
      }
      h.0 = (long unsigned int) h;
      D.5486 = h.0 >> 12;
      D.5487 = D.5486 & 1023;
      _ha = &bi->index[D.5487];
    }
    result = *_ha;
  }
  D.5488 = result;
  return D.5488;
}


GC_scratch_alloc (word bytes)
{
  char * scratch_free_ptr.1;
  char * scratch_free_ptr.2;
  char * D.5492;
  char * D.5495;
  long unsigned int GC_page_size.3;
  long unsigned int D.5499;
  long unsigned int D.5500;
  sizetype D.5501;
  char * scratch_free_ptr.4;
  char * D.5503;
  char * D.5506;
  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.5492 = GC_arrays._scratch_end_ptr;
  scratch_free_ptr.1 = scratch_free_ptr;
  if (D.5492 >= scratch_free_ptr.1) goto <D.5493>; else goto <D.5494>;
  <D.5493>:
  D.5495 = result;
  return D.5495;
  <D.5494>:
  {
    word bytes_to_get;

    bytes_to_get = 65536;
    if (bytes_to_get <= bytes) goto <D.5496>; else goto <D.5497>;
    <D.5496>:
    bytes_to_get = bytes;
    GC_page_size.3 = GC_page_size;
    D.5499 = GC_page_size.3 + bytes_to_get;
    bytes_to_get = D.5499 + 18446744073709551615;
    GC_page_size.3 = GC_page_size;
    D.5500 = -GC_page_size.3;
    bytes_to_get = D.5500 & bytes_to_get;
    result = GC_unix_get_mem (bytes_to_get);
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5501 = -bytes;
    scratch_free_ptr.4 = scratch_free_ptr.1 + D.5501;
    scratch_free_ptr = scratch_free_ptr.4;
    D.5503 = result + bytes;
    GC_arrays._scratch_last_end_ptr = D.5503;
    D.5495 = result;
    return D.5495;
    <D.5497>:
    result = GC_unix_get_mem (bytes_to_get);
    if (result == 0B) goto <D.5504>; else goto <D.5505>;
    <D.5504>:
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5501 = -bytes;
    scratch_free_ptr.4 = scratch_free_ptr.1 + D.5501;
    scratch_free_ptr = scratch_free_ptr.4;
    bytes_to_get = bytes;
    GC_page_size.3 = GC_page_size;
    D.5499 = GC_page_size.3 + bytes_to_get;
    bytes_to_get = D.5499 + 18446744073709551615;
    GC_page_size.3 = GC_page_size;
    D.5500 = -GC_page_size.3;
    bytes_to_get = D.5500 & bytes_to_get;
    D.5495 = GC_unix_get_mem (bytes_to_get);
    return D.5495;
    <D.5505>:
    scratch_free_ptr = result;
    scratch_free_ptr.1 = scratch_free_ptr;
    D.5506 = scratch_free_ptr.1 + bytes_to_get;
    GC_arrays._scratch_end_ptr = D.5506;
    D.5492 = GC_arrays._scratch_end_ptr;
    GC_arrays._scratch_last_end_ptr = D.5492;
    D.5495 = GC_scratch_alloc (bytes);
    return D.5495;
  }
}


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

  D.5508 = GC_scratch_alloc (8224);
  GC_arrays._all_nils = D.5508;
  D.5509 = GC_arrays._all_nils;
  memset (D.5509, 0, 8224);
  i = 0;
  goto <D.5351>;
  <D.5350>:
  D.5509 = GC_arrays._all_nils;
  GC_arrays._top_index[i] = D.5509;
  i = i + 1;
  <D.5351>:
  if (i <= 2047) goto <D.5350>; else goto <D.5352>;
  <D.5352>:
  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.5514;
  int D.5519;
  void * D.5521;
  long unsigned int D.5522;

  D.5514 = __builtin_constant_p (__len);
  if (D.5514 != 0) goto <D.5515>; else goto <D.5516>;
  <D.5515>:
  if (__len == 0) goto <D.5517>; else goto <D.5518>;
  <D.5517>:
  D.5519 = __builtin_constant_p (__ch);
  if (D.5519 == 0) goto <D.5512>; else goto <D.5520>;
  <D.5520>:
  if (__ch != 0) goto <D.5512>; else goto <D.5513>;
  <D.5512>:
  __warn_memset_zero_len ();
  D.5521 = __dest;
  return D.5521;
  <D.5513>:
  <D.5518>:
  <D.5516>:
  D.5522 = __builtin_object_size (__dest, 0);
  D.5521 = __builtin___memset_chk (__dest, __ch, __len, D.5522);
  return D.5521;
}


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

  hdr_free_list.7 = hdr_free_list;
  if (hdr_free_list.7 == 0B) goto <D.5525>; else goto <D.5526>;
  <D.5525>:
  result = GC_scratch_alloc (112);
  goto <D.5527>;
  <D.5526>:
  result = hdr_free_list;
  hdr_free_list.8 = result->hb_next;
  hdr_free_list = hdr_free_list.8;
  <D.5527>:
  D.5529 = result;
  return D.5529;
}


GC_install_header (struct hblk * h)
{
  long unsigned int h.9;
  int D.5532;
  struct hblkhdr * D.5535;
  long unsigned int D.5536;
  long unsigned int D.5537;
  struct bottom_index * D.5539;
  long unsigned int D.5540;
  long unsigned int D.5541;
  struct hdr * result;

  h.9 = (long unsigned int) h;
  D.5532 = get_index (h.9);
  if (D.5532 == 0) goto <D.5533>; else goto <D.5534>;
  <D.5533>:
  D.5535 = 0B;
  return D.5535;
  <D.5534>:
  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.5536 = hi & 2047;
        _bi = GC_arrays._top_index[D.5536];
        goto <D.5378>;
        <D.5377>:
        _bi = _bi->hash_link;
        <D.5378>:
        D.5537 = _bi->key;
        if (D.5537 != hi) goto <D.5538>; else goto <D.5379>;
        <D.5538>:
        D.5539 = GC_arrays._all_nils;
        if (D.5539 != _bi) goto <D.5377>; else goto <D.5379>;
        <D.5379>:
        bi = _bi;
      }
      h.9 = (long unsigned int) h;
      D.5540 = h.9 >> 12;
      D.5541 = D.5540 & 1023;
      _ha = &bi->index[D.5541];
    }
    *_ha = result;
  }
  D.5535 = result;
  return D.5535;
}


get_index (word addr)
{
  unsigned int D.5543;
  long unsigned int D.5544;
  GC_bool D.5547;
  struct bottom_index * D.5548;
  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.5543 = (unsigned int) hi;
  i = D.5543 & 2047;
  p = GC_arrays._top_index[i];
  old = p;
  goto <D.5364>;
  <D.5363>:
  D.5544 = p->key;
  if (D.5544 == hi) goto <D.5545>; else goto <D.5546>;
  <D.5545>:
  D.5547 = 1;
  return D.5547;
  <D.5546>:
  p = p->hash_link;
  <D.5364>:
  D.5548 = GC_arrays._all_nils;
  if (D.5548 != p) goto <D.5363>; else goto <D.5365>;
  <D.5365>:
  r = GC_scratch_alloc (8224);
  if (r == 0B) goto <D.5549>; else goto <D.5550>;
  <D.5549>:
  D.5547 = 0;
  return D.5547;
  <D.5550>:
  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.5367>;
  <D.5366>:
  pi = p;
  prev = &p->asc_link;
  <D.5367>:
  p = *prev;
  if (p != 0B) goto <D.5551>; else goto <D.5368>;
  <D.5551>:
  D.5544 = p->key;
  if (D.5544 < hi) goto <D.5366>; else goto <D.5368>;
  <D.5368>:
  r->desc_link = pi;
  if (p == 0B) goto <D.5552>; else goto <D.5553>;
  <D.5552>:
  GC_all_bottom_indices_end = r;
  goto <D.5554>;
  <D.5553>:
  p->desc_link = r;
  <D.5554>:
  r->asc_link = p;
  *prev = r;
  D.5547 = 1;
  return D.5547;
}


GC_install_counts (struct hblk * h, word sz)
{
  long unsigned int hbp.10;
  int D.5557;
  GC_bool D.5560;
  char * D.5561;
  long unsigned int h.11;
  long unsigned int D.5563;
  long unsigned int D.5564;
  int D.5565;
  long int hbp.12;
  long int h.13;
  long int D.5570;
  long int D.5571;
  long unsigned int D.5572;
  long unsigned int D.5573;
  struct bottom_index * D.5575;
  long unsigned int D.5576;
  long unsigned int D.5577;
  unsigned int i.14;
  unsigned int D.5579;
  struct hdr * D.5580;
  register struct hblk * hbp;
  register int i;

  hbp = h;
  goto <D.5387>;
  <D.5386>:
  hbp.10 = (long unsigned int) hbp;
  D.5557 = get_index (hbp.10);
  if (D.5557 == 0) goto <D.5558>; else goto <D.5559>;
  <D.5558>:
  D.5560 = 0;
  return D.5560;
  <D.5559>:
  hbp = hbp + 4194304;
  <D.5387>:
  D.5561 = h + sz;
  if (D.5561 > hbp) goto <D.5386>; else goto <D.5388>;
  <D.5388>:
  h.11 = (long unsigned int) h;
  D.5563 = h.11 + sz;
  D.5564 = D.5563 + 18446744073709551615;
  D.5565 = get_index (D.5564);
  if (D.5565 == 0) goto <D.5566>; else goto <D.5567>;
  <D.5566>:
  D.5560 = 0;
  return D.5560;
  <D.5567>:
  hbp = h + 4096;
  goto <D.5397>;
  <D.5396>:
  hbp.12 = (long int) hbp;
  h.13 = (long int) h;
  D.5570 = hbp.12 - h.13;
  D.5571 = D.5570 >> 12;
  i = (int) D.5571;
  {
    register struct hdr * * _ha;

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        hbp.10 = (long unsigned int) hbp;
        hi = hbp.10 >> 22;
        D.5572 = hi & 2047;
        _bi = GC_arrays._top_index[D.5572];
        goto <D.5394>;
        <D.5393>:
        _bi = _bi->hash_link;
        <D.5394>:
        D.5573 = _bi->key;
        if (D.5573 != hi) goto <D.5574>; else goto <D.5395>;
        <D.5574>:
        D.5575 = GC_arrays._all_nils;
        if (D.5575 != _bi) goto <D.5393>; else goto <D.5395>;
        <D.5395>:
        bi = _bi;
      }
      hbp.10 = (long unsigned int) hbp;
      D.5576 = hbp.10 >> 12;
      D.5577 = D.5576 & 1023;
      _ha = &bi->index[D.5577];
    }
    i.14 = (unsigned int) i;
    D.5579 = MIN_EXPR <i.14, 4095>;
    D.5580 = (struct hdr *) D.5579;
    *_ha = D.5580;
  }
  hbp = hbp + 4096;
  <D.5397>:
  D.5561 = h + sz;
  if (D.5561 > hbp) goto <D.5396>; else goto <D.5398>;
  <D.5398>:
  D.5560 = 1;
  return D.5560;
}


GC_remove_header (struct hblk * h)
{
  long unsigned int h.15;
  long unsigned int D.5583;
  long unsigned int D.5584;
  struct bottom_index * D.5586;
  long unsigned int D.5587;
  long unsigned int D.5588;
  struct hdr * D.5589;
  struct hdr * * ha;

  {
    register struct bottom_index * bi;

    {
      register word hi;
      register struct bottom_index * _bi;

      h.15 = (long unsigned int) h;
      hi = h.15 >> 22;
      D.5583 = hi & 2047;
      _bi = GC_arrays._top_index[D.5583];
      goto <D.5407>;
      <D.5406>:
      _bi = _bi->hash_link;
      <D.5407>:
      D.5584 = _bi->key;
      if (D.5584 != hi) goto <D.5585>; else goto <D.5408>;
      <D.5585>:
      D.5586 = GC_arrays._all_nils;
      if (D.5586 != _bi) goto <D.5406>; else goto <D.5408>;
      <D.5408>:
      bi = _bi;
    }
    h.15 = (long unsigned int) h;
    D.5587 = h.15 >> 12;
    D.5588 = D.5587 & 1023;
    ha = &bi->index[D.5588];
  }
  D.5589 = *ha;
  free_hdr (D.5589);
  *ha = 0B;
}


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

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


GC_remove_counts (struct hblk * h, word sz)
{
  long unsigned int hbp.17;
  long unsigned int D.5592;
  long unsigned int D.5593;
  struct bottom_index * D.5595;
  long unsigned int D.5596;
  long unsigned int D.5597;
  char * D.5598;
  register struct hblk * hbp;

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

    {
      register struct bottom_index * bi;

      {
        register word hi;
        register struct bottom_index * _bi;

        hbp.17 = (long unsigned int) hbp;
        hi = hbp.17 >> 22;
        D.5592 = hi & 2047;
        _bi = GC_arrays._top_index[D.5592];
        goto <D.5419>;
        <D.5418>:
        _bi = _bi->hash_link;
        <D.5419>:
        D.5593 = _bi->key;
        if (D.5593 != hi) goto <D.5594>; else goto <D.5420>;
        <D.5594>:
        D.5595 = GC_arrays._all_nils;
        if (D.5595 != _bi) goto <D.5418>; else goto <D.5420>;
        <D.5420>:
        bi = _bi;
      }
      hbp.17 = (long unsigned int) hbp;
      D.5596 = hbp.17 >> 12;
      D.5597 = D.5596 & 1023;
      _ha = &bi->index[D.5597];
    }
    *_ha = 0B;
  }
  hbp = hbp + 4096;
  <D.5422>:
  D.5598 = h + sz;
  if (D.5598 > hbp) goto <D.5421>; else goto <D.5423>;
  <D.5423>:
}


GC_apply_to_all_blocks (void (*<Td21>) (struct hblk *, word) fn, word client_data)
{
  struct hdr * D.5599;
  long unsigned int D.5600;
  map_entry_type * D.5603;
  map_entry_type * GC_invalid_map.18;
  long unsigned int D.5607;
  long unsigned int D.5608;
  long unsigned int D.5609;
  long unsigned int D.5610;
  long unsigned int D.5611;
  struct hblk * D.5612;
  unsigned int j.19;
  long int D.5618;
  unsigned int D.5619;
  unsigned int D.5620;
  register int j;
  register struct bottom_index * index_p;

  index_p = GC_all_bottom_indices;
  goto <D.5436>;
  <D.5435>:
  j = 1023;
  goto <D.5433>;
  <D.5432>:
  D.5599 = index_p->index[j];
  D.5600 = (long unsigned int) D.5599;
  if (D.5600 > 4095) goto <D.5601>; else goto <D.5602>;
  <D.5601>:
  D.5599 = index_p->index[j];
  D.5603 = D.5599->hb_map;
  GC_invalid_map.18 = GC_invalid_map;
  if (D.5603 != GC_invalid_map.18) goto <D.5605>; else goto <D.5606>;
  <D.5605>:
  D.5607 = index_p->key;
  D.5608 = D.5607 << 10;
  D.5609 = (long unsigned int) j;
  D.5610 = D.5608 + D.5609;
  D.5611 = D.5610 << 12;
  D.5612 = (struct hblk *) D.5611;
  fn (D.5612, client_data);
  <D.5606>:
  j = j + -1;
  goto <D.5613>;
  <D.5602>:
  D.5599 = index_p->index[j];
  if (D.5599 == 0B) goto <D.5614>; else goto <D.5615>;
  <D.5614>:
  j = j + -1;
  goto <D.5616>;
  <D.5615>:
  j.19 = (unsigned int) j;
  D.5599 = index_p->index[j];
  D.5618 = (long int) D.5599;
  D.5619 = (unsigned int) D.5618;
  D.5620 = j.19 - D.5619;
  j = (int) D.5620;
  <D.5616>:
  <D.5613>:
  <D.5433>:
  if (j >= 0) goto <D.5432>; else goto <D.5434>;
  <D.5434>:
  index_p = index_p->asc_link;
  <D.5436>:
  if (index_p != 0B) goto <D.5435>; else goto <D.5437>;
  <D.5437>:
}


GC_next_used_block (struct hblk * h)
{
  long unsigned int h.20;
  long unsigned int D.5622;
  long unsigned int D.5623;
  long unsigned int D.5624;
  struct bottom_index * D.5626;
  long unsigned int D.5630;
  long unsigned int hhdr.21;
  map_entry_type * D.5635;
  map_entry_type * GC_invalid_map.22;
  struct hblk * D.5639;
  long unsigned int D.5640;
  long unsigned int D.5641;
  long unsigned int D.5642;
  long unsigned int D.5643;
  long unsigned int D.5644;
  register struct bottom_index * bi;
  register word j;

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

    h.20 = (long unsigned int) h;
    hi = h.20 >> 22;
    D.5623 = hi & 2047;
    _bi = GC_arrays._top_index[D.5623];
    goto <D.5446>;
    <D.5445>:
    _bi = _bi->hash_link;
    <D.5446>:
    D.5624 = _bi->key;
    if (D.5624 != hi) goto <D.5625>; else goto <D.5447>;
    <D.5625>:
    D.5626 = GC_arrays._all_nils;
    if (D.5626 != _bi) goto <D.5445>; else goto <D.5447>;
    <D.5447>:
    bi = _bi;
  }
  D.5626 = GC_arrays._all_nils;
  if (D.5626 == bi) goto <D.5627>; else goto <D.5628>;
  <D.5627>:
  {
    register word hi;

    h.20 = (long unsigned int) h;
    hi = h.20 >> 22;
    bi = GC_all_bottom_indices;
    goto <D.5450>;
    <D.5449>:
    bi = bi->asc_link;
    <D.5450>:
    if (bi != 0B) goto <D.5629>; else goto <D.5451>;
    <D.5629>:
    D.5630 = bi->key;
    if (D.5630 < hi) goto <D.5449>; else goto <D.5451>;
    <D.5451>:
    j = 0;
  }
  <D.5628>:
  goto <D.5457>;
  <D.5456>:
  goto <D.5454>;
  <D.5453>:
  {
    struct hdr * hhdr;

    hhdr = bi->index[j];
    hhdr.21 = (long unsigned int) hhdr;
    if (hhdr.21 <= 4095) goto <D.5632>; else goto <D.5633>;
    <D.5632>:
    j = j + 1;
    goto <D.5634>;
    <D.5633>:
    D.5635 = hhdr->hb_map;
    GC_invalid_map.22 = GC_invalid_map;
    if (D.5635 != GC_invalid_map.22) goto <D.5637>; else goto <D.5638>;
    <D.5637>:
    D.5630 = bi->key;
    D.5640 = D.5630 << 10;
    D.5641 = D.5640 + j;
    D.5642 = D.5641 << 12;
    D.5639 = (struct hblk *) D.5642;
    return D.5639;
    <D.5638>:
    D.5643 = hhdr->hb_sz;
    D.5644 = D.5643 >> 12;
    j = D.5644 + j;
    <D.5634>:
  }
  <D.5454>:
  if (j <= 1023) goto <D.5453>; else goto <D.5455>;
  <D.5455>:
  j = 0;
  bi = bi->asc_link;
  <D.5457>:
  if (bi != 0B) goto <D.5456>; else goto <D.5458>;
  <D.5458>:
  D.5639 = 0B;
  return D.5639;
}


GC_prev_block (struct hblk * h)
{
  long unsigned int h.23;
  long unsigned int D.5647;
  long int D.5648;
  long unsigned int D.5649;
  long unsigned int D.5650;
  struct bottom_index * D.5652;
  long unsigned int D.5656;
  long unsigned int hhdr.24;
  long int hhdr.25;
  struct hblk * D.5665;
  long unsigned int D.5666;
  long unsigned int j.26;
  long unsigned int D.5668;
  long unsigned int D.5669;
  register struct bottom_index * bi;
  register signed_word j;

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

    h.23 = (long unsigned int) h;
    hi = h.23 >> 22;
    D.5649 = hi & 2047;
    _bi = GC_arrays._top_index[D.5649];
    goto <D.5467>;
    <D.5466>:
    _bi = _bi->hash_link;
    <D.5467>:
    D.5650 = _bi->key;
    if (D.5650 != hi) goto <D.5651>; else goto <D.5468>;
    <D.5651>:
    D.5652 = GC_arrays._all_nils;
    if (D.5652 != _bi) goto <D.5466>; else goto <D.5468>;
    <D.5468>:
    bi = _bi;
  }
  D.5652 = GC_arrays._all_nils;
  if (D.5652 == bi) goto <D.5653>; else goto <D.5654>;
  <D.5653>:
  {
    register word hi;

    h.23 = (long unsigned int) h;
    hi = h.23 >> 22;
    bi = GC_all_bottom_indices_end;
    goto <D.5471>;
    <D.5470>:
    bi = bi->desc_link;
    <D.5471>:
    if (bi != 0B) goto <D.5655>; else goto <D.5472>;
    <D.5655>:
    D.5656 = bi->key;
    if (D.5656 > hi) goto <D.5470>; else goto <D.5472>;
    <D.5472>:
    j = 1023;
  }
  <D.5654>:
  goto <D.5478>;
  <D.5477>:
  goto <D.5475>;
  <D.5474>:
  {
    struct hdr * hhdr;

    hhdr = bi->index[j];
    if (hhdr == 0B) goto <D.5657>; else goto <D.5658>;
    <D.5657>:
    j = j + -1;
    goto <D.5659>;
    <D.5658>:
    hhdr.24 = (long unsigned int) hhdr;
    if (hhdr.24 <= 4095) goto <D.5661>; else goto <D.5662>;
    <D.5661>:
    hhdr.25 = (long int) hhdr;
    j = j - hhdr.25;
    goto <D.5664>;
    <D.5662>:
    D.5656 = bi->key;
    D.5666 = D.5656 << 10;
    j.26 = (long unsigned int) j;
    D.5668 = D.5666 + j.26;
    D.5669 = D.5668 << 12;
    D.5665 = (struct hblk *) D.5669;
    return D.5665;
    <D.5664>:
    <D.5659>:
  }
  <D.5475>:
  if (j >= 0) goto <D.5474>; else goto <D.5476>;
  <D.5476>:
  j = 1023;
  bi = bi->desc_link;
  <D.5478>:
  if (bi != 0B) goto <D.5477>; else goto <D.5479>;
  <D.5479>:
  D.5665 = 0B;
  return D.5665;
}


