locals: cosmetix
[urforth.git] / level0 / TODO
bloba90dbd4e7a669901b9bddaec54d7a1675d3d3781
1   [*] DP=TEMP, which can be used instead of DP
3   [.] replace "ERROR" with "THROW", and setup either high-level CATCH, or
4       make "THROW" to do what "ERROR" does now if there is no exception frame
6   [.] vectorize (CREATE) and other low-level word creation words,
7       so they can be changed for metacompiler.
8       (CREATE)
9       (CREATE-PATCH-SIZE)
10       VOCABULARY
12       LATEST-NFA
13       LATEST
14       and others in "urforth0_w_wordlist.asm"
16       if we will ever change the word header format/vocabulary layout, more words
17       should be changed, i guess
19       switch (VOC-LINK) in metacompiling mode
21   [*] add "OVERRIDE" word to override Forth words. it should work like this:
22         : newname  ( ... old-xtoken )
23           check-some-condition if
24             OVERRIDE-EXECUTE
25           else
26             drop
27           endif
28         ;
29         OVERRIDE oldname newname
30        or
31         ' oldname ' newname (OVERRIDE)
32       i.e. new word gets some execution token for the previous word, which can be
33       called with OVERRIDE-EXECUTE (note that simple EXECUTE will not work!)
35       this can be used to override necessary words in metacompiler
37   [.] MARKER ( -- )  \ name
38       creater word-marker with the current state of vocabularies and search
39       order (as it was before creating a marekr).
40       on execution, this word will restore everything (effectively kills itself).
42   [*] U>D, D>S, D>U, C>S, C>U, S>C, U>C
43   [*] ROL, ROR -- named LROTATE and RROTATE
44   [*] SHL -> LSHIFT, SHR -> RSHIFT
45   [*] SAR -> ARSHIFT
46   [.] RALLOT
47   [.] port spf_floatkern.f
48   [*] PICK, ROLL
49   [*] use CDQ in div and mod
50   [*] SM/REM FM/MOD
51   [?] locals support
52   [.] extra return stack words
53     CODE DRMOVE ( x1 ... xn n*4 -- )
54     \ ÐÅÒÅÎÅÓÔÉ n ÞÉÓÅÌ ÓÏ ÓÔÅËÁ ÄÁÎÎÙÈ ÎÁ ÓÔÅË ×ÏÚ×ÒÁÔÏ×
55          POP  EDX \ ÁÄÒÅÓ ×ÏÚ×ÒÁÔÁ
56          MOV  ESI, EAX
57     @@1:
58          PUSH -4 [EBP] [ESI]
59          SUB  ESI, # 4
60          JNZ  SHORT @@1
61          ADD  EBP, EAX
62          MOV  EAX, [EBP]
63          LEA  EBP, 4 [EBP]
64          JMP  EDX
65     END-CODE
67     CODE NR> ( R: x1 ... xn n -- D: x1 ... xn n )
68     \ ðÅÒÅÎÅÓÔÉ n ÞÉÓÅÌ ÓÏ ÓÔÅËÁ ×ÏÚ×ÒÁÔÏ× ÎÁ ÓÔÅË ÄÁÎÎÙÈ
69     \ åÓÌÉ n=0 ×ÏÚ×ÒÁÔÉÔØ 0
70          POP  EDX \ ÁÄÒÅÓ ×ÏÚ×ÒÁÔÁ
71          LEA  EBP, -4 [EBP]
72          MOV  [EBP], EAX
73          POP  EAX
74          OR   EAX, EAX
75          JNZ  @@2
76          JMP  EDX
78     @@2: LEA  EAX, [EAX*4]
79          MOV  ESI, EAX
80     @@1:
81          MOV  EBX, EBP
82          SUB  EBX, ESI
83          POP  [EBX]
84          SUB  ESI, # 4
85          JNZ  SHORT @@1
86          SUB  EBP, EAX
87          SAR  EAX, # 2
88          JMP  EDX
89     END-CODE
91     CODE N>R ( D: x1 ... xn n -- R: x1 ... xn n )
92     \ ÐÅÒÅÎÅÓÔÉ n ÞÉÓÅÌ ÓÏ ÓÔÅËÁ ÄÁÎÎÙÈ ÎÁ ÓÔÅË ×ÏÚ×ÒÁÔÏ×
93          LEA  EBP, -4 [EBP]
94          MOV  [EBP], EAX
95          LEA EAX, 4 [EAX*4]
97          POP  EDX \ ÁÄÒÅÓ ×ÏÚ×ÒÁÔÁ
98          MOV  ESI, EAX
99     @@1:
100          PUSH -4 [EBP] [ESI]
101          SUB  ESI, # 4
102          JNZ  SHORT @@1
103          ADD  EBP, EAX
104          MOV  EAX, [EBP]
105          LEA  EBP, 4 [EBP]
106          JMP  EDX
107     END-CODE
109     CODE NRCOPY ( D: i*x i -- D: i*x i R: i*x i )
110     \ ÓËÏÐÉÒÏ×ÁÔØ n ÞÉÓÅÌ ÓÏ ÓÔÅËÁ ÄÁÎÎÙÈ ÎÁ ÓÔÅË ×ÏÚ×ÒÁÔÏ×
111          MOV  ECX, EAX
112          LEA  ECX, [ECX*4]
114          POP  EDX \ ÁÄÒÅÓ ×ÏÚ×ÒÁÔÁ
115          JECXZ @@2
116          MOV  ESI, ECX
117     @@1:
118          PUSH -4 [ESI] [EBP]
119          SUB  ESI, # 4
120          JNZ  SHORT @@1
121     @@2:
122          PUSH EAX
123          JMP  EDX
124     END-CODE
126     CODE RP+@ ( offs -- x )
127     \ ×ÚÑÔØ ÞÉÓÌÏ ÓÏ ÓÍÅÝÅÎÉÅÍ offs ÂÁÊÔ ÏÔ ×ÅÒÛÉÎÙ ÓÔÅËÁ ×ÏÚ×ÒÁÔÏ× (0 RP+@ == RP@ @)
128          8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP] [EAX]
129          RET
130     END-CODE
132     CODE RP+ ( offs -- addr )
133     \ ×ÚÑÔØ ÁÄÒÅÓ ÓÏ ÓÍÅÝÅÎÉÅÍ offs ÂÁÊÔ ÏÔ ×ÅÒÛÉÎÙ ÓÔÅËÁ ×ÏÚ×ÒÁÔÏ×
134          8D C, 44 C, 04 C, 04 C, \  LEA EAX, 4 [ESP] [EAX]
135          RET
136     END-CODE
138     CODE RP+! ( x offs -- )
139     \ ÚÁÐÉÓÁÔØ ÞÉÓÌÏ x ÐÏ ÓÍÅÝÅÎÉÀ offs ÂÁÊÔ ÏÔ ×ÅÒÛÉÎÙ ÓÔÅËÁ ×ÏÚ×ÒÁÔÏ×
140          MOV  EBX, [EBP] A;
141          89 C, 5C C, 04 C, 04 C, \   MOV  4 [ESP] [EAX], EBX
142          LEA  EBP, 8 [EBP]
143          MOV  EAX, -4 [EBP]
144          RET
145     END-CODE
147     CODE RALLOT ( n -- addr )
148     \ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ n ÑÞÅÅË ÎÁ ÓÔÅËÅ ×ÏÚ×ÒÁÔÏ×,
149     \ ÓÄÅÌÁÅÍ Ó ÉÎÉÃÉÁÌÉÚÁÃÉÅÊ (Á ÔÏ ÅÓÌÉ ÂÏÌØÛÅ 8ë ×ÙÄÅÌÉÍ, exception ÍÏÖÅÔ)
150          POP  EDX
151          MOV  ECX, EAX
152          XOR  EAX, EAX
153     @@1: PUSH EAX
154          DEC  ECX
155          JNZ  SHORT @@1
156          MOV  EAX, ESP
157          JMP  EDX
158     END-CODE
160     CODE (RALLOT) ( n -- )
161     \ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ n ÑÞÅÅË ÎÁ ÓÔÅËÅ ×ÏÚ×ÒÁÔÏ×
162          POP  EDX
163          MOV  ECX, EAX
164          XOR  EAX, EAX
165     @@1: PUSH EAX
166          DEC  ECX
167          JNZ  SHORT @@1
168          MOV  EAX, [EBP]
169          LEA  EBP, 4 [EBP]
170          JMP  EDX
171     END-CODE
173     CODE RFREE ( n -- )
174     \ ×ÅÒÎÕÔØ n ÑÞÅÅË ÓÔÅËÁ ×ÏÚ×ÒÁÔÏ×
175          POP  EDX
176          LEA  ESP, [ESP] [EAX*4]
177          MOV EAX, [EBP]
178          LEA EBP, 4 [EBP]
179          JMP  EDX
180     END-CODE
182     CODE (LocalsExit) ( -- )
183     \ ×ÅÒÎÕÔØ ÐÁÍÑÔØ × ÓÔÅË ×Ï×ÒÁÔÏ×, ÞÉÓÌÏ ÂÁÊÔ ÌÅÖÉÔ ÎÁ ÓÔÅËÅ
184          POP  EBX
185          ADD  ESP, EBX
186          RET
187     END-CODE