This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Suggestion of a new peephole (fwd)
- To: gcc-bugs at gcc dot gnu dot org
- Subject: Suggestion of a new peephole (fwd)
- From: Piotr Buciak <P dot Buciak at elka dot pw dot edu dot pl>
- Date: Thu, 12 Oct 2000 19:11:55 +0200 (MET DST)
Hello!
When I compile my programs with gcc 2.95.2 under Linux and generate
assembler listings with following optimization options: -O2
-fomit-frame-pointer -fcaller-saves -freg-struct-return
in result I get code with numerous sequnces of following instructions:
add $32,%esp
add $-8,%esp
In most of the cases there are 2 add to %esp instructions, but sometimes
3 one after another happen. I suggest to combine them, for example to make
add $24,%esp
from the example shown above. Consider also combining add/sub and sub/sub
repetitions into one instrution.
To proove it I send you following files:
listy.c - C source file
listy.lst - assembler listing
xa1 - shell script with the command line I use to compile.
The main function of listy.lst consist of some 10 such repetitions.
Best regards
Piotr Buciak
#include <stdio.h>
typedef int unit_t;
struct dl_node_t { struct dl_node_t* next;
struct dl_node_t* prev;
unit_t unit;
};
#define DL_NODE struct dl_node_t
DL_NODE* dl_add1(DL_NODE* node_p, unit_t new_unit)
{ DL_NODE* save_p;
save_p = node_p;
/* printf("%p %p\n",node_p,save_p);*/
if( (node_p = (DL_NODE*)malloc(sizeof(DL_NODE))) == NULL) return NULL;
node_p->next = save_p;
if(save_p != NULL) save_p->prev = node_p;
node_p->prev = NULL;
node_p->unit = new_unit;
return node_p;
}
int dl_add(DL_NODE* node_p, unit_t new_unit)
{ DL_NODE* save_p;
save_p = node_p->next;
if( (node_p->next = (DL_NODE*)malloc(sizeof(DL_NODE))) == NULL) return -1;
if(save_p != NULL) save_p->prev = node_p->next;
node_p->next->next = save_p;
node_p->next->prev=node_p;
/* if(node_p->prev != NULL) node_p->next->prev = node_p->prev->next; */
node_p->next->unit = new_unit;
return 0;
}
void dl_del(DL_NODE* node_p,DL_NODE** first_pp)
{
if(node_p->prev != NULL) node_p->prev->next = node_p->next;
else *first_pp = node_p->next;
if(node_p->next != NULL) node_p->next->prev = node_p->prev;
free(node_p);
return;
}
/* inline to speed it up */
DL_NODE* dl_find(DL_NODE* node_p, unit_t unit)
{
dl_find_1:
if(node_p->unit == unit) return node_p;
if(node_p->next == NULL) return NULL;
node_p = node_p->next;
goto dl_find_1;
}
/* inline to speed it up */
DL_NODE* dl_last(DL_NODE* node_p)
{ while(node_p->next != NULL)node_p = node_p->next;
return node_p;
}
void dl_print(DL_NODE* node_p)
{
if(node_p == NULL) printf("<empty>");
else
{ printf("%d",node_p->unit);
while((node_p=node_p->next) != NULL)
printf("-> %d",node_p->unit);
}
printf("\n");
return;
}
#define dl_next(node_p) (node_p->next)
#define dl_prev(node_p) (node_p->prev)
int main(void)
{ DL_NODE* chain=NULL,*walk_p,*save_p;
int i;
dl_print(chain);
chain = dl_add1(chain, 1);
dl_print(chain);
chain = dl_add1(chain, 2);
dl_print(chain);
chain = dl_add1(chain, 3);
dl_print(chain);
dl_add(chain->next,4);
dl_print(chain);
dl_add(chain,5);
dl_print(chain);
dl_add(dl_last(chain),6);
dl_print(chain);
dl_add(dl_find(chain,5),7);
dl_print(chain);
printf("%p\n",dl_find(chain,13));
printf("%d\n",dl_find(chain,3)->unit);
for(walk_p=chain; dl_next(walk_p) != NULL; walk_p=dl_next(walk_p))
printf("next of %d is %d\n",walk_p->unit,dl_next(walk_p)->unit);
dl_del(dl_find(chain,3),&chain);
dl_print(chain);
dl_del(dl_find(chain,6),&chain);
dl_print(chain);
dl_del(dl_find(chain,2),&chain);
dl_print(chain);
while(chain != NULL)
{ dl_del(chain,&chain);
dl_print(chain);
}
for(i=1; i<=120; i++)
{
if( i & 1 ) chain = dl_add1(chain,i);
else dl_add(dl_last(chain),i);
}
dl_print(chain);
while(chain != NULL && dl_next(chain) != NULL)
{
for(walk_p = chain; dl_next(walk_p) != NULL; )
{ dl_del(dl_next(walk_p),&chain);
if((walk_p = dl_next(walk_p)) == NULL) break;
}
dl_print(chain);
}
return 0;
}
1 .file "listy.c"
2 .version "01.01"
5 .text
6 .Ltext0:
125 .align 4
129 .globl dl_add1
131 dl_add1:
133 .LM1:
134 .LBB2:
136 .LM2:
137 0000 83EC18 subl $24,%esp
138 0003 53 pushl %ebx
139 0004 8B5C2420 movl 32(%esp),%ebx
141 .LM3:
142 0008 83C4F4 addl $-12,%esp
143 000b 6A0C pushl $12
144 000d E8FCFFFF call malloc
144 FF
145 0012 89C2 movl %eax,%edx
146 0014 83C410 addl $16,%esp
147 0017 85D2 testl %edx,%edx
148 0019 7505 jne .L18
149 001b 31C0 xorl %eax,%eax
150 001d EB1A jmp .L20
151 001f 90 .p2align 4,,7
152 .L18:
154 .LM4:
155 0020 891A movl %ebx,(%edx)
157 .LM5:
158 0022 85DB testl %ebx,%ebx
159 0024 7403 je .L19
160 0026 895304 movl %edx,4(%ebx)
161 .L19:
163 .LM6:
164 0029 8B442424 movl 36(%esp),%eax
166 .LM7:
167 002d C7420400 movl $0,4(%edx)
167 000000
169 .LM8:
170 0034 894208 movl %eax,8(%edx)
172 .LM9:
173 0037 89D0 movl %edx,%eax
174 .L20:
175 0039 5B popl %ebx
176 003a 83C418 addl $24,%esp
177 003d C3 ret
179 .LM10:
180 .LBE2:
181 .Lfe1:
188 .Lscope0:
190 003e 89F6 .align 4
194 .globl dl_add
196 dl_add:
198 .LM11:
199 .LBB3:
200 0040 83EC14 subl $20,%esp
201 0043 56 pushl %esi
202 0044 53 pushl %ebx
203 0045 8B742420 movl 32(%esp),%esi
205 .LM12:
206 0049 83C4F4 addl $-12,%esp
208 .LM13:
209 004c 8B1E movl (%esi),%ebx
211 .LM14:
212 004e 6A0C pushl $12
213 0050 E8FCFFFF call malloc
213 FF
214 0055 8906 movl %eax,(%esi)
215 0057 83C410 addl $16,%esp
216 005a 85C0 testl %eax,%eax
217 005c 7507 jne .L22
218 005e B8FFFFFF movl $-1,%eax
218 FF
219 0063 EB1B jmp .L24
220 .p2align 4,,7
221 .L22:
223 .LM15:
224 0065 85DB testl %ebx,%ebx
225 0067 7403 je .L23
226 0069 894304 movl %eax,4(%ebx)
227 .L23:
229 .LM16:
230 006c 8B06 movl (%esi),%eax
231 006e 8918 movl %ebx,(%eax)
233 .LM17:
234 0070 8B06 movl (%esi),%eax
235 0072 897004 movl %esi,4(%eax)
237 .LM18:
238 0075 8B442424 movl 36(%esp),%eax
239 0079 8B16 movl (%esi),%edx
240 007b 894208 movl %eax,8(%edx)
242 .LM19:
243 007e 31C0 xorl %eax,%eax
244 .L24:
245 0080 5B popl %ebx
246 0081 5E popl %esi
247 0082 83C414 addl $20,%esp
248 0085 C3 ret
250 .LM20:
251 .LBE3:
252 .Lfe2:
259 .Lscope1:
261 0086 89F6 .align 4
265 .globl dl_del
267 dl_del:
269 .LM21:
270 .LBB4:
271 0088 83EC0C subl $12,%esp
272 008b 8B4C2410 movl 16(%esp),%ecx
274 .LM22:
275 008f 8B5104 movl 4(%ecx),%edx
276 0092 85D2 testl %edx,%edx
277 0094 740A je .L26
278 0096 8B01 movl (%ecx),%eax
279 0098 8902 movl %eax,(%edx)
280 009a EB0C jmp .L27
281 009c 8D742600 .p2align 4,,7
282 .L26:
284 .LM23:
285 00a0 8B11 movl (%ecx),%edx
286 00a2 8B442414 movl 20(%esp),%eax
287 00a6 8910 movl %edx,(%eax)
288 .L27:
290 .LM24:
291 00a8 8B11 movl (%ecx),%edx
292 00aa 85D2 testl %edx,%edx
293 00ac 7406 je .L28
294 00ae 8B4104 movl 4(%ecx),%eax
295 00b1 894204 movl %eax,4(%edx)
296 .L28:
298 .LM25:
299 00b4 83C4F4 addl $-12,%esp
300 00b7 51 pushl %ecx
301 00b8 E8FCFFFF call free
301 FF
303 .LM26:
304 00bd 83C410 addl $16,%esp
305 00c0 83C40C addl $12,%esp
306 00c3 C3 ret
308 .LM27:
309 .LBE4:
310 .Lfe3:
316 .Lscope2:
318 .align 4
322 .globl dl_find
324 dl_find:
326 .LM28:
327 00c4 8B442404 movl 4(%esp),%eax
328 00c8 8B542408 movl 8(%esp),%edx
329 .L30:
331 .LM29:
332 00cc 395008 cmpl %edx,8(%eax)
333 00cf 7408 je .L33
335 .LM30:
336 00d1 8B00 movl (%eax),%eax
337 00d3 85C0 testl %eax,%eax
338 00d5 75F5 jne .L30
340 .LM31:
341 00d7 31C0 xorl %eax,%eax
342 .L33:
343 00d9 C3 ret
344 .Lfe4:
348 .Lscope3:
350 00da 89F6 .align 4
353 .globl dl_last
355 dl_last:
357 .LM32:
358 00dc 8B442404 movl 4(%esp),%eax
359 00e0 833800 cmpl $0,(%eax)
360 00e3 7407 je .L36
361 .p2align 4,,7
362 .L37:
363 00e5 8B00 movl (%eax),%eax
364 00e7 833800 cmpl $0,(%eax)
365 00ea 75F9 jne .L37
366 .L36:
368 .LM33:
369 00ec C3 ret
370 .Lfe5:
373 .Lscope4:
375 .section .rodata
376 .LC0:
377 0000 3C656D70 .string "<empty>"
377 74793E00
378 .LC1:
379 0008 256400 .string "%d"
380 .LC2:
381 000b 2D3E2025 .string "-> %d"
381 6400
382 .LC3:
383 0011 0A00 .string "\n"
384 .text
385 00ed 8D7600 .align 4
388 .globl dl_print
390 dl_print:
392 .LM34:
393 00f0 83EC18 subl $24,%esp
394 00f3 53 pushl %ebx
395 00f4 8B5C2420 movl 32(%esp),%ebx
397 .LM35:
398 00f8 85DB testl %ebx,%ebx
399 00fa 7514 jne .L40
400 00fc 83C4F4 addl $-12,%esp
401 00ff 68000000 pushl $.LC0
401 00
402 0104 E8FCFFFF call printf
402 FF
403 0109 83C410 addl $16,%esp
404 010c EB2C jmp .L41
405 010e 89F6 .p2align 4,,7
406 .L40:
408 .LM36:
409 0110 83C4F8 addl $-8,%esp
410 0113 8B4308 movl 8(%ebx),%eax
411 0116 50 pushl %eax
412 0117 68080000 pushl $.LC1
412 00
414 .LM37:
415 011c EB0E jmp .L46
416 011e 89F6 .p2align 4,,7
417 .L44:
419 .LM38:
420 0120 83C4F8 addl $-8,%esp
421 0123 8B4308 movl 8(%ebx),%eax
422 0126 50 pushl %eax
423 0127 680B0000 pushl $.LC2
423 00
424 .L46:
425 012c E8FCFFFF call printf
425 FF
426 0131 83C410 addl $16,%esp
427 0134 8B1B movl (%ebx),%ebx
428 0136 85DB testl %ebx,%ebx
429 0138 75E6 jne .L44
430 .L41:
432 .LM39:
433 013a 83C4F4 addl $-12,%esp
434 013d 68110000 pushl $.LC3
434 00
435 0142 E8FCFFFF call printf
435 FF
437 .LM40:
438 0147 83C410 addl $16,%esp
439 014a 5B popl %ebx
440 014b 83C418 addl $24,%esp
441 014e C3 ret
442 .Lfe6:
445 .Lscope5:
447 .section .rodata
448 .LC4:
449 0013 25700A00 .string "%p\n"
450 .LC5:
451 0017 25640A00 .string "%d\n"
452 .LC6:
453 001b 6E657874 .string "next of %d is %d\n"
453 206F6620
453 25642069
453 73202564
453 0A00
454 .text
455 014f 90 .align 4
457 .globl main
459 main:
461 .LM41:
462 .LBB5:
463 0150 83EC14 subl $20,%esp
464 0153 56 pushl %esi
465 0154 53 pushl %ebx
466 0155 C744240C movl $0,12(%esp)
466 00000000
468 .LM42:
469 015d 83C4F4 addl $-12,%esp
470 0160 6A00 pushl $0
471 0162 E8FCFFFF call dl_print
471 FF
473 .LM43:
474 0167 83C4F8 addl $-8,%esp
475 016a 6A01 pushl $1
476 016c 8B442428 movl 40(%esp),%eax
477 0170 50 pushl %eax
478 0171 E8FCFFFF call dl_add1
478 FF
479 0176 8944242C movl %eax,44(%esp)
481 .LM44:
482 017a 83C420 addl $32,%esp
483 017d 83C4F4 addl $-12,%esp
484 0180 50 pushl %eax
485 0181 E8FCFFFF call dl_print
485 FF
487 .LM45:
488 0186 83C4F8 addl $-8,%esp
489 0189 6A02 pushl $2
490 018b 8B442428 movl 40(%esp),%eax
491 018f 50 pushl %eax
492 0190 E8FCFFFF call dl_add1
492 FF
493 0195 8944242C movl %eax,44(%esp)
495 .LM46:
496 0199 83C420 addl $32,%esp
497 019c 83C4F4 addl $-12,%esp
498 019f 50 pushl %eax
499 01a0 E8FCFFFF call dl_print
499 FF
501 .LM47:
502 01a5 83C4F8 addl $-8,%esp
503 01a8 6A03 pushl $3
504 01aa 8B442428 movl 40(%esp),%eax
505 01ae 50 pushl %eax
506 01af E8FCFFFF call dl_add1
506 FF
507 01b4 8944242C movl %eax,44(%esp)
509 .LM48:
510 01b8 83C420 addl $32,%esp
511 01bb 83C4F4 addl $-12,%esp
512 01be 50 pushl %eax
513 01bf E8FCFFFF call dl_print
513 FF
515 .LM49:
516 01c4 83C4F8 addl $-8,%esp
517 01c7 6A04 pushl $4
518 01c9 8B442428 movl 40(%esp),%eax
519 01cd 8B00 movl (%eax),%eax
520 01cf 50 pushl %eax
521 01d0 E8FCFFFF call dl_add
521 FF
523 .LM50:
524 01d5 83C420 addl $32,%esp
525 01d8 83C4F4 addl $-12,%esp
526 01db 8B442418 movl 24(%esp),%eax
527 01df 50 pushl %eax
528 01e0 E8FCFFFF call dl_print
528 FF
530 .LM51:
531 01e5 83C4F8 addl $-8,%esp
532 01e8 6A05 pushl $5
533 01ea 8B442428 movl 40(%esp),%eax
534 01ee 50 pushl %eax
535 01ef E8FCFFFF call dl_add
535 FF
537 .LM52:
538 01f4 83C420 addl $32,%esp
539 01f7 83C4F4 addl $-12,%esp
540 01fa 8B442418 movl 24(%esp),%eax
541 01fe 50 pushl %eax
542 01ff E8FCFFFF call dl_print
542 FF
544 .LM53:
545 0204 83C4F8 addl $-8,%esp
546 0207 6A06 pushl $6
547 0209 83C4F4 addl $-12,%esp
548 020c 8B442434 movl 52(%esp),%eax
549 0210 50 pushl %eax
550 0211 E8FCFFFF call dl_last
550 FF
551 0216 83C410 addl $16,%esp
552 0219 50 pushl %eax
553 021a E8FCFFFF call dl_add
553 FF
555 .LM54:
556 021f 83C420 addl $32,%esp
557 0222 83C4F4 addl $-12,%esp
558 0225 8B442418 movl 24(%esp),%eax
559 0229 50 pushl %eax
560 022a E8FCFFFF call dl_print
560 FF
562 .LM55:
563 022f 83C4F8 addl $-8,%esp
564 0232 6A07 pushl $7
565 0234 83C4F8 addl $-8,%esp
566 0237 6A05 pushl $5
567 0239 8B442434 movl 52(%esp),%eax
568 023d 50 pushl %eax
569 023e E8FCFFFF call dl_find
569 FF
570 0243 83C410 addl $16,%esp
571 0246 50 pushl %eax
572 0247 E8FCFFFF call dl_add
572 FF
574 .LM56:
575 024c 83C420 addl $32,%esp
576 024f 83C4F4 addl $-12,%esp
577 0252 8B442418 movl 24(%esp),%eax
578 0256 50 pushl %eax
579 0257 E8FCFFFF call dl_print
579 FF
581 .LM57:
582 025c 83C4F8 addl $-8,%esp
583 025f 83C4F8 addl $-8,%esp
584 0262 6A0D pushl $13
585 0264 8B442430 movl 48(%esp),%eax
586 0268 50 pushl %eax
587 0269 E8FCFFFF call dl_find
587 FF
588 026e 50 pushl %eax
589 026f 68130000 pushl $.LC4
589 00
590 0274 E8FCFFFF call printf
590 FF
592 .LM58:
593 0279 83C430 addl $48,%esp
594 027c 83C4F8 addl $-8,%esp
595 027f 83C4F8 addl $-8,%esp
596 0282 6A03 pushl $3
597 0284 8B442420 movl 32(%esp),%eax
598 0288 50 pushl %eax
599 0289 E8FCFFFF call dl_find
599 FF
600 028e 8B4008 movl 8(%eax),%eax
601 0291 50 pushl %eax
602 0292 68170000 pushl $.LC5
602 00
603 0297 E8FCFFFF call printf
603 FF
605 .LM59:
606 029c 8B5C242C movl 44(%esp),%ebx
607 02a0 83C420 addl $32,%esp
608 02a3 8D74240C leal 12(%esp),%esi
609 02a7 833B00 cmpl $0,(%ebx)
610 02aa 7425 je .L49
611 02ac 8D742600 .p2align 4,,7
612 .L51:
614 .LM60:
615 02b0 8B03 movl (%ebx),%eax
616 02b2 83C4FC addl $-4,%esp
617 02b5 8B4008 movl 8(%eax),%eax
618 02b8 50 pushl %eax
619 02b9 8B4308 movl 8(%ebx),%eax
620 02bc 50 pushl %eax
621 02bd 681B0000 pushl $.LC6
621 00
622 02c2 E8FCFFFF call printf
622 FF
624 .LM61:
625 02c7 83C410 addl $16,%esp
626 02ca 8B1B movl (%ebx),%ebx
627 02cc 833B00 cmpl $0,(%ebx)
628 02cf 75DF jne .L51
629 .L49:
631 .LM62:
632 02d1 83C4F8 addl $-8,%esp
633 02d4 56 pushl %esi
634 02d5 83C4F8 addl $-8,%esp
635 02d8 6A03 pushl $3
636 02da 8B442424 movl 36(%esp),%eax
637 02de 50 pushl %eax
638 02df E8FCFFFF call dl_find
638 FF
639 02e4 83C410 addl $16,%esp
640 02e7 50 pushl %eax
641 02e8 E8FCFFFF call dl_del
641 FF
643 .LM63:
644 02ed 83C4F4 addl $-12,%esp
645 02f0 8B442428 movl 40(%esp),%eax
646 02f4 50 pushl %eax
647 02f5 E8FCFFFF call dl_print
647 FF
649 .LM64:
650 02fa 83C420 addl $32,%esp
651 02fd 83C4F8 addl $-8,%esp
652 0300 8D5C2414 leal 20(%esp),%ebx
653 0304 53 pushl %ebx
654 0305 83C4F8 addl $-8,%esp
655 0308 6A06 pushl $6
656 030a 8B442424 movl 36(%esp),%eax
657 030e 50 pushl %eax
658 030f E8FCFFFF call dl_find
658 FF
659 0314 83C410 addl $16,%esp
660 0317 50 pushl %eax
661 0318 E8FCFFFF call dl_del
661 FF
663 .LM65:
664 031d 83C4F4 addl $-12,%esp
665 0320 8B442428 movl 40(%esp),%eax
666 0324 50 pushl %eax
667 0325 E8FCFFFF call dl_print
667 FF
669 .LM66:
670 032a 83C420 addl $32,%esp
671 032d 83C4F8 addl $-8,%esp
672 0330 53 pushl %ebx
673 0331 83C4F8 addl $-8,%esp
674 0334 6A02 pushl $2
675 0336 8B442424 movl 36(%esp),%eax
676 033a 50 pushl %eax
677 033b E8FCFFFF call dl_find
677 FF
678 0340 83C410 addl $16,%esp
680 .LM67:
681 0343 EB08 jmp .L75
682 .p2align 4,,7
683 .L55:
685 .LM68:
686 0345 83C4F8 addl $-8,%esp
687 0348 56 pushl %esi
688 0349 8B442418 movl 24(%esp),%eax
689 .L75:
690 034d 50 pushl %eax
691 034e E8FCFFFF call dl_del
691 FF
693 .LM69:
694 0353 83C4F4 addl $-12,%esp
695 0356 8B442428 movl 40(%esp),%eax
696 035a 50 pushl %eax
697 035b E8FCFFFF call dl_print
697 FF
699 .LM70:
700 0360 83C420 addl $32,%esp
701 0363 837C240C cmpl $0,12(%esp)
701 00
702 0368 75DB jne .L55
704 .LM71:
705 036a BB010000 movl $1,%ebx
705 00
706 036f 90 .p2align 4,,7
707 .L60:
709 .LM72:
710 0370 F6C301 testb $1,%bl
711 0373 741B je .L61
712 0375 83C4F8 addl $-8,%esp
713 0378 53 pushl %ebx
714 0379 8B442418 movl 24(%esp),%eax
715 037d 50 pushl %eax
716 037e E8FCFFFF call dl_add1
716 FF
717 0383 8944241C movl %eax,28(%esp)
718 0387 EB21 jmp .L76
719 0389 8DB42600 .p2align 4,,7
719 000000
720 .L61:
722 .LM73:
723 0390 83C4F8 addl $-8,%esp
724 0393 53 pushl %ebx
725 0394 83C4F4 addl $-12,%esp
726 0397 8B442424 movl 36(%esp),%eax
727 039b 50 pushl %eax
728 039c E8FCFFFF call dl_last
728 FF
729 03a1 83C410 addl $16,%esp
730 03a4 50 pushl %eax
731 03a5 E8FCFFFF call dl_add
731 FF
732 .L76:
733 03aa 83C410 addl $16,%esp
735 .LM74:
736 03ad 43 incl %ebx
737 03ae 83FB78 cmpl $120,%ebx
738 03b1 7EBD jle .L60
740 .LM75:
741 03b3 EB24 jmp .L69
742 .p2align 4,,7
743 .L66:
745 .LM76:
746 03b5 8B5C240C movl 12(%esp),%ebx
747 03b9 8DB42600 .p2align 4,,7
747 000000
748 .L68:
749 03c0 8B03 movl (%ebx),%eax
750 03c2 85C0 testl %eax,%eax
751 03c4 7413 je .L69
753 .LM77:
754 03c6 83C4F8 addl $-8,%esp
755 03c9 56 pushl %esi
756 03ca 50 pushl %eax
757 03cb E8FCFFFF call dl_del
757 FF
759 .LM78:
760 03d0 8B1B movl (%ebx),%ebx
761 03d2 83C410 addl $16,%esp
762 03d5 85DB testl %ebx,%ebx
763 03d7 75E7 jne .L68
764 .L69:
766 .LM79:
767 03d9 83C4F4 addl $-12,%esp
768 03dc 8B442418 movl 24(%esp),%eax
769 03e0 50 pushl %eax
770 03e1 E8FCFFFF call dl_print
770 FF
772 .LM80:
773 03e6 83C410 addl $16,%esp
774 03e9 8B44240C movl 12(%esp),%eax
775 03ed 85C0 testl %eax,%eax
776 03ef 7405 je .L65
777 03f1 833800 cmpl $0,(%eax)
778 03f4 75BF jne .L66
779 .L65:
781 .LM81:
782 03f6 5B popl %ebx
783 03f7 31C0 xorl %eax,%eax
784 03f9 5E popl %esi
785 03fa 83C414 addl $20,%esp
786 03fd C3 ret
788 .LM82:
789 .LBE5:
790 .Lfe7:
797 .Lscope6:
799 .text
801 Letext:
802 .ident "GCC: (GNU) 2.95.2 19991024 (release)"
gcc listy.c -g -O2 -fcaller-saves -fomit-frame-pointer -freg-struct-return -Wl,-s -Wa,-aldn > listy.lst