.file "asm-proc.c" .globl sum .bss .align 8 .type sum, @object .size sum, 8 sum: .zero 8 .globl scount .align 8 .type scount, @object .size scount, 8 scount: .zero 8 .text .p2align 4,,15 .globl prod .type prod, @function prod: .LFB26: imulq %rsi, %rdi movq %rdi, %rax ret .LFE26: .size prod, .-prod .p2align 4,,15 .globl mul_2p1 .type mul_2p1, @function mul_2p1: .LFB27: movq %rsi, %rax movq %rdi, %rsi movq %rax, %rdi call prod incq %rax ret .LFE27: .size mul_2p1, .-mul_2p1 .p2align 4,,15 .globl val_loc .type val_loc, @function val_loc: .LFB28: movq %rdi, %rax andl $1, %edx addq %rsi, %rdi imulq %rsi, %rax movslq %edx,%rdx movq %rdi, -16(%rsp) movq %rax, -24(%rsp) movq -24(%rsp,%rdx,8), %rax ret .LFE28: .size val_loc, .-val_loc .p2align 4,,15 .globl mul_3 .type mul_3, @function mul_3: .LFB29: pushq %rbx .LCFI0: movq %rdx, %rbx call prod movq %rbx, %rsi movq %rax, %rdi popq %rbx jmp prod .LFE29: .size mul_3, .-mul_3 .p2align 4,,15 .globl mul_3p1 .type mul_3p1, @function mul_3p1: .LFB30: pushq %rbx .LCFI1: movq %rdx, %rbx call prod movq %rbx, %rsi movq %rax, %rdi call prod popq %rbx incq %rax ret .LFE30: .size mul_3p1, .-mul_3p1 .p2align 4,,15 .globl store_prod .type store_prod, @function store_prod: .LFB31: imulq %rsi, %rdi movq %rdi, (%rdx) ret .LFE31: .size store_prod, .-store_prod .p2align 4,,15 .globl mul_2s .type mul_2s, @function mul_2s: .LFB32: subq $8, %rsp .LCFI2: movq %rsp, %rdx call store_prod movq (%rsp), %rax addq $8, %rsp ret .LFE32: .size mul_2s, .-mul_2s .p2align 4,,15 .globl mul_3s .type mul_3s, @function mul_3s: .LFB33: pushq %rbx .LCFI3: movq %rdx, %rbx subq $8, %rsp .LCFI4: movq %rsp, %rdx call store_prod movq (%rsp), %rdi movq %rsp, %rdx movq %rbx, %rsi call store_prod movq (%rsp), %rax addq $8, %rsp popq %rbx ret .LFE33: .size mul_3s, .-mul_3s .p2align 4,,15 .globl mul_list .type mul_list, @function mul_list: .LFB34: pushq %r12 .LCFI5: movl $1, %edx movq %rdi, %r12 pushq %rbp .LCFI6: movl %esi, %ebp pushq %rbx .LCFI7: xorl %ebx, %ebx jmp .L16 .p2align 4,,7 .L18: movslq %ebx,%rax movq %rdx, %rdi incl %ebx movq (%r12,%rax,8), %rsi call prod movq %rax, %rdx .L16: cmpl %ebp, %ebx jl .L18 popq %rbx popq %rbp popq %r12 movq %rdx, %rax ret .LFE34: .size mul_list, .-mul_list .p2align 4,,15 .globl mul_list_r0 .type mul_list_r0, @function mul_list_r0: .LFB35: testl %esi, %esi pushq %rbx .LCFI8: movl $1, %eax jle .L19 movslq %esi,%rax decl %esi movq -8(%rdi,%rax,8), %rbx call mul_list_r0 imulq %rbx, %rax .L19: popq %rbx ret .LFE35: .size mul_list_r0, .-mul_list_r0 .p2align 4,,15 .globl mul_list_r1 .type mul_list_r1, @function mul_list_r1: .LFB36: testl %esi, %esi pushq %rbx .LCFI9: movl $1, %eax jle .L23 cmpl $1, %esi je .L29 movslq %esi,%rax decl %esi movq -8(%rdi,%rax,8), %rbx call mul_list_r1 imulq %rbx, %rax .L23: popq %rbx ret .p2align 4,,7 .L29: popq %rbx movq (%rdi), %rax ret .LFE36: .size mul_list_r1, .-mul_list_r1 .p2align 4,,15 .globl mul_list_r2 .type mul_list_r2, @function mul_list_r2: .LFB37: .p2align 4,,7 .L35: testl %esi, %esi jle .L36 cmpl $1, %esi je .L37 movslq %esi,%rdx decl %esi movq -8(%rdi,%rdx,8), %rax imulq -16(%rdi,%rdx,8), %rax movq %rax, -16(%rdi,%rdx,8) jmp .L35 .L36: movl $1, %eax ret .L37: movq (%rdi), %rax ret .LFE37: .size mul_list_r2, .-mul_list_r2 .p2align 4,,15 .globl mul_list_r3 .type mul_list_r3, @function mul_list_r3: .LFB38: movq %rbp, -24(%rsp) .LCFI10: movq %r13, -8(%rsp) .LCFI11: movl %esi, %ebp movq %rbx, -32(%rsp) .LCFI12: movq %r12, -16(%rsp) .LCFI13: subq $32, %rsp .LCFI14: testl %esi, %esi movq %rdi, %r13 movl $1, %eax jle .L38 cmpl $1, %esi je .L44 movl %esi, %r12d sarl %r12d movl %r12d, %esi subl %r12d, %ebp call mul_list_r3 movq %rax, %rbx movslq %r12d,%rax movl %ebp, %esi leaq (%r13,%rax,8), %rdi call mul_list_r3 imulq %rbx, %rax .L38: movq (%rsp), %rbx movq 8(%rsp), %rbp movq 16(%rsp), %r12 movq 24(%rsp), %r13 addq $32, %rsp ret .p2align 4,,7 .L44: movq (%rdi), %rax movq (%rsp), %rbx movq 8(%rsp), %rbp movq 16(%rsp), %r12 movq 24(%rsp), %r13 addq $32, %rsp ret .LFE38: .size mul_list_r3, .-mul_list_r3 .p2align 4,,15 .globl cnt_odd .type cnt_odd, @function cnt_odd: .LFB40: movl %edi, %edx subq $8, %rsp .LCFI15: xorl %eax, %eax shrl %edx testl %edi, %edi je .L45 andl $1, %edi je .L47 movl %edx, %edi call cnt_even incl %eax .p2align 4,,7 .L45: addq $8, %rsp .p2align 4,,1 ret .p2align 4,,7 .L47: movl %edx, %edi call cnt_odd incl %eax .p2align 4,,3 jmp .L45 .LFE40: .size cnt_odd, .-cnt_odd .p2align 4,,15 .globl cnt_even .type cnt_even, @function cnt_even: .LFB39: movl %edi, %edx subq $8, %rsp .LCFI16: xorl %eax, %eax shrl %edx testl %edi, %edi je .L50 andl $1, %edi je .L52 movl %edx, %edi call cnt_even .L50: addq $8, %rsp .p2align 4,,2 ret .p2align 4,,7 .L52: movl %edx, %edi call cnt_odd addq $8, %rsp .p2align 4,,3 ret .LFE39: .size cnt_even, .-cnt_even .p2align 4,,15 .globl cnt_bits .type cnt_bits, @function cnt_bits: .LFB41: jmp cnt_even .LFE41: .size cnt_bits, .-cnt_bits .p2align 4,,15 .globl swap .type swap, @function swap: .LFB42: movq (%rdi), %rdx movq (%rsi), %rax movq %rax, (%rdi) movq %rdx, (%rsi) ret .LFE42: .size swap, .-swap .p2align 4,,15 .globl swap_a .type swap_a, @function swap_a: .LFB43: movq (%rdi), %rax movq %rax, -24(%rsp) movq (%rsi), %rax movq %rax, -16(%rsp) movq -16(%rsp), %rax movq %rax, (%rdi) movq -24(%rsp), %rax movq %rax, (%rsi) ret .LFE43: .size swap_a, .-swap_a .p2align 4,,15 .globl swap_ele .type swap_ele, @function swap_ele: .LFB44: movslq %esi,%rsi leaq (%rdi,%rsi,8), %rdi leaq 8(%rdi), %rsi jmp swap .LFE44: .size swap_ele, .-swap_ele .p2align 4,,15 .globl swap_ele_se .type swap_ele_se, @function swap_ele_se: .LFB45: movslq %esi,%rsi leaq (%rdi,%rsi,8), %rdi leaq 8(%rdi), %rsi call swap incq scount(%rip) ret .LFE45: .size swap_ele_se, .-swap_ele_se .p2align 4,,15 .globl swap_ele_su .type swap_ele_su, @function swap_ele_su: .LFB46: movq %rbx, -16(%rsp) .LCFI17: movslq %esi,%rbx movq %r12, -8(%rsp) .LCFI18: movq %rdi, %r12 leaq (%rdi,%rbx,8), %rdi subq $16, %rsp .LCFI19: leaq 8(%rdi), %rsi call swap movq (%r12,%rbx,8), %rax addq %rax, sum(%rip) movq (%rsp), %rbx movq 8(%rsp), %r12 addq $16, %rsp ret .LFE46: .size swap_ele_su, .-swap_ele_su .p2align 4,,15 .globl flip .type flip, @function flip: .LFB47: testq %rdi, %rdi pushq %rbx .LCFI20: movq %rdi, %rax movq %rdi, %rbx js .L65 popq %rbx ret .p2align 4,,7 .L65: negq %rdi call flip imulq %rbx, %rax popq %rbx .p2align 4,,3 ret .LFE47: .size flip, .-flip .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "Prod [ " .LC1: .string "%ld " .LC2: .string "] = %ld\n" .section .rodata.str1.8,"aMS",@progbits,1 .align 8 .LC3: .string "Oops. mul_list_r0 returns %ld\n" .align 8 .LC4: .string "Oops. mul_list_r1 returns %ld\n" .align 8 .LC5: .string "Oops. mul_list_r3 returns %ld\n" .align 8 .LC6: .string "Oops. mul_list_r2 returns %ld\n" .text .p2align 4,,15 .globl main .type main, @function main: .LFB48: pushq %r15 .LCFI21: movq %rsi, %r15 pushq %r14 .LCFI22: pushq %r13 .LCFI23: pushq %r12 .LCFI24: leal -1(%rdi), %r12d movl $8, %edi pushq %rbp .LCFI25: movslq %r12d,%rsi xorl %ebp, %ebp pushq %rbx .LCFI26: subq $8, %rsp .LCFI27: call calloc cmpl %r12d, %ebp movq %rax, %r13 jge .L86 .p2align 4,,7 .L92: movslq %ebp,%rbx xorl %ecx, %ecx xorl %edx, %edx movq 8(%r15,%rbx,8), %rdi xorl %esi, %esi incl %ebp call __strtol_internal movq %rax, (%r13,%rbx,8) cmpl %r12d, %ebp jl .L92 .L86: cmpl $2, %r12d je .L93 cmpl $3, %r12d .p2align 4,,3 jne .L74 movq 16(%r13), %rdx movq 8(%r13), %rsi movq (%r13), %rdi call mul_3 .L90: movq %rax, %r14 .L73: xorl %eax, %eax movl $.LC0, %edi xorl %ebp, %ebp call printf cmpl %r12d, %ebp jge .L88 .p2align 4,,7 .L94: movslq %ebp,%rbx xorl %ecx, %ecx xorl %edx, %edx movq 8(%r15,%rbx,8), %rdi xorl %esi, %esi incl %ebp call __strtol_internal movl $.LC1, %edi movq %rax, %rsi movq %rax, (%r13,%rbx,8) xorl %eax, %eax call printf cmpl %r12d, %ebp jl .L94 .L88: movq %r14, %rsi movl $.LC2, %edi xorl %eax, %eax call printf movl %r12d, %esi movq %r13, %rdi call mul_list_r0 cmpq %rax, %r14 je .L81 movq %rax, %rsi movl $.LC3, %edi xorl %eax, %eax call printf .L81: movl %r12d, %esi movq %r13, %rdi call mul_list_r1 cmpq %rax, %r14 je .L82 movq %rax, %rsi movl $.LC4, %edi xorl %eax, %eax call printf .L82: movl %r12d, %esi movq %r13, %rdi call mul_list_r3 cmpq %rax, %r14 je .L83 movq %rax, %rsi movl $.LC5, %edi xorl %eax, %eax call printf .L83: movl %r12d, %esi movq %r13, %rdi call mul_list_r2 cmpq %rax, %r14 je .L84 movq %rax, %rsi movl $.LC6, %edi xorl %eax, %eax call printf .L84: addq $8, %rsp xorl %eax, %eax popq %rbx popq %rbp popq %r12 popq %r13 popq %r14 popq %r15 ret .L74: movl %r12d, %esi movq %r13, %rdi call mul_list jmp .L90 .L93: movq 8(%r13), %rsi movq (%r13), %rdi call mul_2p1 leaq -1(%rax), %r14 .p2align 4,,2 jmp .L73 .LFE48: .size main, .-main .section .eh_frame,"a",@progbits .Lframe1: .long .LECIE1-.LSCIE1 .LSCIE1: .long 0x0 .byte 0x1 .string "" .uleb128 0x1 .sleb128 -8 .byte 0x10 .byte 0xc .uleb128 0x7 .uleb128 0x8 .byte 0x90 .uleb128 0x1 .align 8 .LECIE1: .LSFDE1: .long .LEFDE1-.LASFDE1 .LASFDE1: .long .LASFDE1-.Lframe1 .quad .LFB26 .quad .LFE26-.LFB26 .align 8 .LEFDE1: .LSFDE3: .long .LEFDE3-.LASFDE3 .LASFDE3: .long .LASFDE3-.Lframe1 .quad .LFB27 .quad .LFE27-.LFB27 .align 8 .LEFDE3: .LSFDE5: .long .LEFDE5-.LASFDE5 .LASFDE5: .long .LASFDE5-.Lframe1 .quad .LFB28 .quad .LFE28-.LFB28 .align 8 .LEFDE5: .LSFDE7: .long .LEFDE7-.LASFDE7 .LASFDE7: .long .LASFDE7-.Lframe1 .quad .LFB29 .quad .LFE29-.LFB29 .byte 0x4 .long .LCFI0-.LFB29 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .align 8 .LEFDE7: .LSFDE9: .long .LEFDE9-.LASFDE9 .LASFDE9: .long .LASFDE9-.Lframe1 .quad .LFB30 .quad .LFE30-.LFB30 .byte 0x4 .long .LCFI1-.LFB30 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .align 8 .LEFDE9: .LSFDE11: .long .LEFDE11-.LASFDE11 .LASFDE11: .long .LASFDE11-.Lframe1 .quad .LFB31 .quad .LFE31-.LFB31 .align 8 .LEFDE11: .LSFDE13: .long .LEFDE13-.LASFDE13 .LASFDE13: .long .LASFDE13-.Lframe1 .quad .LFB32 .quad .LFE32-.LFB32 .byte 0x4 .long .LCFI2-.LFB32 .byte 0xe .uleb128 0x10 .align 8 .LEFDE13: .LSFDE15: .long .LEFDE15-.LASFDE15 .LASFDE15: .long .LASFDE15-.Lframe1 .quad .LFB33 .quad .LFE33-.LFB33 .byte 0x4 .long .LCFI3-.LFB33 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .byte 0x4 .long .LCFI4-.LCFI3 .byte 0xe .uleb128 0x18 .align 8 .LEFDE15: .LSFDE17: .long .LEFDE17-.LASFDE17 .LASFDE17: .long .LASFDE17-.Lframe1 .quad .LFB34 .quad .LFE34-.LFB34 .byte 0x4 .long .LCFI5-.LFB34 .byte 0xe .uleb128 0x10 .byte 0x8c .uleb128 0x2 .byte 0x4 .long .LCFI6-.LCFI5 .byte 0xe .uleb128 0x18 .byte 0x86 .uleb128 0x3 .byte 0x4 .long .LCFI7-.LCFI6 .byte 0xe .uleb128 0x20 .byte 0x83 .uleb128 0x4 .align 8 .LEFDE17: .LSFDE19: .long .LEFDE19-.LASFDE19 .LASFDE19: .long .LASFDE19-.Lframe1 .quad .LFB35 .quad .LFE35-.LFB35 .byte 0x4 .long .LCFI8-.LFB35 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .align 8 .LEFDE19: .LSFDE21: .long .LEFDE21-.LASFDE21 .LASFDE21: .long .LASFDE21-.Lframe1 .quad .LFB36 .quad .LFE36-.LFB36 .byte 0x4 .long .LCFI9-.LFB36 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .align 8 .LEFDE21: .LSFDE23: .long .LEFDE23-.LASFDE23 .LASFDE23: .long .LASFDE23-.Lframe1 .quad .LFB37 .quad .LFE37-.LFB37 .align 8 .LEFDE23: .LSFDE25: .long .LEFDE25-.LASFDE25 .LASFDE25: .long .LASFDE25-.Lframe1 .quad .LFB38 .quad .LFE38-.LFB38 .byte 0x4 .long .LCFI11-.LFB38 .byte 0x8d .uleb128 0x2 .byte 0x86 .uleb128 0x4 .byte 0x4 .long .LCFI14-.LCFI11 .byte 0xe .uleb128 0x28 .byte 0x8c .uleb128 0x3 .byte 0x83 .uleb128 0x5 .align 8 .LEFDE25: .LSFDE27: .long .LEFDE27-.LASFDE27 .LASFDE27: .long .LASFDE27-.Lframe1 .quad .LFB40 .quad .LFE40-.LFB40 .byte 0x4 .long .LCFI15-.LFB40 .byte 0xe .uleb128 0x10 .align 8 .LEFDE27: .LSFDE29: .long .LEFDE29-.LASFDE29 .LASFDE29: .long .LASFDE29-.Lframe1 .quad .LFB39 .quad .LFE39-.LFB39 .byte 0x4 .long .LCFI16-.LFB39 .byte 0xe .uleb128 0x10 .align 8 .LEFDE29: .LSFDE31: .long .LEFDE31-.LASFDE31 .LASFDE31: .long .LASFDE31-.Lframe1 .quad .LFB41 .quad .LFE41-.LFB41 .align 8 .LEFDE31: .LSFDE33: .long .LEFDE33-.LASFDE33 .LASFDE33: .long .LASFDE33-.Lframe1 .quad .LFB42 .quad .LFE42-.LFB42 .align 8 .LEFDE33: .LSFDE35: .long .LEFDE35-.LASFDE35 .LASFDE35: .long .LASFDE35-.Lframe1 .quad .LFB43 .quad .LFE43-.LFB43 .align 8 .LEFDE35: .LSFDE37: .long .LEFDE37-.LASFDE37 .LASFDE37: .long .LASFDE37-.Lframe1 .quad .LFB44 .quad .LFE44-.LFB44 .align 8 .LEFDE37: .LSFDE39: .long .LEFDE39-.LASFDE39 .LASFDE39: .long .LASFDE39-.Lframe1 .quad .LFB45 .quad .LFE45-.LFB45 .align 8 .LEFDE39: .LSFDE41: .long .LEFDE41-.LASFDE41 .LASFDE41: .long .LASFDE41-.Lframe1 .quad .LFB46 .quad .LFE46-.LFB46 .byte 0x4 .long .LCFI17-.LFB46 .byte 0x83 .uleb128 0x3 .byte 0x4 .long .LCFI18-.LCFI17 .byte 0x8c .uleb128 0x2 .byte 0x4 .long .LCFI19-.LCFI18 .byte 0xe .uleb128 0x18 .align 8 .LEFDE41: .LSFDE43: .long .LEFDE43-.LASFDE43 .LASFDE43: .long .LASFDE43-.Lframe1 .quad .LFB47 .quad .LFE47-.LFB47 .byte 0x4 .long .LCFI20-.LFB47 .byte 0xe .uleb128 0x10 .byte 0x83 .uleb128 0x2 .align 8 .LEFDE43: .LSFDE45: .long .LEFDE45-.LASFDE45 .LASFDE45: .long .LASFDE45-.Lframe1 .quad .LFB48 .quad .LFE48-.LFB48 .byte 0x4 .long .LCFI21-.LFB48 .byte 0xe .uleb128 0x10 .byte 0x8f .uleb128 0x2 .byte 0x4 .long .LCFI22-.LCFI21 .byte 0xe .uleb128 0x18 .byte 0x4 .long .LCFI23-.LCFI22 .byte 0xe .uleb128 0x20 .byte 0x4 .long .LCFI24-.LCFI23 .byte 0xe .uleb128 0x28 .byte 0x8c .uleb128 0x5 .byte 0x8d .uleb128 0x4 .byte 0x8e .uleb128 0x3 .byte 0x4 .long .LCFI25-.LCFI24 .byte 0xe .uleb128 0x30 .byte 0x86 .uleb128 0x6 .byte 0x4 .long .LCFI26-.LCFI25 .byte 0xe .uleb128 0x38 .byte 0x4 .long .LCFI27-.LCFI26 .byte 0xe .uleb128 0x40 .byte 0x83 .uleb128 0x7 .align 8 .LEFDE45: .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)"