OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [sbitmap.c] - Diff between revs 38 and 154

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 38 Rev 154
/* Simple bitmaps.
/* Simple bitmaps.
   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2007
   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2007
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
 
 
This file is part of GCC.
This file is part of GCC.
 
 
GCC is free software; you can redistribute it and/or modify it under
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
Software Foundation; either version 3, or (at your option) any later
version.
version.
 
 
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */
<http://www.gnu.org/licenses/>.  */
 
 
#include "config.h"
#include "config.h"
#include "system.h"
#include "system.h"
#include "coretypes.h"
#include "coretypes.h"
#include "tm.h"
#include "tm.h"
#include "rtl.h"
#include "rtl.h"
#include "flags.h"
#include "flags.h"
#include "hard-reg-set.h"
#include "hard-reg-set.h"
#include "obstack.h"
#include "obstack.h"
#include "basic-block.h"
#include "basic-block.h"
 
 
/* Bitmap manipulation routines.  */
/* Bitmap manipulation routines.  */
 
 
/* Allocate a simple bitmap of N_ELMS bits.  */
/* Allocate a simple bitmap of N_ELMS bits.  */
 
 
sbitmap
sbitmap
sbitmap_alloc (unsigned int n_elms)
sbitmap_alloc (unsigned int n_elms)
{
{
  unsigned int bytes, size, amt;
  unsigned int bytes, size, amt;
  sbitmap bmap;
  sbitmap bmap;
 
 
  size = SBITMAP_SET_SIZE (n_elms);
  size = SBITMAP_SET_SIZE (n_elms);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  amt = (sizeof (struct simple_bitmap_def)
  amt = (sizeof (struct simple_bitmap_def)
         + bytes - sizeof (SBITMAP_ELT_TYPE));
         + bytes - sizeof (SBITMAP_ELT_TYPE));
  bmap = xmalloc (amt);
  bmap = xmalloc (amt);
  bmap->n_bits = n_elms;
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->size = size;
  bmap->bytes = bytes;
  bmap->bytes = bytes;
  return bmap;
  return bmap;
}
}
 
 
/* Resize a simple bitmap BMAP to N_ELMS bits.  If increasing the
/* Resize a simple bitmap BMAP to N_ELMS bits.  If increasing the
   size of BMAP, clear the new bits to zero if the DEF argument
   size of BMAP, clear the new bits to zero if the DEF argument
   is zero, and set them to one otherwise.  */
   is zero, and set them to one otherwise.  */
 
 
