This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Suggestion of a new peephole (fwd)



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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]