996
|
1 /* Automatically generated output, edit source and recompile to change */
|
|
2 #include "oil.h"
|
|
3 int optimize_pass1_7(node *np)
|
|
4 { int opted=0;
|
|
5 unsigned long c,c1,c2,c3,c4,c5,c6,c7,c8,c9;
|
|
6 unsigned long x,x1,x2,x3,x4,x5,x6,x7,x8,x9,r;
|
|
7 int tempw;
|
|
8 node *tp;
|
|
9 checknodeactbits(np);
|
|
10 if(np->opcode==C_AND &&
|
|
11 np->lval->opcode==C_RSHIFTBY &&
|
|
12 np->rval->opcode==C_RSHIFTBY)
|
|
13 do
|
|
14 {
|
|
15 if(!nodessame(np->lval->rval,np->rval->rval)) break;
|
|
16 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
17 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
18 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
19 OPTING(distribll);
|
|
20 tp=newnode();
|
|
21 MAYBENEWNODE(tp);
|
|
22 tp->opcode=C_RSHIFTBY;
|
|
23 tp->width=32;
|
|
24 MAYBENEWNODE(tp->lval);
|
|
25 tp->lval->opcode=C_AND;
|
|
26 tp->lval->width=32;
|
|
27 tp->lval->lval=np->lval->lval;
|
|
28 np->lval->lval=0;
|
|
29 tp->lval->rval=np->rval->lval;
|
|
30 np->rval->lval=0;
|
|
31 tp->rval=np->rval->rval;
|
|
32 np->rval->rval=0;
|
|
33 nodefree(np->lval); nodefree(np->rval);
|
|
34 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
35 } while(0);
|
|
36
|
|
37 checknodeactbits(np);
|
|
38 if(np->opcode==C_OR &&
|
|
39 np->lval->opcode==C_RSHIFTBY &&
|
|
40 np->rval->opcode==C_RSHIFTBY)
|
|
41 do
|
|
42 {
|
|
43 if(!nodessame(np->lval->rval,np->rval->rval)) break;
|
|
44 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
45 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
46 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
47 OPTING(distribll);
|
|
48 tp=newnode();
|
|
49 MAYBENEWNODE(tp);
|
|
50 tp->opcode=C_RSHIFTBY;
|
|
51 tp->width=32;
|
|
52 MAYBENEWNODE(tp->lval);
|
|
53 tp->lval->opcode=C_OR;
|
|
54 tp->lval->width=32;
|
|
55 tp->lval->lval=np->lval->lval;
|
|
56 np->lval->lval=0;
|
|
57 tp->lval->rval=np->rval->lval;
|
|
58 np->rval->lval=0;
|
|
59 tp->rval=np->rval->rval;
|
|
60 np->rval->rval=0;
|
|
61 nodefree(np->lval); nodefree(np->rval);
|
|
62 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
63 } while(0);
|
|
64
|
|
65 checknodeactbits(np);
|
|
66 if(np->opcode==C_XOR &&
|
|
67 np->lval->opcode==C_RSHIFTBY &&
|
|
68 np->rval->opcode==C_RSHIFTBY)
|
|
69 do
|
|
70 {
|
|
71 if(!nodessame(np->lval->rval,np->rval->rval)) break;
|
|
72 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
73 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
74 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
75 OPTING(distribll);
|
|
76 tp=newnode();
|
|
77 MAYBENEWNODE(tp);
|
|
78 tp->opcode=C_RSHIFTBY;
|
|
79 tp->width=32;
|
|
80 MAYBENEWNODE(tp->lval);
|
|
81 tp->lval->opcode=C_XOR;
|
|
82 tp->lval->width=32;
|
|
83 tp->lval->lval=np->lval->lval;
|
|
84 np->lval->lval=0;
|
|
85 tp->lval->rval=np->rval->lval;
|
|
86 np->rval->lval=0;
|
|
87 tp->rval=np->rval->rval;
|
|
88 np->rval->rval=0;
|
|
89 nodefree(np->lval); nodefree(np->rval);
|
|
90 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
91 } while(0);
|
|
92
|
|
93 checknodeactbits(np);
|
|
94 if(np->opcode==C_AND &&
|
|
95 np->lval->opcode==C_AND &&
|
|
96 np->rval->opcode==C_AND)
|
|
97 do
|
|
98 {
|
|
99 if(!nodessame(np->lval->lval,np->rval->rval)) break;
|
|
100 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
101 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
102 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
103 OPTING(distribrl);
|
|
104 tp=newnode();
|
|
105 MAYBENEWNODE(tp);
|
|
106 tp->opcode=C_AND;
|
|
107 tp->width=32;
|
|
108 MAYBENEWNODE(tp->lval);
|
|
109 tp->lval->opcode=C_AND;
|
|
110 tp->lval->width=32;
|
|
111 tp->lval->lval=np->lval->rval;
|
|
112 np->lval->rval=0;
|
|
113 tp->lval->rval=np->rval->lval;
|
|
114 np->rval->lval=0;
|
|
115 tp->rval=np->rval->rval;
|
|
116 np->rval->rval=0;
|
|
117 nodefree(np->lval); nodefree(np->rval);
|
|
118 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
119 } while(0);
|
|
120
|
|
121 checknodeactbits(np);
|
|
122 if(np->opcode==C_AND &&
|
|
123 np->lval->opcode==C_OR &&
|
|
124 np->rval->opcode==C_OR)
|
|
125 do
|
|
126 {
|
|
127 if(!nodessame(np->lval->lval,np->rval->rval)) break;
|
|
128 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
129 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
130 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
131 OPTING(distribrl);
|
|
132 tp=newnode();
|
|
133 MAYBENEWNODE(tp);
|
|
134 tp->opcode=C_OR;
|
|
135 tp->width=32;
|
|
136 MAYBENEWNODE(tp->lval);
|
|
137 tp->lval->opcode=C_AND;
|
|
138 tp->lval->width=32;
|
|
139 tp->lval->lval=np->lval->rval;
|
|
140 np->lval->rval=0;
|
|
141 tp->lval->rval=np->rval->lval;
|
|
142 np->rval->lval=0;
|
|
143 tp->rval=np->rval->rval;
|
|
144 np->rval->rval=0;
|
|
145 nodefree(np->lval); nodefree(np->rval);
|
|
146 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
147 } while(0);
|
|
148
|
|
149 checknodeactbits(np);
|
|
150 if(np->opcode==C_OR &&
|
|
151 np->lval->opcode==C_AND &&
|
|
152 np->rval->opcode==C_AND)
|
|
153 do
|
|
154 {
|
|
155 if(!nodessame(np->lval->lval,np->rval->rval)) break;
|
|
156 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
157 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
158 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
159 OPTING(distribrl);
|
|
160 tp=newnode();
|
|
161 MAYBENEWNODE(tp);
|
|
162 tp->opcode=C_AND;
|
|
163 tp->width=32;
|
|
164 MAYBENEWNODE(tp->lval);
|
|
165 tp->lval->opcode=C_OR;
|
|
166 tp->lval->width=32;
|
|
167 tp->lval->lval=np->lval->rval;
|
|
168 np->lval->rval=0;
|
|
169 tp->lval->rval=np->rval->lval;
|
|
170 np->rval->lval=0;
|
|
171 tp->rval=np->rval->rval;
|
|
172 np->rval->rval=0;
|
|
173 nodefree(np->lval); nodefree(np->rval);
|
|
174 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
175 } while(0);
|
|
176
|
|
177 checknodeactbits(np);
|
|
178 if(np->opcode==C_OR &&
|
|
179 np->lval->opcode==C_OR &&
|
|
180 np->rval->opcode==C_OR)
|
|
181 do
|
|
182 {
|
|
183 if(!nodessame(np->lval->lval,np->rval->rval)) break;
|
|
184 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
185 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
186 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
187 OPTING(distribrl);
|
|
188 tp=newnode();
|
|
189 MAYBENEWNODE(tp);
|
|
190 tp->opcode=C_OR;
|
|
191 tp->width=32;
|
|
192 MAYBENEWNODE(tp->lval);
|
|
193 tp->lval->opcode=C_OR;
|
|
194 tp->lval->width=32;
|
|
195 tp->lval->lval=np->lval->rval;
|
|
196 np->lval->rval=0;
|
|
197 tp->lval->rval=np->rval->lval;
|
|
198 np->rval->lval=0;
|
|
199 tp->rval=np->rval->rval;
|
|
200 np->rval->rval=0;
|
|
201 nodefree(np->lval); nodefree(np->rval);
|
|
202 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
203 } while(0);
|
|
204
|
|
205 checknodeactbits(np);
|
|
206 if(np->opcode==C_XOR &&
|
|
207 np->lval->opcode==C_AND &&
|
|
208 np->rval->opcode==C_AND)
|
|
209 do
|
|
210 {
|
|
211 if(!nodessame(np->lval->lval,np->rval->rval)) break;
|
|
212 x3=np->rval->rval->constant; c3=np->rval->rval->optdata;
|
|
213 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
214 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
215 OPTING(distribrl);
|
|
216 tp=newnode();
|
|
217 MAYBENEWNODE(tp);
|
|
218 tp->opcode=C_AND;
|
|
219 tp->width=32;
|
|
220 MAYBENEWNODE(tp->lval);
|
|
221 tp->lval->opcode=C_XOR;
|
|
222 tp->lval->width=32;
|
|
223 tp->lval->lval=np->lval->rval;
|
|
224 np->lval->rval=0;
|
|
225 tp->lval->rval=np->rval->lval;
|
|
226 np->rval->lval=0;
|
|
227 tp->rval=np->rval->rval;
|
|
228 np->rval->rval=0;
|
|
229 nodefree(np->lval); nodefree(np->rval);
|
|
230 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
231 } while(0);
|
|
232
|
|
233 checknodeactbits(np);
|
|
234 if(np->opcode==C_AND &&
|
|
235 np->lval->opcode==C_AND &&
|
|
236 np->rval->opcode==C_AND)
|
|
237 do
|
|
238 {
|
|
239 if(!nodessame(np->lval->rval,np->rval->lval)) break;
|
|
240 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
241 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
242 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
243 OPTING(distriblr);
|
|
244 tp=newnode();
|
|
245 MAYBENEWNODE(tp);
|
|
246 tp->opcode=C_AND;
|
|
247 tp->width=32;
|
|
248 MAYBENEWNODE(tp->lval);
|
|
249 tp->lval->opcode=C_AND;
|
|
250 tp->lval->width=32;
|
|
251 tp->lval->lval=np->lval->lval;
|
|
252 np->lval->lval=0;
|
|
253 tp->lval->rval=np->rval->rval;
|
|
254 np->rval->rval=0;
|
|
255 tp->rval=np->rval->lval;
|
|
256 np->rval->lval=0;
|
|
257 nodefree(np->lval); nodefree(np->rval);
|
|
258 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
259 } while(0);
|
|
260
|
|
261 checknodeactbits(np);
|
|
262 if(np->opcode==C_AND &&
|
|
263 np->lval->opcode==C_OR &&
|
|
264 np->rval->opcode==C_OR)
|
|
265 do
|
|
266 {
|
|
267 if(!nodessame(np->lval->rval,np->rval->lval)) break;
|
|
268 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
269 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
270 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
271 OPTING(distriblr);
|
|
272 tp=newnode();
|
|
273 MAYBENEWNODE(tp);
|
|
274 tp->opcode=C_OR;
|
|
275 tp->width=32;
|
|
276 MAYBENEWNODE(tp->lval);
|
|
277 tp->lval->opcode=C_AND;
|
|
278 tp->lval->width=32;
|
|
279 tp->lval->lval=np->lval->lval;
|
|
280 np->lval->lval=0;
|
|
281 tp->lval->rval=np->rval->rval;
|
|
282 np->rval->rval=0;
|
|
283 tp->rval=np->rval->lval;
|
|
284 np->rval->lval=0;
|
|
285 nodefree(np->lval); nodefree(np->rval);
|
|
286 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
287 } while(0);
|
|
288
|
|
289 checknodeactbits(np);
|
|
290 if(np->opcode==C_OR &&
|
|
291 np->lval->opcode==C_AND &&
|
|
292 np->rval->opcode==C_AND)
|
|
293 do
|
|
294 {
|
|
295 if(!nodessame(np->lval->rval,np->rval->lval)) break;
|
|
296 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
297 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
298 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
299 OPTING(distriblr);
|
|
300 tp=newnode();
|
|
301 MAYBENEWNODE(tp);
|
|
302 tp->opcode=C_AND;
|
|
303 tp->width=32;
|
|
304 MAYBENEWNODE(tp->lval);
|
|
305 tp->lval->opcode=C_OR;
|
|
306 tp->lval->width=32;
|
|
307 tp->lval->lval=np->lval->lval;
|
|
308 np->lval->lval=0;
|
|
309 tp->lval->rval=np->rval->rval;
|
|
310 np->rval->rval=0;
|
|
311 tp->rval=np->rval->lval;
|
|
312 np->rval->lval=0;
|
|
313 nodefree(np->lval); nodefree(np->rval);
|
|
314 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
315 } while(0);
|
|
316
|
|
317 checknodeactbits(np);
|
|
318 if(np->opcode==C_OR &&
|
|
319 np->lval->opcode==C_OR &&
|
|
320 np->rval->opcode==C_OR)
|
|
321 do
|
|
322 {
|
|
323 if(!nodessame(np->lval->rval,np->rval->lval)) break;
|
|
324 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
325 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
326 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
327 OPTING(distriblr);
|
|
328 tp=newnode();
|
|
329 MAYBENEWNODE(tp);
|
|
330 tp->opcode=C_OR;
|
|
331 tp->width=32;
|
|
332 MAYBENEWNODE(tp->lval);
|
|
333 tp->lval->opcode=C_OR;
|
|
334 tp->lval->width=32;
|
|
335 tp->lval->lval=np->lval->lval;
|
|
336 np->lval->lval=0;
|
|
337 tp->lval->rval=np->rval->rval;
|
|
338 np->rval->rval=0;
|
|
339 tp->rval=np->rval->lval;
|
|
340 np->rval->lval=0;
|
|
341 nodefree(np->lval); nodefree(np->rval);
|
|
342 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
343 } while(0);
|
|
344
|
|
345 checknodeactbits(np);
|
|
346 if(np->opcode==C_XOR &&
|
|
347 np->lval->opcode==C_AND &&
|
|
348 np->rval->opcode==C_AND)
|
|
349 do
|
|
350 {
|
|
351 if(!nodessame(np->lval->rval,np->rval->lval)) break;
|
|
352 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
353 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
354 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
355 OPTING(distriblr);
|
|
356 tp=newnode();
|
|
357 MAYBENEWNODE(tp);
|
|
358 tp->opcode=C_AND;
|
|
359 tp->width=32;
|
|
360 MAYBENEWNODE(tp->lval);
|
|
361 tp->lval->opcode=C_XOR;
|
|
362 tp->lval->width=32;
|
|
363 tp->lval->lval=np->lval->lval;
|
|
364 np->lval->lval=0;
|
|
365 tp->lval->rval=np->rval->rval;
|
|
366 np->rval->rval=0;
|
|
367 tp->rval=np->rval->lval;
|
|
368 np->rval->lval=0;
|
|
369 nodefree(np->lval); nodefree(np->rval);
|
|
370 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
371 } while(0);
|
|
372
|
|
373 checknodeactbits(np);
|
|
374 if(np->opcode==C_AND &&
|
|
375 np->lval->opcode==C_AND &&
|
|
376 np->rval->opcode==C_AND)
|
|
377 do
|
|
378 {
|
|
379 if(!nodessame(np->lval->lval,np->rval->lval)) break;
|
|
380 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
381 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
382 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
383 OPTING(distribrr);
|
|
384 tp=newnode();
|
|
385 MAYBENEWNODE(tp);
|
|
386 tp->opcode=C_AND;
|
|
387 tp->width=32;
|
|
388 MAYBENEWNODE(tp->lval);
|
|
389 tp->lval->opcode=C_AND;
|
|
390 tp->lval->width=32;
|
|
391 tp->lval->lval=np->lval->rval;
|
|
392 np->lval->rval=0;
|
|
393 tp->lval->rval=np->rval->rval;
|
|
394 np->rval->rval=0;
|
|
395 tp->rval=np->rval->lval;
|
|
396 np->rval->lval=0;
|
|
397 nodefree(np->lval); nodefree(np->rval);
|
|
398 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
399 } while(0);
|
|
400
|
|
401 checknodeactbits(np);
|
|
402 if(np->opcode==C_AND &&
|
|
403 np->lval->opcode==C_OR &&
|
|
404 np->rval->opcode==C_OR)
|
|
405 do
|
|
406 {
|
|
407 if(!nodessame(np->lval->lval,np->rval->lval)) break;
|
|
408 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
409 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
410 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
411 OPTING(distribrr);
|
|
412 tp=newnode();
|
|
413 MAYBENEWNODE(tp);
|
|
414 tp->opcode=C_OR;
|
|
415 tp->width=32;
|
|
416 MAYBENEWNODE(tp->lval);
|
|
417 tp->lval->opcode=C_AND;
|
|
418 tp->lval->width=32;
|
|
419 tp->lval->lval=np->lval->rval;
|
|
420 np->lval->rval=0;
|
|
421 tp->lval->rval=np->rval->rval;
|
|
422 np->rval->rval=0;
|
|
423 tp->rval=np->rval->lval;
|
|
424 np->rval->lval=0;
|
|
425 nodefree(np->lval); nodefree(np->rval);
|
|
426 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
427 } while(0);
|
|
428
|
|
429 checknodeactbits(np);
|
|
430 if(np->opcode==C_OR &&
|
|
431 np->lval->opcode==C_AND &&
|
|
432 np->rval->opcode==C_AND)
|
|
433 do
|
|
434 {
|
|
435 if(!nodessame(np->lval->lval,np->rval->lval)) break;
|
|
436 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
437 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
438 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
439 OPTING(distribrr);
|
|
440 tp=newnode();
|
|
441 MAYBENEWNODE(tp);
|
|
442 tp->opcode=C_AND;
|
|
443 tp->width=32;
|
|
444 MAYBENEWNODE(tp->lval);
|
|
445 tp->lval->opcode=C_OR;
|
|
446 tp->lval->width=32;
|
|
447 tp->lval->lval=np->lval->rval;
|
|
448 np->lval->rval=0;
|
|
449 tp->lval->rval=np->rval->rval;
|
|
450 np->rval->rval=0;
|
|
451 tp->rval=np->rval->lval;
|
|
452 np->rval->lval=0;
|
|
453 nodefree(np->lval); nodefree(np->rval);
|
|
454 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
455 } while(0);
|
|
456
|
|
457 checknodeactbits(np);
|
|
458 if(np->opcode==C_OR &&
|
|
459 np->lval->opcode==C_OR &&
|
|
460 np->rval->opcode==C_OR)
|
|
461 do
|
|
462 {
|
|
463 if(!nodessame(np->lval->lval,np->rval->lval)) break;
|
|
464 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
465 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
466 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
467 OPTING(distribrr);
|
|
468 tp=newnode();
|
|
469 MAYBENEWNODE(tp);
|
|
470 tp->opcode=C_OR;
|
|
471 tp->width=32;
|
|
472 MAYBENEWNODE(tp->lval);
|
|
473 tp->lval->opcode=C_OR;
|
|
474 tp->lval->width=32;
|
|
475 tp->lval->lval=np->lval->rval;
|
|
476 np->lval->rval=0;
|
|
477 tp->lval->rval=np->rval->rval;
|
|
478 np->rval->rval=0;
|
|
479 tp->rval=np->rval->lval;
|
|
480 np->rval->lval=0;
|
|
481 nodefree(np->lval); nodefree(np->rval);
|
|
482 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
483 } while(0);
|
|
484
|
|
485 checknodeactbits(np);
|
|
486 if(np->opcode==C_XOR &&
|
|
487 np->lval->opcode==C_AND &&
|
|
488 np->rval->opcode==C_AND)
|
|
489 do
|
|
490 {
|
|
491 if(!nodessame(np->lval->lval,np->rval->lval)) break;
|
|
492 x3=np->rval->lval->constant; c3=np->rval->lval->optdata;
|
|
493 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
494 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
495 OPTING(distribrr);
|
|
496 tp=newnode();
|
|
497 MAYBENEWNODE(tp);
|
|
498 tp->opcode=C_AND;
|
|
499 tp->width=32;
|
|
500 MAYBENEWNODE(tp->lval);
|
|
501 tp->lval->opcode=C_XOR;
|
|
502 tp->lval->width=32;
|
|
503 tp->lval->lval=np->lval->rval;
|
|
504 np->lval->rval=0;
|
|
505 tp->lval->rval=np->rval->rval;
|
|
506 np->rval->rval=0;
|
|
507 tp->rval=np->rval->lval;
|
|
508 np->rval->lval=0;
|
|
509 nodefree(np->lval); nodefree(np->rval);
|
|
510 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
511 } while(0);
|
|
512
|
|
513 checknodeactbits(np);
|
|
514 if(np->opcode==C_AND &&
|
|
515 np->lval->opcode==C_LOGICALNOT &&
|
|
516 np->rval->opcode==C_LOGICALNOT)
|
|
517 do
|
|
518 {
|
|
519 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
520 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
521 OPTING(distribunary);
|
|
522 tp=newnode();
|
|
523 MAYBENEWNODE(tp);
|
|
524 tp->opcode=C_LOGICALNOT;
|
|
525 tp->width=16;
|
|
526 MAYBENEWNODE(tp->rval);
|
|
527 tp->rval->opcode=C_OR;
|
|
528 tp->rval->width=32;
|
|
529 tp->rval->lval=np->lval->rval;
|
|
530 np->lval->rval=0;
|
|
531 tp->rval->rval=np->rval->rval;
|
|
532 np->rval->rval=0;
|
|
533 nodefree(np->lval); nodefree(np->rval);
|
|
534 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
535 } while(0);
|
|
536
|
|
537 checknodeactbits(np);
|
|
538 if(np->opcode==C_OR &&
|
|
539 np->lval->opcode==C_AND &&
|
|
540 np->lval->lval->opcode==C_XOR &&
|
|
541 np->rval->opcode==C_AND)
|
|
542 do
|
|
543 {
|
|
544 x4=np->rval->rval->constant; c4=np->rval->rval->optdata;
|
|
545 x3=np->lval->rval->constant; c3=np->lval->rval->optdata;
|
|
546 x2=np->lval->lval->rval->constant; c2=np->lval->lval->rval->optdata;
|
|
547 if(!nodessame(np->lval->lval->lval,np->rval->lval)) break;
|
|
548 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
549 x=x4; c=c4; if(!((c&c3)==0)) break;
|
|
550 OPTING(distribhalfxoroveror1);
|
|
551 tp=newnode();
|
|
552 MAYBENEWNODE(tp);
|
|
553 tp->opcode=C_AND;
|
|
554 tp->width=32;
|
|
555 MAYBENEWNODE(tp->lval);
|
|
556 tp->lval->opcode=C_XOR;
|
|
557 tp->lval->width=32;
|
|
558 tp->lval->lval=np->rval->lval;
|
|
559 np->rval->lval=0;
|
|
560 tp->lval->rval=np->lval->lval->rval;
|
|
561 np->lval->lval->rval=0;
|
|
562 MAYBENEWNODE(tp->rval);
|
|
563 tp->rval->opcode=C_OR;
|
|
564 tp->rval->width=32;
|
|
565 tp->rval->lval=np->lval->rval;
|
|
566 np->lval->rval=0;
|
|
567 tp->rval->rval=np->rval->rval;
|
|
568 np->rval->rval=0;
|
|
569 nodefree(np->lval); nodefree(np->rval);
|
|
570 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
571 } while(0);
|
|
572
|
|
573 c=c1=c2=c3=c4=c5=c6=c7=c8=c9=0;
|
|
574 x=x1=x2=x3=x4=x5=x6=x7=x8=x9=r=0;
|
|
575 if(c+c1+c2+c3+c4+c5+c6+c7+c8+c9+r+
|
|
576 x+x1+x2+x3+x4+x5+x6+x7+x8+x9) raise(SIGSEGV);
|
|
577 return opted;
|
|
578 }
|