csrrw
lyszt.net aborda csrrw e outras instruções RISC-V com mais detalhes.
Descrição
csrrw troca um registrador de controle com um registrador de uso geral. Um registrador de controle e status (CSR) é um registrador especial que mantém o estado do processador, incluindo o endereço do tratador de trap e se as interrupções estão habilitadas. Um CSR tem um número de 12 bits e tipicamente um nome como mtvec. Apenas instruções CSR podem acessar CSRs, e lw ou sw não podem. O nome significa leitura e escrita atômica de CSR. Atômica significa que a leitura e a escrita ocorrem como um único passo indivisível.
csrrw rd, csr, rs1
O valor antigo do CSR é escrito em rd, e o valor de rs1 é escrito no CSR. A linha abaixo armazena o endereço em t0 em mtvec e deixa o valor anterior de mtvec em t1.
csrrw t1, mtvec, t0
Se rd for zero, o valor antigo é descartado e o CSR não é lido. Esta forma é o atalho csrw. Se rs1 for zero, o CSR é sobrescrito com 0.
Este simulador fornece seis CSRs: mstatus, mie, mtvec, mepc, mcause e mip. Escritas em mip são ignoradas porque o hardware o define. Qualquer outro número de CSR é lido como 0 e ignora escritas. Veja csrr para leitura e csrs e csrc para alterar bits individuais.
O manual RISC-V afirma que com rd=x0, csrrw não lê o CSR, e que csrrw com rs1=x0 tenta escrever zero nele.
Exemplo
li t0, 0x100 csrrw t1, mtvec, t0 # mtvec = 0x100, t1 = old mtvec
