Port-powerpc archive

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

Re: cpu_switch() bug?



Hi,

> I am also trying to figure out why it was written in assembly
> rather than C, and I (as yet) don't have a really good answer.  I
> think the C compiler will output practically the same code, except
> for the ``cntlzw'' instruction which is easy enough to either inline
> asm (yuck), or make a two line function in locore.S

No, the cntlzw isn't the reason for writing the switch routine in assembly
(note that you can get a cntlzw instruction into your code even without
assembly by using the ffs() builtin function, albeit the code would lack
a bit, because ffs counts bits from the other end).

The reason for writing the cpu_switch code in assembly is that it has to
switch the stack, and while doing so, it has to save and restore the
registers to/from known locations on the old/new stack so they can be
manipulated by other parts of the kernel (like when doing a fork or exec).

Ciao,
Wolfgang
-- 
ws%TooLs.DE@localhost     Wolfgang Solfrank, TooLs GmbH         +49-228-985800



Home | Main Index | Thread Index | Old Index