csrrs
lyszt.net aborda csrrs e outras instruções RISC-V com mais detalhes.
Descrição
csrrs lê um registrador de controle e define bits nele. Um registrador de controle e status, ou CSR, contém o estado do processador, como o endereço do manipulador de trap e os interruptores de interrupção (veja csrrw). O nome é abreviação de leitura atômica e definição de bits em CSR. O valor antigo do CSR vai para rd, então todo bit que é 1 em rs1 é definido como 1 no CSR. Bits que são 0 em rs1 mantêm seu valor.
csrrs rd, csr, rs1
O registrador rs1 funciona como uma máscara, um padrão cujos bits 1 escolhem quais bits alterar. As linhas abaixo definem o bit 3 de mstatus, o habilitador global de interrupção, e deixam o valor anterior em t1.
li t0, 8 csrrs t1, mstatus, t0
O 8 é binário 1000, então apenas o bit 3 muda. Quando rs1 é zero, o CSR é lido e nunca escrito, que é o atalho csrr. Quando rd é zero, o valor antigo é descartado, que é o atalho csrs. Veja csrrw para a lista de CSRs neste simulador e csrrc para limpar bits.
O manual RISC-V diz que csrrs com rs1=x0 não grava o CSR de forma alguma.
Exemplo
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