sbitmap
sbitmap
sbitmap_resize (sbitmap bmap, unsigned int n_elms, int def)
sbitmap_resize (sbitmap bmap, unsigned int n_elms, int def)
{
{
  unsigned int bytes, size, amt;
  unsigned int bytes, size, amt;
  unsigned int last_bit;
  unsigned int last_bit;
 
 
  size = SBITMAP_SET_SIZE (n_elms);
  size = SBITMAP_SET_SIZE (n_elms);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  if (bytes > bmap->bytes)
  if (bytes > bmap->bytes)
    {
    {
      amt = (sizeof (struct simple_bitmap_def)
      amt = (sizeof (struct simple_bitmap_def)
            + bytes - sizeof (SBITMAP_ELT_TYPE));
            + bytes - sizeof (SBITMAP_ELT_TYPE));
      bmap = xrealloc (bmap, amt);
      bmap = xrealloc (bmap, amt);
    }
    }
 
 
  if (n_elms > bmap->n_bits)
  if (n_elms > bmap->n_bits)
    {
    {
      if (def)
      if (def)
        {
        {
          memset (bmap->elms + bmap->size, -1, bytes - bmap->bytes);
          memset (bmap->elms + bmap->size, -1, bytes - bmap->bytes);
 
 
          /* Set the new bits if the original last element.  */
          /* Set the new bits if the original last element.  */
          last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
          last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
          if (last_bit)
          if (last_bit)
            bmap->elms[bmap->size - 1]
            bmap->elms[bmap->size - 1]
              |= ~((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
              |= ~((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
 
 
          /* Clear the unused bit in the new last element.  */
          /* Clear the unused bit in the new last element.  */
          last_bit = n_elms % SBITMAP_ELT_BITS;
          last_bit = n_elms % SBITMAP_ELT_BITS;
          if (last_bit)
          if (last_bit)
            bmap->elms[size - 1]
            bmap->elms[size - 1]
              &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
              &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
        }
        }
      else
      else
        memset (bmap->elms + bmap->size, 0, bytes - bmap->bytes);
        memset (bmap->elms + bmap->size, 0, bytes - bmap->bytes);
    }
    }
  else if (n_elms < bmap->n_bits)
  else if (n_elms < bmap->n_bits)
    {
    {
      /* Clear the surplus bits in the last word.  */
      /* Clear the surplus bits in the last word.  */
      last_bit = n_elms % SBITMAP_ELT_BITS;
      last_bit = n_elms % SBITMAP_ELT_BITS;
      if (last_bit)
      if (last_bit)
        bmap->elms[size - 1]
        bmap->elms[size - 1]
          &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
          &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
    }
    }
 
 
  bmap->n_bits = n_elms;
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->size = size;
  bmap->bytes = bytes;
  bmap->bytes = bytes;
  return bmap;
  return bmap;
}
}
 
 
/* Re-allocate a simple bitmap of N_ELMS bits. New storage is uninitialized.  */
/* Re-allocate a simple bitmap of N_ELMS bits. New storage is uninitialized.  */
 
 
sbitmap
sbitmap
sbitmap_realloc (sbitmap src, unsigned int n_elms)
sbitmap_realloc (sbitmap src, unsigned int n_elms)
{
{
  unsigned int bytes, size, amt;
  unsigned int bytes, size, amt;
  sbitmap bmap;
  sbitmap bmap;
 
 
  size = SBITMAP_SET_SIZE (n_elms);
  size = SBITMAP_SET_SIZE (n_elms);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  amt = (sizeof (struct simple_bitmap_def)
  amt = (sizeof (struct simple_bitmap_def)
         + bytes - sizeof (SBITMAP_ELT_TYPE));
         + bytes - sizeof (SBITMAP_ELT_TYPE));
 
 
  if (src->bytes  >= bytes)
  if (src->bytes  >= bytes)
    {
    {
      src->n_bits = n_elms;
      src->n_bits = n_elms;
      return src;
      return src;
    }
    }
 
 
  bmap = (sbitmap) xrealloc (src, amt);
  bmap = (sbitmap) xrealloc (src, amt);
  bmap->n_bits = n_elms;
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->size = size;
  bmap->bytes = bytes;
  bmap->bytes = bytes;
  return bmap;
  return bmap;
}
}
 
 
/* Allocate a vector of N_VECS bitmaps of N_ELMS bits.  */
/* Allocate a vector of N_VECS bitmaps of N_ELMS bits.  */
 
 
sbitmap *
sbitmap *
sbitmap_vector_alloc (unsigned int n_vecs, unsigned int n_elms)
sbitmap_vector_alloc (unsigned int n_vecs, unsigned int n_elms)
{
{
  unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
  unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
  sbitmap *bitmap_vector;
  sbitmap *bitmap_vector;
 
 
  size = SBITMAP_SET_SIZE (n_elms);
  size = SBITMAP_SET_SIZE (n_elms);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  bytes = size * sizeof (SBITMAP_ELT_TYPE);
  elm_bytes = (sizeof (struct simple_bitmap_def)
  elm_bytes = (sizeof (struct simple_bitmap_def)
               + bytes - sizeof (SBITMAP_ELT_TYPE));
               + bytes - sizeof (SBITMAP_ELT_TYPE));
  vector_bytes = n_vecs * sizeof (sbitmap *);
  vector_bytes = n_vecs * sizeof (sbitmap *);
 
 
  /* Round up `vector_bytes' to account for the alignment requirements
  /* Round up `vector_bytes' to account for the alignment requirements
     of an sbitmap.  One could allocate the vector-table and set of sbitmaps
     of an sbitmap.  One could allocate the vector-table and set of sbitmaps
     separately, but that requires maintaining two pointers or creating
     separately, but that requires maintaining two pointers or creating
     a cover struct to hold both pointers (so our result is still just
     a cover struct to hold both pointers (so our result is still just
     one pointer).  Neither is a bad idea, but this is simpler for now.  */
     one pointer).  Neither is a bad idea, but this is simpler for now.  */
  {
  {
    /* Based on DEFAULT_ALIGNMENT computation in obstack.c.  */
    /* Based on DEFAULT_ALIGNMENT computation in obstack.c.  */
    struct { char x; SBITMAP_ELT_TYPE y; } align;
    struct { char x; SBITMAP_ELT_TYPE y; } align;
    int alignment = (char *) & align.y - & align.x;
    int alignment = (char *) & align.y - & align.x;
    vector_bytes = (vector_bytes + alignment - 1) & ~ (alignment - 1);
    vector_bytes = (vector_bytes + alignment - 1) & ~ (alignment - 1);
  }
  }
 
 
  amt = vector_bytes + (n_vecs * elm_bytes);
  amt = vector_bytes + (n_vecs * elm_bytes);
  bitmap_vector = xmalloc (amt);
  bitmap_vector = xmalloc (amt);
 
 
  for (i = 0, offset = vector_bytes; i < n_vecs; i++, offset += elm_bytes)
  for (i = 0, offset = vector_bytes; i < n_vecs; i++, offset += elm_bytes)
    {
    {
      sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
      sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
 
 
      bitmap_vector[i] = b;
      bitmap_vector[i] = b;
      b->n_bits = n_elms;
      b->n_bits = n_elms;
      b->size = size;
      b->size = size;
      b->bytes = bytes;
      b->bytes = bytes;
    }
    }
 
 
  return bitmap_vector;
  return bitmap_vector;
}
}
 
 
/* Copy sbitmap SRC to DST.  */
/* Copy sbitmap SRC to DST.  */
 
 
void
void
sbitmap_copy (sbitmap dst, sbitmap src)
sbitmap_copy (sbitmap dst, sbitmap src)
{
{
  memcpy (dst->elms, src->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size);
  memcpy (dst->elms, src->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size);
}
}
 
 
/* Determine if a == b.  */
/* Determine if a == b.  */
int
int
sbitmap_equal (sbitmap a, sbitmap b)
sbitmap_equal (sbitmap a, sbitmap b)
{
{
  return !memcmp (a->elms, b->elms, sizeof (SBITMAP_ELT_TYPE) * a->size);
  return !memcmp (a->elms, b->elms, sizeof (SBITMAP_ELT_TYPE) * a->size);
}
}
 
 
/* Zero all elements in a bitmap.  */
/* Zero all elements in a bitmap.  */
 
 
void
void
sbitmap_zero (sbitmap bmap)
sbitmap_zero (sbitmap bmap)
{
{
  memset (bmap->elms, 0, bmap->bytes);
  memset (bmap->elms, 0, bmap->bytes);
}
}
 
 
/* Set all elements in a bitmap to ones.  */
/* Set all elements in a bitmap to ones.  */
 
 
void
void
sbitmap_ones (sbitmap bmap)
sbitmap_ones (sbitmap bmap)
{
{
  unsigned int last_bit;
  unsigned int last_bit;
 
 
  memset (bmap->elms, -1, bmap->bytes);
  memset (bmap->elms, -1, bmap->bytes);
 
 
  last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
  last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
  if (last_bit)
  if (last_bit)
    bmap->elms[bmap->size - 1]
    bmap->elms[bmap->size - 1]
      = (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
      = (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
}
}
 
 
/* Zero a vector of N_VECS bitmaps.  */
/* Zero a vector of N_VECS bitmaps.  */
 
 
void
void
sbitmap_vector_zero (sbitmap *bmap, unsigned int n_vecs)
sbitmap_vector_zero (sbitmap *bmap, unsigned int n_vecs)
{
{
  unsigned int i;
  unsigned int i;
 
 
  for (i = 0; i < n_vecs; i++)
  for (i = 0; i < n_vecs; i++)
    sbitmap_zero (bmap[i]);
    sbitmap_zero (bmap[i]);
}
}
 
 
/* Set a vector of N_VECS bitmaps to ones.  */
/* Set a vector of N_VECS bitmaps to ones.  */
 
 
void
void
sbitmap_vector_ones (sbitmap *bmap, unsigned int n_vecs)
sbitmap_vector_ones (sbitmap *bmap, unsigned int n_vecs)
{
{
  unsigned int i;
  unsigned int i;
 
 
  for (i = 0; i < n_vecs; i++)
  for (i = 0; i < n_vecs; i++)
    sbitmap_ones (bmap[i]);
    sbitmap_ones (bmap[i]);
}
}
 
 
/* Set DST to be A union (B - C).
/* Set DST to be A union (B - C).
   DST = A | (B & ~C).
   DST = A | (B & ~C).
   Returns true if any change is made.  */
   Returns true if any change is made.  */
 
 
bool
bool
sbitmap_union_of_diff_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_union_of_diff_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & ~*cp++);
      SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & ~*cp++);
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_union_of_diff (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_union_of_diff (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | (*bp++ & ~*cp++);
    *dstp++ = *ap++ | (*bp++ & ~*cp++);
}
}
 
 
/* Set bitmap DST to the bitwise negation of the bitmap SRC.  */
/* Set bitmap DST to the bitwise negation of the bitmap SRC.  */
 
 
void
void
sbitmap_not (sbitmap dst, sbitmap src)
sbitmap_not (sbitmap dst, sbitmap src)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr srcp = src->elms;
  sbitmap_ptr srcp = src->elms;
  unsigned int last_bit;
  unsigned int last_bit;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = ~*srcp++;
    *dstp++ = ~*srcp++;
 
 
  /* Zero all bits past n_bits, by ANDing dst with sbitmap_ones.  */
  /* Zero all bits past n_bits, by ANDing dst with sbitmap_ones.  */
  last_bit = src->n_bits % SBITMAP_ELT_BITS;
  last_bit = src->n_bits % SBITMAP_ELT_BITS;
  if (last_bit)
  if (last_bit)
    dst->elms[n-1] = dst->elms[n-1]
    dst->elms[n-1] = dst->elms[n-1]
      & ((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
      & ((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
}
}
 
 
/* Set the bits in DST to be the difference between the bits
/* Set the bits in DST to be the difference between the bits
   in A and the bits in B. i.e. dst = a & (~b).  */
   in A and the bits in B. i.e. dst = a & (~b).  */
 
 
void
void
sbitmap_difference (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_difference (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, dst_size = dst->size;
  unsigned int i, dst_size = dst->size;
  unsigned int min_size = dst->size;
  unsigned int min_size = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
 
 
  /* A should be at least as large as DEST, to have a defined source.  */
  /* A should be at least as large as DEST, to have a defined source.  */
  gcc_assert (a->size >= dst_size);
  gcc_assert (a->size >= dst_size);
  /* If minuend is smaller, we simply pretend it to be zero bits, i.e.
  /* If minuend is smaller, we simply pretend it to be zero bits, i.e.
     only copy the subtrahend into dest.  */
     only copy the subtrahend into dest.  */
  if (b->size < min_size)
  if (b->size < min_size)
    min_size = b->size;
    min_size = b->size;
  for (i = 0; i < min_size; i++)
  for (i = 0; i < min_size; i++)
    *dstp++ = *ap++ & (~*bp++);
    *dstp++ = *ap++ & (~*bp++);
  /* Now fill the rest of dest from A, if B was too short.
  /* Now fill the rest of dest from A, if B was too short.
     This makes sense only when destination and A differ.  */
     This makes sense only when destination and A differ.  */
  if (dst != a && i != dst_size)
  if (dst != a && i != dst_size)
    for (; i < dst_size; i++)
    for (; i < dst_size; i++)
      *dstp++ = *ap++;
      *dstp++ = *ap++;
}
}
 
 
/* Return true if there are any bits set in A are also set in B.
/* Return true if there are any bits set in A are also set in B.
   Return false otherwise.  */
   Return false otherwise.  */
 
 
bool
bool
sbitmap_any_common_bits (sbitmap a, sbitmap b)
sbitmap_any_common_bits (sbitmap a, sbitmap b)
{
{
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  unsigned int i, n;
  unsigned int i, n;
 
 
  n = MIN (a->size, b->size);
  n = MIN (a->size, b->size);
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    if ((*ap++ & *bp++) != 0)
    if ((*ap++ & *bp++) != 0)
      return true;
      return true;
 
 
  return false;
  return false;
}
}
 
 
/* Set DST to be (A and B).
/* Set DST to be (A and B).
   Return nonzero if any change is made.  */
   Return nonzero if any change is made.  */
 
 
bool
bool
sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
      SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_a_and_b (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_and_b (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ & *bp++;
    *dstp++ = *ap++ & *bp++;
}
}
 
 
/* Set DST to be (A xor B)).
/* Set DST to be (A xor B)).
   Return nonzero if any change is made.  */
   Return nonzero if any change is made.  */
 
 
bool
bool
sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
      SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_a_xor_b (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_xor_b (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ ^ *bp++;
    *dstp++ = *ap++ ^ *bp++;
}
}
 
 
/* Set DST to be (A or B)).
/* Set DST to be (A or B)).
   Return nonzero if any change is made.  */
   Return nonzero if any change is made.  */
 
 
bool
bool
sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
      SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_a_or_b (sbitmap dst, sbitmap a, sbitmap b)
sbitmap_a_or_b (sbitmap dst, sbitmap a, sbitmap b)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | *bp++;
    *dstp++ = *ap++ | *bp++;
}
}
 
 
/* Return nonzero if A is a subset of B.  */
/* Return nonzero if A is a subset of B.  */
 
 
bool
bool
sbitmap_a_subset_b_p (sbitmap a, sbitmap b)
sbitmap_a_subset_b_p (sbitmap a, sbitmap b)
{
{
  unsigned int i, n = a->size;
  unsigned int i, n = a->size;
  sbitmap_ptr ap, bp;
  sbitmap_ptr ap, bp;
 
 
  for (ap = a->elms, bp = b->elms, i = 0; i < n; i++, ap++, bp++)
  for (ap = a->elms, bp = b->elms, i = 0; i < n; i++, ap++, bp++)
    if ((*ap | *bp) != *bp)
    if ((*ap | *bp) != *bp)
      return false;
      return false;
 
 
  return true;
  return true;
}
}
 
 
/* Set DST to be (A or (B and C)).
/* Set DST to be (A or (B and C)).
   Return nonzero if any change is made.  */
   Return nonzero if any change is made.  */
 
 
bool
bool
sbitmap_a_or_b_and_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_a_or_b_and_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & *cp++);
      SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & *cp++);
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_a_or_b_and_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_a_or_b_and_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | (*bp++ & *cp++);
    *dstp++ = *ap++ | (*bp++ & *cp++);
}
}
 
 
/* Set DST to be (A and (B or C)).
/* Set DST to be (A and (B or C)).
   Return nonzero if any change is made.  */
   Return nonzero if any change is made.  */
 
 
