csrrw

csrrw

Assembleur RISC-V Référence

lyszt.net couvre csrrw et d'autres instructions RISC-V plus en détail.

Description

csrrw échange un registre de contrôle avec un registre général. Un registre de contrôle et d'état (CSR) est un registre spécial qui contient l'état du processeur, notamment l'adresse du gestionnaire de trappe et l'activation ou non des interruptions. Un CSR possède un numéro de 12 bits et généralement un nom comme mtvec. Seules les instructions CSR peuvent accéder aux CSR, et lw ou sw ne le peuvent pas. Le nom signifie lecture et écriture atomiques d'un CSR. Atomique signifie que la lecture et l'écriture se produisent en une seule étape indivisible.

csrrw rd, csr, rs1

L'ancienne valeur du CSR est écrite dans rd, et la valeur de rs1 est écrite dans le CSR. La ligne ci-dessous stocke l'adresse dans t0 dans mtvec et laisse la valeur précédente de mtvec dans t1.

csrrw t1, mtvec, t0

Si rd est zero, l'ancienne valeur est ignorée et le CSR n'est pas lu. Cette forme est le raccourci csrw. Si rs1 est zero, le CSR est écrasé par 0.

Ce simulateur fournit six CSR : mstatus, mie, mtvec, mepc, mcause et mip. Les écritures dans mip sont ignorées car le matériel le définit. Tout autre numéro de CSR se lit comme 0 et ignore les écritures. Voir csrr pour la lecture et csrs et csrc pour modifier des bits individuels.

Le manuel RISC-V indique qu'avec rd=x0, csrrw ne lit pas le CSR, et que csrrw avec rs1=x0 tente d'y écrire zéro.

Exemple

li t0, 0x100
csrrw t1, mtvec, t0   # mtvec = 0x100, t1 = old mtvec