diff options
author | Zack Weinberg <zack@codesourcery.com> | 2002-08-24 03:20:33 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2002-08-24 03:20:33 +0000 |
commit | 280cf02aff113def7aa6d7a4a7a527ca8fce4df4 (patch) | |
tree | a77c2142c30ef92cd834b61d17ae51d942b6fc8d /gcc/ggc-page.c | |
parent | 314b5a68e3bc44a4a1c5558717e37608b6ffb546 (diff) | |
download | gcc-280cf02aff113def7aa6d7a4a7a527ca8fce4df4.zip gcc-280cf02aff113def7aa6d7a4a7a527ca8fce4df4.tar.gz gcc-280cf02aff113def7aa6d7a4a7a527ca8fce4df4.tar.bz2 |
ggc-page.c (compute_inverse): Short circuit calculation for object sizes larger than half a page.
* ggc-page.c (compute_inverse): Short circuit calculation for
object sizes larger than half a page.
From-SVN: r56548
Diffstat (limited to 'gcc/ggc-page.c')
-rw-r--r-- | gcc/ggc-page.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c index af3af1a..294bdfc 100644 --- a/gcc/ggc-page.c +++ b/gcc/ggc-page.c @@ -1080,6 +1080,18 @@ compute_inverse (order) { unsigned size, inv, e; + /* There can be only one object per "page" in a bucket for sizes + larger than half a machine page; it will always have offset zero. */ + if (OBJECT_SIZE (order) > G.pagesize/2) + { + if (OBJECTS_PER_PAGE (order) != 1) + abort (); + + DIV_MULT (order) = 1; + DIV_SHIFT (order) = 0; + return; + } + size = OBJECT_SIZE (order); e = 0; while (size % 2 == 0) |