Commit | Line | Data |
---|---|---|
b3f33e78 C |
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 |