# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Definitions for the base group of instructions. See insns.yml for
# the detailed format.

- mnemonic: add
  rv32i: true
  synopsis: Add
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b000
      rd: grd
      opcode: b01100
  errs: &enc-r-errors
    - &grs12-call-stack A `CALL_STACK` error from using `x1` as `grs1` or `grs2` when the call stack is empty.
    - &grd12-call-stack A `CALL_STACK` error from using `x1` as `grd` when the call stack is full and neither `grs1` nor `grs2` is `x1`.

- mnemonic: addi
  rv32i: true
  synopsis: Add Immediate
  operands: [grd, grs1, imm]
  encoding:
    scheme: I
    mapping:
      imm: imm
      rs1: grs1
      funct3: b000
      rd: grd
      opcode: b00100
  errs: &enc-i-errors
    - &grs1-call-stack A `CALL_STACK` error from using `x1` as `grs1` when the call stack is empty.
    - &grd1-call-stack A `CALL_STACK` error from using `x1` as `grd` when the call stack is full and `grs1` is not `x1`.

- mnemonic: lui
  rv32i: true
  synopsis: Load Upper Immediate
  operands:
    - grd
    - name: imm
      type: uimm
  encoding:
    scheme: U
    mapping:
      imm: imm
      rd: grd
      opcode: b01101
  errs:
    - &grd-call-stack A `CALL_STACK` error from using `x1` as `grd` when the call stack is full.

- mnemonic: sub
  rv32i: true
  synopsis: Subtract
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0100000
      rs2: grs2
      rs1: grs1
      funct3: b000
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: sll
  rv32i: true
  synopsis: Logical left shift
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b001
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: slli
  rv32i: true
  synopsis: Logical left shift with Immediate
  operands:
    - grd
    - grs1
    - &shamt-operand
      name: shamt
      type: uimm
  encoding:
    scheme: Is
    mapping:
      arithmetic: b0
      shamt: shamt
      rs1: grs1
      funct3: b001
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: srl
  rv32i: true
  synopsis: Logical right shift
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b101
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: srli
  rv32i: true
  synopsis: Logical right shift with Immediate
  operands:
    - grd
    - grs1
    - *shamt-operand
  encoding:
    scheme: Is
    mapping:
      arithmetic: b0
      shamt: shamt
      rs1: grs1
      funct3: b101
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: sra
  rv32i: true
  synopsis: Arithmetic right shift
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0100000
      rs2: grs2
      rs1: grs1
      funct3: b101
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: srai
  rv32i: true
  synopsis: Arithmetic right shift with Immediate
  operands:
    - grd
    - grs1
    - *shamt-operand
  encoding:
    scheme: Is
    mapping:
      arithmetic: b1
      shamt: shamt
      rs1: grs1
      funct3: b101
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: and
  rv32i: true
  synopsis: Bitwise AND
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b111
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: andi
  rv32i: true
  synopsis: Bitwise AND with Immediate
  operands: [grd, grs1, imm]
  encoding:
    scheme: I
    mapping:
      imm: imm
      rs1: grs1
      funct3: b111
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: or
  rv32i: true
  synopsis: Bitwise OR
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b110
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: ori
  rv32i: true
  synopsis: Bitwise OR with Immediate
  operands: [grd, grs1, imm]
  encoding:
    scheme: I
    mapping:
      imm: imm
      rs1: grs1
      funct3: b110
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: xor
  rv32i: true
  synopsis: Bitwise XOR
  operands: [grd, grs1, grs2]
  encoding:
    scheme: R
    mapping:
      funct7: b0000000
      rs2: grs2
      rs1: grs1
      funct3: b100
      rd: grd
      opcode: b01100
  errs: *enc-r-errors

- mnemonic: xori
  rv32i: true
  synopsis: Bitwise XOR with Immediate
  operands: [grd, grs1, imm]
  encoding:
    scheme: I
    mapping:
      imm: imm
      rs1: grs1
      funct3: b100
      rd: grd
      opcode: b00100
  errs: *enc-i-errors

