remember to restore the stack pointer