csrrsi
lyszt.net behandelt csrrsi und andere RISC-V-Befehle ausführlicher.
Beschreibung
csrrsi ist csrrs mit einer konstanten Maske anstelle eines Registers. Das i steht für immediate (unmittelbar), eine Konstante, die in die Anweisung geschrieben wird. Die Konstante uimm ist eine Zahl von 0 bis 31, weil sie in 5 Bits gespeichert wird. Der alte Wert des CSR geht in rd, dann wird jedes Bit, das in uimm 1 ist, im CSR auf 1 gesetzt.
csrrsi rd, csr, uimm
Die folgende Zeile setzt Bit 3 von mstatus und lässt den vorherigen Wert in t1. Die 8 ist binär 1000.
csrrsi t1, mstatus, 8
Nur die Bits 0 bis 4 können auf diese Weise gesetzt werden. Bit 3 von mstatus, die globale Interrupt-Freigabe, passt. Bit 11 von mie, die Freigabe externer Interrupts, passt nicht, daher benötigt dieses csrrs mit einem Register, das 0x800 enthält. Wenn uimm 0 ist, wird der CSR gelesen und nicht geschrieben. Wenn rd zero ist, wird der alte Wert verworfen, was die Kurzform csrsi ist. Siehe csrrs für die Registerform.
Beispiel
csrrsi t1, mstatus, 8 # sets bit 3 of mstatus, t1 = old mstatus
