ggc-page.c (NUM_SIZE_LOOKUP): New constant - the length of the size_lookup[] array.
authorNick Clifton <nickc@redhat.com>
Tue, 25 Jul 2006 15:33:50 +0000 (15:33 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Tue, 25 Jul 2006 15:33:50 +0000 (15:33 +0000)
* ggc-page.c (NUM_SIZE_LOOKUP): New constant - the length of the size_lookup[] array.
  (ggc_alloc_stat): Use NUM_SIZE_LOOKUP.
  (ggc_pch_count_object): Likewise.
  (ggc_pch_alloc_object): Likewise.
  (ggc_pch_write_object): Likewise.
  (init_ggc): Do not attempt to initialize entries in the size_lookup[] array
  for objects whose size is greater than than the length of the array.

From-SVN: r115738

gcc/ChangeLog
gcc/ggc-page.c

index 69a963c04c7c5dc9d0c1d81f183aa6b7bada0bb1..636ec23747230e0d5c93d675f9d57c3f1c7f0cb6 100644 (file)
@@ -1,3 +1,15 @@
+2006-07-25  Nick Clifton  <nickc@redhat.com>
+
+       * ggc-page.c (NUM_SIZE_LOOKUP): New constant - the length of the
+       size_lookup[] array.
+       (ggc_alloc_stat): Use NUM_SIZE_LOOKUP.
+       (ggc_pch_count_object): Likewise.
+       (ggc_pch_alloc_object): Likewise.
+       (ggc_pch_write_object): Likewise.
+       (init_ggc): Do not attempt to initialize entries in the
+       size_lookup[] array for objects whose size is greater than than
+       the length of the array.
+
 2006-07-25  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * dbxout.c (output_used_types_helper): Push queued types
index 751a0d184a67b1104c1fb2ceee7c1e1a6451ba3f..5d880339d5a3e56d0244930ab1a6426b3c8fa3d5 100644 (file)
@@ -1029,8 +1029,8 @@ release_pages (void)
 
 /* This table provides a fast way to determine ceil(log_2(size)) for
    allocation requests.  The minimum allocation size is eight bytes.  */
-
-static unsigned char size_lookup[512] =
+#define NUM_SIZE_LOOKUP 512
+static unsigned char size_lookup[NUM_SIZE_LOOKUP] =
 {
   3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
   4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -1084,7 +1084,7 @@ ggc_alloc_stat (size_t size MEM_STAT_DECL)
   struct page_entry *entry;
   void *result;
 
-  if (size < 512)
+  if (size < NUM_SIZE_LOOKUP)
     {
       order = size_lookup[size];
       object_size = OBJECT_SIZE (order);
@@ -1534,8 +1534,11 @@ init_ggc (void)
       int o;
       int i;
 
-      o = size_lookup[OBJECT_SIZE (order)];
-      for (i = OBJECT_SIZE (order); size_lookup [i] == o; --i)
+      i = OBJECT_SIZE (order);
+      if (i >= NUM_SIZE_LOOKUP)
+       continue;
+
+      for (o = size_lookup[i]; o == size_lookup [i]; --i)
        size_lookup[i] = order;
     }
 
@@ -2046,7 +2049,7 @@ ggc_pch_count_object (struct ggc_pch_data *d, void *x ATTRIBUTE_UNUSED,
 {
   unsigned order;
 
-  if (size < 512)
+  if (size < NUM_SIZE_LOOKUP)
     order = size_lookup[size];
   else
     {
@@ -2091,7 +2094,7 @@ ggc_pch_alloc_object (struct ggc_pch_data *d, void *x ATTRIBUTE_UNUSED,
   unsigned order;
   char *result;
 
-  if (size < 512)
+  if (size < NUM_SIZE_LOOKUP)
     order = size_lookup[size];
   else
     {
@@ -2120,7 +2123,7 @@ ggc_pch_write_object (struct ggc_pch_data *d ATTRIBUTE_UNUSED,
   unsigned order;
   static const char emptyBytes[256];
 
-  if (size < 512)
+  if (size < NUM_SIZE_LOOKUP)
     order = size_lookup[size];
   else
     {