Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / mimc / allr.mud
1
2 <PACKAGE "ALLR">
3
4 <ENTRY ALL-REST-GEN>
5
6 <USE "COMPDEC" "CODGEN" "CHKDCL" "STRGEN" "MIMGEN">
7
8 <DEFINE ALL-REST-GEN (N W
9                       "AUX" (R? <==? <NODE-SUBR .N> ,REST>) SAC NAC TEM STR NUM
10                             SPARE (K <KIDS .N>) (SS <TYPE-INFO .N>) T1 T2 CAC)
11    #DECL ((N) NODE (K) <LIST NODE NODE> (SS) <LIST LIST LIST LIST>)
12    <SET STR
13         <GEN <1 .K>
14              <COND (<TYPE? .W TEMP> .W)
15                    (<NOT <EMPTY? <3 .SS>>> <TEMP-NAME-SYM <NODE-NAME <3 .SS>>>)
16                    (ELSE DONT-CARE)>>>
17    <COND (<OR <NOT <TYPE? .STR TEMP>>
18               <AND <N==? .W .STR> <G? <TEMP-REFS .STR> 1>>>
19           <SET STR <MOVE-ARG .STR <GEN-TEMP <>>>>)>
20    <COND (.CAREFUL <EMPTY-CHECK LIST .STR LIST>)>
21    <COND
22     (<OR <NOT <EMPTY? <1 .SS>>> <NOT <EMPTY? <2 .SS>>>>
23      <SET-TEMP
24       <SET NUM
25            <COND (<NOT <EMPTY? <1 .SS>>>
26                   <TEMP-NAME-SYM <NODE-NAME <1 <1 .SS>>>>)
27                  (<NOT <EMPTY? <2 .SS>>>
28                   <TEMP-NAME-SYM <NODE-NAME <1 <2 .SS>>>>)
29                  (ELSE <GEN-TEMP>)>>
30       0>)>
31    <COND (<ASSIGNED? NUM> <IEMIT `LOOP (<TEMP-NAME .MUM> VALUE)
32                                        (<TEMP-NAME .STR> VALUE)>)
33          (ELSE <IEMIT `LOOP (<TEMP-NAME .STR> VALUE)>)>
34    <LABEL-TAG <SET T1 <MAKE-TAG>>>
35    <REST-LIST .STR <SET SPARE <GEN-TEMP>> 1>
36    <EMPTY-LIST .SPARE <SET T2 <MAKE-TAG>> T>
37    <SET-TEMP .STR .SPARE>
38    <FREE-TEMP .SPARE>
39    <COND (<ASSIGNED? NUM> <IEMIT `ADD .NUM 1 = .NUM>)>
40    <BRANCH-TAG .T1>
41    <LABEL-TAG .T2>
42    <MUNG-VALS .STR <3 .SS>>
43    <COND (<ASSIGNED? NUM>
44           <MUNG-VALS .NUM <1 .SS>>
45           <COND (<AND <NOT <EMPTY? <2 .SS>>> <NOT <EMPTY? <1 .SS>>>>
46                  <IEMIT `ADD .NUM 1 = .NUM>)>
47           <MUNG-VALS .NUM <2 .SS>>)>
48    <COND (.R? <MOVE-ARG .STR .W>)
49          (ELSE
50           <COND (<==? .W DONT-CARE> <SET W <GEN-TEMP>>)
51                 (<TYPE? .W TEMP> <USE-TEMP .W>)>
52           <NTH-LIST .STR .W 1>
53           <FREE-TEMP .STR>
54           .W)>>
55
56 <DEFINE MUNG-VALS (D L) 
57         #DECL ((L) <LIST [REST NODE]>)
58         <MAPF <>
59               <FUNCTION (N "AUX" (S <NODE-NAME .N>))
60                       #DECL ((S) SYMTAB)
61                       <COND (<N==? .D <TEMP-NAME-SYM .S>>
62                              <SET-SYM .S .D>)>>
63               .L>>
64 \f
65 <ENDPACKAGE>
66