csrrsi

csrrsi

RISC-V アセンブリ 参考

lyszt.netはcsrrsiおよびその他のRISC-V命令をより詳しく扱っています。

説明

csrrsi は csrrs のレジスタの代わりに定数マスクを用いるものです。i はイミディエイト(immediate)を意味し、命令に書き込まれる定数のことです。定数 uimm は 5 ビットに格納されるため、0 から 31 までの数値です。CSR の古い値は rd に入り、その後 uimm で 1 になっているすべてのビットが CSR で 1 に設定されます。

csrrsi rd, csr, uimm

以下の行は mstatus のビット 3 を設定し、以前の値を t1 に残します。8 は 2 進数で 1000 です。

csrrsi t1, mstatus, 8

この方法で設定できるのはビット 0 から 4 だけです。mstatus のビット 3(グローバル割り込みイネーブル)は該当します。mie のビット 11(外部割り込みイネーブル)は該当しないため、それには 0x800 を保持するレジスタを使った csrrs が必要です。uimm が 0 のときは CSR は読み取られ、書き込まれません。rd が zero のときは古い値は破棄され、これが csrsi の省略形です。レジスタ形式については csrrs を参照してください。

例

csrrsi t1, mstatus, 8   # sets bit 3 of mstatus, t1 = old mstatus