deep

a Cross Development Platform for Java

User Tools

Site Tools


dev:crosscompiler:backend:register_allocator

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
dev:crosscompiler:backend:register_allocator [2018/01/04 15:39] – [Register Usage] ursgrafdev:crosscompiler:backend:register_allocator [2018/02/28 14:43] – [Determine Used Parameters] ursgraf
Line 5: Line 5:
 Registers can be classified as //dedicated//, //volatile// or //nonvolatile//. //Dedicated// are register with a special purpose, such as the stackpointer. //Volatile// means, that this register might be used any time. It does not have to be stored when another method is called. //Nonvolatile// registers must be saved in the prologue of a method before they can be used and after use they must be restored. The number of volatile and nonvolatile registers must be equal for all methods.  Registers can be classified as //dedicated//, //volatile// or //nonvolatile//. //Dedicated// are register with a special purpose, such as the stackpointer. //Volatile// means, that this register might be used any time. It does not have to be stored when another method is called. //Nonvolatile// registers must be saved in the prologue of a method before they can be used and after use they must be restored. The number of volatile and nonvolatile registers must be equal for all methods. 
  
-[[dev:crosscompiler:backend_ppc:register_allocation|Register Allocation for PPC]] +  * [[dev:crosscompiler:backend_ppc:register_allocation|Register Allocation for PPC]]  
-[[dev:crosscompiler:backend_arm:register_allocation|Register Allocation for ARM]]+  [[dev:crosscompiler:backend_arm:register_allocation|Register Allocation for ARM]]
 ===== Resolving of Phi-Functions ===== ===== Resolving of Phi-Functions =====
 The operands of a phi-function must all get the same register as the result of the phi-function. For this purpose all these operands have a field //join//. \\ The operands of a phi-function must all get the same register as the result of the phi-function. For this purpose all these operands have a field //join//. \\
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.+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) {
dev/crosscompiler/backend/register_allocator.txt · Last modified: 2019/08/29 16:53 by ursgraf