Annotation of 43BSDTahoe/ucb/lisp/Notes.tahoe, revision 1.1

1.1     ! root        1: The following was a change log of the CCI "tahoe" porting.
        !             2: 
        !             3: 
        !             4: 04/27 Rewrote fixmask.c to properly preserve r6 and r7. This method used should
        !             5: have been used for the Vax; as it was, one had to count the number of register
        !             6: variables declared in a function, and fixmask rebuilt the savemask from
        !             7: scratch. This was a little bit kludgey; the new version simply OR's in
        !             8: the two registers into the mask.
        !             9: 
        !            10: 04/29 Replaced assembly version of exarith() with exarith.c from the 68k port,
        !            11: with the call to emul() replaced my an asm(). Still slower than original vax.
        !            12: 
        !            13: 05/02 Repaired fixpbig.e, the sed(1) script that replaces certain function
        !            14: calls with inline code and fast subroutine calls (the vax "jsb"), as well
        !            15: as changing all references to "np" and "lbot" to r6 and r7. The fast calls
        !            16: are gone, because the tahoe isn't capable of such things. The rest were
        !            17: changed to reflect different calling strategies.
        !            18: 
        !            19: 08/29 Added an "#ifdef tahoe" to alloc.c which uses the original "ftstbit"
        !            20: and "setbit" macros included in the source. The vax version uses asm()'s,
        !            21: but I don't know the instruction set of the tahoe well enough to improve
        !            22: on the macros' code.
        !            23: 
        !            24: 09/04-09/08  Replaced more functions from bigmath.c with C versions from the
        !            25: 68k port. ediv() and emul() calls were replaced with more asm's. Others were
        !            26: moved into their own source files and used as they were.
        !            27: 
        !            28: 09/10 Replaced Pushframe() and Iretfromfr(). The original Pushframe depended
        !            29: on being called by a jsb. The new version makes the best of what it can
        !            30: get from the standard call frame, and changes it around to match what's needed
        !            31: (as specified in frame.h). Iretfromfr() was moved from frame.c, and had
        !            32: asm's added to replace the qfunction it called. This basically just undoes
        !            33: Pushframe().
        !            34: 
        !            35: 09/10 GOT RAWLISP RUNNING! Version as of this afternoon would print a banner
        !            36: and allow one to eval a few S-expressions. Problems seem to include: stringing
        !            37: back through the stack frames, ediv reserved opperands, who knows what else.
        !            38: 
        !            39: 09/18 Ediv requires that all of its arguments be registers. (Except for the
        !            40: divisor, I think.) Very poorly documented. (as(1) doesn't compain. adb(1)
        !            41: disassembles it properly. The architecture manual gives no indication of this.)
        !            42: Now one can type numbers into the reader without getting a core dump, and
        !            43: even do simple fixnum arithmetic.
        !            44: 
        !            45: 09/18 Due to a typo Iretfromfr() was putting the old value of fp into r12
        !            46: and not restoring fp at all. I don't yet know what problems this was causing.
        !            47: 
        !            48: 09/18 /lib/c2 is optimizing away the "fixpbig.e" substitution of
        !            49: calls to sp() ==> "movl sp,d0". Since "sp" is not a valid second
        !            50: argument to subl3 (again no assembler complaints), another illegal instruction
        !            51: core dump occurrs. Fixed by replacing "movl sp,d0" with "moval (sp),d0".
        !            52: 
        !            53: 09/18 I can't figure out WHAT ediv's opperands are allowed to be. I'll
        !            54: just fix those asm()'s until everyting works.
        !            55: 
        !            56: 09/18 Bignum division problems:
        !            57: ;; On a vax:
        !            58: Franz Lisp, Opus 38.79
        !            59: -> (quotient 999999999999 25)
        !            60: 39999999999
        !            61: -> 
        !            62: ;; On the tahoe:
        !            63: Franz Lisp, Opus 38
        !            64: -> (quotient 999999999999 25)
        !            65: 198085033769738295431766579
        !            66: -> 
        !            67: 
        !            68: 09/18 /lib/c2 was optimizing away another set of asm() constructs - in
        !            69: this case the setting of r0 to the error frame location. "retfrom.s" is
        !            70: the new, replaced version of Iretfromfr().
        !            71: 
        !            72: 09/23 the ER% variables are not being correctly set to nil.
        !            73: Cf. "sysat.c". Created raw.l to setq them, and discovered in
        !            74: the process that semicolon hasn't got its readmacro properties
        !            75: set up right. Flonums don't print correctly (always as ".0")
        !            76: but seem to be capable of being added and comparred correctly.
        !            77: 
        !            78: 09/24 Went through lots of code and found that the ER% variables
        !            79: ARE being set correctly. The garbage collector, however, seems to be
        !            80: trying to trash them and return them to the freelist, therefore their
        !            81: value cells are being turned into freelist pointers. Removing the sweep
        !            82: phase from gc1() seems to remove both this problem and the spontaneous
        !            83: readtable disappearance. The 'ftstbit' and 'setbit' macros are suspected
        !            84: as being the culprits.
        !            85: 
        !            86: 09/24 Still suspecting something about the marking phase of gc1(). The
        !            87: dumps looked awfully suspicious.
        !            88: 
        !            89: 09/25 The marking phase, and in particular the bitset macros, were probably
        !            90: indeed at fault. The macros used the ordinary Motorola-type non-reversed
        !            91: byte order, while the code that read the bitmaps had been rewritten since
        !            92: they had, and used the Vax reversed byte order. Rewrote the macros to
        !            93: no longer use bytes.
        !            94: 
        !            95: 09/25 Created "snlisp", the totally interpreted version of Franz. Works
        !            96: fine except for the previously known bignum division bug and for cfasl'd
        !            97: functions.
        !            98: 
        !            99: 09/26 Fixed cfasl'd function error. callg_() was pushing its arglist
        !           100: onto the stack in reverse order.
        !           101: 
        !           102: 09/30 Reworked int:showstack, and added it to snlisp. A real mess (even
        !           103: worse than it was before for the vax).
        !           104: 
        !           105: 09/30 Fixed the bignum division bug. In mlsb() a function call was incorrectly
        !           106: translated into an asm("ediv..."). This is the last known Franz bug as
        !           107: of now.
        !           108: 
        !           109: 10/23 RCS'd Liszt, and conditionalized it for the tahoe. Should work
        !           110: identically as before, as a VAX cross-compiler. As a tahoe native compiler,
        !           111: it still needs some work.
        !           112: 
        !           113: 11/08 Discovered that a problem with Liszt was that fixnum subtractions were
        !           114: not being done properly due to a ***SEVERELY BRAIN DAMAGED BROKEN EMUL
        !           115: INSTRUCTION***. Turned faulty emul instructions into calls to emul()
        !           116: which replaces the sign-extend-and-add functionality of the emul instruction
        !           117: with a manual 64-bit add. Bignum divisions resulting in a negative number
        !           118: were broken too.
        !           119: 
        !           120: 11/10 Changed predecrement and postincrement modes in the compiler to make
        !           121: up for the lack of same in the Tahoe instruction set.
        !           122: 
        !           123: 11/13 ** Found that the emul instruction problem was present only in the old
        !           124: WCS**. When the machine was rebooted this afternoon the problem went away.
        !           125: Calls to emul() will be turned back into asm's.
        !           126: 
        !           127: 11/14 Changed Lfasl() so that relocation of addresses works when an address
        !           128: is not longword aligned. Also cleaned up the indentation.
        !           129: 
        !           130: 11/16 Fixed Liszt and changed qlinker() to change the method of function
        !           131: linkage, again because of alignment problems.
        !           132: 
        !           133: 11/18 General repairs to fasl.c, and fixed a stupid quotemark typo (on my
        !           134: part) in Liszt. Tried to port /usr/lib/lisp/autorun/tahoe.
        !           135: 
        !           136: 12/5 Made various changes to liszt. Output works mostly most of the time,
        !           137: but some things (read: nliszt) dump core.
        !           138: 
        !           139: 12/8 Fixed liszt and qfuncl.c to remove shal instrucitons with negative
        !           140: arguments, since these indescriminately mess up their opperands somehow.
        !           141: Also changed subl2 in /usr/lib/lisp/autorun/tahoe with destination
        !           142: sp, because subl2 doesn't seem to work on r14. r14 doesn't work as a source
        !           143: opperand to movl either. Beats me why, I just fix 'em 'till they work.
        !           144: 
        !           145: 12/11 Looking for a bug which causes nliszt to bomb on any functions with
        !           146: more than one argument.
        !           147: 
        !           148: 12/13 Above bug was caused by yet another missed postincrement instance.
        !           149: Moved the postincrement handling around. Also ported code to handle &form
        !           150: variable arguments.
        !           151: 
        !           152: 12/14 Repaired code for (\\ x y)... compiled output did an ashq and an ediv
        !           153: on an odd register.
        !           154: 
        !           155: 12/16 Fixed a missed register save mask in one of the qfuncls. Added a missed
        !           156: ".align" to the code that handles &forms. 
        !           157: 
        !           158: 12/17 Added r12 to qlinker's save mask. Added register mask for local functions
        !           159: since they are now being called with calls's.
        !           160: 
        !           161: 12/18 Added register save masks to local functions.
        !           162: 
        !           163: 01/12 The _tynames table didn't have a necessary ".align 2" before it. This
        !           164: was messing up compiled functions that called typep (causing align faults).
        !           165: 
        !           166: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.