core: Prepare for M2-Planet: M2_CELL_SIZE.
* src/gc.c (M2_CELL_SIZE): Hack for missing pointer arithmetic in M2-Planet. (gc_init, alloc, make_cell, gc_up_arena, gc_copy, gc_loop, gc_): Use it.
This commit is contained in:
parent
49349d0ba9
commit
5985d962f2
30
src/gc.c
30
src/gc.c
|
@ -117,9 +117,9 @@ gc_init () /*:((internal)) */
|
|||
|
||||
long arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm);
|
||||
#if POINTER_CELLS
|
||||
void *a = malloc (arena_bytes + STACK_SIZE * sizeof (SCM) * 2);
|
||||
void *a = malloc (arena_bytes + (STACK_SIZE * sizeof (SCM) * 2));
|
||||
#else
|
||||
void *a = malloc (arena_bytes + STACK_SIZE * sizeof (SCM));
|
||||
void *a = malloc (arena_bytes + (STACK_SIZE * sizeof (SCM)));
|
||||
#endif
|
||||
g_cells = a;
|
||||
g_stack_array = a + arena_bytes;
|
||||
|
@ -134,7 +134,7 @@ gc_init () /*:((internal)) */
|
|||
TYPE (cell_arena) = TVECTOR;
|
||||
LENGTH (cell_arena) = 1000;
|
||||
VECTOR (cell_arena) = 0;
|
||||
g_cells = g_cells + 1;
|
||||
g_cells = g_cells + M2_CELL_SIZE;
|
||||
TYPE (cell_arena) = TCHAR;
|
||||
VALUE (cell_arena) = 'c';
|
||||
|
||||
|
@ -172,7 +172,7 @@ SCM
|
|||
alloc (long n)
|
||||
{
|
||||
SCM x = g_free;
|
||||
g_free = g_free + n;
|
||||
g_free = g_free + (n * M2_CELL_SIZE);
|
||||
#if POINTER_CELLS
|
||||
long i = g_free - g_cells;
|
||||
#else
|
||||
|
@ -187,7 +187,7 @@ SCM
|
|||
make_cell (long type, SCM car, SCM cdr)
|
||||
{
|
||||
SCM x = g_free;
|
||||
g_free = g_free + 1;
|
||||
g_free = g_free + M2_CELL_SIZE;
|
||||
#if POINTER_CELLS
|
||||
long i = g_free - g_cells;
|
||||
#else
|
||||
|
@ -226,7 +226,7 @@ copy_stack (long index, SCM from)
|
|||
SCM
|
||||
cell_ref (SCM cell, long index)
|
||||
{
|
||||
return cell + index;
|
||||
return cell + (index * M2_CELL_SIZE);
|
||||
}
|
||||
|
||||
SCM
|
||||
|
@ -340,7 +340,7 @@ gc_up_arena () /*:((internal)) */
|
|||
else
|
||||
ARENA_SIZE = MAX_ARENA_SIZE - JAM_SIZE;
|
||||
long arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm);
|
||||
void *p = realloc (g_cells - 1, arena_bytes + STACK_SIZE * sizeof (SCM));
|
||||
void *p = realloc (g_cells - M2_CELL_SIZE, (arena_bytes + STACK_SIZE) * sizeof (SCM));
|
||||
if (p == 0)
|
||||
{
|
||||
eputs ("realloc failed, g_free=");
|
||||
|
@ -358,7 +358,7 @@ gc_up_arena () /*:((internal)) */
|
|||
}
|
||||
g_cells = p;
|
||||
memcpy (p + arena_bytes, p + old_arena_bytes, STACK_SIZE * sizeof (SCM));
|
||||
g_cells = g_cells + 1;
|
||||
g_cells = g_cells + M2_CELL_SIZE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -388,7 +388,7 @@ gc_copy (SCM old) /*:((internal)) */
|
|||
if (TYPE (old) == TBROKEN_HEART)
|
||||
return CAR (old);
|
||||
SCM new = g_free;
|
||||
g_free = g_free + 1;
|
||||
g_free = g_free + M2_CELL_SIZE;
|
||||
copy_news (new, old);
|
||||
if (NTYPE (new) == TSTRUCT || NTYPE (new) == TVECTOR)
|
||||
{
|
||||
|
@ -397,7 +397,7 @@ gc_copy (SCM old) /*:((internal)) */
|
|||
for (i = 0; i < LENGTH (old); i = i + 1)
|
||||
{
|
||||
copy_news (g_free, cell_ref (VECTOR (old), i));
|
||||
g_free = g_free + 1;
|
||||
g_free = g_free + M2_CELL_SIZE;
|
||||
}
|
||||
}
|
||||
else if (NTYPE (new) == TBYTES)
|
||||
|
@ -410,7 +410,7 @@ gc_copy (SCM old) /*:((internal)) */
|
|||
size_t length = NLENGTH (new);
|
||||
#endif
|
||||
memcpy (dest, src, length + 1);
|
||||
g_free = g_free + bytes_cells (length) - 1;
|
||||
g_free = g_free + ((bytes_cells (length) - 1) * M2_CELL_SIZE);
|
||||
|
||||
if (g_debug > 4)
|
||||
{
|
||||
|
@ -470,8 +470,8 @@ gc_loop (SCM scan) /*:((internal)) */
|
|||
gc_relocate_cdr (scan, cdr);
|
||||
}
|
||||
if (NTYPE (scan) == TBYTES)
|
||||
scan = scan + bytes_cells (NLENGTH (scan)) - 1;
|
||||
scan = scan + 1;
|
||||
scan = scan + ((bytes_cells (NLENGTH (scan)) - 1) * M2_CELL_SIZE);
|
||||
scan = scan + M2_CELL_SIZE;
|
||||
}
|
||||
gc_flip ();
|
||||
}
|
||||
|
@ -531,14 +531,14 @@ gc_ () /*:((internal)) */
|
|||
}
|
||||
|
||||
SCM s;
|
||||
for (s = cell_nil; s < g_symbol_max; s = s + 1)
|
||||
for (s = cell_nil; s < g_symbol_max; s = s + M2_CELL_SIZE)
|
||||
gc_copy (s);
|
||||
g_symbols = gc_copy (g_symbols);
|
||||
g_macros = gc_copy (g_macros);
|
||||
g_ports = gc_copy (g_ports);
|
||||
M0 = gc_copy (M0);
|
||||
long i;
|
||||
for (i = g_stack; i < STACK_SIZE; i = i + 1)
|
||||
for (i = g_stack; i < STACK_SIZE; i = i + M2_CELL_SIZE)
|
||||
copy_stack (i, gc_copy (g_stack_array[i]));
|
||||
#if POINTER_CELLS
|
||||
long save_gfree = g_free;
|
||||
|
|
|
@ -29,7 +29,7 @@ hash_cstring (char const *s, long size)
|
|||
int hash = s[0] * 37;
|
||||
if (s[0] != 0)
|
||||
if (s[1] != 0)
|
||||
hash = hash + s[1] * 43;
|
||||
hash = hash + (s[1] * 43);
|
||||
assert_msg (size != 0, "size");
|
||||
hash = hash % size;
|
||||
return hash;
|
||||
|
|
Loading…
Reference in New Issue