Skip to content

Instantly share code, notes, and snippets.

@clowwindy
Created September 28, 2012 06:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clowwindy/3798298 to your computer and use it in GitHub Desktop.
Save clowwindy/3798298 to your computer and use it in GitHub Desktop.
-fno-optimize-sibling-calls
.file "test.c"
.text
.p2align 4,,15
.globl fibonacci
.type fibonacci, @function
fibonacci:
.LFB11:
.cfi_startproc
movq %rbx, -48(%rsp)
movq %rbp, -40(%rsp)
movl %edi, %ebx
.cfi_offset 6, -48
.cfi_offset 3, -56
movq %r12, -32(%rsp)
movq %r13, -24(%rsp)
movq %r14, -16(%rsp)
movq %r15, -8(%rsp)
subq $56, %rsp
.cfi_def_cfa_offset 64
.cfi_offset 15, -16
.cfi_offset 14, -24
.cfi_offset 13, -32
.cfi_offset 12, -40
cmpl $1, %edi
jle .L2
leal -2(%rbx), %r12d
cmpl $1, %r12d
jle .L3
leal -4(%rbx), %r13d
cmpl $1, %r13d
jle .L4
leal -6(%rbx), %ebp
cmpl $1, %ebp
jle .L5
leal -8(%rbx), %edi
xorl %eax, %eax
call fibonacci
leal -7(%rbx), %edi
movl %eax, %ebp
xorl %eax, %eax
call fibonacci
leal (%rax,%rbp), %ebp
.L5:
leal -1(%r13), %r14d
cmpl $1, %r14d
je .L6
leal -3(%r13), %edi
xorl %eax, %eax
call fibonacci
leal -2(%r13), %edi
movl %eax, %r14d
xorl %eax, %eax
call fibonacci
leal (%rax,%r14), %r14d
.L6:
leal (%r14,%rbp), %r13d
.L4:
leal -1(%r12), %ebp
cmpl $1, %ebp
je .L7
leal -3(%r12), %r14d
cmpl $1, %r14d
jle .L8
leal -5(%r12), %edi
xorl %eax, %eax
call fibonacci
leal -4(%r12), %edi
movl %eax, %r14d
xorl %eax, %eax
call fibonacci
leal (%rax,%r14), %r14d
.L8:
leal -1(%rbp), %r15d
cmpl $1, %r15d
je .L9
leal -3(%rbp), %r12d
xorl %eax, %eax
movl %r12d, %edi
call fibonacci
movl %eax, %r15d
leal -2(%rbp), %eax
cmpl $1, %eax
je .L10
leal -4(%rbp), %edi
xorl %eax, %eax
call fibonacci
movl %r12d, %edi
movl %eax, %ebp
xorl %eax, %eax
call fibonacci
addl %ebp, %eax
.L10:
leal (%rax,%r15), %r15d
.L9:
leal (%r15,%r14), %ebp
.L7:
leal 0(%rbp,%r13), %r12d
.L3:
leal -1(%rbx), %ebp
cmpl $1, %ebp
je .L11
leal -3(%rbx), %r13d
cmpl $1, %r13d
jle .L12
leal -5(%rbx), %r14d
cmpl $1, %r14d
jle .L13
leal -7(%rbx), %r15d
cmpl $1, %r15d
jle .L14
leal -9(%rbx), %edi
xorl %eax, %eax
call fibonacci
leal -8(%rbx), %edi
movl %eax, %r15d
xorl %eax, %eax
call fibonacci
leal (%rax,%r15), %r15d
.L14:
leal -1(%r14), %ebx
cmpl $1, %ebx
je .L15
leal -3(%r14), %edi
xorl %eax, %eax
call fibonacci
leal -2(%r14), %edi
movl %eax, %ebx
xorl %eax, %eax
call fibonacci
leal (%rax,%rbx), %ebx
.L15:
leal (%rbx,%r15), %r14d
.L13:
leal -1(%r13), %ebx
cmpl $1, %ebx
je .L16
leal -3(%r13), %r15d
cmpl $1, %r15d
jle .L17
leal -5(%r13), %edi
xorl %eax, %eax
call fibonacci
leal -4(%r13), %edi
movl %eax, %r15d
xorl %eax, %eax
call fibonacci
leal (%rax,%r15), %r15d
.L17:
leal -1(%rbx), %r13d
cmpl $1, %r13d
je .L18
leal -3(%rbx), %edi
xorl %eax, %eax
call fibonacci
leal -2(%rbx), %edi
movl %eax, %r13d
xorl %eax, %eax
call fibonacci
leal (%rax,%r13), %r13d
.L18:
leal 0(%r13,%r15), %ebx
.L16:
leal (%rbx,%r14), %r13d
.L12:
leal -1(%rbp), %ebx
cmpl $1, %ebx
je .L19
leal -3(%rbp), %r14d
cmpl $1, %r14d
jle .L20
leal -5(%rbp), %r15d
cmpl $1, %r15d
jle .L21
leal -7(%rbp), %edi
xorl %eax, %eax
call fibonacci
leal -6(%rbp), %edi
movl %eax, %r15d
xorl %eax, %eax
call fibonacci
leal (%rax,%r15), %r15d
.L21:
leal -1(%r14), %ebp
cmpl $1, %ebp
je .L22
leal -3(%r14), %edi
xorl %eax, %eax
call fibonacci
leal -2(%r14), %edi
movl %eax, %ebp
xorl %eax, %eax
call fibonacci
leal (%rax,%rbp), %ebp
.L22:
leal 0(%rbp,%r15), %r14d
.L20:
leal -1(%rbx), %ebp
cmpl $1, %ebp
je .L23
leal -3(%rbx), %r15d
cmpl $1, %r15d
jle .L24
leal -5(%rbx), %edi
xorl %eax, %eax
call fibonacci
leal -4(%rbx), %edi
movl %eax, %r15d
xorl %eax, %eax
call fibonacci
leal (%rax,%r15), %r15d
.L24:
leal -1(%rbp), %ebx
cmpl $1, %ebx
je .L25
leal -3(%rbp), %edi
xorl %eax, %eax
call fibonacci
leal -2(%rbp), %edi
movl %eax, %ebx
xorl %eax, %eax
call fibonacci
leal (%rax,%rbx), %ebx
.L25:
leal (%rbx,%r15), %ebp
.L23:
leal 0(%rbp,%r14), %ebx
.L19:
leal (%rbx,%r13), %ebp
.L11:
leal 0(%rbp,%r12), %ebx
.L2:
movl %ebx, %eax
movq 16(%rsp), %rbp
movq 8(%rsp), %rbx
movq 24(%rsp), %r12
movq 32(%rsp), %r13
movq 40(%rsp), %r14
movq 48(%rsp), %r15
addq $56, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE11:
.size fibonacci, .-fibonacci
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d\n"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB12:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movl $40, %edi
xorl %eax, %eax
call fibonacci
movl $41, %edi
movl %eax, %ebx
xorl %eax, %eax
call fibonacci
leal (%rax,%rbx), %esi
movl $.LC0, %edi
xorl %eax, %eax
call printf
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE12:
.size main, .-main
.ident "GCC: (GNU) 4.4.6 20110731 (Red Hat 4.4.6-3)"
.section .note.GNU-stack,"",@progbits
.file "test.c"
.text
.p2align 4,,15
.globl fibonacci
.type fibonacci, @function
fibonacci:
.LFB11:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
movl %edi, %eax
subl $12, %eax
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
subq $104, %rsp
.cfi_def_cfa_offset 160
movl %edi, 32(%rsp)
movl %eax, 36(%rsp)
movl $0, 92(%rsp)
.L23:
cmpl $1, 32(%rsp)
jle .L2
movl 36(%rsp), %eax
movl $0, 88(%rsp)
addl $10, %eax
movl %eax, 64(%rsp)
movl 36(%rsp), %eax
movl %eax, 44(%rsp)
.L22:
cmpl $1, 64(%rsp)
jle .L3
movl 44(%rsp), %eax
movl $0, 84(%rsp)
addl $8, %eax
movl %eax, 60(%rsp)
movl 44(%rsp), %eax
movl %eax, 40(%rsp)
.L21:
cmpl $1, 60(%rsp)
jle .L4
movl 40(%rsp), %eax
movl $0, 80(%rsp)
addl $6, %eax
movl %eax, 56(%rsp)
movl 40(%rsp), %eax
movl %eax, 24(%rsp)
.L20:
cmpl $1, 56(%rsp)
jle .L5
movl 24(%rsp), %eax
movl $0, 76(%rsp)
addl $4, %eax
movl %eax, 28(%rsp)
movl 24(%rsp), %eax
addl $2, %eax
movl %eax, 48(%rsp)
movl 24(%rsp), %eax
movl %eax, 68(%rsp)
.L19:
cmpl $1, 28(%rsp)
jle .L6
movl 48(%rsp), %eax
movl $0, 52(%rsp)
cmpl $1, %eax
jle .L8
movl 28(%rsp), %eax
subl $6, %eax
movl %eax, 72(%rsp)
movl 68(%rsp), %eax
movl %eax, 20(%rsp)
.L18:
movl 20(%rsp), %eax
movl $0, 16(%rsp)
cmpl $1, %eax
jle .L10
movl 72(%rsp), %r15d
subl $4, %eax
movl %eax, 12(%rsp)
.L17:
xorl %r14d, %r14d
cmpl $1, %r15d
movl %r15d, %eax
jle .L12
movl 12(%rsp), %r12d
leal -4(%r15), %r13d
.p2align 4,,10
.p2align 3
.L16:
xorl %ebp, %ebp
cmpl $1, %r12d
movl %r12d, %eax
movl %r13d, %ebx
jle .L14
.p2align 4,,10
.p2align 3
.L25:
movl %ebx, %edi
xorl %eax, %eax
subl $1, %ebx
call fibonacci
addl %eax, %ebp
leal 2(%rbx), %eax
cmpl $1, %eax
jg .L25
movl $1, %eax
.L14:
subl $1, %r12d
addl %eax, %ebp
subl $1, %r13d
leal 2(%r12), %eax
addl %ebp, %r14d
cmpl $1, %eax
jg .L16
movl $1, %eax
.L12:
subl $1, %r15d
leal (%r14,%rax), %eax
addl %eax, 16(%rsp)
leal 2(%r15), %eax
subl $1, 12(%rsp)
cmpl $1, %eax
jg .L17
movl $1, %eax
.L10:
addl 16(%rsp), %eax
subl $1, 20(%rsp)
addl %eax, 52(%rsp)
movl 20(%rsp), %eax
subl $1, 72(%rsp)
addl $2, %eax
cmpl $1, %eax
jg .L18
movl $1, %eax
.L8:
addl 52(%rsp), %eax
subl $1, 28(%rsp)
addl %eax, 76(%rsp)
subl $1, 48(%rsp)
subl $1, 68(%rsp)
jmp .L19
.L6:
movl 28(%rsp), %eax
addl 76(%rsp), %eax
subl $1, 56(%rsp)
addl %eax, 80(%rsp)
subl $1, 24(%rsp)
jmp .L20
.L5:
movl 80(%rsp), %eax
addl 56(%rsp), %eax
subl $1, 60(%rsp)
addl %eax, 84(%rsp)
subl $1, 40(%rsp)
jmp .L21
.L4:
movl 60(%rsp), %eax
addl 84(%rsp), %eax
subl $1, 64(%rsp)
addl %eax, 88(%rsp)
subl $1, 44(%rsp)
jmp .L22
.L3:
movl 88(%rsp), %eax
addl 64(%rsp), %eax
subl $1, 32(%rsp)
addl %eax, 92(%rsp)
subl $1, 36(%rsp)
jmp .L23
.L2:
movl 92(%rsp), %eax
addl 32(%rsp), %eax
addq $104, %rsp
.cfi_def_cfa_offset 56
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE11:
.size fibonacci, .-fibonacci
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d\n"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB12:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
subq $88, %rsp
.cfi_def_cfa_offset 144
movl $30, 12(%rsp)
movl $0, 76(%rsp)
.L52:
movl 12(%rsp), %eax
movl $0, 72(%rsp)
addl $10, %eax
movl %eax, 48(%rsp)
movl 12(%rsp), %eax
movl %eax, 28(%rsp)
.L51:
cmpl $1, 48(%rsp)
jle .L32
movl 28(%rsp), %eax
movl $0, 68(%rsp)
addl $8, %eax
movl %eax, 44(%rsp)
movl 28(%rsp), %eax
movl %eax, 24(%rsp)
.L50:
cmpl $1, 44(%rsp)
jle .L33
movl 24(%rsp), %eax
movl $0, 64(%rsp)
addl $6, %eax
movl %eax, 40(%rsp)
movl 24(%rsp), %eax
movl %eax, 16(%rsp)
.L49:
cmpl $1, 40(%rsp)
jle .L34
movl 16(%rsp), %eax
movl $0, 60(%rsp)
addl $4, %eax
movl %eax, 20(%rsp)
movl 16(%rsp), %eax
addl $2, %eax
movl %eax, 32(%rsp)
movl 16(%rsp), %eax
movl %eax, 52(%rsp)
.L48:
cmpl $1, 20(%rsp)
jle .L35
movl 32(%rsp), %eax
movl $0, 36(%rsp)
cmpl $1, %eax
jle .L37
movl 20(%rsp), %eax
subl $6, %eax
movl %eax, 56(%rsp)
movl 52(%rsp), %eax
movl %eax, 8(%rsp)
.L47:
movl 8(%rsp), %eax
movl $0, 4(%rsp)
cmpl $1, %eax
jle .L39
movl 56(%rsp), %r15d
subl $4, %eax
movl %eax, (%rsp)
.L46:
xorl %r14d, %r14d
cmpl $1, %r15d
movl %r15d, %eax
jle .L41
movl (%rsp), %r12d
leal -4(%r15), %r13d
.p2align 4,,10
.p2align 3
.L45:
xorl %ebp, %ebp
cmpl $1, %r12d
movl %r12d, %eax
movl %r13d, %ebx
jle .L43
.p2align 4,,10
.p2align 3
.L54:
movl %ebx, %edi
xorl %eax, %eax
subl $1, %ebx
call fibonacci
addl %eax, %ebp
leal 2(%rbx), %eax
cmpl $1, %eax
jg .L54
movl $1, %eax
.L43:
subl $1, %r12d
addl %eax, %ebp
subl $1, %r13d
leal 2(%r12), %eax
addl %ebp, %r14d
cmpl $1, %eax
jg .L45
movl $1, %eax
.L41:
subl $1, %r15d
leal (%r14,%rax), %eax
addl %eax, 4(%rsp)
leal 2(%r15), %eax
subl $1, (%rsp)
cmpl $1, %eax
jg .L46
movl $1, %eax
.L39:
addl 4(%rsp), %eax
subl $1, 8(%rsp)
addl %eax, 36(%rsp)
movl 8(%rsp), %eax
subl $1, 56(%rsp)
addl $2, %eax
cmpl $1, %eax
jg .L47
movl $1, %eax
.L37:
addl 36(%rsp), %eax
subl $1, 20(%rsp)
addl %eax, 60(%rsp)
subl $1, 32(%rsp)
subl $1, 52(%rsp)
jmp .L48
.L35:
movl 20(%rsp), %eax
addl 60(%rsp), %eax
subl $1, 40(%rsp)
addl %eax, 64(%rsp)
subl $1, 16(%rsp)
jmp .L49
.L34:
movl 64(%rsp), %eax
addl 40(%rsp), %eax
subl $1, 44(%rsp)
addl %eax, 68(%rsp)
subl $1, 24(%rsp)
jmp .L50
.L33:
movl 44(%rsp), %eax
addl 68(%rsp), %eax
subl $1, 48(%rsp)
addl %eax, 72(%rsp)
subl $1, 28(%rsp)
jmp .L51
.L32:
movl 72(%rsp), %eax
subl $1, 12(%rsp)
addl 48(%rsp), %eax
addl %eax, 76(%rsp)
cmpl $-11, 12(%rsp)
jne .L52
movl 76(%rsp), %esi
movl $.LC0, %edi
xorl %eax, %eax
addl $1, %esi
call printf
addq $88, %rsp
.cfi_def_cfa_offset 56
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE12:
.size main, .-main
.ident "GCC: (GNU) 4.4.6 20110731 (Red Hat 4.4.6-3)"
.section .note.GNU-stack,"",@progbits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment