This system (with or without the change) requires all addresses that
are tagged to be word-aligned, which expands the address space by a
factor of four on 32-bit systems, but means we can't tag pointers to
unaligned instruction addresses.
This means that i386 compiled code won't be able to take advantage of
membase, but it can't anyway without changes to the compiler, which
doesn't know about membase as is.
However, this _also_ means that multiclosures in SVM won't work
because only the first entry (and every four or eight entries) is
guaranteed to be word-aligned. We could address this by aligning the
entries, and maybe remove the ENTER-CLOSURE instruction overhead by
using indirection for entries like riastradh-
20181220-closentry-v3
does for amd64.
(Don't want to change CC_ENTRY_NEW_ADDRESS or anything because
there's an outstanding branch that changes them already for other
reasons.)
#endif
#ifndef ADDRESS_TO_DATUM
-# define ADDRESS_TO_DATUM(address) ((SCHEME_OBJECT) ((address) - MEMBASE))
+# define ADDRESS_TO_DATUM(address) \
+ ((SCHEME_OBJECT) (((SCHEME_OBJECT *) (address)) - MEMBASE))
#endif
#endif /* not HEAP_IN_LOW_MEMORY */