- mnemonic: lw
  rv32i: true
  synopsis: Load Word
  operands:
    - grd
    - name: offset
      abbrev: "off"
    - grs1
  syntax: <grd>, <offset>(<grs1>)
  encoding:
    scheme: I
    mapping:
      imm: offset
      rs1: grs1
      funct3: b010
      rd: grd
      opcode: b00000
  doc: |
    Loads a 32b word from address `offset + grs1` in data memory, writing the result to `grd`.
    Unaligned loads are not supported.
    Any address that is unaligned or is above the top of memory will result in an error (setting bit `bad_data_addr` in `ERR_BITS`).
    This instruction takes 2 cycles.
  errs:
    - *grs1-call-stack
    - &data-addr A `BAD_DATA_ADDR` error if the computed address is not a valid 4-byte aligned DMEM address.
    - *grd1-call-stack
  lsu:
    type: mem-load
    target: [offset, grs1]
    bytes: 4
  iflow:
    - to: [grd]
      from: [dmem]

- mnemonic: sw
  rv32i: true
  synopsis: Store Word
  operands:
    - grs2
    - name: offset
      abbrev: "off"
    - grs1
  syntax: <grs2>, <offset>(<grs1>)
  encoding:
    scheme: S
    mapping:
      imm: offset
      rs2: grs2
      rs1: grs1
      funct3: b010
      opcode: b01000
  doc: |
    Stores a 32b word in `grs2` to address `offset + grs1` in data memory.
    Unaligned stores are not supported.
    Any address that is unaligned or is above the top of memory will result in an error (setting bit `bad_data_addr` in `ERR_BITS`).
  errs:
    - *grs12-call-stack
    - *data-addr
  lsu:
    type: mem-store
    target: [offset, grs1]
    bytes: 4
  iflow:
    - to: [dmem]
      from: [grs2]

- mnemonic: beq
  rv32i: true
  synopsis: Branch Equal
  operands: &beq-operands
    - grs1
    - grs2
    - &branch-offset-operand
      name: offset
      abbrev: "off"
      pc-rel: true
      type: simm<<1
  straight-line: false
  encoding:
    scheme: B
    mapping:
      imm: offset
      rs2: grs2
      rs1: grs1
      funct3: b000
      opcode: b11000
  errs: &branch-errors
    - *grs12-call-stack
    - A `BAD_INSN_ADDR` error if the branch is taken and the computed address is not a valid PC.
    - &loop-at-end A `LOOP` error if this instruction appears as the last instruction of a loop body.

- mnemonic: bne
  rv32i: true
  synopsis: Branch Not Equal
  operands: *beq-operands
  straight-line: false
  encoding:
    scheme: B
    mapping:
      imm: offset
      rs2: grs2
      rs1: grs1
      funct3: b001
      opcode: b11000
  errs: *branch-errors

- mnemonic: jal
  rv32i: true
  synopsis: Jump And Link
  operands:
    - grd
    - *branch-offset-operand
  straight-line: false
  doc: |
    The JAL instruction has the same behavior as in RV32I, jumping by the given offset and writing `PC+4` as a link address to the destination register.

    OTBN has a hardware managed call stack, accessed through `x1`, which should be used when calling subroutines.
    Do so by using `x1` as the link register: `jal x1, <offset>`.
  errs:
    - *grd-call-stack
    - &jump-bad-addr A `BAD_INSN_ADDR` error if the computed address is not a valid PC.
    - *loop-at-end
  encoding:
    scheme: J
    mapping:
      imm: offset
      rd: grd
      opcode: b11011

- mnemonic: jalr
  rv32i: true
  synopsis: Jump And Link Register
  operands: [grd, grs1, offset]
  straight-line: false
  doc: |
    The JALR instruction has the same behavior as in RV32I, jumping by `<grs1> + <offset>` and writing `PC+4` as a link address to the destination register.

    OTBN has a hardware managed call stack, accessed through `x1`, which should be used when calling and returning from subroutines.
    To return from a subroutine, use `jalr x0, x1, 0`.
    This pops a link address from the call stack and branches to it.
    To call a subroutine through a function pointer, use `jalr x1, <grs1>, 0`.
    This jumps to the address in `<grs1>` and pushes the link address onto the call stack.
  errs:
    - *grs1-call-stack
    - *grd1-call-stack
    - *jump-bad-addr
    - *loop-at-end
  encoding:
    scheme: I
    mapping:
      imm: offset
      rs1: grs1
      funct3: b000
      rd: grd
      opcode: b11001
  iflow:
    - to: [grd]
      from: []

