aarch64 push pop
fibonacci:
// fibonacci(n) -> result
// n is 32-bit and will be passed in w0
// result is 64-bit and will be returned in x0
stp x19, x30, [sp, #-16]! // Keep x19 and x30 (link register)
stp x20, x21, [sp, #-16]! // Keep x20 and x21
/*
Our stack at this point will look like this
Contents Address
| x20 | [sp]
| x21 | [sp, #8]
| x19 | [sp, #16]
| x30 | [sp, #24]
*/
end:
ldp x20, x21, [sp], #16 // Restore x20 and x21
ldp x19, x30, [sp], #16 // Restore x19 and x30 (link register)
ret