This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
dev:crosscompiler:backend_arm:register_allocation [2018/11/21 11:02] – [Register Usage] ursgraf | dev:crosscompiler:backend_arm:register_allocation [2019/08/29 16:02] – [Parameter Passing] ursgraf | ||
---|---|---|---|
Line 3: | Line 3: | ||
===== Register Usage ===== | ===== Register Usage ===== | ||
- | Registers can be classified as // | ||
| Register | State | Use | | | Register | State | Use | | ||
- | | R0 | volatile | 1st. parameter, return value | | + | | R0 | volatile | 1st. parameter, local variables, return value | |
- | | R1 | volatile | 2nd. parameter, return value (if long, lower 4 bytes of long) | | + | | R1 | volatile | 2nd. parameter, local variables, return value (if long, lower 4 bytes of long) | |
| R2-R5 | volatile | further parameters, local variables | | | R2-R5 | volatile | further parameters, local variables | | ||
| R6 | dedicated | scratch register | | | R6 | dedicated | scratch register | | ||
Line 13: | Line 12: | ||
| R14 | dedicated | link register, scratch register | | | R14 | dedicated | link register, scratch register | | ||
| R15 | dedicated | PC | | | R15 | dedicated | PC | | ||
- | | D0 | volatile | + | | D0 | dedicated| scratch register | |
- | | D1-D6 | volatile | further | + | | D1 | dedicated| scratch register, return value | |
+ | | D2-D6 | volatile | parameters, local variables | ||
| D7-D10 | volatile | local variables | | | D7-D10 | volatile | local variables | | ||
| D11-D31 | nonvolatile | local variables | | | D11-D31 | nonvolatile | local variables | | ||
- | | S0 | volatile | 1. parameter, return value | | + | | S0,S1 | dedicated| scratch register | |
- | | S1-S6 | volatile | further parameters | | + | | S2 | volatile | 1. parameter, local variables, return value | |
- | | S7-D21 | volatile | local variables | | + | | S3-S13 | volatile | further parameters, local variables |
+ | | S14-S21 | volatile | local variables | | ||
| S22-S31 | nonvolatile | local variables | | | S22-S31 | nonvolatile | local variables | | ||
Line 30: | Line 31: | ||
For the translation of certain SSA instructions (e.g. of type long) further auxiliary registers are needed. They are assigned and reserved by the register allocator as well. | For the translation of certain SSA instructions (e.g. of type long) further auxiliary registers are needed. They are assigned and reserved by the register allocator as well. | ||
- | ==== Parameter Passing ==== | + | ===== Parameter Passing |
- | Parameters are passes | + | Parameters are passed |
- | In the interface //armPPC/ | + | In the interface //arm/ |
+ | |S0|S1|S2|S3|S4|S5|S6|S7|S8|S9|S10|S11| | ||
+ | | D0 || D1 || D2 || D3 || D4 || D5 || | ||
+ | | ^| ^^a| ^ b ^^c| ^ d ^^ | ||
- | ==== Locals on the Stack ==== | + | ===== Locals on the Stack ===== |
Most SSA instruction have 2 operands and a result. Each of them can reside on the stack. Operands must be fetched into a free register, the result must be stored onto the stack. A single SSA instruction '' | Most SSA instruction have 2 operands and a result. Each of them can reside on the stack. Operands must be fetched into a free register, the result must be stored onto the stack. A single SSA instruction '' | ||
Line 48: | Line 52: | ||
| D12 | dedicated | first operand of SSA instruction | | | D12 | dedicated | first operand of SSA instruction | | ||
| D13 | dedicated | second operand of SSA instruction | | | D13 | dedicated | second operand of SSA instruction | | ||
- | | D22 | dedicated | result register or third operand of '' | + | | S22 | dedicated | result register or third operand of '' |
- | | D12 | dedicated | first operand of SSA instruction | | + | | S23 | dedicated | first operand of SSA instruction | |
- | | D13 | dedicated | second operand of SSA instruction | | + | | S24 | dedicated | second operand of SSA instruction | |
- | For floats and doubles: reserve | + | When dividing numbers of type long, a large number of auxiliary registers are necessary. |