Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / vaxc / sp.mud
1
2 <DEFINE SP ("OPT" (CC ,CODE-COUNT) (CV <>) (CLAB T) "AUX" OP-INF
3             (OUTCHAN .OUTCHAN)) 
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>>
11             <CRLF>)>
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>>
16      <COND
17       (<MEMQ .OPCODE ,BRANCH-INS>
18        <BRANCH-PRINT <1 .OP-INF> .C .INS>)
19       (.IN-CASE?
20        <TAB>
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>)
24       (ELSE
25        <COND (<MEMQ .OPCODE ,CASE-INS> <SET IN-CASE? 0>)>
26        <PRINC " ">
27        <PRINT-SQUOZE <1 .OP-INF>>
28        <COND
29         (<N==? .NUM-OPS 0>
30          <PRINC "       ">
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)
33            <COND (.INDX
34                   <PRINC "[">
35                   <PRIN-REG-NAME .INDX>
36                   <PRINC "]">
37                   <SET INDX <>>)>
38            <COND (<L? <SET NUM-OPS <- .NUM-OPS 1>> 0>
39                   <COND (<==? .SHFT -24> <SET C <- .C 1>>)>
40                   <RETURN>)>
41            <SET ADR <CHTYPE <ANDB <LSH .INS .SHFT> 255> FIX>>
42            <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
43                   <SET SHFT -24>
44                   <SET C <+ .C 1>>
45                   <SET INS
46                        <COND (<AND .CV <G=? <LENGTH .CV> .C>> <NTH .CV .C>)
47                              (.CV 0)
48                              (ELSE <NTH-CODE .C>)>>)>
49            <SET EAC <CHTYPE <ANDB .ADR 240> FIX>>
50            <SET R-OR-L <CHTYPE <ANDB .ADR 15> FIX>>
51            <COND
52             (<L? .EAC ,AM-INX>
53              <PRINC "S^#">
54              <PRIN1 <SET ADR <CHTYPE <ANDB .ADR 63> FIX>>>
55              <COND (.IN-CASE?
56                     <COND (<0? .NUM-OPS> <SET IN-CASE? .ADR>)
57                           (<1? .NUM-OPS> <SET CB .ADR>)>)>)
58             (<==? .EAC ,AM-INX>
59              <SET NUM-OPS <+ .NUM-OPS 1>>
60              <SET INDX .R-OR-L>)
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 ()
65                                                       <PRINT-MREF 0>
66                                                       1>>>>)
67             (<OR <==? .EAC ,AM-REGD> <AND <==? .EAC ,AM-ADEC> <PRINC "-">>>
68              <PRINC "(">
69              <PRIN-REG-NAME .R-OR-L>
70              <PRINC ")">)
71             (<OR <==? .EAC ,AM-AINC> <AND <==? .EAC ,AM-AINCD> <PRINC "@">>>
72              <COND
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>)
78                      (ELSE <SET SIZ 1>)>
79                <REPEAT ((IM 0) (CNT -8) LB INAME IDISP
80                         (NM
81                          <COND (<==? .SIZ 1> -256)
82                                (<==? .SIZ 2> -65536)
83                                (ELSE <IFSYS ("TOPS20"
84                                              <CHTYPE #WORD *740000000000* FIX>)
85                                             ("VAX" 0)>)>))
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>
92                                           <SET INAME
93                                                <NTH ,RTE-DISP-TABLE .IDISP>>>
94                                      <PRINC .INAME>)
95                                     (ELSE
96                                      <PRINC "#">
97                                      <PRIN1 .IM>)>
98                               <COND (.IN-CASE?
99                                      <COND (<L=? .NUM-OPS 0>
100                                             <SET IN-CASE? .IM>)
101                                            (<1? .NUM-OPS> <SET CB .IM>)>)>
102                               <RETURN>)>
103                        <SET CNT <+ .CNT 8>>
104                        <SET IM
105                             <CHTYPE
106                              <ORB .IM
107                                   <LSH <SET LB <ANDB <LSH .INS .SHFT> 255>>
108                                        .CNT>>
109                              FIX>>
110                        <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
111                               <SET SHFT -24>
112                               <SET C <+ .C 1>>
113                               <SET INS
114                                    <COND (<AND .CV <G=? <LENGTH .CV> .C>>
115                                           <NTH .CV .C>)
116                                          (.CV 0)
117                                          (ELSE <NTH-CODE .C>)>>)>>)
118               (ELSE <PRINC "("> <PRIN-REG-NAME .R-OR-L> <PRINC ")+">)>)
119             (ELSE
120              <SET STR
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
128                       (NM
129                        <COND (<==? .SIZ 1> -256)
130                              (<==? .SIZ 2> -65536)
131                              (ELSE <IFSYS ("TOPS20"
132                                            <CHTYPE #WORD *740000000000* FIX>)
133                                           ("VAX" 0)>)>))
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>)
140                                   (ELSE
141                                    <PRINC .STR>
142                                    <PRIN1 .IM>
143                                    <COND (.IN-CASE?
144                                           <COND (<L=? .NUM-OPS 0>
145                                                  <SET IN-CASE? .IM>)
146                                                 (<1? .NUM-OPS> <SET CB .IM>)>)>
147                                    <PRINC "(">
148                                    <PRIN-REG-NAME .R-OR-L>
149                                    <PRINC ")">)>
150                             <RETURN>)>
151                      <SET CNT <+ .CNT 8>>
152                      <SET IM
153                           <CHTYPE <ORB .IM
154                                        <LSH <SET LB
155                                                  <ANDB <LSH .INS .SHFT> 255>>
156                                             .CNT>>
157                                   FIX>>
158                      <COND (<G? <SET SHFT <+ .SHFT 8>> 0>
159                             <SET SHFT -24>
160                             <SET C <+ .C 1>>
161                             <SET INS
162                                  <COND (<AND .CV <G=? <LENGTH .CV> .C>>
163                                         <NTH .CV .C>)
164                                        (.CV 0)
165                                        (ELSE <NTH-CODE .C>)>>)>>)>
166            <COND (<AND <NOT .INDX> <N==? .NUM-OPS 0>> <PRINC ",">)>>)>)>
167      <CRLF>>>
168
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]
171                     <+ .N 1>>>>
172
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 <>>>
179         <PRINC "        ">
180         <COND (.SQN <PRINT-SQUOZE .SQN>)>
181         <PRINC "        ">
182         <PRIN1 <LABEL-REF-NAME <XREF-INFO-LABEL .XREF>>>>
183
184 <DEFINE SPECIAL-CODE-PRINT (INS
185                             "OPT" DESTDISP
186                             "AUX" (OFFS
187                                    <CHTYPE <ANDB .INS 65535> FIX>)
188                                   (CODE <CHTYPE <ANDB <LSH .INS -24> 255> FIX>)
189                                   PSAVE PATCH LREF UC (OUTCHAN .OUTCHAN)
190                                   DESTEA)
191         #DECL ((INS) FIX)
192         <COND (<==? .CODE ,INST-PATCH>
193                <COND (<NOT <0? .OFFS>>
194                       <SET PATCH <PATCH-CODE <GET-PATCH .OFFS>>>
195                       <OR <EMPTY? .PATCH>
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>>
201                       <OR <EMPTY? .PATCH>
202                           <SP <+ <LENGTH .PATCH> 1> .PATCH <>>>)>)
203               (<==? .CODE ,INST-CALL>
204                <SET UC <NTH ,CALL-TABLE .OFFS>>
205                <TAB>
206                <PRINC "<CALL ">
207                <PRIN1 <UC-NAME .UC>>
208                <PRINC !\ >
209                <PRIN1 <UC-NUMBER-ARGS .UC>>
210                <PRINC !\>>
211                <CRLF>)
212               (<==? .CODE ,INST-PUSHLAB>
213                <SET LREF <NTH ,PUSH-LABEL-TABLE .OFFS>>
214                <TAB>
215                <PRINC "<PUSH-LABEL ">
216                <PRIN1 <LABEL-REF-NAME .LREF>>
217                <PRINC !\>>
218                <CRLF>)
219               (<==? .CODE ,INST-MOVELAB>
220                <SET LREF <NTH ,MOVE-LABEL-TABLE .OFFS>>
221                <TAB>
222                <PRINC "<MOVE-LABEL ">
223                <PRIN1 <LABEL-REF-NAME .LREF>>
224                <SET DESTEA <GET-FIELD .INS ,DESTEA-FIELD>>
225                <PRINC " ">
226                <PRINT-EA .DESTEA .DESTDISP 3>
227                <PRINC ">">
228                <CRLF>)>>
229
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>>>
238                <TAB>
239                <PRINC !\<>
240                <PRINT-SQUOZE .INSNAME>
241                <TAB>
242                <PRINC .INAME>
243                T)>>
244
245 <DEFINE FIND-LABEL (PTR) 
246         #DECL ((NUM) FIX)
247         <REPEAT ((TAB ,LABEL-TABLE))
248                 <COND (<EMPTY? .TAB> <RETURN <>>)>
249                 <COND (<==? .PTR <LABEL-REF-CODE-PTR <1 .TAB>>>
250                        <RETURN <1 .TAB>>)>
251                 <SET TAB <REST .TAB>>>>
252
253 <DEFINE FIND-XREF (PTR DISP "AUX" LREF) 
254         #DECL ((PTR DISP) FIX)
255         <COND (<0? .DISP> <SEARCH-OUTSTANDING-LABELS .PTR>)
256               (ELSE
257                <SET LREF <NTH ,LABEL-TABLE .DISP>>
258                <MAPF <>
259                      <FCN (XREF)
260                           <COND (<==? <XREF-INFO-POINT .XREF> .PTR>
261                                  <MAPLEAVE .XREF>)>>
262                      <LABEL-REF-XREFS .LREF>>)>>
263
264 <DEFINE SEARCH-OUTSTANDING-LABELS (PTR) 
265    #DECL ((PTR) FIX)
266    <PROG LVL ()
267          <MAPF <>
268                <FCN (LREF)
269                     <MAPF <>
270                           <FCN (XREF)
271                                <COND (<==? <XREF-INFO-POINT .XREF> .PTR>
272                                       <RETURN .XREF .LVL>)>>
273                           <LABEL-REF-XREFS .LREF>>>
274                ,OUTST-LABEL-TABLE>>>
275
276 <DEFINE PRINT-HEX-NUM (X) 
277         #DECL ((X) FIX)
278         <PRINHC </ .X 4096>>
279         <SET X <MOD .X 4096>>
280         <PRINHC </ .X 256>>
281         <SET X <MOD .X 256>>
282         <PRINHC </ .X 16>>
283         <SET X <MOD .X 16>>
284         <PRINHC .X>>
285
286 <DEFINE PRINHC (X) 
287         #DECL ((X) FIX)
288         <PRINC <NTH "0123456789ABCDEF"
289                     <+ .X 1>>>>
290
291 <DEFINE PRINT-HEX-CODE ("OPTIONAL" (OUTCHAN .OUTCHAN) (PTR 1)
292                                    (MAXPTR ,FBYTE-OFFSET))
293         #DECL ((OUTCHAN) <SPECIAL CHANNEL> (PTR MAXPTR) FIX)
294         <PRINC !\|>
295         <REPEAT (WD)
296                 <SET WD <NTH-FCODE .PTR>>
297                 <REPEAT (VAL (BCNT 4))
298                         <SET VAL <GET-FIELD .WD <BITS 4 .BCNT>>>
299                         <COND (<L? .VAL 10>
300                                <PRINC <ASCII <+ .VAL <ASCII !\0>>>>)
301                               (ELSE
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>)>>
305         <PRINC !\|>>
306
307 <DEFINE PRINT-LABEL-TABLE ("AUX" (OUTCHAN .OUTCHAN)) 
308         <MAPF <>
309               <FCN (LREF)
310                    <PRIN1 .LREF>
311                    <INDENT-TO 40>
312                    <PRIN1 <LABEL-REF-CODE-PTR .LREF>>
313                    <PRINC "     ">
314                    <PRIN1 <LABEL-REF-REL-ADDR .LREF>>
315                    <CRLF>>
316               ,LABEL-TABLE>>
317
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)
322               (ELSE
323                <SET TOT <IPRINT-HEX-NUM </ .NUM 16>>>
324                <SET TOT <* .TOT 16>>
325                <SET REM <- .NUM .TOT>>
326                <PRINHC .REM>
327                <+ .TOT .REM>)>>
328
329 <DEFINE PRINT-STACK-REF (DISP
330                          "AUX" (VARLIST <SM-VARLIST ,TOP-MODEL>) OFF
331                                (OUTCHAN .OUTCHAN))
332         #DECL ((DISP) FIX)
333         <COND (<G? <SET OFF <+ </ .DISP 8> 1>> <LENGTH .VARLIST>> <>)
334               (ELSE
335                <PRIN1 <VARTBL-NAME <NTH .VARLIST .OFF>>>
336                <COND (<NOT <0? <MOD .DISP 8>>>
337                       <PRINC "+">
338                       <PRIN1 <MOD .DISP 8>>)>
339                <PRINC "   [">
340                <IPRINT-HEX-NUM .DISP>
341                <PRINC "] ">)>>
342
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>)
351      <SET AFLG T>
352      <AND <SET LREF <FIND-LABEL-AT-BA <- .PTR 1>>>
353           <PRIN1 <LABEL-REF-NAME .LREF>>
354           <INDENT-TO 50>
355           <PRINC !\[>
356           <PRINT-HEX-NUM <- .PTR 1>>
357           <PRINC !\]>
358           <CRLF>>
359      <SET INSCODE <NTH-FCODE .PTR>>
360      <SET PTR <+ .PTR 1>>
361      <SET OP-INF <GET-INST-INFO .INSCODE>>
362      <SET NUM-OPS <CHTYPE <LSH <2 .OP-INF> <- ,INIT-SHIFT>> FIX>>
363      <TAB>
364      <COND (<NOT .IN-CASE?> <PRINT-SQUOZE <1 .OP-INF>>)>
365      <COND
366         (.IN-CASE?
367          <SET CB <CHTYPE <ORB .INSCODE <LSH <NTH-FCODE .PTR> 8>> FIX>>
368          <SET CB <EXTEND .CB>>
369          <SET PTR <+ .PTR 1>>
370          <FBRANCH-PRINT .ST-CASE .CB>
371          <COND (<L? <SET IN-CASE? <- .IN-CASE? 1>> 0> <SET IN-CASE? <>>)>)
372         (<N==? .NUM-OPS 0>
373          <COND (<MEMQ .INSCODE ,CASE-INS> <SET IN-CASE? 0>)>
374          <TAB>
375          <REPEAT ((FNUM 1) R-OR-L ADR SIZ (INDX <>) STR EAT EAC)
376            #DECL ((FNUM R-OR-L ADR SIZ EAT EAC) FIX)
377            <COND (.INDX
378                   <PRINC "[">
379                   <PRIN-REG-NAME .INDX>
380                   <PRINC "]">
381                   <SET INDX <>>)>
382            <COND (<L? <SET NUM-OPS <- .NUM-OPS 1>> 0> <RETURN>)>
383            <SET ADR <NTH-FCODE .PTR>>
384            <SET PTR <+ .PTR 1>>
385            <SET EAC <CHTYPE <ANDB .ADR 240> FIX>>
386            <SET R-OR-L <CHTYPE <ANDB .ADR 15> FIX>>
387            <SET SIZ
388                 <CHTYPE <ANDB <SET EAT <GET-OP-INFO .FNUM .OP-INF>> 7> FIX>>
389            <SET FNUM <+ .FNUM 1>>
390            <COND
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>)
398             (<L? .EAC ,AM-INX>
399              <PRINC "S^#">
400              <PRIN1 <SET ADR <CHTYPE <ANDB .ADR 63> FIX>>>
401              <COND (.IN-CASE?
402                     <COND (<0? .NUM-OPS> <SET IN-CASE? .ADR>)
403                           (<1? .NUM-OPS> <SET CB .ADR>)>)>)
404             (<==? .EAC ,AM-INX>
405              <SET NUM-OPS <+ .NUM-OPS 1>>
406              <SET INDX .R-OR-L>)
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 ()
411                                                       <PRINT-MREF 0>
412                                                       1>>>>)
413             (<OR <==? .EAC ,AM-REGD> <AND <==? .EAC ,AM-ADEC> <PRINC "-">>>
414              <PRINC "(">
415              <PRIN-REG-NAME .R-OR-L>
416              <PRINC ")">)
417             (<OR <==? .EAC ,AM-AINC> <AND <==? .EAC ,AM-AINCD> <PRINC "@">>>
418              <COND
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>)
423                      (ELSE <SET SIZ 1>)>
424                <REPEAT ((IM 0) (CNT -8) LB INAME IDISP
425                         (NM
426                          <COND (<==? .SIZ 1> -256)
427                                (<==? .SIZ 2> -65536)
428                                (ELSE <IFSYS ("TOPS20"
429                                              <CHTYPE *740000000000* FIX>)
430                                             ("VAX" 0)>)>))
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>
437                                           <SET INAME
438                                                <NTH ,RTE-DISP-TABLE .IDISP>>>
439                                      <PRINC .INAME>)
440                                     (ELSE
441                                      <PRINC "#">
442                                      <PRIN1 .IM>)>
443                               <COND (.IN-CASE?
444                                      <COND (<L=? .NUM-OPS 0>
445                                             <SET IN-CASE? .IM>)
446                                            (<1? .NUM-OPS> <SET CB .IM>)>)>
447                               <RETURN>)>
448                        <SET CNT <+ .CNT 8>>
449                        <SET IM
450                             <CHTYPE <ORB .IM
451                                          <LSH <SET LB <NTH-FCODE .PTR>> .CNT>>
452                                     FIX>>
453                        <SET PTR <+ .PTR 1>>>)
454               (ELSE <PRINC "("> <PRIN-REG-NAME .R-OR-L> <PRINC ")+">)>)
455             (ELSE
456              <SET STR
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
464                       (NM
465                        <COND (<==? .SIZ 1> -256)
466                              (<==? .SIZ 2> -65536)
467                              (ELSE <IFSYS ("TOPS20"
468                                            <CHTYPE #WORD *740000000000* FIX>)
469                                           ("VAX" 0)>)>))
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>)
476                                   (ELSE
477                                    <PRINC .STR>
478                                    <PRIN1 .IM>
479                                    <COND (.IN-CASE?
480                                           <COND (<L=? .NUM-OPS 0>
481                                                  <SET IN-CASE? .IM>)
482                                                 (<1? .NUM-OPS> <SET CB .IM>)>)>
483                                    <PRINC "(">
484                                    <PRIN-REG-NAME .R-OR-L>
485                                    <PRINC ")">)>
486                             <RETURN>)>
487                      <SET CNT <+ .CNT 8>>
488                      <SET IM
489                           <CHTYPE <ORB .IM
490                                        <LSH <SET LB <NTH-FCODE .PTR>> .CNT>>
491                                   FIX>>
492                      <SET PTR <+ .PTR 1>>>)>
493            <COND (<AND <NOT .INDX> <N==? .NUM-OPS 0>> <PRINC ",">)>>
494          <COND (.IN-CASE? <SET ST-CASE .PTR>)>)>
495      <CRLF>
496      <COND (<G=? .PTR .MAXPTR> <RETURN>)>>>
497
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>>)
503               (ELSE
504                <PRINC ".">
505                <COND (<G? .OFFS 0> <PRINC "+">) (ELSE <PRINC "-">)>
506                <PRIN1 <ABS .OFFS>>)>>
507
508 <DEFINE FIND-LABEL-AT-BA (BYTEOFF) 
509         #DECL ((NUM) FIX)
510         <REPEAT ((TAB ,LABEL-TABLE))
511                 <COND (<EMPTY? .TAB> <RETURN <>>)>
512                 <COND (<==? .BYTEOFF <LABEL-REF-REL-ADDR <1 .TAB>>>
513                        <RETURN <1 .TAB>>)>
514                 <SET TAB <REST .TAB>>>>