Revert "core: Pointer Cells: copy back. WIPPERDEWIP"

This reverts commit def3f1a4b5.
This commit is contained in:
Jan Nieuwenhuizen 2019-11-02 08:54:56 +01:00
parent 4beba216bd
commit dec487d5cb
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
1 changed files with 4 additions and 129 deletions

133
src/gc.c
View File

@ -106,16 +106,15 @@ gc_init ()
MAX_STRING = atoi (p);
long arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm);
#if !POINTER_CELLS || GC_NOFLIP
long alloc_bytes = arena_bytes + (STACK_SIZE * sizeof (struct scm));
#if! POINTER_CELLS
long alloc_bytes = arena_bytes + (STACK_SIZE * sizeof (SCM));
#else
long alloc_bytes = (arena_bytes * 2) + (STACK_SIZE * sizeof (struct scm*));
#endif
g_arena = malloc (alloc_bytes);
g_cells = g_arena;
#if !POINTER_CELLS || GC_NOFLIP
#if! POINTER_CELLS
g_stack_array = g_arena + arena_bytes;
#else
g_stack_array = g_arena + (arena_bytes * 2);
@ -323,17 +322,7 @@ gc_init_news ()
g_news = g_cells + g_free;
SCM ncell_arena = cell_arena;
#else
#if GC_NOFLIP
g_news = g_free;
#else
char* p = g_cells - M2_CELL_SIZE;
if (p == g_arena)
g_news = g_free;
else
g_news = g_arena;
#endif
SCM ncell_arena = g_news;
#endif
@ -395,113 +384,14 @@ void *p = realloc (g_cells - M2_CELL_SIZE, realloc_bytes);
g_cells = g_cells + M2_CELL_SIZE;
}
void
gc_cellcpy (struct scm *dest, struct scm *src, size_t n)
{
void *p = src;
void *q = dest;
long dist = p - q;
while (n != 0)
{
long t = src->type;
long a = src->car;
long d = src->cdr;
dest->type = t;
if (t == TBROKEN_HEART)
{
dest->type = 0;
a = 0;
d = 0;
#if 0
assert_msg (0, "gc_cellcpy: broken heart");
#endif
}
if (t == TMACRO
|| t == TPAIR
|| t == TREF
|| t == TVARIABLE)
dest->car = a - dist;
else
dest->car = a;
if (t == TBYTES
|| t == TCLOSURE
|| t == TCONTINUATION
|| t == TKEYWORD
|| t == TMACRO
|| t == TPAIR
|| t == TPORT
|| t == TSPECIAL
|| t == TSTRING
|| t == TSTRUCT
|| t == TSYMBOL
|| t == TVALUES
|| t == TVECTOR)
dest->cdr = d - dist;
else
dest->cdr = d;
if (t == TBYTES)
{
#if GC_TEST
eputs ("copying bytes[");
eputs (ntoab (&src->cdr, 16, 0));
eputs (", ");
eputs (ntoab (a, 10, 0));
eputs ("]: ");
eputs (&src->cdr);
eputs ("\n to [");
eputs (ntoab (&dest->cdr, 16, 0));
#endif
memcpy (&dest->cdr, &src->cdr, a);
#if GC_TEST
eputs ("]: ");
eputs (&dest->cdr);
eputs ("\n");
#endif
n = n - a;
int c = bytes_cells (a) * M2_CELL_SIZE;
dest = dest + c;
src = src + c;
}
else
{
n = n - 1;
dest = dest + M2_CELL_SIZE;
src = src + M2_CELL_SIZE;
}
}
}
void
gc_flip ()
{
#if POINTER_CELLS
if (g_free - g_news > JAM_SIZE)
JAM_SIZE = (g_free - g_news) + ((g_free - g_news) / 2);
#if GC_NOFLIP
cell_arena = g_cells - M2_CELL_SIZE; /* FIXME? */
gc_cellcpy (g_cells, g_news, (g_free - g_news) / M2_CELL_SIZE);
void *p = g_news;
void *q = g_cells;
long dist = p - q;
g_free = (void*)g_free - dist;
#if !GC_TEST
g_symbols = (void*)g_symbols - dist;
g_symbol_max = (void*)g_symbol_max - dist;
g_macros = (void*)g_macros - dist;
g_ports = (void*)g_ports - dist;
M0 = (void*)M0 - dist;
#endif
#else
g_cells = g_news;
cell_arena = g_news - M2_CELL_SIZE;
cell_zero = cell_arena + M2_CELL_SIZE;
cell_nil = cell_zero + M2_CELL_SIZE;
#endif
#endif
if (g_debug > 2)
@ -587,14 +477,7 @@ gc_loop (SCM scan)
{
long t = NTYPE (scan);
if (t == TBROKEN_HEART)
{
NTYPE (scan) = 0;
NCAR (scan) = 0;
NCDR (scan) = 0;
#if 0
assert_msg (0, "gc_loop: broken heart");
#endif
}
assert_msg (0, "broken heart");
if (t == TMACRO
|| t == TPAIR
|| t == TREF
@ -687,14 +570,9 @@ gc_ ()
gc_copy (s);
#if POINTER_CELLS
cell_arena = g_news - M2_CELL_SIZE; /* for debugging */
#if GC_TEST
cell_nil = save_gfree;
cell_zero = cell_nil - M2_CELL_SIZE;
g_symbol_max = g_free;
#else
cell_nil = save_gfree;
long save_gsymbols = g_symbols;
cell_nil = save_gfree;
g_symbols = 0;
@ -705,16 +583,13 @@ gc_ ()
#endif
#endif
#if !GC_TEST
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)
copy_stack (i, gc_copy (g_stack_array[i]));
#endif
gc_loop (cell_nil);
}