> And indeed, inside main we can see push rax - saving the value in the register rax to the stack, then a call to our add function, then we pop rax off the stack. The push call pop sequence is to preserve whatever values are in the registers used in add.
There's really no need to save rax here; I know that optimizations are off but I'm still curious why rustc thinks this is necessary…