This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
dev:crosscompiler:backend_arm:code_generator [2019/07/11 19:40] – [Compiler Specific Subroutines] ursgraf | dev:crosscompiler:backend_arm:code_generator [2019/07/16 13:26] – [Stackframe] ursgraf | ||
---|---|---|---|
Line 2: | Line 2: | ||
Everything which is not fully implemented is listed below | Everything which is not fully implemented is listed below | ||
^topic^I^L^F^remarks^ | ^topic^I^L^F^remarks^ | ||
- | |instanceof| ||| | | ||
- | |checkcast| ||| | | ||
|throw| ||| | | |throw| ||| | | ||
- | |call| |||class & instance methods can be called| | ||
|new| |||primitive array & array of objects & string implemented| | |new| |||primitive array & array of objects & string implemented| | ||
|exceptions| ||| | | |exceptions| ||| | | ||
Line 11: | Line 8: | ||
All results of all SSA instructions have an assigned register. Now, each SSA instruction can be translated into one or a sequence of machine instructions. In order to do this, we must define the stackframe, which is used when calling a method. | All results of all SSA instructions have an assigned register. Now, each SSA instruction can be translated into one or a sequence of machine instructions. In order to do this, we must define the stackframe, which is used when calling a method. | ||
- | ===== Stackframe ===== | + | {{: |
We use a stack pointer (R14) but no frame pointer. | We use a stack pointer (R14) but no frame pointer. | ||
[{{ .: | [{{ .: | ||
Line 19: | Line 16: | ||
Important: volatile EXTR's must be saved as well if '' | Important: volatile EXTR's must be saved as well if '' | ||
- | The field //local variables// is only used if the number of registers does not suffice and locals must be assigned a slot on the stack. When dealing with FPR' | + | The field //local variables// is only used if the number of registers does not suffice and locals must be assigned a slot on the stack. When calling interface methods |
The field // | The field // | ||
The stack pointer always points to the top of the actual frame. At the top the stack pointer of the caller has to be stored. The back chain pointer is used for the debugger, for exceptions and for the garbage collection. | The stack pointer always points to the top of the actual frame. At the top the stack pointer of the caller has to be stored. The back chain pointer is used for the debugger, for exceptions and for the garbage collection. |