]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ggc-page.c (compute_inverse): Short circuit calculation for object sizes larger than...
authorZack Weinberg <zack@codesourcery.com>
Sat, 24 Aug 2002 03:20:33 +0000 (03:20 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Sat, 24 Aug 2002 03:20:33 +0000 (03:20 +0000)
* ggc-page.c (compute_inverse): Short circuit calculation for
object sizes larger than half a page.

From-SVN: r56548

gcc/ChangeLog
gcc/ggc-page.c

index 05a7437360a99bed49417017c211804d06829ed7..3cf590b0ebbb90cbe0f353a586e6f5b7f4f36b79 100644 (file)
@@ -1,3 +1,8 @@
+2002-08-23  Zack Weinberg  <zack@codesourcery.com>
+
+       * ggc-page.c (compute_inverse): Short circuit calculation for
+       object sizes larger than half a page.
+
 2002-08-23  David Edelsohn  <edelsohn@gnu.org>
 
        * config/rs6000/rs6000.c (rs6000_elf_select_section): Treat
index af3af1ab0bba0ffe87e079a10ba35c753390640f..294bdfc49e4a4653ff7b53a1a244e82755a1aa99 100644 (file)
@@ -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)