Hi
During function calls, there is no context change, so only the main registers of your CPU must be pushed into the stack. They are restored (poped) as the call returns.
During interrupt calls, the full context change, so all the registers are pushed into the stack and are restored or poped when interrupt call return. Furthermore, during interrupt calls, interrupt are masked, avoiding other interrupt to disturb the current interrupt routine. The purpose of the specific RETI or IRET instruction is to enable interrupt again after return from interrupt call.