# bedir t karaabalı # 2025 # collatz problem .text # void collatz_len_and_peek(uint64_t x, uint64_t *steps, uint64_t *peek) .global collatz_len_and_peek collatz_len_and_peek: # Collatz problem implementation # x -> rdi, steps -> rsi, peak -> rdx movq $0, (%rsi) # *steps=0 movq %rdi, (%rdx) # *peak = x movq %rdi, %r8 # r8(n) (caller-saved) = x .loop: cmpq $1, %r8 # while (n != 1) je .done testq $1, %r8 # 1 and n jz .even # odd case leaq (%r8, %r8, 2), %r8 # n *= 3 -> lea base + index * scale addq $1,%r8 # n += 1 jmp .next_step .even: shrq $1, %r8 # n /= 2 .next_step: cmpq (%rdx), %r8 # if (n > *peek) n - *peek jle .next movq %r8, (%rdx) # *peek = n .next: addq $1, (%rsi) # (*steps)++ jmp .loop .done: ret