Split compiled entries and compiled return addresses.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 28 Dec 2018 20:51:02 +0000 (20:51 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 13 Aug 2019 14:37:02 +0000 (14:37 +0000)
commit876b77d1f9c4e71256cf9dba8f2b70423a2052c5
tree464f1547f797e5b781d20a46f074fbf51bb637cf
parent67adeda088f018ba07ad79e0b875a12d516c4623
Split compiled entries and compiled return addresses.

Reallocate tag 4 for return addresses.

This way, a compiled entry can be a pointer to a PC offsets so that
we can construct closures without dynamically generating code and
wrecking the instruction cache, while a compiled return addresses can
be a pointer to a PC, since we never dynamically create indirections
for returns.

For now, the runtime can handle both tags for return addresses.

XXX Only done and tested on x86-64 for now.  Other architectures need
to be tested.  Might be worthwhile to do this on i386 too, if anyone
still cares about i386.

WARNING: This changes the compiled code interface on all
architectures, so you'll have to build a new compiler running on an
old microcode and use that to compile a new system afresh.
32 files changed:
src/compiler/base/asstop.scm
src/compiler/base/utils.scm
src/compiler/machines/x86-64/lapgen.scm
src/compiler/machines/x86-64/rules1.scm
src/compiler/machines/x86-64/rules3.scm
src/compiler/rtlbase/rtlcon.scm
src/microcode/cmpauxmd/i386.m4
src/microcode/cmpauxmd/x86-64.m4
src/microcode/cmpint.c
src/microcode/cmpint.h
src/microcode/cmpintmd/c.c
src/microcode/cmpintmd/c.h
src/microcode/cmpintmd/i386.c
src/microcode/cmpintmd/i386.h
src/microcode/cmpintmd/svm1.c
src/microcode/cmpintmd/svm1.h
src/microcode/cmpintmd/x86-64.c
src/microcode/cmpintmd/x86-64.h
src/microcode/comutl.c
src/microcode/debug.c
src/microcode/gc.h
src/microcode/gccode.h
src/microcode/gcloop.c
src/microcode/hooks.c
src/microcode/svm1-interp.c
src/microcode/typename.txt
src/microcode/types.h
src/microcode/utils.c
src/runtime/global.scm
src/runtime/microcode-data.scm
src/runtime/predicate-tagging.scm
src/runtime/printer.scm