csrrs

csrrs

Assembleur RISC-V Référence

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

Description

csrrs lit un registre de contrôle et y positionne des bits. Un registre de contrôle et d'état, ou CSR, contient l'état du processeur tel que l'adresse du gestionnaire de trappe et les commutateurs d'interruption (voir csrrw). Le nom est l'abréviation de atomic read and set bits in CSR. L'ancienne valeur du CSR est placée dans rd, puis chaque bit qui vaut 1 dans rs1 est mis à 1 dans le CSR. Les bits qui valent 0 dans rs1 conservent leur valeur.

csrrs rd, csr, rs1

Le registre rs1 agit comme un masque, un motif dont les bits à 1 déterminent les bits à modifier. Les lignes ci-dessous positionnent le bit 3 de mstatus, l'activation globale des interruptions, et laissent la valeur précédente dans t1.

li t0, 8
csrrs t1, mstatus, t0

Le 8 est 1000 en binaire, donc seul le bit 3 change. Lorsque rs1 vaut zero, le CSR est lu et jamais écrit, ce qui correspond à la notation abrégée csrr. Lorsque rd vaut zero, l'ancienne valeur est ignorée, ce qui correspond à la notation abrégée csrs. Voir csrrw pour la liste des CSR de ce simulateur et csrrc pour effacer des bits.

Le manuel RISC-V indique que csrrs avec rs1=x0 n'écrit pas du tout dans le CSR.

Exemple

li t0, 8
csrrs t1, mstatus, t0   # sets bit 3 of mstatus, t1 = old mstatus