Files
eth-summaries/semester3/spca/code-examples/01_asm/07_swap_and_sum.s
2026-01-13 14:46:30 +01:00

15 lines
649 B
ArmAsm

swap_and_sum:
movq %rbx, -16(%rsp) # Save %rbx
movslq %esi,%rbx # Save i (and extend)
movq %r12, -8(%rsp) # Save %r12
movq %rdi, %r12 # Save a
leaq (%rdi,%rbx,8), %rdi # & a[i] -> %rdi (arg 1)
subq $16, %rsp # Allocate stack frame
leaq 8(%rdi), %rsi # & a[i+1] -> %rsi (arg 2)
call swap
movq (%r12,%rbx,8), %rax # a[i]
addq %rax, sum(%rip) # sum += a[i]
movq (%rsp), %rbx # Restore %rbx
movq 8(%rsp), %r12 # Restore %r12
addq $16, %rsp # Deallocate stack frame
ret