diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69a963c04c7..636ec237472 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2006-07-25 Nick Clifton + + * 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 * dbxout.c (output_used_types_helper): Push queued types diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c index 751a0d184a6..5d880339d5a 100644 --- a/gcc/ggc-page.c +++ b/gcc/ggc-page.c @@ -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 {