bool
bool
sbitmap_a_and_b_or_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_a_and_b_or_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
  SBITMAP_ELT_TYPE changed = 0;
  SBITMAP_ELT_TYPE changed = 0;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    {
    {
      SBITMAP_ELT_TYPE tmp = *ap++ & (*bp++ | *cp++);
      SBITMAP_ELT_TYPE tmp = *ap++ & (*bp++ | *cp++);
      changed |= *dstp ^ tmp;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
      *dstp++ = tmp;
    }
    }
 
 
  return changed != 0;
  return changed != 0;
}
}
 
 
void
void
sbitmap_a_and_b_or_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
sbitmap_a_and_b_or_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
{
  unsigned int i, n = dst->size;
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  sbitmap_ptr cp = c->elms;
 
 
  for (i = 0; i < n; i++)
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ & (*bp++ | *cp++);
    *dstp++ = *ap++ & (*bp++ | *cp++);
}
}
 
 
#ifdef IN_GCC
#ifdef IN_GCC
/* Set the bitmap DST to the intersection of SRC of successors of
/* Set the bitmap DST to the intersection of SRC of successors of
   block number BB, using the new flow graph structures.  */
   block number BB, using the new flow graph structures.  */
 
 
void
void
sbitmap_intersection_of_succs (sbitmap dst, sbitmap *src, int bb)
sbitmap_intersection_of_succs (sbitmap dst, sbitmap *src, int bb)
{
{
  basic_block b = BASIC_BLOCK (bb);
  basic_block b = BASIC_BLOCK (bb);
  unsigned int set_size = dst->size;
  unsigned int set_size = dst->size;
  edge e;
  edge e;
  unsigned ix;
  unsigned ix;
 
 
  for (e = NULL, ix = 0; ix < EDGE_COUNT (b->succs); ix++)
  for (e = NULL, ix = 0; ix < EDGE_COUNT (b->succs); ix++)
    {
    {
      e = EDGE_SUCC (b, ix);
      e = EDGE_SUCC (b, ix);
      if (e->dest == EXIT_BLOCK_PTR)
      if (e->dest == EXIT_BLOCK_PTR)
        continue;
        continue;
 
 
      sbitmap_copy (dst, src[e->dest->index]);
      sbitmap_copy (dst, src[e->dest->index]);
      break;
      break;
    }
    }
 
 
  if (e == 0)
  if (e == 0)
    sbitmap_ones (dst);
    sbitmap_ones (dst);
  else
  else
    for (++ix; ix < EDGE_COUNT (b->succs); ix++)
    for (++ix; ix < EDGE_COUNT (b->succs); ix++)
      {
      {
        unsigned int i;
        unsigned int i;
        sbitmap_ptr p, r;
        sbitmap_ptr p, r;
 
 
        e = EDGE_SUCC (b, ix);
        e = EDGE_SUCC (b, ix);
        if (e->dest == EXIT_BLOCK_PTR)
        if (e->dest == EXIT_BLOCK_PTR)
          continue;
          continue;
 
 
        p = src[e->dest->index]->elms;
        p = src[e->dest->index]->elms;
        r = dst->elms;
        r = dst->elms;
        for (i = 0; i < set_size; i++)
        for (i = 0; i < set_size; i++)
          *r++ &= *p++;
          *r++ &= *p++;
      }
      }
}
}
 
 
/* Set the bitmap DST to the intersection of SRC of predecessors of
/* Set the bitmap DST to the intersection of SRC of predecessors of
   block number BB, using the new flow graph structures.  */
   block number BB, using the new flow graph structures.  */
 
 
