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/19 16:58] – [Code Generator for ARM] ursgraf | dev:crosscompiler:backend_arm:code_generator [2019/10/01 12:15] – [Stackframe] ursgraf | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Code Generator for ARM ====== | ====== Code Generator for ARM ====== | ||
- | Everything which is not fully implemented is listed below | ||
- | ^topic^I^L^F^remarks^ | ||
- | |throw| ||| | | ||
- | |new| |||tests for three dimensional arrays fail| | ||
- | |enum| |||tests for enums fail| | ||
- | |exceptions| ||| | | ||
- | |||
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. | ||
Line 14: | Line 7: | ||
Explanation: | Explanation: | ||
- | LR is saved onto the stack together with the necessary nonvolatile GPRs. Even if method is a leaf method LR must be saved onto the stack because LR serves as a scratch register within a method. Considering the GPR's and EXTRs, all nonvolatile register, which are used within this method, must be saved on the stack. Nonvolatiles in EXTR registers occupy either 8 bytes (EXTRD) or a bytes (EXTRS). \\ | + | LR is saved onto the stack together with the necessary nonvolatile GPRs. Even if method is a leaf method LR must be saved onto the stack because LR serves as a scratch register within a method. Considering the GPR's and EXTRs, all nonvolatile register, which are used within this method, must be saved on the stack. Nonvolatiles in EXTR registers occupy either 8 bytes (EXTRD) or 4 bytes (EXTRS). \\ |
Important: volatile EXTR's must be saved as well if '' | Important: volatile EXTR's must be saved as well if '' | ||