csrrsi
lyszt.net couvre csrrsi et d'autres instructions RISC-V plus en détail.
Description
csrrsi est csrrs avec un masque constant à la place d'un registre. Le i signifie immediate (immédiat), une constante écrite dans l'instruction. La constante uimm est un nombre de 0 à 31 car elle est stockée sur 5 bits. L'ancienne valeur du CSR va dans rd, puis chaque bit qui vaut 1 dans uimm est mis à 1 dans le CSR.
csrrsi rd, csr, uimm
La ligne ci-dessous met le bit 3 de mstatus à 1 et laisse la valeur précédente dans t1. Le 8 est 1000 en binaire.
csrrsi t1, mstatus, 8
Seuls les bits 0 à 4 peuvent être mis à 1 de cette façon. Le bit 3 de mstatus, l'activation globale des interruptions, convient. Le bit 11 de mie, l'activation des interruptions externes, ne convient pas, donc celui-là nécessite csrrs avec un registre contenant 0x800. Lorsque uimm vaut 0, le CSR est lu et non écrit. Lorsque rd est zero, l'ancienne valeur est ignorée, ce qui correspond à la forme abrégée csrsi. Voir csrrs pour la forme avec registre.
Exemple
csrrsi t1, mstatus, 8 # sets bit 3 of mstatus, t1 = old mstatus