void
void
sbitmap_intersection_of_preds (sbitmap dst, sbitmap *src, int bb)
sbitmap_intersection_of_preds (sbitmap dst, sbitmap *src, int bb)
{
{
  basic_block b = BASIC_BLOCK (bb);
  basic_block b = BASIC_BLOCK (bb);
  unsigned int set_size = dst->size;
  unsigned int set_size = dst->size;
  edge e;
  edge e;
  unsigned ix;
  unsigned ix;
 
 
  for (e = NULL, ix = 0; ix < EDGE_COUNT (b->preds); ix++)
  for (e = NULL, ix = 0; ix < EDGE_COUNT (b->preds); ix++)
    {
    {
      e = EDGE_PRED (b, ix);
      e = EDGE_PRED (b, ix);
      if (e->src == ENTRY_BLOCK_PTR)
      if (e->src == ENTRY_BLOCK_PTR)
        continue;
        continue;
 
 
      sbitmap_copy (dst, src[e->src->index]);
      sbitmap_copy (dst, src[e->src->index]);
      break;
      break;
    }
    }
 
 
  if (e == 0)
  if (e == 0)
    sbitmap_ones (dst);
    sbitmap_ones (dst);
  else
  else
    for (++ix; ix < EDGE_COUNT (b->preds); ix++)
    for (++ix; ix < EDGE_COUNT (b->preds); ix++)
      {
      {
        unsigned int i;
        unsigned int i;
        sbitmap_ptr p, r;
        sbitmap_ptr p, r;
 
 
        e = EDGE_PRED (b, ix);
        e = EDGE_PRED (b, ix);
        if (e->src == ENTRY_BLOCK_PTR)
        if (e->src == ENTRY_BLOCK_PTR)
          continue;
          continue;
 
 
        p = src[e->src->index]->elms;
        p = src[e->src->index]->elms;
        r = dst->elms;
        r = dst->elms;
        for (i = 0; i < set_size; i++)
        for (i = 0; i < set_size; i++)
          *r++ &= *p++;
          *r++ &= *p++;
      }
      }
}
}
 
 
/* Set the bitmap DST to the union of SRC of successors of
/* Set the bitmap DST to the union of SRC of successors of
   block number BB, using the new flow graph structures.  */
   block number BB, using the new flow graph structures.  */
 
 
