Files from TOPS-20 <mdl.comp>.
[pdp10-muddle.git] / <mdl.comp> / allr.mud.14
1 <PACKAGE "ALLR">
2
3 <ENTRY ALL-REST-GEN>
4
5 <USE "CACS" "CODGEN" "COMCOD" "COMPDEC" "CHKDCL" "STRGEN">
6
7 <DEFINE ALL-REST-GEN (N W
8                       "AUX" (R? <==? <NODE-SUBR .N> ,REST>) SAC NAC TEM STR NUM
9                             (K <KIDS .N>) (SS <TYPE-INFO .N>) T1 T2 CAC)
10         #DECL ((N) NODE (K) <LIST NODE NODE> (SAC CAC NAC) AC (STR NUM) DATUM
11                (SS) <LIST LIST LIST LIST>)
12         <SET STR
13              <GEN <1 .K>
14                   <COND (.R? <GOODACS .N .W>) (ELSE <DATUM LIST ANY-AC>)>>>
15         <COND (.CAREFUL
16                <EMIT <INSTRUCTION `JUMPE 
17                                   <ACSYM <CHTYPE <DATVAL .STR> AC>>
18                                   |COMPERR>>)>
19         <COND (<OR <NOT <EMPTY? <1 .SS>>> <NOT <EMPTY? <2 .SS>>>>
20                <SET NUM <DATUM FIX ANY-AC>>)>
21         <TOACV .STR>
22         <SET SAC <DATVAL .STR>>
23         <MUNG-VALS .STR .SAC <3 .SS>>
24         <COND (<ASSIGNED? NUM>
25                <MOVE:ARG <REFERENCE <COND (<EMPTY? <2 .SS>> 1) (ELSE 0)>>
26                          .NUM>
27                <TOACV .NUM>
28                <PUT <SET NAC <DATVAL .NUM>> ,ACPROT T>
29                <TOACV .STR>
30                <SET SAC <DATVAL .STR>>
31                <PUT .NAC ,ACPROT <>>)>
32         <COND (.CAREFUL <EMIT '<`MOVEI  `O*  -1>>)>
33         <SET CAC <COND (.CAREFUL <GETREG <>>) (ELSE ,ACO)>>
34         <LABEL:TAG <SET T1 <MAKE:TAG>>>
35         <EMIT <INSTRUCTION `HRRZ  <ACSYM .CAC> (<ADDRSYM .SAC>)>>
36         <EMIT <INSTRUCTION `JUMPE  <ACSYM .CAC> <SET T2 <MAKE:TAG>>>>
37         <EMIT <INSTRUCTION `MOVE  <ACSYM .SAC> <ADDRSYM .CAC>>>
38         <COND (.CAREFUL <EMIT '<`SOJE  `O |COMPERR>>)>
39         <COND (<ASSIGNED? NUM>
40                <EMIT <INSTRUCTION `AOJA  <ACSYM .NAC> .T1>>)
41               (ELSE <BRANCH:TAG .T1>)>
42         <LABEL:TAG .T2>
43         <COND (<ASSIGNED? NUM>
44                <MUNG-VALS .NUM .NAC <1 .SS>>
45                <COND (<AND <NOT <EMPTY? <2 .SS>>> <NOT <EMPTY? <1 .SS>>>>
46                       <MUNG-AC .NAC .NUM>
47                       <EMIT <INSTRUCTION `ADDI  <ACSYM .NAC> 1>>)>
48                <MUNG-VALS .NUM .NAC <2 .SS>>
49                <RET-TMP-AC .NUM>)>
50         <COND
51          (.R? <MOVE:ARG .STR .W>)
52          (ELSE
53           <SET STR <DEFER-IT .N .STR>>
54           <SET TEM <OFFPTR 0 .STR LIST>>
55           <MOVE:ARG <DATUM <COND (<ISTYPE-GOOD? <RESULT-TYPE .N>>) (ELSE .TEM)>
56                            .TEM>
57                     .W>)>>
58
59 <DEFINE MUNG-VALS (D A L "AUX" (D1 .D)) 
60         #DECL ((D D1) DATUM (A) AC (L) <LIST [REST NODE]>)
61         <MAPF <>
62               <FUNCTION (N
63                          "AUX" (S <NODE-NAME .N>)
64                                (TY
65                                 <OR
66                                  <ISTYPE-GOOD? <1 <TYPE-INFO .N>>>
67                                  <AND <OR <ARG? .S> <INIT-SYM .S>>
68                                       <ISTYPE-GOOD? <1 <DECL-SYM .S>>>>>))
69                       #DECL ((S) SYMTAB)
70                       <COND (<AND <NOT .TY> <==? .D .D1>>
71                              <SET D1 <MOVE:ARG .D <DATUM ANY-AC <DATVAL .D>>>>)>
72                       <PUT .S ,STORED <>>
73                       <PUT .S ,INACS <DATUM !<COND (.TY .D) (ELSE .D1)>>>
74                       <PUT .A ,ACRESIDUE (.S !<ACRESIDUE .A>)>>
75               .L>
76         <COND (<N==? .D .D1> <MOVE:ARG .D1 .D>)>
77         <MUNG-AC .A .D>>
78 \f
79 <ENDPACKAGE>\ 3