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 // | ||