Convert to SCHEME_OBJECT * first before subtracting membase.
authorTaylor R Campbell <campbell@mumble.net>
Tue, 8 Jan 2019 16:40:11 +0000 (16:40 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 9 Jan 2019 03:53:03 +0000 (03:53 +0000)
commitfdb53626fe074b3eb65ece02905808046e3bc37c
treece3a915ee3cc9446938ce2f94fe134b18899318e
parent0e6c9f3b0f4b91a2cfd5c03f365339eed9ebdf01
Convert to SCHEME_OBJECT * first before subtracting membase.

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.)
src/microcode/object.h