|
|
|
# RISC combined instruction set
|
|
|
|
|
|
|
|
goal: a semi-efficient insatruction set that offers few instructions that offer
|
|
|
|
the combined functions of conventional risc instuctions.
|
|
|
|
|
|
|
|
as such most instructions could be pipelined, I don't know how to feel about that
|
|
|
|
|
|
|
|
# Memory Operations
|
|
|
|
when accessing memory trough an address a consecutive pair of registers is used,
|
|
|
|
each consecutive pair of registers is given a name, for brevity a pair is
|
|
|
|
always referred to as `A`. The possible pairs are:
|
|
|
|
|
|
|
|
- A = R1:R0
|
|
|
|
- B = R3:R2
|
|
|
|
- C = R5:R4
|
|
|
|
- D = R7:R6
|
|
|
|
- E = R9:R8
|
|
|
|
- F = R11:R10
|
|
|
|
- G = R13:R12
|
|
|
|
- H = R15:R14
|
|
|
|
- I = R17:R16
|
|
|
|
- J = R19:R18
|
|
|
|
- K = R21:R20
|
|
|
|
- L = R23:R22
|
|
|
|
- M = R25:R24
|
|
|
|
- N = R27:R26
|
|
|
|
- O = R29:R28
|
|
|
|
- P = R31:R30
|
|
|
|
|
|
|
|
|
|
|
|
## LD load value into register
|
|
|
|
post increment/decrement
|
|
|
|
syntax: `LD Rd, A+q`
|
|
|
|
action: `Rd = [A]; A += q`
|
|
|
|
|
|
|
|
pre increment/decrement
|
|
|
|
syntax: `LD Rd, q+A`
|
|
|
|
action: `A += q; Rd = [A]`
|
|
|
|
|
|
|
|
## LDI load immediate into register
|
|
|
|
syntax: `LDI Rd, imm`
|
|
|
|
action: `Rd = imm`
|
|
|
|
|
|
|
|
## LDIL load long immediate into register
|
|
|
|
syntax: `LDIL Rd, imm32`
|
|
|
|
action: `Rd = imm32`
|
|
|
|
|
|
|
|
## ST store value from register
|
|
|
|
post increment/decrement
|
|
|
|
syntax: `ST A+q, Rd`
|
|
|
|
action: `[A] = Rd; A += q`
|
|
|
|
|
|
|
|
pre increment/decrement
|
|
|
|
syntax: `ST q+A, Rd`
|
|
|
|
action: `A += q; [A] = Rd`
|
|
|
|
|
|
|
|
## STI store immediate into memory
|
|
|
|
post increment/decrement
|
|
|
|
syntax: `STI A+q, imm`
|
|
|
|
action: `[A] = imm; A += q`
|
|
|
|
|
|
|
|
pre increment/decrement
|
|
|
|
syntax: `STI q+A, imm`
|
|
|
|
action: `A += q; [A] = imm`
|
|
|
|
|
|
|
|
## STIL store long immediate into memory
|
|
|
|
post increment/decrement
|
|
|
|
syntax: `STIL A+q, imm32`
|
|
|
|
action: `[A] = imm32; A += q`
|
|
|
|
|
|
|
|
pre increment/decrement
|
|
|
|
syntax: `STIL q+A, imm32`
|
|
|
|
action: `A += q; [A] = imm32`
|
|
|
|
|
|
|
|
|
|
|
|
# Arithmetic operations
|
|
|
|
|
|
|
|
## ADD
|
|
|
|
## ADDC
|
|
|
|
## ADDI
|
|
|
|
## ADDIC
|
|
|
|
|
|
|
|
## MLA Multiply and add
|
|
|
|
syntax: `MLA A, Ra, Rb, Rc`
|
|
|
|
action: `A = Rc + (Ra * Rb)`
|
|
|
|
|
|
|
|
## MLAI Multiply and add immediate
|
|
|
|
syntax: `MLAI A, Ra, Rb, imm`
|
|
|
|
action: `A = imm + (Ra * Rb)`
|
|
|
|
|
|
|
|
## MLIA Multiply immediate and add
|
|
|
|
syntax: `MLIA A, Ra, imm, Rc`
|
|
|
|
action: `A = Rc + (Ra * imm)`
|
|
|
|
|
|
|
|
## MLAC Multiply and add with carry
|
|
|
|
syntax: `MLAC A, Ra, Rb, Rc`
|
|
|
|
action: `A = F.C + Rc + (Ra * Rb)`
|
|
|
|
|
|
|
|
## MLAIC Multiply and add immediate with carry
|
|
|
|
syntax: `MLAIC A, Ra, Rb, imm`
|
|
|
|
action: `A = F.C + imm + (Ra * Rb)`
|
|
|
|
|
|
|
|
## MLIAC Multiply immediate and add with carry
|
|
|
|
syntax: `MLIAC A, Ra, imm, Rc`
|
|
|
|
action: `A = F.C + Rc + (Ra * imm)`
|
|
|
|
|
|
|
|
|
|
|
|
## SMLA Signed multiply and add
|
|
|
|
syntax: `SMLA A, Ra, Rb, Rc`
|
|
|
|
action: `A = Rc + (Ra * Rb)`
|
|
|
|
|
|
|
|
## SMLAI Signed multiply and add immediate
|
|
|
|
syntax: `SMLAI A, Ra, Rb, imm`
|
|
|
|
action: `A = imm + (Ra * Rb)`
|
|
|
|
|
|
|
|
## SMLIA Signed multiply immediate and add
|
|
|
|
syntax: `SMLIA A, Ra, imm, Rc`
|
|
|
|
action: `A = Rc + (Ra * imm)`
|
|
|
|
|
|
|
|
## SMLAC Signed multiply and add with carry
|
|
|
|
syntax: `SMLAC A, Ra, Rb, Rc`
|
|
|
|
action: `A = F.C + Rc + (Ra * Rb)`
|
|
|
|
|
|
|
|
## SMLAIC Signed multiply and add immediate with carry
|
|
|
|
syntax: `SMLAIC A, Ra, Rb, imm`
|
|
|
|
action: `A = F.C + imm + (Ra * Rb)`
|
|
|
|
|
|
|
|
## SMLIAC Signed multiply immediate and add with carry
|
|
|
|
syntax: `SMLIAC A, Ra, imm, Rc`
|
|
|
|
action: `A = F.C + Rc + (Ra * imm)`
|
|
|
|
|
|
|
|
|
|
|
|
## SUB Subtract
|
|
|
|
## SUBC Subtract with carry
|
|
|
|
## SUBI Subtract immediate
|
|
|
|
## SBIC Subtract immediate with carry
|
|
|
|
|
|
|
|
## AND
|
|
|
|
## ANDI with immediate
|
|
|
|
## OR
|
|
|
|
## ORI with immediate
|
|
|
|
## XOR
|
|
|
|
## XORI with immediate
|
|
|
|
|
|
|
|
## NEG negate (two's complement)
|
|
|
|
|
|
|
|
## ROR Rotate right
|
|
|
|
## ROL Rotate left
|
|
|
|
## SHR Shift right
|
|
|
|
## SHRC Shift right through carry
|
|
|
|
## SHL Shift left
|
|
|
|
## SHLC Shift left through carry
|
|
|
|
|
|
|
|
# Conditional operations
|
|
|
|
|