This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| dev:crosscompiler:backend:register_allocator [2018/10/31 12:19] – [Locals on the Stack] ursgraf | dev:crosscompiler:backend:register_allocator [2019/08/29 16:53] (current) – [Determine Used Parameters] ursgraf | ||
|---|---|---|---|
| Line 39: | Line 39: | ||
| ===== Determine Used Parameters ===== | ===== Determine Used Parameters ===== | ||
| - | Parameters are passed in volatile registers. Some of them have to be copied to nonvolatile registers. Some parameters might not be used at all in a method. This can be determined in the exit set of the last node. If a value is null in that set the parameter with this index was never loaded and hence no register must be reserved. The following example demonstrates parameter usage on a ppc platform. | + | Parameters are passed in volatile registers. Some of them have to be copied to nonvolatile registers. Some parameters might not be used at all in a method. This can be determined in the exit set of the last node. If a value is null in that set the parameter with this index was never loaded and hence no register must be reserved. The following example demonstrates parameter usage on a PPC platform. |
| <code java> | <code java> | ||
| float m2(long a, float b, double c, byte[] d, short e, int f, int g) { | float m2(long a, float b, double c, byte[] d, short e, int f, int g) { | ||
| Line 94: | Line 94: | ||
| ===== Locals on the Stack ===== | ===== Locals on the Stack ===== | ||
| - | Local variables which cannot be assigned a register get assigned a stack slot. Stack slots are numbered from 0x100. The code generator will handle these stack slots. | + | Local variables which cannot be assigned a register get assigned a stack slot. Stack slots are numbered from 0x100. The code generator will handle |
| + | * load stack slot into free register | ||
| + | * execute instruction | ||
| + | |||
| + | If the result of the SSA instruction is assigned a stack slot, the code generator will have to save to the stack: | ||
| + | |||
| + | * execute instruction, | ||
| + | * store destination register onto stack | ||
| + | |||
| + | During register allocation of a method a variable // | ||