Asembler w kodzie linuxa | ||
---|---|---|
<<< Wstecz | Język niskopoziomowy dla procesorów SPARC | Dalej >>> |
SPARC prezentuje bardzo ciekawe podejście. Rejestry są podzielone na cztery grupy: globalne, wejściowe, lokalne i wyjściowe. Bardzo naturalne jest, że rejestry wyjściowe służą jako rejestry wejściowe dla następnego bloku instrukcji. Dlatego też, w tej architekturze możemy tworzyć tzw. okna rejestrów. Stworzenie takiego okna nie zmieni rejestrów globalnych, rejestry wejściowe pokryją się z poprzednimi wyjściowymi, a na pozostałe zostanie zaalokowanych 16 nowych rejestrów. Takie podejście jest nazywane "nakładaniem się okien rejestru" (ang. overlapping).
Operacje te służą do tworzenia nowych i przywracania starych okien rejestrów. Oczywiste jest, że są pewne ograniczone zasoby do tworzenie nowych okien rejestrów. Dlatego też tworzą one swego rodzaju bufor cykliczny. Każde użycie instrukcji save lub restore powoduje przesunięcie rejestru CWP (current window pointer), w którym przechowywana jest informacja o aktualnym oknie rejestrów.
Wywołanie funkcji save ma następującą postać: save %sp, -framesize, %sp .
Wartość wskażnika stosu %sp(inaczej %o6 w starym oknie rejestrów) jest sumowana z framesize (to również może być rejestr)
Pamięć jest alokowana. Jednocześnie stary wskaźnik stosu staje się nowym wskaźnikiem stosu %fp(inaczej %i6)
Wartość obliczona w punkcie 1 jest wpisywana do nowego wskaźnika stosu %sp
Poniższy rysunek przedstawia ogólne działanie tego mechanizmu.
Przykład korzystający z okien rejestrów.
.text ! pr_str - print a null terminated string ! ! Temporaries: %i0 - pointer to string ! %o0 - character to be printed ! pr_str: save %sp, -96, %sp ! PROLOGUE - save the current window and ! allocate the minimum stack frame pr_lp: ldub [%i0], %o0 ! load character cmp %o0, 0 ! check for null be pr_dn nop call pr_char ! print character nop ba pr_lp inc %i0 ! increment the pointer (branch delay) pr_dn: ret ! EPILOGUE return from procedure and restore ! restore old window; no return value |
<<< Wstecz | Spis treści | Dalej >>> |
Składnia | Początek rozdziału | Wstawki asemblerowe (inline assembly) |