=================================================================== cis-lclient02:~/2012/intel64>more fsum.c double sum(double a, double b); main () { double a, b; a = 5.0; b = 10.0; return sum(a, b); } double sum(double a, double b) { double x; x = a + b; return x; } =================================================================== cis-lclient02:~/2012/intel64>gcc -O0 -o fsum0.s -S fsum.c cis-lclient02:~/2012/intel64>more fsum0.s .file "fsum.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $48, %esp fldl .LC0 fstpl 32(%esp) fldl .LC1 fstpl 40(%esp) fldl 40(%esp) fstpl 8(%esp) fldl 32(%esp) fstpl (%esp) call sum fnstcw 30(%esp) movzwl 30(%esp), %eax movb $12, %ah movw %ax, 28(%esp) fldcw 28(%esp) fistpl 24(%esp) fldcw 30(%esp) movl 24(%esp), %eax leave ret .size main, .-main .globl sum .type sum, @function sum: pushl %ebp movl %esp, %ebp subl $32, %esp movl 8(%ebp), %eax movl %eax, -24(%ebp) movl 12(%ebp), %eax movl %eax, -20(%ebp) movl 16(%ebp), %eax movl %eax, -32(%ebp) movl 20(%ebp), %eax movl %eax, -28(%ebp) fldl -24(%ebp) faddl -32(%ebp) fstpl -8(%ebp) fldl -8(%ebp) leave ret .size sum, .-sum .section .rodata .align 8 .LC0: .long 0 .long 1075052544 .align 8 .LC1: .long 0 .long 1076101120 .ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)" .section .note.GNU-stack,"",@progbits =================================================================== cis-lclient02:~/2012/intel64>more fsum1.s .file "fsum.c" .text .globl sum .type sum, @function sum: pushl %ebp movl %esp, %ebp fldl 16(%ebp) faddl 8(%ebp) popl %ebp ret .size sum, .-sum .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $24, %esp flds .LC1 fstpl 8(%esp) flds .LC2 fstpl (%esp) call sum fnstcw 22(%esp) movzwl 22(%esp), %eax movb $12, %ah movw %ax, 20(%esp) fldcw 20(%esp) fistpl 16(%esp) fldcw 22(%esp) movl 16(%esp), %eax leave ret .size main, .-main .section .rodata.cst4,"aM",@progbits,4 .align 4 .LC1: .long 1092616192 .align 4 .LC2: .long 1084227584 .ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)" .section .note.GNU-stack,"",@progbits =================================================================== cis-lclient02:~/2012/intel64>gcc -O2 -o fsum2.s -S fsum.c cis-lclient02:~/2012/intel64>more fsum2.s .file "fsum.c" .text .p2align 4,,15 .globl main .type main, @function main: pushl %ebp movl $15, %eax movl %esp, %ebp popl %ebp ret .size main, .-main .p2align 4,,15 .globl sum .type sum, @function sum: pushl %ebp movl %esp, %ebp fldl 16(%ebp) faddl 8(%ebp) popl %ebp ret .size sum, .-sum .ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)" .section .note.GNU-stack,"",@progbits =================================================================== cis-lclient02:~/2012/intel64>gcc -O1 -o fsum686.s -S -march=i686 fsum.c cis-lclient02:~/2012/intel64>more fsum686.s .file "fsum.c" .text .globl sum .type sum, @function sum: pushl %ebp movl %esp, %ebp fldl 16(%ebp) faddl 8(%ebp) popl %ebp ret .size sum, .-sum .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $24, %esp flds .LC1 fstpl 8(%esp) flds .LC2 fstpl (%esp) call sum fnstcw 22(%esp) movzwl 22(%esp), %eax movb $12, %ah movw %ax, 20(%esp) fldcw 20(%esp) fistpl 16(%esp) fldcw 22(%esp) movl 16(%esp), %eax leave ret .size main, .-main .section .rodata.cst4,"aM",@progbits,4 .align 4 .LC1: .long 1092616192 .align 4 .LC2: .long 1084227584 .ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)" .section .note.GNU-stack,"",@progbits =================================================================== CIS-Linux2:~/2012/intel64>gcc -O1 -o fsum64O1.s -S fsum.c CIS-Linux2:~/2012/intel64>more fsum64O1.s .file "fsum.c" .text .globl sum .type sum, @function sum: .LFB1: .cfi_startproc addsd %xmm1, %xmm0 ret .cfi_endproc .LFE1: .size sum, .-sum .globl main .type main, @function main: .LFB0: .cfi_startproc movsd .LC0(%rip), %xmm1 movsd .LC1(%rip), %xmm0 call sum cvttsd2si %xmm0, %eax ret .cfi_endproc .LFE0: .size main, .-main .section .rodata.cst8,"aM",@progbits,8 .align 8 .LC0: .long 0 .long 1076101120 .align 8 .LC1: .long 0 .long 1075052544 .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits CIS-Linux2:~/2012/intel64> ===================================================================