Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / mimc / bitsgen.mima
1
2 <PACKAGE "BITSGEN">
3
4 <ENTRY BITLOG-GEN FGETBITS-GEN FPUTBITS-GEN>
5
6 <USE "COMPDEC" "CODGEN" "CHKDCL" "MIMGEN">
7
8 #WORD *36346502155*
9                     <GFCN \1aFGETBITS-GEN ("VALUE" ANY NODE ANY) N4 W5>
10                     <TEMP K6 REG7 TEMP12 S8>
11                     <INTGO>
12                     <NTHUV N4 5 = K6 (TYPE LIST)>
13                     <DEAD N4>
14                     <FRAME '\1aGEN>
15                     <NTHL K6 1 = STACK (TYPE NODE)>
16                     <CALL '\1aGEN 1 = REG7>
17                     <FRAME '\1aGEN>
18                     <RESTL K6 1 = TEMP12 (TYPE LIST)>
19                     <NTHL TEMP12 1 = STACK (TYPE NODE)>
20                     <DEAD TEMP12>
21                     <CALL '\1aGEN 1 = S8>
22                     <FRAME '\1aFREE-TEMP>
23                     <FRAME '\1aGEN>
24                     <RESTL K6 1 = TEMP12 (TYPE LIST)>
25                     <DEAD K6>
26                     <RESTL TEMP12 1 = TEMP12 (TYPE LIST)>
27                     <NTHL TEMP12 1 = STACK (TYPE NODE)>
28                     <DEAD TEMP12>
29                     <CALL '\1aGEN 1 = TEMP12>
30                     <PUSH TEMP12>
31                     <PUSH %<>>
32                     <CALL '\1aFREE-TEMP 2>
33                     <FRAME '\1aFREE-TEMP>
34                     <PUSH S8>
35                     <PUSH %<>>
36                     <CALL '\1aFREE-TEMP 2>
37                     <FRAME '\1aIEMIT>
38                     <PUSH '`GETBITS>
39                     <PUSH REG7>
40                     <PUSH S8>
41                     <DEAD S8>
42                     <PUSH TEMP12>
43                     <DEAD TEMP12>
44                     <PUSH '=>
45                     <EQUAL? W5 'DONT-CARE + PHRASE18>
46                     <FRAME '\1aFREE-TEMP>
47                     <PUSH REG7>
48                     <DEAD REG7>
49                     <PUSH %<>>
50                     <CALL '\1aFREE-TEMP 2>
51                     <TYPE? W5 <TYPE-CODE TEMP> - PHRASE21>
52                     <FRAME '\1aUSE-TEMP>
53                     <PUSH W5>
54                     <PUSH 'FIX>
55                     <CALL '\1aUSE-TEMP 2>
56 PHRASE21
57                     <SET TEMP12 W5>
58                     <JUMP + PHRASE28>
59 PHRASE18
60                     <TYPE? REG7 <TYPE-CODE TEMP> - PHRASE23>
61                     <NTHUV REG7 2 = K6 (TYPE FIX)>
62                     <GRTR? K6 1 + PHRASE23 (TYPE FIX)>
63                     <DEAD K6>
64                     <SET W5 REG7>
65                     <DEAD REG7>
66                     <SET TEMP12 W5>
67                     <JUMP + PHRASE28>
68 PHRASE23
69                     <FRAME '\1aFREE-TEMP>
70                     <PUSH REG7>
71                     <DEAD REG7>
72                     <PUSH %<>>
73                     <CALL '\1aFREE-TEMP 2>
74                     <FRAME '\1aGEN-TEMP>
75                     <CALL '\1aGEN-TEMP 0 = W5>
76                     <SET TEMP12 W5>
77 PHRASE28
78                     <PUSH TEMP12>
79                     <DEAD TEMP12>
80                     <CALL '\1aIEMIT 6>
81                     <RETURN W5>
82                     <DEAD W5>
83                     <END \1aFGETBITS-GEN>
84
85 #WORD *13550250565*
86                     <GFCN \1aFPUTBITS-GEN ("VALUE" ANY NODE ANY) N4 W5>
87                     <TEMP K6:LIST TY11 REG7 TEMP15 S8 WI9>
88                     <INTGO>
89                     <NTHUV N4 5 = K6 (TYPE LIST)>
90                     <FRAME '\1aISTYPE?>
91                     <NTHUV N4 3 = STACK>
92                     <DEAD N4>
93                     <CALL '\1aISTYPE? 1 = TY11>
94                     <FRAME '\1aGEN>
95                     <NTHL K6 1 = STACK (TYPE NODE)>
96                     <CALL '\1aGEN 1 = REG7>
97                     <FRAME '\1aGEN>
98                     <RESTL K6 1 = TEMP15 (TYPE LIST)>
99                     <NTHL TEMP15 1 = STACK (TYPE NODE)>
100                     <DEAD TEMP15>
101                     <CALL '\1aGEN 1 = S8>
102                     <FRAME '\1aGEN>
103                     <RESTL K6 1 = TEMP15 (TYPE LIST)>
104                     <RESTL TEMP15 1 = TEMP15 (TYPE LIST)>
105                     <NTHL TEMP15 1 = STACK (TYPE NODE)>
106                     <DEAD TEMP15>
107                     <CALL '\1aGEN 1 = WI9>
108                     <FRAME '\1aFREE-TEMP>
109                     <FRAME '\1aGEN>
110                     <RESTL K6 1 = TEMP15 (TYPE LIST)>
111                     <DEAD K6>
112                     <RESTL TEMP15 1 = TEMP15 (TYPE LIST)>
113                     <RESTL TEMP15 1 = TEMP15 (TYPE LIST)>
114                     <NTHL TEMP15 1 = STACK (TYPE NODE)>
115                     <DEAD TEMP15>
116                     <CALL '\1aGEN 1 = TEMP15>
117                     <PUSH TEMP15>
118                     <PUSH %<>>
119                     <CALL '\1aFREE-TEMP 2>
120                     <FRAME '\1aFREE-TEMP>
121                     <PUSH S8>
122                     <PUSH %<>>
123                     <CALL '\1aFREE-TEMP 2>
124                     <FRAME '\1aFREE-TEMP>
125                     <PUSH WI9>
126                     <PUSH %<>>
127                     <CALL '\1aFREE-TEMP 2>
128                     <FRAME '\1aIEMIT>
129                     <PUSH '`PUTBITS>
130                     <PUSH REG7>
131                     <PUSH S8>
132                     <DEAD S8>
133                     <PUSH WI9>
134                     <DEAD WI9>
135                     <PUSH TEMP15>
136                     <DEAD TEMP15>
137                     <PUSH '=>
138                     <EQUAL? W5 'DONT-CARE + PHRASE23>
139                     <FRAME '\1aFREE-TEMP>
140                     <PUSH REG7>
141                     <DEAD REG7>
142                     <PUSH %<>>
143                     <CALL '\1aFREE-TEMP 2>
144                     <TYPE? W5 <TYPE-CODE TEMP> - PHRASE26>
145                     <FRAME '\1aUSE-TEMP>
146                     <PUSH W5>
147                     <PUSH TY11>
148                     <DEAD TY11>
149                     <CALL '\1aUSE-TEMP 2>
150 PHRASE26
151                     <SET TEMP15 W5>
152                     <JUMP + PHRASE33>
153 PHRASE23
154                     <TYPE? REG7 <TYPE-CODE TEMP> - PHRASE28>
155                     <NTHUV REG7 2 = TEMP15 (TYPE FIX)>
156                     <GRTR? TEMP15 1 + PHRASE28 (TYPE FIX)>
157                     <DEAD TEMP15>
158                     <SET W5 REG7>
159                     <DEAD REG7>
160                     <SET TEMP15 W5>
161                     <JUMP + PHRASE33>
162 PHRASE28
163                     <FRAME '\1aFREE-TEMP>
164                     <PUSH REG7>
165                     <DEAD REG7>
166                     <PUSH %<>>
167                     <CALL '\1aFREE-TEMP 2>
168                     <FRAME '\1aGEN-TEMP>
169                     <SET TEMP15 TY11>
170                     <DEAD TY11>
171                     <TYPE? TEMP15 <TYPE-CODE FALSE> - COND36>
172                     <SET TEMP15 'T (TYPE ATOM)>
173 COND36
174                     <PUSH TEMP15>
175                     <DEAD TEMP15>
176                     <CALL '\1aGEN-TEMP 1 = W5>
177                     <SET TEMP15 W5>
178 PHRASE33
179                     <PUSH TEMP15>
180                     <DEAD TEMP15>
181                     <CALL '\1aIEMIT 7>
182                     <RETURN W5>
183                     <DEAD W5>
184                     <END \1aFPUTBITS-GEN>
185
186 #WORD *27121211715*
187                     <GFCN \1aBITLOG-GEN ("VALUE" ANY NODE ANY) N4 W5>
188                     <TEMP K6 FST7 INS8:ATOM TEMP13 NN27 LAST31>
189                     <INTGO>
190                     <NTHUV N4 5 = K6 (TYPE LIST)>
191                     <NTHL K6 1 = FST7 (TYPE NODE)>
192                     <FRAME '\1aLGINS>
193                     <NTHUV N4 9 = STACK>
194                     <DEAD N4>
195                     <CALL '\1aLGINS 1 = INS8>
196                     <NTHUV FST7 1 = TEMP13 (TYPE FIX)>
197                     <VEQUAL? TEMP13 2 - PHRASE12 (TYPE FIX)>
198                     <DEAD TEMP13>
199                     <RESTL K6 1 = TEMP13 (TYPE LIST)>
200                     <NTHL TEMP13 1 = TEMP13 (TYPE NODE)>
201                     <PUTL K6 1 TEMP13>
202                     <DEAD TEMP13>
203                     <RESTL K6 1 = TEMP13 (TYPE LIST)>
204                     <PUTL TEMP13 1 FST7>
205                     <DEAD TEMP13 FST7>
206 PHRASE12
207                     <FRAME '\1aGEN>
208                     <NTHL K6 1 = STACK (TYPE NODE)>
209                     <CALL '\1aGEN 1 = TEMP13>
210                     <RESTL K6 1 = FST7 (TYPE LIST)>
211                     <DEAD K6>
212                     <LOOP>
213 MAP16
214                     <INTGO>
215                     <EMPL? FST7 + MAPAP19>
216                     <SET K6 FST7>
217                     <NTHL K6 1 = NN27 (TYPE NODE)>
218                     <FRAME '\1aGEN>
219                     <PUSH NN27>
220                     <DEAD NN27>
221                     <PUSH 'DONT-CARE>
222                     <CALL '\1aGEN 2 = NN27>
223                     <RESTL K6 1 = K6 (TYPE LIST)>
224                     <EMPL? K6 - TAG32 (TYPE LIST)>
225                     <DEAD K6>
226                     <SET LAST31 'T (TYPE ATOM)>
227                     <JUMP + TAG34>
228 TAG32
229                     <SET LAST31 %<> (TYPE FALSE)>
230 TAG34
231                     <FRAME '\1aIEMIT>
232                     <PUSH INS8>
233                     <PUSH TEMP13>
234                     <PUSH NN27>
235                     <PUSH '=>
236                     <VEQUAL? LAST31 0 + PHRASE37>
237                     <TYPE? W5 <TYPE-CODE TEMP> + BOOL39>
238                     <GVAL 'POP-STACK = K6>
239                     <EQUAL? K6 W5 - PHRASE37>
240                     <DEAD K6>
241 BOOL39
242                     <EQUAL? W5 TEMP13 + PHRASE44>
243                     <FRAME '\1aFREE-TEMP>
244                     <PUSH TEMP13>
245                     <DEAD TEMP13>
246                     <PUSH %<>>
247                     <CALL '\1aFREE-TEMP 2>
248                     <TYPE? W5 <TYPE-CODE TEMP> - PHRASE44>
249                     <FRAME '\1aUSE-TEMP>
250                     <PUSH W5>
251                     <PUSH 'FIX>
252                     <CALL '\1aUSE-TEMP 2>
253 PHRASE44
254                     <SET TEMP13 W5>
255                     <SET K6 TEMP13>
256                     <JUMP + PHRASE59>
257 PHRASE37
258                     <VEQUAL? LAST31 0 + PHRASE46>
259                     <DEAD LAST31>
260                     <EQUAL? W5 'DONT-CARE - PHRASE46>
261                     <TYPE? TEMP13 <TYPE-CODE TEMP> - PHRASE46>
262                     <NTHUV TEMP13 2 = K6 (TYPE FIX)>
263                     <GRTR? K6 1 + PHRASE46 (TYPE FIX)>
264                     <DEAD K6>
265                     <SET K6 TEMP13>
266                     <JUMP + PHRASE59>
267 PHRASE46
268                     <TYPE? TEMP13 <TYPE-CODE TEMP> - BOOL52>
269                     <NTHUV TEMP13 2 = K6 (TYPE FIX)>
270                     <GRTR? K6 1 - PHRASE51 (TYPE FIX)>
271                     <DEAD K6>
272 BOOL52
273                     <TYPE? TEMP13 <TYPE-CODE TEMP> - PHRASE56>
274                     <FRAME '\1aFREE-TEMP>
275                     <PUSH TEMP13>
276                     <DEAD TEMP13>
277                     <PUSH %<>>
278                     <CALL '\1aFREE-TEMP 2>
279 PHRASE56
280                     <FRAME '\1aGEN-TEMP>
281                     <PUSH 'FIX>
282                     <CALL '\1aGEN-TEMP 1 = TEMP13>
283                     <SET K6 TEMP13>
284                     <JUMP + PHRASE59>
285 PHRASE51
286                     <SET K6 TEMP13>
287 PHRASE59
288                     <PUSH K6>
289                     <DEAD K6>
290                     <CALL '\1aIEMIT 5>
291                     <FRAME '\1aFREE-TEMP>
292                     <PUSH NN27>
293                     <DEAD NN27>
294                     <CALL '\1aFREE-TEMP 1>
295                     <RESTL FST7 1 = FST7 (TYPE LIST)>
296                     <JUMP + MAP16>
297 MAPAP19
298                     <FRAME '\1aMOVE-ARG>
299                     <PUSH TEMP13>
300                     <DEAD TEMP13>
301                     <PUSH W5>
302                     <DEAD W5>
303                     <CALL '\1aMOVE-ARG 2 = FST7>
304                     <RETURN FST7>
305                     <DEAD FST7>
306                     <END \1aBITLOG-GEN>
307
308 #WORD *34042711057*
309                     <GFCN \1aLGINS ("VALUE" ATOM ANY) SUBR4>
310                     <TEMP TEMP9 TEMP10 TEMP11>
311                     <INTGO>
312                     <GVAL 'LSUBRS = TEMP9>
313                     <TYPE SUBR4 = TEMP10>
314                     <EMPUV? TEMP9 + TAG5>
315                     <LOOP (SUBR4 VALUE) (TEMP10 VALUE) (TEMP9 LENGTH VALUE)>
316 TAG7
317                     <NTHUV TEMP9 1 = TEMP11>
318                     <TYPE? TEMP11 TEMP10 - TAG8>
319                     <VEQUAL? TEMP11 SUBR4 + TAG6>
320                     <DEAD TEMP11>
321 TAG8
322                     <RESTUV TEMP9 1 = TEMP9 (TYPE VECTOR)>
323                     <EMPUV? TEMP9 - TAG7>
324 TAG5
325                     <SET TEMP9 %<> (TYPE FALSE)>
326 TAG6
327                     <LENR TEMP9 = TEMP9 (RECORD-TYPE %<>) (TYPE FIX)>
328                     <NTHUV [`AND `OR `XOR `EQV] TEMP9 = TEMP9 (TYPE ATOM)>
329                     <RETURN TEMP9>
330                     <DEAD TEMP9>
331                     <END \1aLGINS>
332
333 <SETG LSUBRS [,EQVB ,XORB ,ORB ,ANDB]>
334
335 <GDECL (LSUBRS) VECTOR>
336
337 <ENDPACKAGE>