int somma(int x, int y) {
int rst;
rst = x + y + 2;
return rst;
}
...
f = f + 1;
risultato = somma(f,g);
...
int somma(int x, int y) {
int rst;
rst = x + y + 2;
return rst;
}
...
f = f + 1;
risultato = somma(f,g);
...
Posti: x = x10, y = x11, rst = x20, f = x6
SOMMA:
add x5, x10, x11
addi x20, x5, 2
jalr x0, 0(x1)
...
addi x6, x6, 1
...
jal SOMMA
SOMMA:
add x5, x10, x11
addi x20, x5, 2
jalr x0, 0(x1)
...
addi x6, x6, 1
...
jal SOMMA
int somma(int x, int y) {
int rst;
rst = x + y + 2;
return rst;
}
...
f = f + 1;
risultato = somma(f,g);
...
Posti: x = x10, y = x11, rst = x20, f = x6
SOMMA:
add x5, x10, x11
addi x20, x5, 2
jalr x0, 0(x1)
...
addi x6, x6, 1
...
jal SOMMA
=== end-multi-column
In questi due pezzi di codice vediamo che, in C, c'è una funzione somma che viene chiamata in qualche parte del codice alla riga: risultato = somma(f, g);
.
Nell'altra colonna invece un pezzo di codice in RISC-V che implementa la procedura SOMMA.
Problema
Se il registro x5 usato nella procedura SOMMA contiene un valore che era stato piazzato lì dalla procedura chiamante?
Soluzione
La procedura chiamata prima di utilizzare il registro x5, salva il suo contenuto nella memoria, ripristinandolo prima di ritornare al chiamante.