+2004-07-26 Daniel Jacobowitz <dan@debian.org>
+
+ PR bootstrap/12804
+ * ggc-zone.c (struct alloc_chunk): Remove attribute packed.
+ (MAX_FREE_BIN_SIZE): Increase on 64-bit targets.
+ (ggc_free): Remove incorrect freeing.
+ (sweep_pages): Advance PP for large pages. Fix indentation.
+
2004-07-26 Richard Sandiford <rsandifo@redhat.com>
PR rtl-optimization/16643
double align_d;
#endif
} u;
-} __attribute__ ((packed));
+};
#define CHUNK_OVERHEAD (offsetof (struct alloc_chunk, u))
on a PowerPC G4 7450 - 667 mhz, and a Pentium 4 - 2.8ghz,
these were determined to be the optimal values. */
#define NUM_FREE_BINS 64
-#define MAX_FREE_BIN_SIZE 256
+#define MAX_FREE_BIN_SIZE (64 * sizeof (void *))
#define FREE_BIN_DELTA (MAX_FREE_BIN_SIZE / NUM_FREE_BINS)
#define SIZE_BIN_UP(SIZE) (((SIZE) + FREE_BIN_DELTA - 1) / FREE_BIN_DELTA)
#define SIZE_BIN_DOWN(SIZE) ((SIZE) / FREE_BIN_DELTA)
/* Poison the chunk. */
poison_chunk (chunk, ggc_get_size (p));
-
- /* XXX: We only deal with explicitly freeing large objects ATM. */
- if (chunk->large)
- free (p);
}
/* If P is not marked, mark it and return false. Otherwise return true.
if (((struct alloc_chunk *)p->page)->mark == 1)
{
((struct alloc_chunk *)p->page)->mark = 0;
+ pp = &p->next;
}
else
{
*pp = next;
#ifdef ENABLE_GC_CHECKING
- /* Poison the page. */
- memset (p->page, 0xb5, p->bytes);
+ /* Poison the page. */
+ memset (p->page, 0xb5, p->bytes);
#endif
free_page (p);
}