Port-amigappc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Rebroadcast from port-powerpc


this is a reboradcast from power-powerpc. I should have mentioned that I
suppose you read that one, too.... ;-)


I was studying the *ppc locore.[sS]'s in the last days, to find out what needs
to be changed for Amiga PPC boards.

Two problems:

a) the kernel code/data memory can be at several places, e.g.
   0x07000000, 0x08000000, or somewhere near 0x48000000 or 0x66000000.

   Thats too far away to reach it from the primary exception code snippets
   with either a b/bl or ba/bla (26bit relative / absolute addresses).

   Ok, there are only a few places; I need just to carefully select a
   scratch register to synthesize the branch target address.

b) more difficult: the tempsave and disisave regions (32 bytes each) used
   to save registers at exception entry can't be reached via 16bit signed
   absolute addresses, as on the other machines (there is no fast memory near

   Instead of err... saving a register to a SPRG, synthesizing the address of
   the save area in it, and use it to save... it might be a bit faster to
   save (say) r1 to SPRG1 (as already done on most of them), read SPRG0 into
   it, and use it as base for those stores/loads.

   This makes the save area effectively per-CPU.

   Now, if we make that area bigger then 2x 32 bytes, we can put the intstack
   and the spill stack and the curproc/curpcb pointer into it, too, and be
   ready for multicpu (modulo a bit of locking when accessing the hash table
   and spill table).

Does that make sense? If yes, I'd write it that way right away, so that others
might copy it (or rather: so that we could put most of it into the common 
area, where others can share it if they wish).

 * Progress (n.): The process through which Usenet has evolved from
   smart people in front of dumb terminals to dumb people in front of
   smart terminals.  -- obs%burnout.demon.co.uk@localhost (obscurity)

Home | Main Index | Thread Index | Old Index