csrrsi
lyszt.net aborda csrrsi e outras instruções RISC-V com mais detalhes.
Descrição
csrrsi é csrrs com uma máscara constante no lugar de um registrador. O i significa immediate (imediato), uma constante escrita na instrução. A constante uimm é um número de 0 a 31 porque é armazenada em 5 bits. O valor antigo do CSR vai para rd, então cada bit que é 1 em uimm é definido como 1 no CSR.
csrrsi rd, csr, uimm
A linha abaixo define o bit 3 de mstatus e deixa o valor anterior em t1. O 8 é 1000 em binário.
csrrsi t1, mstatus, 8
Apenas os bits 0 a 4 podem ser definidos dessa forma. O bit 3 de mstatus, a habilitação global de interrupções, se encaixa. O bit 11 de mie, a habilitação de interrupções externas, não se encaixa, então esse precisa de csrrs com um registrador contendo 0x800. Quando uimm é 0, o CSR é lido e não escrito. Quando rd é zero, o valor antigo é descartado, o que é a forma abreviada csrsi. Veja csrrs para a forma com registrador.
Exemplo
csrrsi t1, mstatus, 8 # sets bit 3 of mstatus, t1 = old mstatus
