3 <ENTRY NTH-GEN REST-GEN PUT-GEN LNTH-GEN MT-GEN PUTREST-GEN IPUT-GEN
4 IREMAS-GEN FLUSH-COMMON-SYMT COMMUTE-STRUC DEFER-IT PUT-COMMON-DAT
7 <USE "CODGEN" "CACS" "COMCOD" "CHKDCL" "COMPDEC" "SPCGEN" "COMTEM" "CARGEN">
8 <DEFINE PUTREST-GEN (NOD WHERE
9 "AUX" ST1 ST2 (K <KIDS .NOD>) (FLG T) N CD (ONO .NO-KILL)
10 (NO-KILL .ONO) (2RET <>))
11 #DECL ((NOD N) NODE (K) <LIST NODE NODE> (ST1 ST2) DATUM
12 (NO-KILL) <SPECIAL LIST> (ONO) LIST)
13 <COND (<==? <NODE-SUBR .NOD> ,REST>
16 <SET 2RET T>)> ;"Really <REST <PUTREST ...."
17 <COND (<AND <==? <NODE-TYPE <2 .K>> ,QUOTE-CODE>
18 <==? <NODE-NAME <2 .K>> ()>>
19 <SET ST1 <GEN <1 .K> <UPDATE-WHERE .NOD .WHERE>>>)
20 (<AND <NOT <SIDE-EFFECTS? <1 .K>>>
21 <NOT <SIDE-EFFECTS? <2 .K>>>
22 <MEMQ <NODE-TYPE <1 .K>> ,SNODES>>
23 <AND <==? <NODE-TYPE <SET N <1 .K>>> ,LVAL-CODE>
24 <COND (<==? <LENGTH <SET CD <TYPE-INFO .N>>> 2> <2 .CD>)
26 <SET CD <NODE-NAME .N>>
29 #DECL ((LL) <LIST SYMTAB ANY>)
30 <AND <==? .CD <1 .LL>> <MAPLEAVE>>>
32 <SET NO-KILL ((.CD <>) !.NO-KILL)>>
35 <COND (.2RET <GOODACS <2 .K> .WHERE>)
36 (ELSE <DATUM LIST ANY-AC>)>>>
39 <COND (.2RET DONT-CARE)
40 (ELSE <UPDATE-WHERE .NOD .WHERE>)>>>
41 <DELAY-KILL .NO-KILL .ONO>)
46 <COND (<OR <==? .WHERE FLUSHED> .2RET>
49 <SET ST2 <GEN <2 .K> <DATUM LIST ANY-AC>>>)>
52 <G? 1 <MINL <RESULT-TYPE <1 .K>>>>
53 <COND (<TYPE? <DATVAL .ST1> AC>
54 <EMIT <INSTRUCTION `JUMPE <ACSYM <DATVAL .ST1>> |CERR2 >>)
56 <EMIT <INSTRUCTION `SKIPN !<ADDR:VALUE .ST1>>>
57 <BRANCH:TAG |CERR2 >)>>
58 <AND <ASSIGNED? ST2> <TOACV .ST2>>
59 <OR <TYPE? <DATVAL .ST1> AC> <SET FLG <>>>
60 <COND (<ASSIGNED? ST2>
62 <EMIT <INSTRUCTION `HRRM
63 <ACSYM <CHTYPE <DATVAL .ST2> AC>>
64 (<ADDRSYM <CHTYPE <DATVAL .ST1> AC>>)>>)
66 <EMIT <INSTRUCTION `HRRM
67 <ACSYM <CHTYPE <DATVAL .ST2> AC>>
69 !<ADDR:VALUE .ST1>>>)>
70 <RET-TMP-AC <COND (.2RET .ST1) (ELSE .ST2)>>)
73 <EMIT <INSTRUCTION `HLLZS (<ADDRSYM <CHTYPE <DATVAL .ST1> AC>>)>>)
75 <EMIT <INSTRUCTION `HLLZS `@ !<ADDR:VALUE .ST1>>>)>)>
76 <MOVE:ARG <COND (.2RET .ST2) (ELSE .ST1)> .WHERE>>
78 <PUT ,GENERATORS ,PUTREST-CODE ,PUTREST-GEN>
79 <DEFINE FLUSH-COMMON-SYMT (SYMT)
82 <FUNCTION (AC "AUX" ACR)
85 <COND (<SET ACR <ACRESIDUE .AC>>
86 <COND (<EQSYMT <1 .ACR> .SYMT> <REST .ACR>)
87 (<REPEAT ((PTR <REST .ACR>) (SACR .ACR))
88 <COND (<EMPTY? .PTR> <RETURN .SACR>)>
89 <COND (<EQSYMT <1 .PTR> .SYMT>
90 <PUTREST .ACR <REST .PTR>>
93 <SET ACR <REST .ACR>>>)>)>>
94 <PUT .AC ,ACRESIDUE <COND (<EMPTY? .ACR> <>) (ELSE .ACR)>>>
100 <ENTRY ARITH-GEN ABS-GEN FLOAT-GEN FIX-GEN MOD-GEN ROT-GEN LSH-GEN 1?-GEN
101 GEN-FLOAT GENFLOAT MIN-MAX PRED:BRANCH:GEN 0-TEST FLIP TEST-GEN>
103 <USE "CACS" "CODGEN" "CHKDCL" "COMCOD" "COMPDEC" "CONFOR" "STRGEN">
105 <DEFINE TEST-GEN (NOD WHERE
106 "OPTIONAL" (NOTF <>) (BRANCH <>) (DIR <>)
107 "AUX" (K <1 <KIDS .NOD>>) (K2 <2 <KIDS .NOD>>) REGT REGT2
108 (S <SW? <NODE-NAME .NOD>>) TRANSFORM ATYP ATYP2 B2
109 (SDIR .DIR) (RW .WHERE) TRANS1 (FLS <==? .RW FLUSHED>)
110 TEM (ONO .NO-KILL) (NO-KILL .ONO)
112 #DECL ((NOD K K2) NODE (REGT) DATUM (TRANSFORM) <SPECIAL TRANS>
113 (TRANS1) TRANS (NO-KILL) <SPECIAL LIST>)
115 <COND (<==? .WHERE FLUSHED> FLUSHED)
116 (ELSE <UPDATE-WHERE .NOD .WHERE>)>>
117 <COND (<OR <==? <NODE-TYPE .K2> ,QUOTE-CODE>
118 <AND <NOT <MEMQ <NODE-TYPE .K> ,SNODES>>
119 <NOT <SIDE-EFFECTS .NOD>>
120 <MEMQ <NODE-TYPE .K2> ,SNODES>>>
121 <COND (<AND <==? <NODE-TYPE .K> ,LVAL-CODE>
122 <COND (<==? <LENGTH <SET TEM <TYPE-INFO .K>>> 2> <2 .TEM>)
124 <SET TEM <NODE-NAME .K>>
127 <AND <==? <1 .LL> .TEM> <MAPLEAVE>>>
129 <SET NO-KILL ((<NODE-NAME .K> <>) !.NO-KILL)>)>
131 <SET K2 <1 <KIDS .NOD>>>
132 <PUT .NOD ,NODE-NAME <FLOP <NODE-NAME .NOD>>>)>
133 <SET ATYP <ISTYPE? <RESULT-TYPE .K2>>>
134 <SET ATYP2 <ISTYPE-GOOD? <RESULT-TYPE .K>>>
136 <DATUM <COND (.ATYP .ATYP) (ELSE ANY-AC)> ANY-AC>>
138 <COND (<OR <==? <NODE-TYPE .K> ,QUOTE-CODE>
139 <NOT <SIDE-EFFECTS .K2>>>
141 (.ATYP2 <DATUM .ATYP2 ANY-AC>)
142 (ELSE <DATUM ANY-AC ANY-AC>)>>
143 <COND (<N==? <NODE-TYPE .K> ,QUOTE-CODE>
144 <COND (<OR <==? .ATYP FLOAT> <==? .ATYP2 FLOAT>>)
146 <SET TRANSFORM <MAKE-TRANS .NOD 1 1 0 1 1 <+ 2 <- .S>> .S>>
147 <PUT <2 .TRANSFORM> 6 1>
148 <PUT <2 .TRANSFORM> 7 0>)>
149 <SET REGT2 <GEN .K .REGT2>>
150 <COND (<ASSIGNED? TRANSFORM>
151 <SET TRANS1 .TRANSFORM>
152 <SET TRANSFORM <UPDATE-TRANS .NOD .TRANS1>>)>
153 <COND (<TYPE? <DATVAL .REGT2> AC>
154 <SET REGT <GEN .K2 DONT-CARE>>
155 <COND (<TYPE? <DATVAL .REGT2> AC>
156 <PUT .NOD ,NODE-NAME <FLOP <NODE-NAME .NOD>>>
160 <COND (<ASSIGNED? TRANSFORM>
162 <SET TRANS1 .TRANSFORM>
163 <SET TRANSFORM .TEM>)>
167 (ELSE <TOACV .REGT>)>)
168 (ELSE <SET REGT <GEN .K2 .REGT>>)>)
170 <COND (<OR <==? .ATYP FIX>
173 <SET TRANSFORM <MAKE-TRANS .NOD 1 1 0 1 1 <+ 2 <- .S>> .S>>)>
174 <COND (<==? .ATYP FIX>
175 <PUT <PUT <2 .TRANSFORM> 2 1> 3 <FIX <NODE-NAME .K>>>)>
176 <COND (<LN-LST .K2> <SET REGT ,NO-DATUM>)
178 <SET REGT <GEN .K2 .REGT>>
180 <PUT .REGT ,DATTYP .ATYP>)>
188 <COND (<ASSIGNED? TRANSFORM>
189 <DO-TRANS <FIX <NODE-NAME .K>> .TRANSFORM>)
190 (ELSE <NODE-NAME .K>)>
191 <AND <ASSIGNED? TRANSFORM> <NOT <0? <1 <3 .TRANSFORM>>>>>>
193 <DELAY-KILL .NO-KILL .ONO>
194 <AND <ASSIGNED? TRANSFORM>
195 <CONFORM .REGT .REGT2 .TRANSFORM .TRANS1>
196 <PUT .NOD ,NODE-NAME <FLOP <NODE-NAME .NOD>>>>
198 <AND .NOTF <SET DIR <NOT .DIR>>>
200 <GEN-COMP2 <NODE-NAME .NOD>
205 <COND (.FLS .DIR) (ELSE <NOT .DIR>)>
206 <COND (.FLS .BRANCH) (ELSE <SET B2 <MAKE:TAG>>)>>
208 <SET RW <MOVE:ARG <MOVE:ARG <REFERENCE .SDIR> .WHERE> .RW>>
214 <GEN-COMP2 <NODE-NAME .NOD>
220 <SET BRANCH <MAKE:TAG>>>
221 <MOVE:ARG <REFERENCE T> .WHERE>
223 <BRANCH:TAG <SET B2 <MAKE:TAG>>>
225 <MOVE:ARG <REFERENCE <>> .WHERE>
227 <MOVE:ARG .WHERE .RW>)>>
229 <PUT ,GENERATORS ,TEST-CODE ,TEST-GEN>