void
void
sbitmap_union_of_succs (sbitmap dst, sbitmap *src, int bb)
sbitmap_union_of_succs (sbitmap dst, sbitmap *src, int bb)
{
{
  basic_block b = BASIC_BLOCK (bb);
  basic_block b = BASIC_BLOCK (bb);
  unsigned int set_size = dst->size;
  unsigned int set_size = dst->size;
  edge e;
  edge e;
  unsigned ix;
  unsigned ix;
 
 
  for (ix = 0; ix < EDGE_COUNT (b->succs); ix++)
  for (ix = 0; ix < EDGE_COUNT (b->succs); ix++)
    {
    {
      e = EDGE_SUCC (b, ix);
      e = EDGE_SUCC (b, ix);
      if (e->dest == EXIT_BLOCK_PTR)
      if (e->dest == EXIT_BLOCK_PTR)
        continue;
        continue;
 
 
      sbitmap_copy (dst, src[e->dest->index]);
      sbitmap_copy (dst, src[e->dest->index]);
      break;
      break;
    }
    }
 
 
  if (ix == EDGE_COUNT (b->succs))
  if (ix == EDGE_COUNT (b->succs))
    sbitmap_zero (dst);
    sbitmap_zero (dst);
  else
  else
    for (ix++; ix < EDGE_COUNT (b->succs); ix++)
    for (ix++; ix < EDGE_COUNT (b->succs); ix++)
      {
      {
        unsigned int i;
        unsigned int i;
        sbitmap_ptr p, r;
        sbitmap_ptr p, r;
 
 
        e = EDGE_SUCC (b, ix);
        e = EDGE_SUCC (b, ix);
        if (e->dest == EXIT_BLOCK_PTR)
        if (e->dest == EXIT_BLOCK_PTR)
          continue;
          continue;
 
 
        p = src[e->dest->index]->elms;
        p = src[e->dest->index]->elms;
        r = dst->elms;
        r = dst->elms;
        for (i = 0; i < set_size; i++)
        for (i = 0; i < set_size; i++)
          *r++ |= *p++;
          *r++ |= *p++;
      }
      }
}
}
 
 
/* Set the bitmap DST to the union of SRC of predecessors of
/* Set the bitmap DST to the union of SRC of predecessors of
   block number BB, using the new flow graph structures.  */
   block number BB, using the new flow graph structures.  */
 
 
