csrrsi
lyszt.net 更详细地介绍了 csrrsi 和其他 RISC-V 指令。
描述
csrrsi 是 csrrs 用常量掩码代替寄存器。i 代表立即数(immediate),即写入指令中的常量。常量 uimm 是一个从 0 到 31 的数字,因为它存储在 5 位中。CSR 的旧值会写入 rd,然后 uimm 中每个为 1 的位都会在 CSR 中置为 1。
csrrsi rd, csr, uimm
下面这行设置 mstatus 的第 3 位,并将之前的值留在 t1 中。8 是二进制 1000。
csrrsi t1, mstatus, 8
这种方式只能设置第 0 到第 4 位。mstatus 的第 3 位(全局中断使能)符合条件。mie 的第 11 位(外部中断使能)不符合条件,因此那一位需要用 csrrs 并配合一个保存 0x800 的寄存器。当 uimm 为 0 时,CSR 会被读取而不写入。当 rd 为 zero 时,旧值会被丢弃,这就是 csrsi 简写。寄存器形式请参见 csrrs。
示例
csrrsi t1, mstatus, 8 # sets bit 3 of mstatus, t1 = old mstatus
