From 5985d962f23749f552f348cb8cac16a57890f648 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 24 Oct 2019 21:56:49 +0200 Subject: [PATCH] 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. --- src/gc.c | 30 +++++++++++++++--------------- src/hash.c | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/gc.c b/src/gc.c index 80bdc881..3f0d47da 100644 --- a/src/gc.c +++ b/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; diff --git a/src/hash.c b/src/hash.c index 052711b7..c7f95095 100644 --- a/src/hash.c +++ b/src/hash.c @@ -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;