.file "collatz.c" .text .globl collatz .type collatz, @function collatz: .LFB23: .cfi_startproc movl $0, %eax ## count ($eax) = 0 jmp .L2 ## goto .L2 .L3: leal 1(%rdi,%rdi,2), %edi ## n = 3*n + 1 .L4: addl $1, %eax ## count = count + 1 .L2: cmpl $1, %edi ## if n ($edi) == 1 je .L6 ## goto .L6 testb $1, %dil ## if (n%2 == 1) jne .L3 ## goto .L3 movl %edi, %edx shrl $31, %edx addl %edx, %edi sarl %edi jmp .L4 ## goto .L4 .L6: rep ret .cfi_endproc .LFE23: .size collatz, .-collatz .globl fill_collatz_table .type fill_collatz_table, @function fill_collatz_table: .LFB24: .cfi_startproc testl %esi, %esi jle .L12 pushq %r13 .cfi_def_cfa_offset 16 .cfi_offset 13, -16 pushq %r12 .cfi_def_cfa_offset 24 .cfi_offset 12, -24 pushq %rbp .cfi_def_cfa_offset 32 .cfi_offset 6, -32 pushq %rbx .cfi_def_cfa_offset 40 .cfi_offset 3, -40 movl %esi, %ebp movq %rdi, %r13 movl $0, (%rdi) movl $1, %ebx jmp .L9 .L10: movslq %ebx, %rax leaq 0(%r13,%rax,4), %r12 movl %ebx, %edi call collatz movl %eax, (%r12) addl $1, %ebx .L9: cmpl %ebp, %ebx jl .L10 popq %rbx .cfi_def_cfa_offset 32 popq %rbp .cfi_def_cfa_offset 24 popq %r12 .cfi_def_cfa_offset 16 popq %r13 .cfi_def_cfa_offset 8 ret .L12: .cfi_restore 3 .cfi_restore 6 .cfi_restore 12 .cfi_restore 13 rep ret .cfi_endproc .LFE24: .size fill_collatz_table, .-fill_collatz_table .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%4d --> %8d\n" .text .globl print_table .type print_table, @function print_table: .LFB25: .cfi_startproc pushq %r12 .cfi_def_cfa_offset 16 .cfi_offset 12, -16 pushq %rbp .cfi_def_cfa_offset 24 .cfi_offset 6, -24 pushq %rbx .cfi_def_cfa_offset 32 .cfi_offset 3, -32 movq %rdi, %r12 movl %esi, %ebp movl $1, %ebx jmp .L16 .L17: movslq %ebx, %rax movl (%r12,%rax,4), %r8d movl %ebx, %ecx leaq .LC0(%rip), %rdx movl $1, %esi movq stdout(%rip), %rdi movl $0, %eax call __fprintf_chk@PLT addl $1, %ebx .L16: cmpl %ebp, %ebx jl .L17 popq %rbx .cfi_def_cfa_offset 24 popq %rbp .cfi_def_cfa_offset 16 popq %r12 .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE25: .size print_table, .-print_table .globl main .type main, @function main: .LFB26: .cfi_startproc pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 subq $816, %rsp .cfi_def_cfa_offset 832 movq %fs:40, %rax movq %rax, 808(%rsp) xorl %eax, %eax movq %rsp, %rbx movl $200, %esi movq %rbx, %rdi call fill_collatz_table movl $200, %esi movq %rbx, %rdi call print_table movq 808(%rsp), %rdx xorq %fs:40, %rdx jne .L22 movl $0, %eax addq $816, %rsp .cfi_remember_state .cfi_def_cfa_offset 16 popq %rbx .cfi_def_cfa_offset 8 ret .L22: .cfi_restore_state call __stack_chk_fail@PLT .cfi_endproc .LFE26: .size main, .-main .ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0" .section .note.GNU-stack,"",@progbits