csrrw
lyszt.net tratta csrrw e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
csrrw scambia un registro di controllo con un registro generico. Un registro di controllo e stato (CSR) è un registro speciale che contiene lo stato del processore, inclusi l'indirizzo del gestore delle trap e se gli interrupt sono abilitati. Un CSR ha un numero di 12 bit e tipicamente un nome come mtvec. Solo le istruzioni CSR possono accedere ai CSR, mentre lw o sw non possono. Il nome sta per lettura e scrittura atomica del CSR. Atomica significa che la lettura e la scrittura avvengono come un singolo passo indivisibile.
csrrw rd, csr, rs1
Il vecchio valore del CSR viene scritto in rd, e il valore di rs1 viene scritto nel CSR. La riga seguente memorizza l'indirizzo in t0 in mtvec e lascia il precedente valore di mtvec in t1.
csrrw t1, mtvec, t0
Se rd è zero, il vecchio valore viene scartato e il CSR non viene letto. Questa forma è la scorciatoia csrw. Se rs1 è zero, il CSR viene sovrascritto con 0.
Questo simulatore fornisce sei CSR: mstatus, mie, mtvec, mepc, mcause e mip. Le scritture su mip vengono ignorate perché è l'hardware a impostarlo. Qualsiasi altro numero di CSR viene letto come 0 e ignora le scritture. Vedi csrr per la lettura e csrs e csrc per modificare singoli bit.
Il manuale RISC-V afferma che con rd=x0, csrrw non legge il CSR, e che csrrw con rs1=x0 tenta di scrivervi zero.
Esempio
li t0, 0x100 csrrw t1, mtvec, t0 # mtvec = 0x100, t1 = old mtvec
