996
|
1 /* Automatically generated output, edit source and recompile to change */
|
|
2 #include "oil.h"
|
|
3 int optimize_pass1_3(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->rval->opcode==C_XOR &&
|
|
12 np->rval->lval->width==32)
|
|
13 do
|
|
14 {
|
|
15 if(!nodessame(np->lval,np->rval->rval)) break;
|
|
16 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
17 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
18 OPTING(cxorand32);
|
|
19 tp=newnode();
|
|
20 MAYBENEWNODE(tp);
|
|
21 tp->opcode=C_AND;
|
|
22 tp->width=32;
|
|
23 MAYBENEWNODE(tp->lval);
|
|
24 tp->lval->opcode=C_NOT;
|
|
25 tp->lval->width=32;
|
|
26 tp->lval->rval=np->rval->lval;
|
|
27 np->rval->lval=0;
|
|
28 tp->rval=np->rval->rval;
|
|
29 np->rval->rval=0;
|
|
30 nodefree(np->lval); nodefree(np->rval);
|
|
31 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
32 } while(0);
|
|
33
|
|
34 checknodeactbits(np);
|
|
35 if(np->opcode==C_AND &&
|
|
36 np->rval->opcode==C_XOR &&
|
|
37 np->rval->rval->width==32)
|
|
38 do
|
|
39 {
|
|
40 if(!nodessame(np->lval,np->rval->lval)) break;
|
|
41 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
42 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
43 OPTING(cxorand32);
|
|
44 tp=newnode();
|
|
45 MAYBENEWNODE(tp);
|
|
46 tp->opcode=C_AND;
|
|
47 tp->width=32;
|
|
48 MAYBENEWNODE(tp->lval);
|
|
49 tp->lval->opcode=C_NOT;
|
|
50 tp->lval->width=32;
|
|
51 tp->lval->rval=np->rval->rval;
|
|
52 np->rval->rval=0;
|
|
53 tp->rval=np->rval->lval;
|
|
54 np->rval->lval=0;
|
|
55 nodefree(np->lval); nodefree(np->rval);
|
|
56 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
57 } while(0);
|
|
58
|
|
59 checknodeactbits(np);
|
|
60 if(np->opcode==SELECT &&
|
|
61 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
62 do
|
|
63 {
|
|
64 x2=np->rval->constant; c2=np->rval->optdata;
|
|
65 x1=np->lval->constant; c1=np->lval->optdata;
|
|
66 x=x2; c=c2; if(!(x==xselx(x))) break;
|
|
67 OPTING(xselpow2m1);
|
|
68 tp=newnode();
|
|
69 MAYBENEWNODE(tp);
|
|
70 tp->opcode=C_AND;
|
|
71 tp->width=32;
|
|
72 tp->lval=np->lval;
|
|
73 np->lval=0;
|
|
74 tp->rval=np->rval;
|
|
75 np->rval=0;
|
|
76 nodefree(np->lval); nodefree(np->rval);
|
|
77 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
78 } while(0);
|
|
79
|
|
80 checknodeactbits(np);
|
|
81 if(np->opcode==SELECT &&
|
|
82 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
83 do
|
|
84 {
|
|
85 x2=np->rval->constant; c2=np->rval->optdata;
|
|
86 x1=np->lval->constant; c1=np->lval->optdata;
|
|
87 x=x2; c=c2; if(!(xselx(x)==1)) break;
|
|
88 OPTING(xselpow2);
|
|
89 tp=newnode();
|
|
90 MAYBENEWNODE(tp);
|
|
91 tp->opcode=C_LOGICALNOT;
|
|
92 tp->width=16;
|
|
93 MAYBENEWNODE(tp->rval);
|
|
94 tp->rval->opcode=C_LOGICALNOT;
|
|
95 tp->rval->width=16;
|
|
96 MAYBENEWNODE(tp->rval->rval);
|
|
97 tp->rval->rval->opcode=C_AND;
|
|
98 tp->rval->rval->width=32;
|
|
99 tp->rval->rval->lval=np->lval;
|
|
100 np->lval=0;
|
|
101 tp->rval->rval->rval=np->rval;
|
|
102 np->rval=0;
|
|
103 nodefree(np->lval); nodefree(np->rval);
|
|
104 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
105 } while(0);
|
|
106
|
|
107 checknodeactbits(np);
|
|
108 if(np->opcode==SELECT &&
|
|
109 np->lval->opcode==SELECT &&
|
|
110 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
111 np->rval->constant==1LU)
|
|
112 do
|
|
113 {
|
|
114 if(!nodessame(np->lval->lval,np->lval->rval)) break;
|
|
115 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
116 OPTING(xselxsel1);
|
|
117 tp=newnode();
|
|
118 MAYBENEWNODE(tp);
|
|
119 tp->opcode=C_LOGICALNOT;
|
|
120 tp->width=16;
|
|
121 MAYBENEWNODE(tp->rval);
|
|
122 tp->rval->opcode=C_LOGICALNOT;
|
|
123 tp->rval->width=16;
|
|
124 tp->rval->rval=np->lval->rval;
|
|
125 np->lval->rval=0;
|
|
126 nodefree(np->lval); nodefree(np->rval);
|
|
127 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
128 } while(0);
|
|
129
|
|
130 checknodeactbits(np);
|
|
131 if(np->opcode==C_AND &&
|
|
132 np->lval->opcode==SELECT &&
|
|
133 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
134 np->rval->constant==1LU)
|
|
135 do
|
|
136 {
|
|
137 if(!nodessame(np->lval->lval,np->lval->rval)) break;
|
|
138 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
139 OPTING(xselxsel1);
|
|
140 tp=newnode();
|
|
141 MAYBENEWNODE(tp);
|
|
142 tp->opcode=C_LOGICALNOT;
|
|
143 tp->width=16;
|
|
144 MAYBENEWNODE(tp->rval);
|
|
145 tp->rval->opcode=C_LOGICALNOT;
|
|
146 tp->rval->width=16;
|
|
147 tp->rval->rval=np->lval->rval;
|
|
148 np->lval->rval=0;
|
|
149 nodefree(np->lval); nodefree(np->rval);
|
|
150 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
151 } while(0);
|
|
152
|
|
153 checknodeactbits(np);
|
|
154 if(np->opcode==C_AND &&
|
|
155 (np->lval->opcode==MESH || np->lval->opcode==MESH32) &&
|
|
156 np->lval->constant==1LU &&
|
|
157 np->rval->opcode==SELECT)
|
|
158 do
|
|
159 {
|
|
160 if(!nodessame(np->rval->lval,np->rval->rval)) break;
|
|
161 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
162 OPTING(xselxsel1);
|
|
163 tp=newnode();
|
|
164 MAYBENEWNODE(tp);
|
|
165 tp->opcode=C_LOGICALNOT;
|
|
166 tp->width=16;
|
|
167 MAYBENEWNODE(tp->rval);
|
|
168 tp->rval->opcode=C_LOGICALNOT;
|
|
169 tp->rval->width=16;
|
|
170 tp->rval->rval=np->rval->rval;
|
|
171 np->rval->rval=0;
|
|
172 nodefree(np->lval); nodefree(np->rval);
|
|
173 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
174 } while(0);
|
|
175
|
|
176 checknodeactbits(np);
|
|
177 if(np->opcode==C_AND &&
|
|
178 np->lval->opcode==SELECT)
|
|
179 do
|
|
180 {
|
|
181 x2=np->rval->constant; c2=np->rval->optdata;
|
|
182 if(!nodessame(np->lval->lval,np->lval->rval)) break;
|
|
183 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
184 x=x2; c=c2; if(!(c==1)) break;
|
|
185 OPTING(xselxsel1);
|
|
186 tp=newnode();
|
|
187 MAYBENEWNODE(tp);
|
|
188 tp->opcode=C_LOGICALAND;
|
|
189 tp->width=16;
|
|
190 tp->lval=np->lval->rval;
|
|
191 np->lval->rval=0;
|
|
192 tp->rval=np->rval;
|
|
193 np->rval=0;
|
|
194 nodefree(np->lval); nodefree(np->rval);
|
|
195 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
196 } while(0);
|
|
197
|
|
198 checknodeactbits(np);
|
|
199 if(np->opcode==C_AND &&
|
|
200 np->rval->opcode==SELECT)
|
|
201 do
|
|
202 {
|
|
203 x2=np->lval->constant; c2=np->lval->optdata;
|
|
204 if(!nodessame(np->rval->lval,np->rval->rval)) break;
|
|
205 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
206 x=x2; c=c2; if(!(c==1)) break;
|
|
207 OPTING(xselxsel1);
|
|
208 tp=newnode();
|
|
209 MAYBENEWNODE(tp);
|
|
210 tp->opcode=C_LOGICALAND;
|
|
211 tp->width=16;
|
|
212 tp->lval=np->rval->rval;
|
|
213 np->rval->rval=0;
|
|
214 tp->rval=np->lval;
|
|
215 np->lval=0;
|
|
216 nodefree(np->lval); nodefree(np->rval);
|
|
217 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
218 } while(0);
|
|
219
|
|
220 checknodeactbits(np);
|
|
221 if(np->opcode==SELECT &&
|
|
222 np->lval->opcode==SELECT &&
|
|
223 (np->lval->lval->opcode==MESH || np->lval->lval->opcode==MESH32) &&
|
|
224 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
225 np->rval->constant==1LU)
|
|
226 do
|
|
227 {
|
|
228 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
229 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
230 x=x1; c=c1; if(!(x==xselx(x))) break;
|
|
231 OPTING(pow2m1selx);
|
|
232 tp=newnode();
|
|
233 MAYBENEWNODE(tp);
|
|
234 tp->opcode=C_LOGICALNOT;
|
|
235 tp->width=16;
|
|
236 MAYBENEWNODE(tp->rval);
|
|
237 tp->rval->opcode=C_LOGICALNOT;
|
|
238 tp->rval->width=16;
|
|
239 MAYBENEWNODE(tp->rval->rval);
|
|
240 tp->rval->rval->opcode=C_AND;
|
|
241 tp->rval->rval->width=32;
|
|
242 tp->rval->rval->lval=np->lval->lval;
|
|
243 np->lval->lval=0;
|
|
244 tp->rval->rval->rval=np->lval->rval;
|
|
245 np->lval->rval=0;
|
|
246 nodefree(np->lval); nodefree(np->rval);
|
|
247 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
248 } while(0);
|
|
249
|
|
250 checknodeactbits(np);
|
|
251 if(np->opcode==C_LOGICALNOT &&
|
|
252 np->rval->opcode==SELECT)
|
|
253 do
|
|
254 {
|
|
255 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
256 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
257 OPTING(notselect);
|
|
258 tp=newnode();
|
|
259 MAYBENEWNODE(tp);
|
|
260 tp->opcode=C_LOGICALNOT;
|
|
261 tp->width=16;
|
|
262 MAYBENEWNODE(tp->rval);
|
|
263 tp->rval->opcode=C_AND;
|
|
264 tp->rval->width=32;
|
|
265 tp->rval->lval=np->rval->lval;
|
|
266 np->rval->lval=0;
|
|
267 tp->rval->rval=np->rval->rval;
|
|
268 np->rval->rval=0;
|
|
269 nodefree(np->lval); nodefree(np->rval);
|
|
270 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
271 } while(0);
|
|
272
|
|
273 checknodeactbits(np);
|
|
274 if(np->opcode==MINGLE &&
|
|
275 np->lval->opcode==SELECT &&
|
|
276 (np->lval->rval->opcode==MESH || np->lval->rval->opcode==MESH32) &&
|
|
277 np->lval->rval->constant==2863311530LU)
|
|
278 do
|
|
279 {
|
|
280 x2=np->rval->constant; c2=np->rval->optdata;
|
|
281 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
282 OPTING(selectmingle1);
|
|
283 tp=newnode();
|
|
284 MAYBENEWNODE(tp);
|
|
285 tp->opcode=C_OR;
|
|
286 tp->width=32;
|
|
287 MAYBENEWNODE(tp->lval);
|
|
288 tp->lval->opcode=C_AND;
|
|
289 tp->lval->width=32;
|
|
290 tp->lval->lval=np->lval->lval;
|
|
291 np->lval->lval=0;
|
|
292 MAYBENEWNODE(tp->lval->rval);
|
|
293 tp->lval->rval->opcode=MESH32;
|
|
294 tp->lval->rval->width=32;
|
|
295 tp->lval->rval->constant=(2863311530LU);
|
|
296 MAYBENEWNODE(tp->rval);
|
|
297 tp->rval->opcode=MINGLE;
|
|
298 tp->rval->width=32;
|
|
299 MAYBENEWNODE(tp->rval->lval);
|
|
300 tp->rval->lval->opcode=MESH32;
|
|
301 tp->rval->lval->width=32;
|
|
302 tp->rval->lval->constant=(0LU);
|
|
303 tp->rval->rval=np->rval;
|
|
304 np->rval=0;
|
|
305 nodefree(np->lval); nodefree(np->rval);
|
|
306 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
307 } while(0);
|
|
308
|
|
309 checknodeactbits(np);
|
|
310 if(np->opcode==MINGLE &&
|
|
311 np->rval->opcode==SELECT &&
|
|
312 (np->rval->rval->opcode==MESH || np->rval->rval->opcode==MESH32) &&
|
|
313 np->rval->rval->constant==1431655765LU)
|
|
314 do
|
|
315 {
|
|
316 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
317 x1=np->lval->constant; c1=np->lval->optdata;
|
|
318 OPTING(selectmingle2);
|
|
319 tp=newnode();
|
|
320 MAYBENEWNODE(tp);
|
|
321 tp->opcode=C_OR;
|
|
322 tp->width=32;
|
|
323 MAYBENEWNODE(tp->lval);
|
|
324 tp->lval->opcode=MINGLE;
|
|
325 tp->lval->width=32;
|
|
326 tp->lval->lval=np->lval;
|
|
327 np->lval=0;
|
|
328 MAYBENEWNODE(tp->lval->rval);
|
|
329 tp->lval->rval->opcode=MESH32;
|
|
330 tp->lval->rval->width=32;
|
|
331 tp->lval->rval->constant=(0LU);
|
|
332 MAYBENEWNODE(tp->rval);
|
|
333 tp->rval->opcode=C_AND;
|
|
334 tp->rval->width=32;
|
|
335 tp->rval->lval=np->rval->lval;
|
|
336 np->rval->lval=0;
|
|
337 MAYBENEWNODE(tp->rval->rval);
|
|
338 tp->rval->rval->opcode=MESH32;
|
|
339 tp->rval->rval->width=32;
|
|
340 tp->rval->rval->constant=(1431655765LU);
|
|
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==MINGLE &&
|
|
347 np->lval->opcode==SELECT &&
|
|
348 (np->lval->rval->opcode==MESH || np->lval->rval->opcode==MESH32) &&
|
|
349 np->lval->rval->constant==1431655765LU)
|
|
350 do
|
|
351 {
|
|
352 x2=np->rval->constant; c2=np->rval->optdata;
|
|
353 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
354 OPTING(selectmingle3);
|
|
355 tp=newnode();
|
|
356 MAYBENEWNODE(tp);
|
|
357 tp->opcode=C_OR;
|
|
358 tp->width=32;
|
|
359 MAYBENEWNODE(tp->lval);
|
|
360 tp->lval->opcode=C_LSHIFTBY;
|
|
361 tp->lval->width=32;
|
|
362 MAYBENEWNODE(tp->lval->lval);
|
|
363 tp->lval->lval->opcode=C_AND;
|
|
364 tp->lval->lval->width=32;
|
|
365 tp->lval->lval->lval=np->lval->lval;
|
|
366 np->lval->lval=0;
|
|
367 MAYBENEWNODE(tp->lval->lval->rval);
|
|
368 tp->lval->lval->rval->opcode=MESH32;
|
|
369 tp->lval->lval->rval->width=32;
|
|
370 tp->lval->lval->rval->constant=(1431655765LU);
|
|
371 MAYBENEWNODE(tp->lval->rval);
|
|
372 tp->lval->rval->opcode=MESH32;
|
|
373 tp->lval->rval->width=32;
|
|
374 tp->lval->rval->constant=(1LU);
|
|
375 MAYBENEWNODE(tp->rval);
|
|
376 tp->rval->opcode=MINGLE;
|
|
377 tp->rval->width=32;
|
|
378 MAYBENEWNODE(tp->rval->lval);
|
|
379 tp->rval->lval->opcode=MESH32;
|
|
380 tp->rval->lval->width=32;
|
|
381 tp->rval->lval->constant=(0LU);
|
|
382 tp->rval->rval=np->rval;
|
|
383 np->rval=0;
|
|
384 nodefree(np->lval); nodefree(np->rval);
|
|
385 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
386 } while(0);
|
|
387
|
|
388 checknodeactbits(np);
|
|
389 if(np->opcode==MINGLE &&
|
|
390 np->rval->opcode==SELECT &&
|
|
391 (np->rval->rval->opcode==MESH || np->rval->rval->opcode==MESH32) &&
|
|
392 np->rval->rval->constant==2863311530LU)
|
|
393 do
|
|
394 {
|
|
395 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
396 x1=np->lval->constant; c1=np->lval->optdata;
|
|
397 OPTING(selectmingle4);
|
|
398 tp=newnode();
|
|
399 MAYBENEWNODE(tp);
|
|
400 tp->opcode=C_OR;
|
|
401 tp->width=32;
|
|
402 MAYBENEWNODE(tp->lval);
|
|
403 tp->lval->opcode=C_RSHIFTBY;
|
|
404 tp->lval->width=32;
|
|
405 MAYBENEWNODE(tp->lval->lval);
|
|
406 tp->lval->lval->opcode=C_AND;
|
|
407 tp->lval->lval->width=32;
|
|
408 tp->lval->lval->lval=np->rval->lval;
|
|
409 np->rval->lval=0;
|
|
410 MAYBENEWNODE(tp->lval->lval->rval);
|
|
411 tp->lval->lval->rval->opcode=MESH32;
|
|
412 tp->lval->lval->rval->width=32;
|
|
413 tp->lval->lval->rval->constant=(2863311530LU);
|
|
414 MAYBENEWNODE(tp->lval->rval);
|
|
415 tp->lval->rval->opcode=MESH32;
|
|
416 tp->lval->rval->width=32;
|
|
417 tp->lval->rval->constant=(1LU);
|
|
418 MAYBENEWNODE(tp->rval);
|
|
419 tp->rval->opcode=MINGLE;
|
|
420 tp->rval->width=32;
|
|
421 tp->rval->lval=np->lval;
|
|
422 np->lval=0;
|
|
423 MAYBENEWNODE(tp->rval->rval);
|
|
424 tp->rval->rval->opcode=MESH32;
|
|
425 tp->rval->rval->width=32;
|
|
426 tp->rval->rval->constant=(0LU);
|
|
427 nodefree(np->lval); nodefree(np->rval);
|
|
428 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
429 } while(0);
|
|
430
|
|
431 checknodeactbits(np);
|
|
432 if(np->opcode==SELECT &&
|
|
433 np->lval->opcode==MINGLE &&
|
|
434 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
435 np->rval->constant==3579139412LU)
|
|
436 do
|
|
437 {
|
|
438 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
439 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
440 x=x1; c=c1; if(!(!(c&4294901760UL))) break;
|
|
441 x=x2; c=c2; if(!(!(c&4294901760UL))) break;
|
|
442 OPTING(selectmingle5);
|
|
443 tp=newnode();
|
|
444 MAYBENEWNODE(tp);
|
|
445 tp->opcode=C_OR;
|
|
446 tp->width=32;
|
|
447 MAYBENEWNODE(tp->lval);
|
|
448 tp->lval->opcode=C_AND;
|
|
449 tp->lval->width=32;
|
|
450 tp->lval->lval=np->lval->lval;
|
|
451 np->lval->lval=0;
|
|
452 MAYBENEWNODE(tp->lval->rval);
|
|
453 tp->lval->rval->opcode=MESH32;
|
|
454 tp->lval->rval->width=32;
|
|
455 tp->lval->rval->constant=(32768LU);
|
|
456 MAYBENEWNODE(tp->rval);
|
|
457 tp->rval->opcode=C_RSHIFTBY;
|
|
458 tp->rval->width=32;
|
|
459 tp->rval->lval=np->lval->rval;
|
|
460 np->lval->rval=0;
|
|
461 MAYBENEWNODE(tp->rval->rval);
|
|
462 tp->rval->rval->opcode=MESH32;
|
|
463 tp->rval->rval->width=32;
|
|
464 tp->rval->rval->constant=(1LU);
|
|
465 nodefree(np->lval); nodefree(np->rval);
|
|
466 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
467 } while(0);
|
|
468
|
|
469 checknodeactbits(np);
|
|
470 if(np->opcode==C_AND &&
|
|
471 np->lval->opcode==OR &&
|
|
472 np->lval->width==16 &&
|
|
473 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
474 np->rval->constant==32768LU)
|
|
475 do
|
|
476 {
|
|
477 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
478 x=x1; c=c1; if(!(!(c&4294934528UL))) break;
|
|
479 OPTING(or16and);
|
|
480 tp=newnode();
|
|
481 MAYBENEWNODE(tp);
|
|
482 tp->opcode=C_LSHIFTBY;
|
|
483 tp->width=32;
|
|
484 MAYBENEWNODE(tp->lval);
|
|
485 tp->lval->opcode=C_AND;
|
|
486 tp->lval->width=32;
|
|
487 tp->lval->lval=np->lval->rval;
|
|
488 np->lval->rval=0;
|
|
489 MAYBENEWNODE(tp->lval->rval);
|
|
490 tp->lval->rval->opcode=MESH32;
|
|
491 tp->lval->rval->width=32;
|
|
492 tp->lval->rval->constant=(1LU);
|
|
493 MAYBENEWNODE(tp->rval);
|
|
494 tp->rval->opcode=MESH32;
|
|
495 tp->rval->width=32;
|
|
496 tp->rval->constant=(15LU);
|
|
497 nodefree(np->lval); nodefree(np->rval);
|
|
498 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
499 } while(0);
|
|
500
|
|
501 checknodeactbits(np);
|
|
502 if(np->opcode==C_AND &&
|
|
503 np->lval->opcode==XOR &&
|
|
504 np->lval->width==16 &&
|
|
505 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
506 np->rval->constant==32768LU)
|
|
507 do
|
|
508 {
|
|
509 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
510 x=x1; c=c1; if(!(!(c&4294934528UL))) break;
|
|
511 OPTING(xor16and);
|
|
512 tp=newnode();
|
|
513 MAYBENEWNODE(tp);
|
|
514 tp->opcode=C_LSHIFTBY;
|
|
515 tp->width=32;
|
|
516 MAYBENEWNODE(tp->lval);
|
|
517 tp->lval->opcode=C_AND;
|
|
518 tp->lval->width=32;
|
|
519 tp->lval->lval=np->lval->rval;
|
|
520 np->lval->rval=0;
|
|
521 MAYBENEWNODE(tp->lval->rval);
|
|
522 tp->lval->rval->opcode=MESH32;
|
|
523 tp->lval->rval->width=32;
|
|
524 tp->lval->rval->constant=(1LU);
|
|
525 MAYBENEWNODE(tp->rval);
|
|
526 tp->rval->opcode=MESH32;
|
|
527 tp->rval->width=32;
|
|
528 tp->rval->constant=(15LU);
|
|
529 nodefree(np->lval); nodefree(np->rval);
|
|
530 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
531 } while(0);
|
|
532
|
|
533 checknodeactbits(np);
|
|
534 if(np->opcode==MINGLE &&
|
|
535 (np->lval->opcode==MESH || np->lval->opcode==MESH32) &&
|
|
536 np->lval->constant==0LU &&
|
|
537 np->rval->opcode==C_LSHIFTBY &&
|
|
538 np->rval->lval->opcode==SELECT &&
|
|
539 (np->rval->lval->rval->opcode==MESH || np->rval->lval->rval->opcode==MESH32) &&
|
|
540 np->rval->lval->rval->constant==715827882LU &&
|
|
541 (np->rval->rval->opcode==MESH || np->rval->rval->opcode==MESH32) &&
|
|
542 np->rval->rval->constant==1LU)
|
|
543 do
|
|
544 {
|
|
545 x1=np->rval->lval->lval->constant; c1=np->rval->lval->lval->optdata;
|
|
546 OPTING(lshift32half);
|
|
547 tp=newnode();
|
|
548 MAYBENEWNODE(tp);
|
|
549 tp->opcode=C_LSHIFTBY;
|
|
550 tp->width=32;
|
|
551 MAYBENEWNODE(tp->lval);
|
|
552 tp->lval->opcode=C_AND;
|
|
553 tp->lval->width=32;
|
|
554 tp->lval->lval=np->rval->lval->lval;
|
|
555 np->rval->lval->lval=0;
|
|
556 MAYBENEWNODE(tp->lval->rval);
|
|
557 tp->lval->rval->opcode=MESH32;
|
|
558 tp->lval->rval->width=32;
|
|
559 tp->lval->rval->constant=(715827882LU);
|
|
560 MAYBENEWNODE(tp->rval);
|
|
561 tp->rval->opcode=MESH32;
|
|
562 tp->rval->width=32;
|
|
563 tp->rval->constant=(1LU);
|
|
564 nodefree(np->lval); nodefree(np->rval);
|
|
565 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
566 } while(0);
|
|
567
|
|
568 r=1LU; while(r<=31LU) {
|
|
569 checknodeactbits(np);
|
|
570 if(np->opcode==SELECT &&
|
|
571 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
572 do
|
|
573 {
|
|
574 x2=np->rval->constant; c2=np->rval->optdata;
|
|
575 x1=np->lval->constant; c1=np->lval->optdata;
|
|
576 x=x2; c=c2; if(!(xselx(x)<<r==x&&x)) break;
|
|
577 OPTING(rshift);
|
|
578 tp=newnode();
|
|
579 MAYBENEWNODE(tp);
|
|
580 tp->opcode=C_RSHIFTBY;
|
|
581 tp->width=32;
|
|
582 MAYBENEWNODE(tp->lval);
|
|
583 tp->lval->opcode=C_AND;
|
|
584 tp->lval->width=32;
|
|
585 tp->lval->lval=np->lval;
|
|
586 np->lval=0;
|
|
587 tp->lval->rval=np->rval;
|
|
588 np->rval=0;
|
|
589 MAYBENEWNODE(tp->rval);
|
|
590 tp->rval->opcode=MESH32;
|
|
591 tp->rval->width=32;
|
|
592 tp->rval->constant=(r);
|
|
593 nodefree(np->lval); nodefree(np->rval);
|
|
594 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
595 } while(0);
|
|
596
|
|
597 r++;
|
|
598 }
|
|
599 r=0LU; while(r<=14LU) {
|
|
600 checknodeactbits(np);
|
|
601 if(np->opcode==SELECT &&
|
|
602 np->lval->opcode==MINGLE &&
|
|
603 (np->lval->rval->opcode==MESH || np->lval->rval->opcode==MESH32) &&
|
|
604 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
605 do
|
|
606 {
|
|
607 x3=np->rval->constant; c3=np->rval->optdata;
|
|
608 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
609 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
610 x=x1; c=c1; if(!(c<=65535&&!(c&((1LU<<r)-1LU)))) break;
|
|
611 x=x2; c=c2; if(!(!(x&(4294967294LU<<r)))) break;
|
|
612 x=x3; c=c3; if(!(!(x&(1431655765LU<<(r*2+2))))) break;
|
|
613 OPTING(lshift16);
|
|
614 tp=newnode();
|
|
615 MAYBENEWNODE(tp);
|
|
616 tp->opcode=C_OR;
|
|
617 tp->width=32;
|
|
618 MAYBENEWNODE(tp->lval);
|
|
619 tp->lval->opcode=C_LSHIFTBY;
|
|
620 tp->lval->width=32;
|
|
621 MAYBENEWNODE(tp->lval->lval);
|
|
622 tp->lval->lval->opcode=SELECT;
|
|
623 tp->lval->lval->width=32;
|
|
624 MAYBENEWNODE(tp->lval->lval->lval);
|
|
625 tp->lval->lval->lval->opcode=C_RSHIFTBY;
|
|
626 tp->lval->lval->lval->width=32;
|
|
627 tp->lval->lval->lval->lval=np->lval->lval;
|
|
628 np->lval->lval=0;
|
|
629 MAYBENEWNODE(tp->lval->lval->lval->rval);
|
|
630 tp->lval->lval->lval->rval->opcode=MESH32;
|
|
631 tp->lval->lval->lval->rval->width=32;
|
|
632 tp->lval->lval->lval->rval->constant=(r);
|
|
633 MAYBENEWNODE(tp->lval->lval->rval);
|
|
634 tp->lval->lval->rval->opcode=MESH32;
|
|
635 tp->lval->lval->rval->width=32;
|
|
636 tp->lval->lval->rval->constant=(iselect(x3>>(r*2+1),1431655765LU));
|
|
637 MAYBENEWNODE(tp->lval->rval);
|
|
638 tp->lval->rval->opcode=MESH32;
|
|
639 tp->lval->rval->width=32;
|
|
640 tp->lval->rval->constant=(setbitcount(x3&((2LU<<(r*2))-1)));
|
|
641 MAYBENEWNODE(tp->rval);
|
|
642 tp->rval->opcode=MESH32;
|
|
643 tp->rval->width=32;
|
|
644 tp->rval->constant=(iselect(mingle(0,x2),x3));
|
|
645 nodefree(np->lval); nodefree(np->rval);
|
|
646 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
647 } while(0);
|
|
648
|
|
649 checknodeactbits(np);
|
|
650 if(np->opcode==SELECT &&
|
|
651 np->lval->opcode==MINGLE &&
|
|
652 np->lval->lval->opcode==C_OR &&
|
|
653 (np->lval->lval->rval->opcode==MESH || np->lval->lval->rval->opcode==MESH32) &&
|
|
654 (np->lval->rval->opcode==MESH || np->lval->rval->opcode==MESH32) &&
|
|
655 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
656 do
|
|
657 {
|
|
658 x4=np->lval->lval->rval->constant; c4=np->lval->lval->rval->optdata;
|
|
659 x3=np->rval->constant; c3=np->rval->optdata;
|
|
660 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
661 x1=np->lval->lval->lval->constant; c1=np->lval->lval->lval->optdata;
|
|
662 x=x1; c=c1; if(!(c<=65535&&!(c&((1LU<<r)-1LU)))) break;
|
|
663 x=x4; c=c4; if(!(x<=65535&&!(c&~((1LU<<r)-1LU)))) break;
|
|
664 x=x2; c=c2; if(!(!(x&(4294967294LU<<r)))) break;
|
|
665 x=x3; c=c3; if(!(!(x&(1431655765LU<<(r*2+2))))) break;
|
|
666 OPTING(lshift16);
|
|
667 tp=newnode();
|
|
668 MAYBENEWNODE(tp);
|
|
669 tp->opcode=C_OR;
|
|
670 tp->width=32;
|
|
671 MAYBENEWNODE(tp->lval);
|
|
672 tp->lval->opcode=C_LSHIFTBY;
|
|
673 tp->lval->width=32;
|
|
674 MAYBENEWNODE(tp->lval->lval);
|
|
675 tp->lval->lval->opcode=SELECT;
|
|
676 tp->lval->lval->width=32;
|
|
677 MAYBENEWNODE(tp->lval->lval->lval);
|
|
678 tp->lval->lval->lval->opcode=C_RSHIFTBY;
|
|
679 tp->lval->lval->lval->width=32;
|
|
680 tp->lval->lval->lval->lval=np->lval->lval->lval;
|
|
681 np->lval->lval->lval=0;
|
|
682 MAYBENEWNODE(tp->lval->lval->lval->rval);
|
|
683 tp->lval->lval->lval->rval->opcode=MESH32;
|
|
684 tp->lval->lval->lval->rval->width=32;
|
|
685 tp->lval->lval->lval->rval->constant=(r);
|
|
686 MAYBENEWNODE(tp->lval->lval->rval);
|
|
687 tp->lval->lval->rval->opcode=MESH32;
|
|
688 tp->lval->lval->rval->width=32;
|
|
689 tp->lval->lval->rval->constant=(iselect(x3>>(r*2+1),1431655765LU));
|
|
690 MAYBENEWNODE(tp->lval->rval);
|
|
691 tp->lval->rval->opcode=MESH32;
|
|
692 tp->lval->rval->width=32;
|
|
693 tp->lval->rval->constant=(setbitcount(x3&((2LU<<(r*2))-1)));
|
|
694 MAYBENEWNODE(tp->rval);
|
|
695 tp->rval->opcode=MESH32;
|
|
696 tp->rval->width=32;
|
|
697 tp->rval->constant=(iselect(mingle(x4,x2),x3));
|
|
698 nodefree(np->lval); nodefree(np->rval);
|
|
699 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
700 } while(0);
|
|
701
|
|
702 checknodeactbits(np);
|
|
703 if(np->opcode==SELECT &&
|
|
704 np->lval->opcode==MINGLE &&
|
|
705 np->lval->lval->opcode==C_OR &&
|
|
706 (np->lval->lval->lval->opcode==MESH || np->lval->lval->lval->opcode==MESH32) &&
|
|
707 (np->lval->rval->opcode==MESH || np->lval->rval->opcode==MESH32) &&
|
|
708 (np->rval->opcode==MESH || np->rval->opcode==MESH32))
|
|
709 do
|
|
710 {
|
|
711 x4=np->lval->lval->lval->constant; c4=np->lval->lval->lval->optdata;
|
|
712 x3=np->rval->constant; c3=np->rval->optdata;
|
|
713 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
714 x1=np->lval->lval->rval->constant; c1=np->lval->lval->rval->optdata;
|
|
715 x=x4; c=c4; if(!(x<=65535&&!(c&~((1LU<<r)-1LU)))) break;
|
|
716 x=x1; c=c1; if(!(c<=65535&&!(c&((1LU<<r)-1LU)))) break;
|
|
717 x=x2; c=c2; if(!(!(x&(4294967294LU<<r)))) break;
|
|
718 x=x3; c=c3; if(!(!(x&(1431655765LU<<(r*2+2))))) break;
|
|
719 OPTING(lshift16);
|
|
720 tp=newnode();
|
|
721 MAYBENEWNODE(tp);
|
|
722 tp->opcode=C_OR;
|
|
723 tp->width=32;
|
|
724 MAYBENEWNODE(tp->lval);
|
|
725 tp->lval->opcode=C_LSHIFTBY;
|
|
726 tp->lval->width=32;
|
|
727 MAYBENEWNODE(tp->lval->lval);
|
|
728 tp->lval->lval->opcode=SELECT;
|
|
729 tp->lval->lval->width=32;
|
|
730 MAYBENEWNODE(tp->lval->lval->lval);
|
|
731 tp->lval->lval->lval->opcode=C_RSHIFTBY;
|
|
732 tp->lval->lval->lval->width=32;
|
|
733 tp->lval->lval->lval->lval=np->lval->lval->rval;
|
|
734 np->lval->lval->rval=0;
|
|
735 MAYBENEWNODE(tp->lval->lval->lval->rval);
|
|
736 tp->lval->lval->lval->rval->opcode=MESH32;
|
|
737 tp->lval->lval->lval->rval->width=32;
|
|
738 tp->lval->lval->lval->rval->constant=(r);
|
|
739 MAYBENEWNODE(tp->lval->lval->rval);
|
|
740 tp->lval->lval->rval->opcode=MESH32;
|
|
741 tp->lval->lval->rval->width=32;
|
|
742 tp->lval->lval->rval->constant=(iselect(x3>>(r*2+1),1431655765LU));
|
|
743 MAYBENEWNODE(tp->lval->rval);
|
|
744 tp->lval->rval->opcode=MESH32;
|
|
745 tp->lval->rval->width=32;
|
|
746 tp->lval->rval->constant=(setbitcount(x3&((2LU<<(r*2))-1)));
|
|
747 MAYBENEWNODE(tp->rval);
|
|
748 tp->rval->opcode=MESH32;
|
|
749 tp->rval->width=32;
|
|
750 tp->rval->constant=(iselect(mingle(x4,x2),x3));
|
|
751 nodefree(np->lval); nodefree(np->rval);
|
|
752 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
753 } while(0);
|
|
754
|
|
755 r++;
|
|
756 }
|
|
757 c=c1=c2=c3=c4=c5=c6=c7=c8=c9=0;
|
|
758 x=x1=x2=x3=x4=x5=x6=x7=x8=x9=r=0;
|
|
759 if(c+c1+c2+c3+c4+c5+c6+c7+c8+c9+r+
|
|
760 x+x1+x2+x3+x4+x5+x6+x7+x8+x9) raise(SIGSEGV);
|
|
761 return opted;
|
|
762 }
|