os-workshop

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit bcb5844ac1bc29202e9e6ce9c90b120ff69a9a5b
parent fccd1d9427dace913af15133936675f25c444f43
Author: Brian Swetland <swetland@frotz.net>
Date:   Sat, 23 Apr 2022 09:46:47 -0700

docs: add csr instructions to risc assembly doc

Diffstat:
Mdocs/riscv-assembly.md | 15++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/docs/riscv-assembly.md b/docs/riscv-assembly.md @@ -42,7 +42,12 @@ The core 32bit integer instruction set for RISCV is pretty small: | fence | memory ordering | | | ecall | service call | trap to higher processor mode | | ebreak | hardware breakpoint | return control to debugger | - +| csrrw rd, csr, rs1 | csr atomic read/write | rd = csr, csr = rs1 | +| csrrs rd, csr, rs1 | csr atomic read/set | rd = csr, csr |= rs1 | +| csrrc rd, csr, rs1 | csr atomic read/clear | rd = csr, csr &= ~rs1 | +| csrrwi rd, csr, u5 | csr atomic read/write imm | rd = csr, csr = u5 | +| csrrsi rd, csr, u5 | csr atomic read/set imm | rd = csr, csr |= u5 | +| csrrci rd, csr, u5 | csr atomic read/clear imm | rd = csr, csr &= ~u5 | The assembler and diassembler recognize a number of useful pseudo instructions which put friendly names (and/or shorter forms) on many common use cases. For example there is a BLT (branch if less than) instruction, but not a BGT instruction, but the assembler treats BGT as an alias for BLT with the arguments swapped. @@ -73,6 +78,13 @@ The assembler and diassembler recognize a number of useful pseudo instructions w | blt rs, rt, addr | bge rt, rs, addr | branch if <= | if rs <= rt then pc = addr [2] | | bgtu rs, rt, addr | bltu rt, rs, addr | branch if > (unsigned) | if rs > rt then pc = addr [2] | | bleu rs, rt, addr | bgeu rt, rs, addr | branch if <= (unsigned) | if rs <= rt then pc = addr [2] | +| csrr rd, csr | csrrs rd, csr, x0 | read csr | rd = csr | +| csrw csr, rs | csrrw x0, csr, rs | write csr | csr = rs | +| csrs csr, rs | csrrs x0, csr, rs | set csr bits | csr |= rs | +| csrc csr, rs | csrrc x0, csr, rs | clear csr bits | csr &= ~rs | +| csrwi csr, u5 | csrrwi x0, csr, u5 | write csr imm | csr = u5 | +| csrsi csr, u5 | csrrsi x0, csr, u5 | set csr bits imm | csr |= u5 | +| csrci csr, u5 | csrrci x0, csr, u5 | clear csr bits imm | csr &= ~u5 | [1] addr is encoded as a signed 21bit value, allowing a range of +/- 1MB from the pc @@ -106,4 +118,5 @@ RISCV has 32 integer registers (x0 - x31), but the assembler and disassembler re | rs2 | second source register | x0 .. x31 | | s12 | 12bit signed immediate | -2048 .. 2047 | | u5 | unsigned 5bit immediate | 0 .. 31 | +| csr | control/status register number | 0 .. 4095 |