1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-23 18:57:14 +00:00
Bruce Mitchener b7e9529322
Begin to modernize optimized dispatch. (#271)
This feature was controlled by the compilation flag `OPDISP`
which would enable some bits of assembler on the x86 (ISC or DOS)
or some other specialized code on SPARC. On SPARC hardware, there
was a special compilation process that would preprocess the code
and generate dispatch tables.

We do this now when this feature is enabled using gcc's computed
gotos feature. This is available in clang and some other compilers.
Notably, it isn't present in Visual Studio.

This doesn't decrease our portability at all as this feature is
optional and it replaces specialized assembler code with C using
compiler extensions (making it cross-platform).

In doing this, we've removed a bunch of related code, however,
it is likely that other pieces yet remain and will be removed
in subsequent commits as we clean things up and refine them.

This feature remains disabled by default for now.
2021-01-22 12:28:16 -08:00

210 lines
9.3 KiB
Plaintext

#define CORRECT WRONG /* don't mind this text */
#define BELOW in the file makefile in this directory.
# You are editing the CORRECT file.
# Read more BELOW.
# /* When you make a compile target this file is run through
# cpp and redirected to a file called mkfile.
# the file mkfile is then used as the make file for the subtargets.
# This may seem convoluted but the win is quite big. /jarl */
# /* The following #ifdef ... #endif selection uses the
# symbols kexitnown to the local icc we use to transmogrify
# this file with. When you port to a new arch you should
# a) find the unique icc macros (sparc, mips, ibm etc.)
# b) add or edit this to the #ifdef selection below
# c) try it out by doing a make. */
# defDEBUG -g -m
#define DEBUG -O2
#define OEXT o
# remember -DNOEUROKBD
#ifdef _INTELC32_ /* The cpp macro for the DOS extender */
#define EXTRACFLAGS -DDOS -DBYTESWAP -DKBINT -DNOPIXRECT
#define EXTRALDFLAGS graphics.lib binmode.lib mouse.lib
AFLAGS = /T
COLORFILES = rawcolor.obj
ARCHFILES = dosmouse.obj doskbd.obj vesafns.obj vesainit.obj vgainit.obj kbdif.obj
#define EXTRAFILES
#define EXTRALDFLAGS
#undef OEXT
#define OEXT obj
#endif /* DOS */
#define XFLAGS
#define XLDFLAGS
ADMINFILES = mkdos mkvdate.c optck.c
ETHERFILES = ldeether.OEXT
CFLAGS = -I. XFLAGS EXTRACFLAGS DEBUG
LDFLAGS = DEBUG EXTRALDFLAGS XLDFLAGS
SRCFILES = $(SRCDIR)conspage.c $(SRCDIR)gcoflow.c $(SRCDIR)shift.c $(SRCDIR)dbgtool.c $(SRCDIR)gcr.c\
$(SRCDIR)llcolor.c $(SRCDIR)gcrcell.c $(SRCDIR)llstk.c $(SRCDIR)gcscan.c $(SRCDIR)loopsops.c\
$(SRCDIR)storage.c $(SRCDIR)allocmds.c $(SRCDIR)dir.c $(SRCDIR)gvar2.c $(SRCDIR)lowlev1.c\
$(SRCDIR)subr.c $(SRCDIR)arith2.c $(SRCDIR)lowlev2.c $(SRCDIR)subr0374.c \
$(SRCDIR)arith3.c $(SRCDIR)doscomm.c $(SRCDIR)hardrtn.c $(SRCDIR)lsthandl.c $(SRCDIR)sxhash.c \
$(SRCDIR)arith4.c $(SRCDIR)draw.c $(SRCDIR)main.c $(SRCDIR)testtool.c $(SRCDIR)array.c $(SRCDIR)dsk.c \
$(SRCDIR)inet.c $(SRCDIR)misc7.c $(SRCDIR)timer.c $(SRCDIR)array2.c $(SRCDIR)dspif.c $(SRCDIR)initdsp.c \
$(SRCDIR)miscn.c $(SRCDIR)typeof.c $(SRCDIR)array3.c $(SRCDIR)initkbd.c $(SRCDIR)ubf1.c \
$(SRCDIR)array4.c $(SRCDIR)dspsubrs.c $(SRCDIR)initsout.c $(SRCDIR)mkatom.c $(SRCDIR)ubf2.c \
$(SRCDIR)array5.c $(SRCDIR)eqf.c $(SRCDIR)intcall.c $(SRCDIR)mkcell.c $(SRCDIR)ubf3.c $(SRCDIR)array6.c \
$(SRCDIR)ether.c $(SRCDIR)mkvdate.c $(SRCDIR)ufn.c $(SRCDIR)atom.c $(SRCDIR)findkey.c \
$(SRCDIR)kbdsubrs.c $(SRCDIR)mouseif.c $(SRCDIR)ufs.c $(SRCDIR)bbtsub.c $(SRCDIR)foreign.c \
$(SRCDIR)keyevent.c $(SRCDIR)unixcomm.c $(SRCDIR)bin.c $(SRCDIR)fp.c $(SRCDIR)binds.c \
$(SRCDIR)asmbbt.c $(SRCDIR)fvar.c $(SRCDIR)mvs.c $(SRCDIR)unwind.c $(SRCDIR)bitblt.c $(SRCDIR)gc.c \
$(SRCDIR)uraid.c $(SRCDIR)blt.c $(SRCDIR)gc2.c $(SRCDIR)kprint.c \
$(SRCDIR)osmsg.c usrsubr.c $(SRCDIR)byteswap.c $(SRCDIR)gcarray.c \
$(SRCDIR)perrno.c $(SRCDIR)ldeboot.c $(SRCDIR)ldeether.c $(SRCDIR)uutils.c $(SRCDIR)carcdr.c $(SRCDIR)gccode.c \
$(SRCDIR)rawcolor.c $(SRCDIR)vars3.c $(SRCDIR)gcfinal.c $(SRCDIR)ldsout.c $(SRCDIR)return.c \
$(SRCDIR)vmemsave.c $(SRCDIR)chardev.c $(SRCDIR)gchtfind.c $(SRCDIR)lineblt8.c $(SRCDIR)rpc.c \
$(SRCDIR)xc.c $(SRCDIR)common.c $(SRCDIR)gcmain3.c $(SRCDIR)lisp2c.c $(SRCDIR)rplcons.c $(SRCDIR)z2.c \
$(SRCDIR)xmkicon.c $(SRCDIR)xbbt.c $(SRCDIR)xinit.c $(SRCDIR)xscroll.c $(SRCDIR)xcursor.c $(SRCDIR)xlspwin.c \
$(SRCDIR)xrdopt.c $(SRCDIR)xwinman.c \
$(SRCDIR)dosmouse.c $(SRCDIR)vesafns.asm $(SRCDIR)vesainit.c $(SRCDIR)vgainit.c $(SRCDIR)kbdif.c \
$(SRCDIR)dspsparc.il $(SRCDIR)copyright $(SRCDIR)launch.asm
OFILES = $(OBJECTDIR)conspage.OEXT $(OBJECTDIR)gcoflow.OEXT $(OBJECTDIR)shift.OEXT $(OBJECTDIR)dbgtool.OEXT \
$(OBJECTDIR)gcr.OEXT $(OBJECTDIR)llcolor.OEXT $(OBJECTDIR)gcrcell.OEXT $(OBJECTDIR)llstk.OEXT \
$(OBJECTDIR)gcscan.OEXT $(OBJECTDIR)loopsops.OEXT $(OBJECTDIR)storage.OEXT \
$(OBJECTDIR)allocmds.OEXT $(OBJECTDIR)dir.OEXT $(OBJECTDIR)gvar2.OEXT $(OBJECTDIR)lowlev1.OEXT \
$(OBJECTDIR)subr.OEXT $(OBJECTDIR)arith2.OEXT $(OBJECTDIR)lowlev2.OEXT \
$(OBJECTDIR)subr0374.OEXT $(OBJECTDIR)arith3.OEXT $(OBJECTDIR)doscomm.OEXT \
$(OBJECTDIR)hardrtn.OEXT $(OBJECTDIR)lsthandl.OEXT $(OBJECTDIR)sxhash.OEXT $(OBJECTDIR)arith4.OEXT \
$(OBJECTDIR)draw.OEXT $(OBJECTDIR)main.OEXT $(OBJECTDIR)testtool.OEXT $(OBJECTDIR)array.OEXT \
$(OBJECTDIR)dsk.OEXT $(OBJECTDIR)inet.OEXT $(OBJECTDIR)misc7.OEXT $(OBJECTDIR)timer.OEXT \
$(OBJECTDIR)array2.OEXT $(OBJECTDIR)dspif.OEXT $(OBJECTDIR)initdsp.OEXT $(OBJECTDIR)miscn.OEXT \
$(OBJECTDIR)typeof.OEXT $(OBJECTDIR)array3.OEXT $(OBJECTDIR)initkbd.OEXT $(OBJECTDIR)ubf1.OEXT \
$(OBJECTDIR)array4.OEXT $(OBJECTDIR)dspsubrs.OEXT $(OBJECTDIR)initsout.OEXT \
$(OBJECTDIR)mkatom.OEXT $(OBJECTDIR)ubf2.OEXT $(OBJECTDIR)array5.OEXT $(OBJECTDIR)eqf.OEXT \
$(OBJECTDIR)intcall.OEXT $(OBJECTDIR)mkcell.OEXT $(OBJECTDIR)ubf3.OEXT $(OBJECTDIR)array6.OEXT \
$(OBJECTDIR)ether.OEXT $(OBJECTDIR)ufn.OEXT $(OBJECTDIR)atom.OEXT \
$(OBJECTDIR)findkey.OEXT $(OBJECTDIR)kbdsubrs.OEXT $(OBJECTDIR)mouseif.OEXT $(OBJECTDIR)ufs.OEXT \
$(OBJECTDIR)bbtsub.OEXT $(OBJECTDIR)foreign.OEXT $(OBJECTDIR)keyevent.OEXT \
$(OBJECTDIR)unixcomm.OEXT $(OBJECTDIR)bin.OEXT $(OBJECTDIR)fp.OEXT \
$(OBJECTDIR)binds.OEXT $(OBJECTDIR)fvar.OEXT $(OBJECTDIR)mvs.OEXT \
$(OBJECTDIR)unwind.OEXT $(OBJECTDIR)bitblt.OEXT $(OBJECTDIR)gc.OEXT \
$(OBJECTDIR)uraid.OEXT $(OBJECTDIR)blt.OEXT $(OBJECTDIR)gc2.OEXT \
$(OBJECTDIR)kprint.OEXT $(OBJECTDIR)osmsg.OEXT $(OBJECTDIR)usrsubr.OEXT $(OBJECTDIR)byteswap.OEXT \
$(OBJECTDIR)gcarray.OEXT $(OBJECTDIR)perrno.OEXT $(OBJECTDIR)uutils.OEXT \
$(OBJECTDIR)carcdr.OEXT $(OBJECTDIR)asmbbt.OEXT $(OBJECTDIR)gccode.OEXT \
$(OBJECTDIR)vars3.OEXT $(OBJECTDIR)gcfinal.OEXT $(OBJECTDIR)ldsout.OEXT \
$(OBJECTDIR)return.OEXT $(OBJECTDIR)vmemsave.OEXT $(OBJECTDIR)chardev.OEXT \
$(OBJECTDIR)gchtfind.OEXT $(OBJECTDIR)lineblt8.OEXT $(OBJECTDIR)rpc.OEXT $(OBJECTDIR)xc.OEXT \
$(OBJECTDIR)common.OEXT $(OBJECTDIR)gcmain3.OEXT $(OBJECTDIR)lisp2c.OEXT $(OBJECTDIR)rplcons.OEXT \
$(OBJECTDIR)z2.OEXT $(OBJECTDIR) $(OBJECTDIR)vdate.OEXT $(COLORFILES) $(ARCHFILES) EXTRAFILES
HFILES = $(INCDIR)address.h $(INCDIR)adr68k.h $(INCDIR)arith.h $(INCDIR)cell.h $(INCDIR)dbprint.h $(INCDIR)display.h \
$(INCDIR)dspif.h $(INCDIR)ifpage.h $(INCDIR)iopage.h $(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)lsptypes.h $(INCDIR)miscstat.h $(INCDIR)lspglob.h $(INCDIR)array.h $(INCDIR)bb.h \
$(INCDIR)bitblt.h $(INCDIR)debug.h $(INCDIR)devconf.h $(INCDIR)dspdata.h $(INCDIR)ether.h \
$(INCDIR)fast_dsp.h $(INCDIR)gcdata.h $(INCDIR)hdw_conf.h $(INCDIR)initatms.h $(INCDIR)inlinec.h $(INCDIR)keyboard.h \
$(INCDIR)lispver1.h $(INCDIR)lispver2.h $(INCDIR)lldsp.h $(INCDIR)locfile.h $(INCIDR)medleyfp.h $(INCDIR)mouseif.h $(INCDIR)my.h \
$(INCDIR)opcodes.h $(INCDIR)osmsg.h $(INCDIR)pilotbbt.h $(INCDIR)print.h $(INCDIR)profile.h \
$(INCDIR)return.h $(INCDIR)stack.h $(INCDIR)stream.h $(INCDIR)subrs.h $(INCDIR)timeout.h \
$(INCDIR)tos1defs.h $(INCDIR)tosfns.h $(INCDIR)tosret.h $(INCDIR)vmemsave.h \
$(INCDIR)xdefs.h $(INCDIR)xbitmaps.h $(INCDIR)xkeymap.h
##############################
### Entry rules ###
############### ###
### make only one of these ###
### four rules on the ###
### commandline ###
##############################
all : x raw color
x : xmkfile
$(MAKE) -f xmkfile $(MFLAGS) ldex
raw : mkfile
$(MAKE) -f mkfile $(MFLAGS) lde
color : mkfile
$(MAKE) -f mkfile $(MFLAGS) lde
dos4 :
$(MAKE) -f ./mkfile $(MFLAGS) dosmkfil
$(MAKE) -f ./dosmkfile $(MFLAGS) medley.exe
$(MAKE) -f ./dosmkfile $(MFLAGS) emul.exe
###############################
### Compile rules ###
################# ###
### Don't touch these. The ###
### following rules are ###
### used by the entry rules ###
###############################
xmkfile : mkfile
$(CC) -E -DX mkfile > xmkfile
dosmkfil : mkfile
-copy mkfile mkfile.c
-$(CC) /P /c mkfile.c 2> junk
-copy mkfile.i dosmkfil
emul.exe : $(OFILES)
@ echo $** > linkopts
@ echo $(CFLAGS) > copts
$(CC) @copts @linkopts $(LDFLAGS) /e$@
del linkopts
del copts
@ echo "Executable is now named '$@'"
ldex : $(OFILES) mkvdate
$(RM) vdate.c
mkvdate > vdate.c
- cd ARCH;$(MAKE) $(MFLAGS) all #/* Make the specific files for this target */
$(CC) $(OFILES) -o $@ $(LDFLAGS)
lde : $(OFILES) mkvdate
$(RM) vdate.c
mkvdate > vdate.c
- cd ARCH;$(MAKE) $(MFLAGS) all #/* Make the specific files for this target */
$(CC) $(LDFLAGS) $(OFILES) -o $@
##################
### File rules ###
##################
main.o : lispemul.h address.h lsptypes.h adr68k.h stack.h lspglob.h lispmap.h ifpage.h iopage.h return.h debug.h profile.h
######################################
### Architecture specific targets ###
### ###
### replaces the cruft in the ###
### makefile-<OS>.<ARCH> ###
######################################
#ifdef _INTELC32_ /* The cpp macro for the DOS extender */
.SUFFIXES .exe .lib .c .obj .c .asm .s .c
medley.exe: launch.obj
TLINK launch,medley
launch.obj: launch.asm
xc.obj: xc.s
tasm /ml xc.s
xc.s: xc.c
rsh sparky (cd /users/nilsson/curr ; gcc-make $* )
#endif