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/11/15 16:35] – [Stackframe] ursgraf | dev:crosscompiler:backend_arm:code_generator [2021/07/27 08:25] – [Exception Stackframe] ursgraf | ||
---|---|---|---|
Line 16: | Line 16: | ||
\\ | \\ | ||
===== Exception Stackframe ===== | ===== Exception Stackframe ===== | ||
- | In case of an exception | + | In case of an exception |
- | FPR's need no saving, as they are normally | + | EXTR's need no saving, as they are not allowed to be used in exceptions. If an exception method calls a method where EXTR are used (e.g. in an interrupt handler or in a timer subclass) you have to use '' |
- | [{{ .:exceptionstackframe.png?250&direct | //Stack frame for exception method//}}] | + | [{{ :dev: |
- | Optimization: | + | For efficiency, the exception stack frame does not contain space for locals. Hence, you are not allowed to use so many locals that this becomes necessary. This will be checked for when compiling exception methods. Storage for interface methods as well as the area for parameter passing are not necessary as well. |
+ | |||
+ | |||
+ | Optimization: | ||
===== Method Call ===== | ===== Method Call ===== | ||
==== Parameter Passing ==== | ==== Parameter Passing ==== | ||
- | All parameters must be copied in the appropriate registers, see [[.: | + | All parameters must be copied in the appropriate registers, see [[.: |
==== Return Value ==== | ==== Return Value ==== | ||
Line 36: | Line 39: | ||
* 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 | + | Such addresses must be loaded with the aid of an auxiliary |
===== Accessing the Hardware ===== | ===== Accessing the Hardware ===== |