Supporting the "multicore" (multi-FPPA in Padauk terminology, in reality
they are not full cores, as the µC is a barrel processor - its more like
hyperthreading) Padauk µC is hard: They lack good support for
parallelism in the instruction set.

What would work now:
Compile code as usual, run it on FPPA0, use hand-written assembler for
all other FPPA.

We will need a synchronization primitive for the user. In many cases,
using volatile will work, but it would be good to have atomics. They
will have to be implemented using a lock. The standard requires
atomic_flag to be lock-free (which by C standardese means they can be
used from signal handlers - I'd assume we'd consider our interrupt
handlers to be signal handlers), and I've found a (complicated,
inefficient) workaround that uses two locks, but hides them from the
user in a way that makes it conform to the standard.

Of course, the pseudo-register p is a big problem, since it would be
shared by all FPPA. So we'd need a lock around any use of it, making it
inefficient.
Where it is known at compile-time that a certain function will be
executed on a particular FPPA only, we could use a core-specific p0…p7
and avoid the lock.

E.g. if main is not called rom any FPPA other than FPPA0, one could use:

[[sdcc::fppa(0)]] void main(void)
{
        …
}

Or if function f is only ever used on FPPA4, one would use:

[[sdcc::fppa(4)]] int f(int)
{
        …
}

Any further ideas or comments on supporting Padauk multicore µC in SDCC?

Philipp

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to