home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / lisp / Notes.tahoe < prev    next >
Encoding:
Text File  |  1987-01-13  |  7.4 KB  |  167 lines

  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.  
  167.