Page 1 of 1

Planned deprecation of SYSTEM.LNK, SP and PC variables

Posted: Mon Dec 18, 2023 3:40 am
by cfbsoftware
We have discovered some reliability issues while running regression tests on v9.0.4 Astrobe for Cortex-M3, M4 and M7. These are related to the SYSTEM.LNK problem. A number of the instructions generated e.g. TEQ, TST, CMP etc. are documented as, for example:
if n == 15 || m IN {13,15} then UNPREDICTABLE;
where 15 is PC and 13 is SP. The behaviour is intermittent. For example one test worked OK on M3 and M4 but produced a usage fault on M7.

Consequently we are planning to deprecate the SYSTEM.LNK, SYSTEM.SP and SYSTEM.PC variables in the next feature release of Astrobe for Cortex-M in 2024. If you are using these variables you should replace them with the inline functions SYSTEM.REG and SYSTEM.LDREG as soon as is convenient. For example:

Code: Select all

SYSTEM.SP := stackStart;
savedSP := SYSTEM.SP + 8;
could be rewritten as:

Code: Select all

CONST SP = 13;
...
SYSTEM.LDREG(SP, stackStart);
savedSP := SYSTEM.REG(SP) + 8;
Let us know if you have any examples of real-world code that you do not know how to transform.