csrrs
lyszt.netはcsrrsおよびその他のRISC-V命令をより詳しく扱っています。
説明
csrrs は制御レジスタを読み取り、その中のビットを設定します。制御およびステータスレジスタ(CSR)は、トラップハンドラのアドレスや割り込みスイッチなどのプロセッサ状態を保持します(csrrw を参照)。名前は CSR 内のビットをアトミックに読み取って設定する(atomic read and set bits in CSR)の略です。CSR の古い値は rd に入り、その後 rs1 で 1 になっているすべてのビットが CSR で 1 に設定されます。rs1 で 0 のビットは値を保ちます。
csrrs rd, csr, rs1
レジスタ rs1 はマスクとして機能し、その 1 のビットがどのビットを変更するかを選ぶパターンです。以下の行は mstatus のビット 3(グローバル割り込みイネーブル)を設定し、以前の値を t1 に残します。
li t0, 8 csrrs t1, mstatus, t0
8 は 2 進数で 1000 なので、ビット 3 だけが変わります。rs1 が zero のとき、CSR は読み取られるだけで決して書き込まれません。これが csrr の省略形です。rd が zero のとき、古い値は破棄されます。これが csrs の省略形です。このシミュレータの CSR の一覧については csrrw を、ビットのクリアについては csrrc を参照してください。
RISC-V マニュアルには、rs1=x0 の csrrs は CSR にまったく書き込まないと書かれています。
例
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