- mnemonic: csrrs
  rv32i: true
  synopsis: Atomic Read and Set bits in CSR
  operands: [grd, csr, grs1]
  doc: |
    Reads the value of the CSR `csr`, and writes it to the destination GPR `grd`.
    The initial value in `grs1` is treated as a bit mask that specifies bits to be set in the CSR.
    Any bit that is high in `grs1` will cause the corresponding bit to be set in the CSR, if that CSR bit is writable.
    Other bits in the CSR are unaffected (though CSRs might have side effects when written).

    If `csr` isn't the index of a valid CSR, this results in an error (setting bit `illegal_insn` in `ERR_BITS`).
  errs:
    - *grs1-call-stack
    - &bad-csr An `ILLEGAL_INSN` error if `csr` doesn't name a valid CSR.
  encoding:
    scheme: I
    mapping:
      imm: csr
      rs1: grs1
      funct3: b010
      rd: grd
      opcode: b11100
  lsu:
    type: csr
    target: [csr]
  iflow:
    - to: [grd]
      from: []
    - test:
        - csr == 0x7c0
      to: [fg0-all]
      from: [fg0-all, grs1]
    - test:
        - csr == 0x7c0
      to: [grd]
      from: [fg0-all]
    - test:
        - csr == 0x7c1
      to: [fg1-all]
      from: [fg1-all, grs1]
    - test:
        - csr == 0x7c1
      to: [grd]
      from: [fg1-all]
    - test:
        - csr == 0x7c8
      to: [fg0-all, fg1-all]
      from: [fg0-all, fg1-all, grs1]
    - test:
        - csr == 0x7c8
      to: [grd]
      from: [fg0-all, fg1-all]
    - test:
        - csr >= 0x7d0
        - csr <= 0x7d8
      to: [mod]
      from: [mod, grs1]
    - test:
        - csr >= 0x7d0
        - csr <= 0x7d8
      to: [grd]
      from: [mod]

- mnemonic: csrrw
  rv32i: true
  synopsis: Atomic Read/Write CSR
  operands: [grd, csr, grs1]
  doc: |
    Atomically swaps values in the CSR `csr` with the value in the GPR `grs1`.
    Reads the old value of the CSR, and writes it to the GPR `grd`.
    Writes the initial value in `grs1` to the CSR `csr`.
    If `grd == x0` the instruction does not read the CSR or cause any read-related side-effects.

    If `csr` isn't the index of a valid CSR, this results in an error (setting bit `illegal_insn` in `ERR_BITS`).
  errs:
    - *grs1-call-stack
    - *grd1-call-stack
    - *bad-csr
  encoding:
    scheme: I
    mapping:
      imm: csr
      rs1: grs1
      funct3: b001
      rd: grd
      opcode: b11100
  lsu:
    type: csr
    target: [csr]
  iflow:
    - to: [grd]
      from: []
    - test:
        - grd != 0
        - csr == 0x7c0
      to: [fg0-all]
      from: [grs1]
    - test:
        - grd != 0
        - csr == 0x7c0
      to: [grd]
      from: [fg0-all]
    - test:
        - grd != 0
        - csr == 0x7c1
      to: [fg1-all]
      from: [grs1]
    - test:
        - grd != 0
        - csr == 0x7c1
      to: [grd]
      from: [fg1-all]
    - test:
        - grd != 0
        - csr == 0x7c8
      to: [fg0-all, fg1-all]
      from: [grs1]
    - test:
        - grd != 0
        - csr == 0x7c8
      to: [grd]
      from: [fg0-all, fg1-all]
    - test:
        - grd != 0
        - csr >= 0x7d0
        - csr <= 0x7d8
      to: [mod]
      from: [mod, grs1]
    - test:
        - grd != 0
        - csr >= 0x7d0
        - csr <= 0x7d8
      to: [grd]
      from: [mod]

- mnemonic: ecall
  rv32i: true
  synopsis: Environment Call
  operands: []
  straight-line: false
  doc: |
    Triggers the `done` interrupt to indicate completion of the operation.
  errs: []
  encoding:
    scheme: I
    mapping:
      imm: b000000000000
      rs1: b00000
      funct3: b000
      rd: b00000
      opcode: b11100

