2 <DEFINE SP ("OPT" (CC ,CODE-COUNT) (CV <>) (CLAB T) "AUX" OP-INF
4 #DECL ((CC) FIX (CL) <LIST [REST <UVECTOR [REST FIX]>]>
5 (OUTCHAN) <SPECIAL CHANNEL>)
6 <REPEAT ((C 0) NUM-OPS INS LREF OPCODE (IN-CASE? <>))
7 #DECL ((X NUM-OPS INS OPCODE) FIX (IN-CASE?) <OR FALSE FIX>)
8 <COND (<G=? <SET C <+ .C 1>> .CC> <RETURN>)>
9 <COND (<AND .CLAB <SET LREF <FIND-LABEL .C>>>
10 <PRIN1 <LABEL-REF-NAME .LREF>>
12 <SET INS <COND (.CV <NTH .CV .C>) (ELSE <NTH-CODE .C>)>>
13 <SET OPCODE <CHTYPE <LSH .INS -24> FIX>>
14 <SET OP-INF <GET-INST-INFO .OPCODE>>
15 <SET NUM-OPS <CHTYPE <LSH <2 .OP-INF> <- ,INIT-SHIFT>> FIX>>
17 (<MEMQ .OPCODE ,BRANCH-INS>
18 <BRANCH-PRINT <1 .OP-INF> .C .INS>)
21 <BRANCH-PRINT <> .C .INS>
22 <COND (<L? <SET IN-CASE? <- .IN-CASE? 1>> 0> <SET IN-CASE? <>>)>)
23 (<MEMQ .OPCODE ,SPECIAL-OPS> <SPECIAL-CODE-PRINT .INS>)
25 <COND (<MEMQ .OPCODE ,CASE-INS> <SET IN-CASE? 0>)>
27 <PRINT-SQUOZE <1 .OP-INF>>
31 <REPEAT ((SHFT -16) (FNUM 1) EAC R-OR-L ADR SIZ (INDX <>) STR CB)
32 #DECL ((CB SHFT FNUM EAC R-OR-L ADR SIZ) FIX)
38 <COND (<L? <SET NUM-OPS <- .NUM-OPS 1>> 0>
39 <COND (<==? .SHFT -24> <SET C <- .C 1>>)>
41 <SET ADR <CHTYPE <ANDB <LSH .INS .SHFT> 255> FIX>>
42 <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
46 <COND (<AND .CV <G=? <LENGTH .CV> .C>> <NTH .CV .C>)
48 (ELSE <NTH-CODE .C>)>>)>
49 <SET EAC <CHTYPE <ANDB .ADR 240> FIX>>
50 <SET R-OR-L <CHTYPE <ANDB .ADR 15> FIX>>
54 <PRIN1 <SET ADR <CHTYPE <ANDB .ADR 63> FIX>>>
56 <COND (<0? .NUM-OPS> <SET IN-CASE? .ADR>)
57 (<1? .NUM-OPS> <SET CB .ADR>)>)>)
59 <SET NUM-OPS <+ .NUM-OPS 1>>
61 (<==? .EAC ,AM-REG> <PRIN-REG-NAME .R-OR-L>)
62 (<AND <==? .EAC ,AM-REGD>
63 <OR <AND <==? .R-OR-L ,NAC-F> <PRINT-STACK-REF 0>>
64 <AND <==? .R-OR-L ,NAC-M> <PROG ()
67 (<OR <==? .EAC ,AM-REGD> <AND <==? .EAC ,AM-ADEC> <PRINC "-">>>
69 <PRIN-REG-NAME .R-OR-L>
71 (<OR <==? .EAC ,AM-AINC> <AND <==? .EAC ,AM-AINCD> <PRINC "@">>>
73 (<==? .R-OR-L ,NAC-PC>
74 <SET SIZ <CHTYPE <ANDB <GET-OP-INFO .FNUM .OP-INF> 7> FIX>>
75 <COND (<==? .EAC ,AM-AINCD> <SET SIZ 4>)
76 (<OR <==? .SIZ ,SZ-L> <==? .SIZ ,SZ-F>> <SET SIZ 4>)
77 (<==? .SIZ ,SZ-W> <SET SIZ 2>)
79 <REPEAT ((IM 0) (CNT -8) LB INAME IDISP
81 <COND (<==? .SIZ 1> -256)
83 (ELSE <IFSYS ("TOPS20"
84 <CHTYPE #WORD *740000000000* FIX>)
86 <COND (<L? <SET SIZ <- .SIZ 1>> 0>
87 <COND (<G? <CHTYPE .LB FIX> 127>
88 <SET IM <CHTYPE <ORB .IM .NM> FIX>>)>
89 <COND (<AND <MEMQ .OPCODE ,MIM-CALLS>
90 <L=? <SET IDISP <+ </ .IM 4> 1>>
91 ,RTE-DISPATCH-TABLE-SIZE>
93 <NTH ,RTE-DISP-TABLE .IDISP>>>
99 <COND (<L=? .NUM-OPS 0>
101 (<1? .NUM-OPS> <SET CB .IM>)>)>
107 <LSH <SET LB <ANDB <LSH .INS .SHFT> 255>>
110 <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
114 <COND (<AND .CV <G=? <LENGTH .CV> .C>>
117 (ELSE <NTH-CODE .C>)>>)>>)
118 (ELSE <PRINC "("> <PRIN-REG-NAME .R-OR-L> <PRINC ")+">)>)
121 <COND (<==? .EAC ,AM-BDD> <SET SIZ 1> <PRINC "@"> "B^")
122 (<==? .EAC ,AM-BD> <SET SIZ 1> "B^")
123 (<==? .EAC ,AM-WDD> <SET SIZ 2> <PRINC "@"> "W^")
124 (<==? .EAC ,AM-WD> <SET SIZ 2> "W^")
125 (<==? .EAC ,AM-LDD> <SET SIZ 4> <PRINC "@"> "L^")
126 (<==? .EAC ,AM-LD> <SET SIZ 4> "L^")>>
127 <REPEAT ((IM 0) (CNT -8) LB
129 <COND (<==? .SIZ 1> -256)
130 (<==? .SIZ 2> -65536)
131 (ELSE <IFSYS ("TOPS20"
132 <CHTYPE #WORD *740000000000* FIX>)
134 <COND (<L? <SET SIZ <- .SIZ 1>> 0>
135 <COND (<G? <CHTYPE .LB FIX> 127>
136 <SET IM <CHTYPE <ORB .IM .NM> FIX>>)>
137 <COND (<AND <==? .R-OR-L ,NAC-F>
138 <PRINT-STACK-REF .IM>>)
139 (<==? .R-OR-L ,NAC-M> <PRINT-MREF .IM>)
144 <COND (<L=? .NUM-OPS 0>
146 (<1? .NUM-OPS> <SET CB .IM>)>)>
148 <PRIN-REG-NAME .R-OR-L>
155 <ANDB <LSH .INS .SHFT> 255>>
158 <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
162 <COND (<AND .CV <G=? <LENGTH .CV> .C>>
165 (ELSE <NTH-CODE .C>)>>)>>)>
166 <COND (<AND <NOT .INDX> <N==? .NUM-OPS 0>> <PRINC ",">)>>)>)>
169 <DEFINE PRIN-REG-NAME (N)
170 <PRINC <NTH '[R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 F TP SP PC]
173 <DEFINE BRANCH-PRINT (SQN PTR INS
174 "AUX" ECODE XREF CCODE (OUTCHAN .OUTCHAN))
175 #DECL ((INS PTR EADISP) FIX (SQN) <OR FALSE FIX>)
176 <SET XREF <FIND-XREF .PTR <CHTYPE <ANDB .INS 65535> FIX>>>
177 <SET ECODE <XREF-INFO-STACK-SAVE-CODE .XREF>>
178 <AND .ECODE <NOT <EMPTY? .ECODE>> <SP <+ <LENGTH .ECODE> 1> .ECODE <>>>
180 <COND (.SQN <PRINT-SQUOZE .SQN>)>
182 <PRIN1 <LABEL-REF-NAME <XREF-INFO-LABEL .XREF>>>>
184 <DEFINE SPECIAL-CODE-PRINT (INS
187 <CHTYPE <ANDB .INS 65535> FIX>)
188 (CODE <CHTYPE <ANDB <LSH .INS -24> 255> FIX>)
189 PSAVE PATCH LREF UC (OUTCHAN .OUTCHAN)
192 <COND (<==? .CODE ,INST-PATCH>
193 <COND (<NOT <0? .OFFS>>
194 <SET PATCH <PATCH-CODE <GET-PATCH .OFFS>>>
196 <SP <+ <LENGTH .PATCH> 1> .PATCH <>>>)>)
197 (<==? .CODE ,INST-PSTORE>
198 <SET PSAVE <GET-PTNS .OFFS>>
199 <COND (<PTNS-USE .PSAVE>
200 <SET PATCH <PTNS-CODE .PSAVE>>
202 <SP <+ <LENGTH .PATCH> 1> .PATCH <>>>)>)
203 (<==? .CODE ,INST-CALL>
204 <SET UC <NTH ,CALL-TABLE .OFFS>>
207 <PRIN1 <UC-NAME .UC>>
209 <PRIN1 <UC-NUMBER-ARGS .UC>>
212 (<==? .CODE ,INST-PUSHLAB>
213 <SET LREF <NTH ,PUSH-LABEL-TABLE .OFFS>>
215 <PRINC "<PUSH-LABEL ">
216 <PRIN1 <LABEL-REF-NAME .LREF>>
219 (<==? .CODE ,INST-MOVELAB>
220 <SET LREF <NTH ,MOVE-LABEL-TABLE .OFFS>>
222 <PRINC "<MOVE-LABEL ">
223 <PRIN1 <LABEL-REF-NAME .LREF>>
224 <SET DESTEA <GET-FIELD .INS ,DESTEA-FIELD>>
226 <PRINT-EA .DESTEA .DESTDISP 3>
230 <DEFINE ICALL-TEST (INSNAME EAFIELD EADISP
231 "AUX" IDISP INAME (OUTCHAN .OUTCHAN))
232 #DECL ((INSNAME EAFIELD EADISP) FIX)
233 <COND (<AND <OR <==? .INSNAME ,NAME-JMP> <==? .INSNAME ,NAME-JSR>>
234 <==? <GET-FIELD .EAFIELD <BITS 3 3>> 5>
235 <L=? <SET IDISP <+ </ .EADISP 4> 1>>
236 ,RTE-DISPATCH-TABLE-SIZE>
237 <SET INAME <NTH ,RTE-DISP-TABLE .IDISP>>>
240 <PRINT-SQUOZE .INSNAME>
245 <DEFINE FIND-LABEL (PTR)
247 <REPEAT ((TAB ,LABEL-TABLE))
248 <COND (<EMPTY? .TAB> <RETURN <>>)>
249 <COND (<==? .PTR <LABEL-REF-CODE-PTR <1 .TAB>>>
251 <SET TAB <REST .TAB>>>>
253 <DEFINE FIND-XREF (PTR DISP "AUX" LREF)
254 #DECL ((PTR DISP) FIX)
255 <COND (<0? .DISP> <SEARCH-OUTSTANDING-LABELS .PTR>)
257 <SET LREF <NTH ,LABEL-TABLE .DISP>>
260 <COND (<==? <XREF-INFO-POINT .XREF> .PTR>
262 <LABEL-REF-XREFS .LREF>>)>>
264 <DEFINE SEARCH-OUTSTANDING-LABELS (PTR)
271 <COND (<==? <XREF-INFO-POINT .XREF> .PTR>
272 <RETURN .XREF .LVL>)>>
273 <LABEL-REF-XREFS .LREF>>>
274 ,OUTST-LABEL-TABLE>>>
276 <DEFINE PRINT-HEX-NUM (X)
279 <SET X <MOD .X 4096>>
288 <PRINC <NTH "0123456789ABCDEF"
291 <DEFINE PRINT-HEX-CODE ("OPTIONAL" (OUTCHAN .OUTCHAN) (PTR 1)
292 (MAXPTR ,FBYTE-OFFSET))
293 #DECL ((OUTCHAN) <SPECIAL CHANNEL> (PTR MAXPTR) FIX)
296 <SET WD <NTH-FCODE .PTR>>
297 <REPEAT (VAL (BCNT 4))
298 <SET VAL <GET-FIELD .WD <BITS 4 .BCNT>>>
300 <PRINC <ASCII <+ .VAL <ASCII !\0>>>>)
302 <PRINC <ASCII <+ <ASCII !\A> <- .VAL 10>>>>)>
303 <COND (<L? <SET BCNT <- .BCNT 4>> 0> <RETURN>)>>
304 <COND (<G? <SET PTR <+ .PTR 1>> .MAXPTR> <RETURN>)>>
307 <DEFINE PRINT-LABEL-TABLE ("AUX" (OUTCHAN .OUTCHAN))
312 <PRIN1 <LABEL-REF-CODE-PTR .LREF>>
314 <PRIN1 <LABEL-REF-REL-ADDR .LREF>>
318 <DEFINE IPRINT-HEX-NUM (NUM "AUX" TOT REM)
319 #DECL ((NUM VALUE REM) FIX)
320 <COND (<L? .NUM 0> <PRINC "-"> <IPRINT-HEX-NUM <- .NUM>>)
321 (<L? .NUM 16> <PRINHC .NUM> .NUM)
323 <SET TOT <IPRINT-HEX-NUM </ .NUM 16>>>
324 <SET TOT <* .TOT 16>>
325 <SET REM <- .NUM .TOT>>
329 <DEFINE PRINT-STACK-REF (DISP
330 "AUX" (VARLIST <SM-VARLIST ,TOP-MODEL>) OFF
333 <COND (<G? <SET OFF <+ </ .DISP 8> 1>> <LENGTH .VARLIST>> <>)
335 <PRIN1 <VARTBL-NAME <NTH .VARLIST .OFF>>>
336 <COND (<NOT <0? <MOD .DISP 8>>>
338 <PRIN1 <MOD .DISP 8>>)>
340 <IPRINT-HEX-NUM .DISP>
343 <DEFINE PRINT-FINAL-INST ("OPTIONAL" (OUTCHAN .OUTCHAN) (BYTEOFF 0) (PTR 1)
344 (MAXPTR ,FBYTE-OFFSET))
345 #DECL ((CL) LIST (CV) CODEVEC (MAXPTR) FIX (BYTEOFF PTR) FIX
346 (OUTCHAN) <SPECIAL CHANNEL>)
347 <REPEAT (EAFIELD INSCODE EADISP INSPTR INST (OPSZ 0) AFLG INSBITS SZ LREF
348 (IN-CASE? <>) INSNAME OP-INF NUM-OPS R-OR-L CB ST-CASE)
349 #DECL ((OP-INF) <UVECTOR [3 FIX]> (INSCODE NUM-OPS R-OR-L) FIX
350 (IN-CASE?) <OR FALSE FIX>)
352 <AND <SET LREF <FIND-LABEL-AT-BA <- .PTR 1>>>
353 <PRIN1 <LABEL-REF-NAME .LREF>>
356 <PRINT-HEX-NUM <- .PTR 1>>
359 <SET INSCODE <NTH-FCODE .PTR>>
361 <SET OP-INF <GET-INST-INFO .INSCODE>>
362 <SET NUM-OPS <CHTYPE <LSH <2 .OP-INF> <- ,INIT-SHIFT>> FIX>>
364 <COND (<NOT .IN-CASE?> <PRINT-SQUOZE <1 .OP-INF>>)>
367 <SET CB <CHTYPE <ORB .INSCODE <LSH <NTH-FCODE .PTR> 8>> FIX>>
368 <SET CB <EXTEND .CB>>
370 <FBRANCH-PRINT .ST-CASE .CB>
371 <COND (<L? <SET IN-CASE? <- .IN-CASE? 1>> 0> <SET IN-CASE? <>>)>)
373 <COND (<MEMQ .INSCODE ,CASE-INS> <SET IN-CASE? 0>)>
375 <REPEAT ((FNUM 1) R-OR-L ADR SIZ (INDX <>) STR EAT EAC)
376 #DECL ((FNUM R-OR-L ADR SIZ EAT EAC) FIX)
379 <PRIN-REG-NAME .INDX>
382 <COND (<L? <SET NUM-OPS <- .NUM-OPS 1>> 0> <RETURN>)>
383 <SET ADR <NTH-FCODE .PTR>>
385 <SET EAC <CHTYPE <ANDB .ADR 240> FIX>>
386 <SET R-OR-L <CHTYPE <ANDB .ADR 15> FIX>>
388 <CHTYPE <ANDB <SET EAT <GET-OP-INFO .FNUM .OP-INF>> 7> FIX>>
389 <SET FNUM <+ .FNUM 1>>
391 (<OR <AND <==? .EAT ,OP-BB> <SET ADR <EXTEND-BYTE .ADR>>>
392 <AND <==? .EAT ,OP-BW>
393 <SET ADR <CHTYPE <ORB .ADR
394 <LSH <NTH-FCODE .PTR> 8>> FIX>>
395 <SET ADR <EXTEND .ADR>>
396 <SET PTR <+ .PTR 1>>>>
397 <FBRANCH-PRINT .PTR .ADR>)
400 <PRIN1 <SET ADR <CHTYPE <ANDB .ADR 63> FIX>>>
402 <COND (<0? .NUM-OPS> <SET IN-CASE? .ADR>)
403 (<1? .NUM-OPS> <SET CB .ADR>)>)>)
405 <SET NUM-OPS <+ .NUM-OPS 1>>
407 (<==? .EAC ,AM-REG> <PRIN-REG-NAME .R-OR-L>)
408 (<AND <==? .EAC ,AM-REGD>
409 <OR <AND <==? .R-OR-L ,NAC-F> <PRINT-STACK-REF 0>>
410 <AND <==? .R-OR-L ,NAC-M> <PROG ()
413 (<OR <==? .EAC ,AM-REGD> <AND <==? .EAC ,AM-ADEC> <PRINC "-">>>
415 <PRIN-REG-NAME .R-OR-L>
417 (<OR <==? .EAC ,AM-AINC> <AND <==? .EAC ,AM-AINCD> <PRINC "@">>>
419 (<==? .R-OR-L ,NAC-PC>
420 <COND (<==? .EAC ,AM-AINCD> <SET SIZ 4>)
421 (<OR <==? .SIZ ,SZ-L> <==? .SIZ ,SZ-F>> <SET SIZ 4>)
422 (<==? .SIZ ,SZ-W> <SET SIZ 2>)
424 <REPEAT ((IM 0) (CNT -8) LB INAME IDISP
426 <COND (<==? .SIZ 1> -256)
427 (<==? .SIZ 2> -65536)
428 (ELSE <IFSYS ("TOPS20"
429 <CHTYPE *740000000000* FIX>)
431 <COND (<L? <SET SIZ <- .SIZ 1>> 0>
432 <COND (<G? <CHTYPE .LB FIX> 127>
433 <SET IM <CHTYPE <ORB .IM .NM> FIX>>)>
434 <COND (<AND <MEMQ .INSCODE ,MIM-CALLS>
435 <L=? <SET IDISP <+ </ .IM 4> 1>>
436 ,RTE-DISPATCH-TABLE-SIZE>
438 <NTH ,RTE-DISP-TABLE .IDISP>>>
444 <COND (<L=? .NUM-OPS 0>
446 (<1? .NUM-OPS> <SET CB .IM>)>)>
451 <LSH <SET LB <NTH-FCODE .PTR>> .CNT>>
453 <SET PTR <+ .PTR 1>>>)
454 (ELSE <PRINC "("> <PRIN-REG-NAME .R-OR-L> <PRINC ")+">)>)
457 <COND (<==? .EAC ,AM-BDD> <SET SIZ 1> <PRINC "@"> "B^")
458 (<==? .EAC ,AM-BD> <SET SIZ 1> "B^")
459 (<==? .EAC ,AM-WDD> <SET SIZ 2> <PRINC "@"> "W^")
460 (<==? .EAC ,AM-WD> <SET SIZ 2> "W^")
461 (<==? .EAC ,AM-LDD> <SET SIZ 4> <PRINC "@"> "L^")
462 (<==? .EAC ,AM-LD> <SET SIZ 4> "L^")>>
463 <REPEAT ((IM 0) (CNT -8) LB
465 <COND (<==? .SIZ 1> -256)
466 (<==? .SIZ 2> -65536)
467 (ELSE <IFSYS ("TOPS20"
468 <CHTYPE #WORD *740000000000* FIX>)
470 <COND (<L? <SET SIZ <- .SIZ 1>> 0>
471 <COND (<G? <CHTYPE .LB FIX> 127>
472 <SET IM <CHTYPE <ORB .IM .NM> FIX>>)>
473 <COND (<AND <==? .R-OR-L ,NAC-F>
474 <PRINT-STACK-REF .IM>>)
475 (<==? .R-OR-L ,NAC-M> <PRINT-MREF .IM>)
480 <COND (<L=? .NUM-OPS 0>
482 (<1? .NUM-OPS> <SET CB .IM>)>)>
484 <PRIN-REG-NAME .R-OR-L>
490 <LSH <SET LB <NTH-FCODE .PTR>> .CNT>>
492 <SET PTR <+ .PTR 1>>>)>
493 <COND (<AND <NOT .INDX> <N==? .NUM-OPS 0>> <PRINC ",">)>>
494 <COND (.IN-CASE? <SET ST-CASE .PTR>)>)>
496 <COND (<G=? .PTR .MAXPTR> <RETURN>)>>>
498 <DEFINE FBRANCH-PRINT (PTR OFFS "AUX" OFFSET LREF)
499 #DECL ((PTR OFFS) FIX)
500 <SET OFFSET <+ .PTR .OFFS -1>>
501 <COND (<SET LREF <FIND-LABEL-AT-BA .OFFSET>>
502 <PRIN1 <LABEL-REF-NAME .LREF>>)
505 <COND (<G? .OFFS 0> <PRINC "+">) (ELSE <PRINC "-">)>
506 <PRIN1 <ABS .OFFS>>)>>
508 <DEFINE FIND-LABEL-AT-BA (BYTEOFF)
510 <REPEAT ((TAB ,LABEL-TABLE))
511 <COND (<EMPTY? .TAB> <RETURN <>>)>
512 <COND (<==? .BYTEOFF <LABEL-REF-REL-ADDR <1 .TAB>>>
514 <SET TAB <REST .TAB>>>>