.file "f.cpp" .text .p2align 4,,15 .globl _Z9factoriali .type _Z9factoriali, @function _Z9factoriali: .LFB0: .cfi_startproc cmpl $1, %edi je .L10 leal -1(%rdi), %edx movl %edx, %ecx shrl $2, %ecx leal 0(,%rcx,4), %esi testl %esi, %esi je .L11 cmpl $9, %edx jbe .L11 leal -2(%rdi), %eax movl %eax, -16(%rsp) leal -3(%rdi), %eax movd -16(%rsp), %xmm0 movl %edi, -16(%rsp) movl %eax, -12(%rsp) movd -16(%rsp), %xmm1 xorl %eax, %eax movl %edx, -16(%rsp) movd -12(%rsp), %xmm4 movd -16(%rsp), %xmm6 punpckldq %xmm4, %xmm0 movdqa .LC1(%rip), %xmm4 punpckldq %xmm6, %xmm1 punpcklqdq %xmm0, %xmm1 movdqa .LC0(%rip), %xmm0 jmp .L9 .p2align 4,,10 .p2align 3 .L36: movdqa %xmm3, %xmm1 .L9: movdqa %xmm1, %xmm5 addl $1, %eax movdqa %xmm1, %xmm3 psrlq $32, %xmm1 cmpl %eax, %ecx pmuludq %xmm0, %xmm5 psrlq $32, %xmm0 pmuludq %xmm0, %xmm1 pshufd $8, %xmm5, %xmm0 paddd %xmm4, %xmm3 pshufd $8, %xmm1, %xmm1 punpckldq %xmm1, %xmm0 ja .L36 movdqa %xmm0, %xmm7 subl %esi, %edi cmpl %esi, %edx psrldq $8, %xmm7 movdqa %xmm7, %xmm2 movdqa %xmm7, %xmm6 psrlq $32, %xmm2 pmuludq %xmm0, %xmm6 psrlq $32, %xmm0 pshufd $8, %xmm6, %xmm1 pmuludq %xmm2, %xmm0 pshufd $8, %xmm0, %xmm0 punpckldq %xmm0, %xmm1 movdqa %xmm1, %xmm7 psrldq $4, %xmm7 pmuludq %xmm7, %xmm1 movd %xmm1, -16(%rsp) movl -16(%rsp), %eax je .L2 leal -1(%rdi), %edx .L3: imull %edi, %eax cmpl $1, %edx je .L2 leal -2(%rdi), %ecx imull %edx, %eax cmpl $1, %ecx je .L2 leal -3(%rdi), %edx imull %ecx, %eax cmpl $1, %edx je .L2 leal -4(%rdi), %ecx imull %edx, %eax cmpl $1, %ecx je .L2 leal -5(%rdi), %edx imull %ecx, %eax cmpl $1, %edx je .L2 leal -6(%rdi), %ecx imull %edx, %eax cmpl $1, %ecx je .L2 leal -7(%rdi), %edx imull %ecx, %eax cmpl $1, %edx je .L2 imull %edx, %eax subl $8, %edi movl %eax, %edx imull %edi, %edx cmpl $1, %edi cmovne %edx, %eax ret .p2align 4,,10 .p2align 3 .L10: movl $1, %eax .p2align 4,,10 .p2align 3 .L2: rep; ret .p2align 4,,10 .p2align 3 .L11: movl $1, %eax jmp .L3 .cfi_endproc .LFE0: .size _Z9factoriali, .-_Z9factoriali .section .rodata.cst16,"aM",@progbits,16 .align 16 .LC0: .long 1 .long 1 .long 1 .long 1 .align 16 .LC1: .long -4 .long -4 .long -4 .long -4 .ident "GCC: (GNU) 4.8.0" .section .note.GNU-stack,"",@progbits