- mnemonic: loop
  synopsis: Loop (indirect)
  operands:
    - name: grs
      doc: Name of the GPR containing the number of iterations
    - &bodysize-operand
      name: bodysize
      abbrev: sz
      type: uimm+1
      doc: Number of instructions in the loop body
  straight-line: false
  doc: |
    Repeats a sequence of code multiple times.
    The number of iterations is read from `grs`, treated as an unsigned value.
    The number of instructions in the loop is given in the `bodysize` immediate.

    The `LOOP` instruction doesn't support a zero iteration count.
    If the value in `grs` is zero, OTBN stops, setting bit `loop` in `ERR_BITS`.
    Starting a loop pushes an entry on to the [loop stack](../#loop-stack).
    If the stack is already full, OTBN stops, setting bit `loop` in `ERR_BITS`.

    `LOOP`, `LOOPI`, jump and branch instructions are all permitted inside a loop but may not appear as the last instruction in a loop.
    OTBN will stop on that instruction, setting bit `loop` in `ERR_BITS`.

    For more information on how to correctly use `LOOP` see [loop nesting](../#loop-nesting).
  errs:
    - &grs-call-stack A `CALL_STACK` error from using `x1` as `grs` when the call stack is empty.
    - A `LOOP` error if the value in `grs` is zero.
    - *loop-at-end
  encoding:
    scheme: loop
    mapping:
      bodysize: bodysize
      grs: grs

- mnemonic: loopi
  synopsis: Loop Immediate
  operands:
    - name: iterations
      type: uimm
      doc: Number of iterations
    - *bodysize-operand
  straight-line: false
  doc: |
    Repeats a sequence of code multiple times.
    The number of iterations is given in the `iterations` immediate.
    The number of instructions in the loop is given in the `bodysize` immediate.

    The `LOOPI` instruction doesn't support a zero iteration count.
    If the value of `iterations` is zero, OTBN stops with the `ErrCodeLoop` error.
    Starting a loop pushes an entry on to the [loop stack](../#loop-stack).
    If the stack is already full, OTBN stops, setting bit `loop` in `ERR_BITS`.

    `LOOP`, `LOOPI`, jump and branch instructions are all permitted inside a loop but may not appear as the last instruction in a loop.
    OTBN will stop on that instruction, setting bit `loop` in `ERR_BITS`.

    For more information on how to correctly use `LOOPI` see [loop nesting](../#loop-nesting).
  encoding:
    scheme: loopi
    mapping:
      bodysize: bodysize
      iterations: iterations
  errs:
    - A `LOOP` error if `iterations` is zero.
    - *loop-at-end

- mnemonic: nop
  synopsis: No Operation
  rv32i: true
  operands: []
  doc: A pseudo-operation that has no effect.
  literal-pseudo-op:
    - ADDI x0, x0, 0

- mnemonic: li
  synopsis: Load Immediate
  rv32i: true
  operands: [grd, imm]
  doc: |
    Loads a 32b signed immediate value into a GPR. This uses ADDI and LUI,
    expanding to one or two instructions, depending on the immediate (small
    non-negative immediates or immediates with all lower bits zero can be
    loaded with just ADDI or LUI, respectively; general immediates need a LUI
    followed by an ADDI).
  python-pseudo-op: true

- mnemonic: la
  synopsis: Load absolute address
  rv32i: true
  operands: [grd, imm]
  doc: |
    Loads an address given by a symbol into a GPR. This is represented
    as a LUI and an ADDI.
  python-pseudo-op: true

- mnemonic: ret
  synopsis: Return from subroutine
  rv32i: true
  operands: []
  straight-line: false
  literal-pseudo-op:
    - JALR x0, x1, 0

# Implement the de-facto UNIMP RISC-V instruction alias according to
# https://github.com/riscv/riscv-asm-manual/blob/master/riscv-asm.md
# OTBN does not support the cycle CSR (0xC00), hence the illegal instruction
# exception stems from the missing CSR instead of writing to a read-only, but
# the end result is the same.
- mnemonic: unimp
  synopsis: Illegal instruction
  rv32i: true
  operands: []
  doc: |
    Triggers an illegal instruction error and aborts the program execution.
    Commonly used in code which is meant to be unreachable.
  literal-pseudo-op:
    # 0xC00 is the "cycle" RISC-V CSR.
    - CSRRW x0, 0xC00, x0
