csrrc
lyszt.net aborda csrrc e outras instruções RISC-V com mais detalhes.
Descrição
csrrc lê um registrador de controle e limpa bits nele. Um registrador de controle e status, ou CSR, mantém o estado do processador, como o endereço do tratador de traps e os interruptores de interrupção (veja csrrw). O nome é a abreviação de leitura atômica e limpeza de bits no CSR. O valor antigo do CSR vai para rd, então todo bit que é 1 em rs1 é limpo para 0 no CSR. Bits que são 0 em rs1 mantêm seu valor.
csrrc rd, csr, rs1
O registrador rs1 funciona como uma máscara, um padrão cujos bits 1 escolhem quais bits alterar. As linhas abaixo limpam o bit 3 de mstatus, o que desliga a habilitação global de interrupções, e deixam o valor anterior em t1.
li t0, 8 csrrc t1, mstatus, t0
Quando rs1 é zero, o CSR é lido e nunca escrito. Quando rd é zero, o valor antigo é descartado, o que é a forma abreviada csrc. Veja csrrs para definir bits e csrrw para a lista de CSRs neste simulador.
O manual RISC-V diz que csrrc com rs1=x0 não escreve no CSR de forma alguma.
Exemplo
li t0, 8 csrrc t1, mstatus, t0 # clears bit 3 of mstatus, t1 = old mstatus
