RISC-V utilizza 32 registri generali identificati dai numeri x0 a x31. Ogni registro è largo 32 bit (o 64 bit su architetture a 64 bit). Questi registri sono utilizzati per operazioni di calcolo, archiviazione di dati temporanei, passaggio di parametri e risultato delle funzioni.


Registro (x0 - x31)Gruppo di appartenenzaNome del registroFunzione
x0NessunozeroÈ utilizzato per rappresentare un
valore costante di zero, non può
essere modifictao
x1Return Address (Link Register)raMemorizza l’indirizzo di ritorno nelle chiamate di funzione.
x2Stack PointerspPuntatore allo stack.
x3Global PointergpPuntatore alla memoria globale.
x4Thread PointertpPuntatore al thread corrente (in
sistemi multitasking).
x5 - x7
Temporary Registerst0 - t2Usati per operazioni temporanee e calcoli.
x8Saved Register / Frame Pointers0/fpUtilizzato per il salvataggio dello
stato e per il frame pointer.
x9Saved Registers1Utilizzato per il salvataggio dello
stato.
x10 - x17Argument
Registers
a0 - a7Passano i parametri alle funzioni e
alle syscall.
x18 - x27Saved Registerss2 - s11Memorizzano variabili che devono essere preservate tra le chiamate di funzione. (guarda la nota)
x28 - x31Temporary Registerst3 - t6Usati per operazioni temporanee,
senza bisogno di essere preservati
tra le chiamate.

Overlap

Quando il numero di parametri da passare a una funzione supera 8, gli indirizzi da x18 a x25 possono diventare anch’essi argument registers (a8 - a15). In questo caso, per evitare sovrascritture e perdite, i valori memorizzati nei saved registers (s2 - s9) vengono salvati nello stack prima della chiamata di funzione e ripristinati successivamente, quando (terminata la funzione) gli argument register vengono svuotati dei valori temporanei.

^896940