deep

a Cross Development Platform for Java

User Tools

Site Tools


dev:crosscompiler:backend_arm:code_generator

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_arm:code_generator [2019/11/17 18:17] – [Exception Stackframe] ursgrafdev:crosscompiler:backend_arm:code_generator [2019/11/17 18:19] – [Fixup] ursgraf
Line 26: Line 26:
  
 ==== Parameter Passing ==== ==== Parameter Passing ====
-All parameters must be copied in the appropriate registers, see [[.:register_allocation|Register Allocation]]. During this it might be necessary that two or more registers must be swapped in a cycle. For this purpose two arrays //destGPR// and //destFPR// are determined. They show which source register goes into which destination register, if the register holds a parameter. If a cycle is found it will be solved through the aid of R0 or FR0, respectively.+All parameters must be copied in the appropriate registers, see [[.:register_allocation|Register Allocation]]. During this it might be necessary that two or more registers must be swapped in a cycle. For this purpose two arrays //destGPR// and //destFPR// are determined. They show which source register goes into which destination register, if the register holds a parameter.
  
 ==== Return Value ==== ==== Return Value ====
Line 36: Line 36:
   * Addresses of class variables   * Addresses of class variables
   * Addresses of constants (floats, strings, type descriptors)   * Addresses of constants (floats, strings, type descriptors)
-Such addresses must be loaded with the aid of an auxiliary (with //addi// and //addis//). After linking these addresses are known and must be corrected in the code. For this purpose a table called //fixups// is maintained. It contains all references to the objects, which were created by the class file reader and whose final addresses must be inserted into the code. In order to know at what position in the machine code array a certain correction has to be made, the next position is stored in the instruction //addi// as an immediate operand beginning with the last position (//lastFixup//).+Such addresses must be loaded with the aid of an auxiliary registers. After linking these addresses are known and must be corrected in the code. For this purpose a table called //fixups// is maintained. It contains all references to the objects, which were created by the class file reader and whose final addresses must be inserted into the code. In order to know at what position in the machine code array a certain correction has to be made, the next position is stored in the instruction //addi// as an immediate operand beginning with the last position (//lastFixup//).
  
 ===== Accessing the Hardware ===== ===== Accessing the Hardware =====
dev/crosscompiler/backend_arm/code_generator.txt · Last modified: 2022/12/20 11:34 by ursgraf