void
void
sbitmap_union_of_preds (sbitmap dst, sbitmap *src, int bb)
sbitmap_union_of_preds (sbitmap dst, sbitmap *src, int bb)
{
{
  basic_block b = BASIC_BLOCK (bb);
  basic_block b = BASIC_BLOCK (bb);
  unsigned int set_size = dst->size;
  unsigned int set_size = dst->size;
  edge e;
  edge e;
  unsigned ix;
  unsigned ix;
 
 
  for (ix = 0; ix < EDGE_COUNT (b->preds); ix++)
  for (ix = 0; ix < EDGE_COUNT (b->preds); ix++)
    {
    {
      e = EDGE_PRED (b, ix);
      e = EDGE_PRED (b, ix);
      if (e->src== ENTRY_BLOCK_PTR)
      if (e->src== ENTRY_BLOCK_PTR)
        continue;
        continue;
 
 
      sbitmap_copy (dst, src[e->src->index]);
      sbitmap_copy (dst, src[e->src->index]);
      break;
      break;
    }
    }
 
 
  if (ix == EDGE_COUNT (b->preds))
  if (ix == EDGE_COUNT (b->preds))
    sbitmap_zero (dst);
    sbitmap_zero (dst);
  else
  else
    for (ix++; ix < EDGE_COUNT (b->preds); ix++)
    for (ix++; ix < EDGE_COUNT (b->preds); ix++)
      {
      {
        unsigned int i;
        unsigned int i;
        sbitmap_ptr p, r;
        sbitmap_ptr p, r;
 
 
        e = EDGE_PRED (b, ix);
        e = EDGE_PRED (b, ix);
        if (e->src == ENTRY_BLOCK_PTR)
        if (e->src == ENTRY_BLOCK_PTR)
          continue;
          continue;
 
 
        p = src[e->src->index]->elms;
        p = src[e->src->index]->elms;
        r = dst->elms;
        r = dst->elms;
        for (i = 0; i < set_size; i++)
        for (i = 0; i < set_size; i++)
          *r++ |= *p++;
          *r++ |= *p++;
      }
      }
}
}
#endif
#endif
 
 
/* Return number of first bit set in the bitmap, -1 if none.  */
/* Return number of first bit set in the bitmap, -1 if none.  */
 
 
int
int
sbitmap_first_set_bit (sbitmap bmap)
sbitmap_first_set_bit (sbitmap bmap)
{
{
  unsigned int n = 0;
  unsigned int n = 0;
  sbitmap_iterator sbi;
  sbitmap_iterator sbi;
 
 
  EXECUTE_IF_SET_IN_SBITMAP (bmap, 0, n, sbi)
  EXECUTE_IF_SET_IN_SBITMAP (bmap, 0, n, sbi)
    return n;
    return n;
  return -1;
  return -1;
}
}
 
 
/* Return number of last bit set in the bitmap, -1 if none.  */
/* Return number of last bit set in the bitmap, -1 if none.  */
 
 
int
int
sbitmap_last_set_bit (sbitmap bmap)
sbitmap_last_set_bit (sbitmap bmap)
{
{
  int i;
  int i;
  SBITMAP_ELT_TYPE *ptr = bmap->elms;
  SBITMAP_ELT_TYPE *ptr = bmap->elms;
 
 
  for (i = bmap->size - 1; i >= 0; i--)
  for (i = bmap->size - 1; i >= 0; i--)
    {
    {
      SBITMAP_ELT_TYPE word = ptr[i];
      SBITMAP_ELT_TYPE word = ptr[i];
 
 
      if (word != 0)
      if (word != 0)
        {
        {
          unsigned int index = (i + 1) * SBITMAP_ELT_BITS - 1;
          unsigned int index = (i + 1) * SBITMAP_ELT_BITS - 1;
          SBITMAP_ELT_TYPE mask
          SBITMAP_ELT_TYPE mask
            = (SBITMAP_ELT_TYPE) 1 << (SBITMAP_ELT_BITS - 1);
            = (SBITMAP_ELT_TYPE) 1 << (SBITMAP_ELT_BITS - 1);
 
 
          while (1)
          while (1)
            {
            {
              if ((word & mask) != 0)
              if ((word & mask) != 0)
                return index;
                return index;
 
 
              mask >>= 1;
              mask >>= 1;
              index--;
              index--;
            }
            }
        }
        }
    }
    }
 
 
  return -1;
  return -1;
}
}
 
 
void
void
dump_sbitmap (FILE *file, sbitmap bmap)
dump_sbitmap (FILE *file, sbitmap bmap)
{
{
  unsigned int i, n, j;
  unsigned int i, n, j;
  unsigned int set_size = bmap->size;
  unsigned int set_size = bmap->size;
  unsigned int total_bits = bmap->n_bits;
  unsigned int total_bits = bmap->n_bits;
 
 
  fprintf (file, "  ");
  fprintf (file, "  ");
  for (i = n = 0; i < set_size && n < total_bits; i++)
  for (i = n = 0; i < set_size && n < total_bits; i++)
    for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
    for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
      {
      {
        if (n != 0 && n % 10 == 0)
        if (n != 0 && n % 10 == 0)
          fprintf (file, " ");
          fprintf (file, " ");
 
 
        fprintf (file, "%d",
        fprintf (file, "%d",
                 (bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0);
                 (bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0);
      }
      }
 
 
  fprintf (file, "\n");
  fprintf (file, "\n");
}
}
 
 
void
void
dump_sbitmap_file (FILE *file, sbitmap bmap)
dump_sbitmap_file (FILE *file, sbitmap bmap)
{
{
  unsigned int i, pos;
  unsigned int i, pos;
 
 
  fprintf (file, "n_bits = %d, set = {", bmap->n_bits);
  fprintf (file, "n_bits = %d, set = {", bmap->n_bits);
 
 
  for (pos = 30, i = 0; i < bmap->n_bits; i++)
  for (pos = 30, i = 0; i < bmap->n_bits; i++)
    if (TEST_BIT (bmap, i))
    if (TEST_BIT (bmap, i))
      {
      {
        if (pos > 70)
        if (pos > 70)
          {
          {
            fprintf (file, "\n  ");
            fprintf (file, "\n  ");
            pos = 0;
            pos = 0;
          }
          }
 
 
        fprintf (file, "%d ", i);
        fprintf (file, "%d ", i);
        pos += 2 + (i >= 10) + (i >= 100) + (i >= 1000);
        pos += 2 + (i >= 10) + (i >= 100) + (i >= 1000);
      }
      }
 
 
  fprintf (file, "}\n");
  fprintf (file, "}\n");
}
}
 
 
void
void
debug_sbitmap (sbitmap bmap)
debug_sbitmap (sbitmap bmap)
{
{
  dump_sbitmap_file (stderr, bmap);
  dump_sbitmap_file (stderr, bmap);
}
}
 
 
void
void
dump_sbitmap_vector (FILE *file, const char *title, const char *subtitle,
dump_sbitmap_vector (FILE *file, const char *title, const char *subtitle,
                     sbitmap *bmaps, int n_maps)
                     sbitmap *bmaps, int n_maps)
{
{
  int bb;
  int bb;
 
 
  fprintf (file, "%s\n", title);
  fprintf (file, "%s\n", title);
  for (bb = 0; bb < n_maps; bb++)
  for (bb = 0; bb < n_maps; bb++)
    {
    {
      fprintf (file, "%s %d\n", subtitle, bb);
      fprintf (file, "%s %d\n", subtitle, bb);
      dump_sbitmap (file, bmaps[bb]);
      dump_sbitmap (file, bmaps[bb]);
    }
    }
 
 
  fprintf (file, "\n");
  fprintf (file, "\n");
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.