In order to improve software performance in the current silicon and to make forward binary compatibility practical, I am proposing the following changes to the Epiphany Application binary interface (ABI). ABI changes get more painful the more successful a platform gets and with the Epiphany starting to gain momentum, I feel this may be our last chance. These changes will all be incorporated into the compiler and linker so for the vast majority of you, the changes will be applied automatically once you recompile your code with an up to date Epiphany compiler.
List of proposed changes:
- Make register R32-R63 caller saved. Currently R32-R63 is a mix of caller and callee saved registers. Reason: Better (code size, performance, ease of assembly, energy) for leaf cell type libraries (like PAL).
- Move Frame Pointer to R15. Reason: Better performance/code density for software caching
- Reserve addresses below 0x100 for internal use. Reason: Reserved for future systems and SDKs. “Get out of jail card for Adapteva.” Compiler user code starts at 0x100
- Disallow fetching instructions from external memory. Programs must be fetched from the local memory (currently 32KB). For large programs some kind of software caching should be used. Reason: Very expensive feature from a chip standpoint and provides poor performance. Not scalable for future silicon.
- The “-” option for TESTSET has been removed.
- Make SYNC interrupt non-maskable [UPDATE: April 11, 2016]
- Support for setting memory value to anything but “1” in TESTSET is deprecated. [UPDATE: May 11 2016]
An updated SDK will be released shortly to reflect these ABI changes. If you have objections to any of these changes, speak now, or forever hold your peace. These proposals will become final in 30 days unless there are serious objections. Please leave comment in the section below or write an email to “email@example.com” to voice concerns.