asked 205k views
0 votes
Specify 3 different algorithms for deciding which registers should be saved or destroyed on a function call.

1) If the caller is using the register it is the callers responsibility to save it.

2)the callee(the subroutine) saves anything that's its going to use. (Before using the register it saves it value then restores it at the end of the function)

3)We divide there registers up into two banks (Callee-saves and Caller saves)

1 Answer

7 votes
Here are three different algorithms for deciding which registers should be saved or destroyed on a function call:

1. Caller-saves: In this algorithm, if the caller is using a register, it is the caller's responsibility to save it before calling the function. This approach puts the burden of saving and restoring registers on the caller, which can be time-consuming and error-prone if there are many function calls.

2. Callee-saves: In this algorithm, the callee (the subroutine) saves any registers it is going to use at the beginning of the function, and restores them at the end of the function. This approach puts the burden of saving and restoring registers on the callee, which can be more efficient if there are many function calls, but can also be wasteful if many registers are saved even if they are not used.

3. Hybrid approach: In this algorithm, the registers are divided into two banks: callee-saves and caller-saves. The callee-saves registers are saved and restored by the callee, while the caller-saves registers are saved and restored by the caller. This approach strikes a balance between the previous two approaches, allowing for more efficient register usage while minimizing the burden on both the caller and callee.

Each algorithm has its own advantages and disadvantages, and the choice of which one to use will depend on the specific requirements and constraints of the system being developed.

Related questions