cvsuser 03/01/13 09:04:48
Modified: . KNOWN_ISSUES headers.c smallobject.c
Log:
cleanup - not really slower with -O3 but less duplicate code
Revision Changes Path
1.7 +0 -1 parrot/KNOWN_ISSUES
Index: KNOWN_ISSUES
===================================================================
RCS file: /cvs/public/parrot/KNOWN_ISSUES,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -r1.6 -r1.7
--- KNOWN_ISSUES 12 Jan 2003 11:11:11 -0000 1.6
+++ KNOWN_ISSUES 13 Jan 2003 17:04:48 -0000 1.7
@@ -49,7 +49,6 @@
Utilities
-- disassemble.c dumps core
- assemble.pl rolls its own packfile packing
Classes
1.33 +7 -46 parrot/headers.c
Index: headers.c
===================================================================
RCS file: /cvs/public/parrot/headers.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -w -r1.32 -r1.33
--- headers.c 12 Jan 2003 11:11:11 -0000 1.32
+++ headers.c 13 Jan 2003 17:04:48 -0000 1.33
@@ -1,7 +1,7 @@
/* headers.c
* Copyright: (When this is determined...it will go here)
* CVS Info
- * $Id: headers.c,v 1.32 2003/01/12 11:11:11 leo Exp $
+ * $Id: headers.c,v 1.33 2003/01/13 17:04:48 leo Exp $
* Overview:
* Header management functions. Handles getting of various headers,
* and pool creation
@@ -31,43 +31,16 @@
# define CONSTANT_PMC_HEADERS_PER_ALLOC 64
/** PMC Header Functions for small-object lookup table **/
-void
-add_free_pmc(struct Parrot_Interp *interpreter,
- struct Small_Object_Pool *pool, void *pmc)
-{
- PObj_flags_SETTO((PMC *)pmc, PObj_on_free_list_FLAG);
-
- /* Don't let it point to garbage memory */
- ((PMC *)pmc)->data = NULL;
- ((PMC *)pmc)->metadata = NULL;
- ((PMC *)pmc)->synchronize = NULL;
-
- /* Copied from add_free_object */
- *(void **)pmc = pool->free_list;
- pool->free_list = pmc;
- pool->num_free_objects++;
-}
-
void *
get_free_pmc(struct Parrot_Interp *interpreter, struct Small_Object_Pool *pool)
{
- /* Copied from get_free_object */
- PMC *pmc;
-
- if (!pool->free_list)
- (*pool->more_objects) (interpreter, pool);
-
- pmc = pool->free_list;
- pool->free_list = *(void **)pmc;
+ PMC *pmc = get_free_object(interpreter, pool);
+ /* clear flags, set is_PMC_FLAG */
PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG);
- /* PMCs mem is already washed, set pointers to NULL if needed */
- SET_NULL(pmc->data);
- SET_NULL(pmc->metadata);
- SET_NULL(pmc->synchronize);
-
- pool->num_free_objects--;
-
+ ((PMC *)pmc)->data = NULL;
+ ((PMC *)pmc)->metadata = NULL;
+ ((PMC *)pmc)->synchronize = NULL;
return pmc;
}
@@ -77,24 +50,13 @@
get_free_buffer(struct Parrot_Interp *interpreter,
struct Small_Object_Pool *pool)
{
- /* Copied from get_free_object */
- Buffer *buffer;
-
- if (!pool->free_list)
- (*pool->more_objects) (interpreter, pool);
- buffer = pool->free_list;
- pool->free_list = *(void **)buffer;
+ Buffer *buffer = get_free_object(interpreter, pool);
/* Don't let it point to garbage memory */
buffer->bufstart = NULL;
buffer->buflen = 0;
/* Clear the flagpole (especially _on_free_list_FLAG) */
PObj_flags_CLEARALL(buffer);
-#if ! DISABLE_GC_DEBUG
- if (GC_DEBUG(interpreter))
- buffer->version++;
-#endif
- pool->num_free_objects--;
return buffer;
}
@@ -108,7 +70,6 @@
struct Small_Object_Pool *pmc_pool =
new_small_object_pool(interpreter, sizeof(PMC), num_headers);
- pmc_pool->add_free_object = add_free_pmc;
pmc_pool->get_free_object = get_free_pmc;
pmc_pool->more_objects = more_traceable_objects;
pmc_pool->mem_pool = NULL;
1.21 +8 -5 parrot/smallobject.c
Index: smallobject.c
===================================================================
RCS file: /cvs/public/parrot/smallobject.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -w -r1.20 -r1.21
--- smallobject.c 12 Jan 2003 11:11:11 -0000 1.20
+++ smallobject.c 13 Jan 2003 17:04:48 -0000 1.21
@@ -1,7 +1,7 @@
/* resources.c
* Copyright: (When this is determined...it will go here)
* CVS Info
- * $Id: smallobject.c,v 1.20 2003/01/12 11:11:11 leo Exp $
+ * $Id: smallobject.c,v 1.21 2003/01/13 17:04:48 leo Exp $
* Overview:
* Handles the accessing of small object pools (header pools)
* Data Structure and Algorithms:
@@ -66,7 +66,6 @@
add_free_object(struct Parrot_Interp *interpreter,
struct Small_Object_Pool *pool, void *to_add)
{
- /* This code is copied to add_free_pmc */
PObj_flags_SETTO((PObj *)to_add, PObj_on_free_list_FLAG);
*(void **)to_add = pool->free_list;
pool->free_list = to_add;
@@ -78,7 +77,6 @@
get_free_object(struct Parrot_Interp *interpreter,
struct Small_Object_Pool *pool)
{
- /* This code is copied to get_free_pmc and get_free_buffer */
void *ptr;
/* if we don't have any objects */
@@ -87,6 +85,11 @@
ptr = pool->free_list;
pool->free_list = *(void **)ptr;
+ pool->num_free_objects--;
+#if ! DISABLE_GC_DEBUG
+ if (GC_DEBUG(interpreter))
+ ((Buffer*)ptr)->version++;
+#endif
return ptr;
}
@@ -133,9 +136,9 @@
add_free_object (interpreter, pool, object);
object = (void *)((char *)object + pool->object_size);
}
+ pool->total_objects += pool->objects_per_alloc;
/* Allocate more next time */
- pool->total_objects += pool->objects_per_alloc;
if (GC_DEBUG(interpreter)) {
pool->objects_per_alloc *= GC_DEBUG_UNITS_PER_ALLOC_GROWTH_FACTOR;
pool->replenish_level =
@@ -147,7 +150,7 @@
pool->replenish_level =
(size_t)(pool->total_objects * REPLENISH_LEVEL_FACTOR);
}
- /* check alloc size agains maximum and set new allocation data */
+ /* check alloc size against maximum */
size = pool->object_size * pool->objects_per_alloc;
if (size > POOL_MAX_BYTES) {