[OSy] switch_cpu_context

Martin Decky decky at nenya.ms.mff.cuni.cz
Thu Nov 2 11:02:41 CET 2006


Hezky den,

> RESTORE_GENERAL_REGISTERS obnovi so stacku hodnotu a0 a potom ju tym lw $a0, OFFSET_STATUS($sp) prepise ...

Makro RESTORE_GENERAL_REGISTERS je napsano obecne, obnovuje vsechny 
registry (pouziva se i v obsluze vyjimky).

Funkce switch_cpu_context() ma ovsem dva argumenty (adresa ukazatele na 
vrchol aktualniho zasobniku, ukazatel na zasobnik vlakna, na ktere se 
prepina) a tyto argumenty jsou podle ABI ulozeny v registrech a0 a a1, 
coz jsou z hlediska volani funkce scratch registry (volajici funkce 
nemuze spolehat na to, ze budou mit po navratu funkce stejnou hodnotu).

Zniceni registru a0 ve switch_cpu_context() tedy nicemu nevadi. 
Pochopitelne je na miste otazka, zda je tedy nutne za techto okolnosti 
(kdy prepnuti kontextu je realizovano jako funkce) ukladat vsechny 
registry. Zrejma odpoved je, ze neni, nechteli jsme ovsem v Kalistu veci 
zbytecne komplikovat.


M.D.



More information about the NSWI004 mailing list