mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Use Gnulib's count-one-bits' as a replacement for
scm_i_uint_bit_count ()'.
* libguile/gc-card.c: Include <config.h> and <count-one-bits.h>. (scm_i_uint_bit_count): Remove. (scm_i_card_marked_count): Use `count_one_bits_l ()' instead of `scm_i_uint_bit_count ()'. * libguile/gc-segment.c: Include <config.h> and <count-one-bits.h>. (scm_i_heap_segment_marked_count): Use `count_one_bits_l ()' instead of `scm_i_uint_bit_count ()'. * libguile/private-gc.h (scm_i_uint_bit_count): Remove.
This commit is contained in:
parent
d7014610b1
commit
a8db4a59c8
3 changed files with 16 additions and 18 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -15,8 +15,14 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <count-one-bits.h>
|
||||
|
||||
#include <gmp.h>
|
||||
|
||||
#include "libguile/_scm.h"
|
||||
|
@ -293,19 +299,6 @@ scm_i_init_card_freelist (scm_t_cell *card, SCM *free_list,
|
|||
return collected;
|
||||
}
|
||||
|
||||
/*
|
||||
Classic MIT Hack, see e.g. http://www.tekpool.com/?cat=9
|
||||
*/
|
||||
int scm_i_uint_bit_count (unsigned int u)
|
||||
{
|
||||
unsigned int u_count = u
|
||||
- ((u >> 1) & 033333333333)
|
||||
- ((u >> 2) & 011111111111);
|
||||
return
|
||||
((u_count + (u_count >> 3))
|
||||
& 030707070707) % 63;
|
||||
}
|
||||
|
||||
/*
|
||||
Amount of cells marked in this cell, measured in 1-cells.
|
||||
*/
|
||||
|
@ -318,7 +311,7 @@ scm_i_card_marked_count (scm_t_cell *card, int span)
|
|||
int count = 0;
|
||||
while (bvec < bvec_end)
|
||||
{
|
||||
count += scm_i_uint_bit_count (*bvec);
|
||||
count += count_one_bits_l (*bvec);
|
||||
bvec ++;
|
||||
}
|
||||
return count * span;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2006, 2008 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -15,10 +15,16 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <count-one-bits.h>
|
||||
|
||||
#include "libguile/_scm.h"
|
||||
#include "libguile/pairs.h"
|
||||
#include "libguile/gc.h"
|
||||
|
@ -109,7 +115,7 @@ scm_i_heap_segment_marked_count (scm_t_heap_segment *seg)
|
|||
int count = 0;
|
||||
while (bvec < bvec_end)
|
||||
{
|
||||
count += scm_i_uint_bit_count (*bvec);
|
||||
count += count_one_bits_l (*bvec);
|
||||
bvec ++;
|
||||
}
|
||||
return count * seg->span;
|
||||
|
|
|
@ -78,7 +78,6 @@
|
|||
#define SCM_GC_IN_CARD_HEADERP(x) \
|
||||
(scm_t_cell *) (x) < SCM_GC_CELL_CARD (x) + SCM_GC_CARD_N_HEADER_CELLS
|
||||
|
||||
int scm_i_uint_bit_count (unsigned int u);
|
||||
int scm_getenv_int (const char *var, int def);
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue