Martin Ling f8ea1e8e56 Use stack pointer to hold base address of state structure.
Keeping the base address of this structure in a register allows us to
use offsets to load individual fields from it, without needing their
individual addresses.

However, the ldr instruction can only use immediate offsets relative to
the low registers (r0-r7), or the stack pointer (r13).

Low registers are in short supply and are needed for other instructions
which can only use r0-r7, so we use the stack pointer here.

It's safe to do this because we do not use the stack. There are no
function calls, interrupt handlers or push/pop instructions in the M0
code.

This change saves four cycles by eliminating loads of the addresses for
the offset & tx registers, plus a further two by eliminating the need to
stash one of these addresses in r8.
2022-01-03 18:48:04 +00:00
..
2020-02-11 16:59:59 +00:00
2020-01-22 21:23:30 +00:00
2020-01-22 21:23:30 +00:00