Improved documentation
This commit is contained in:
@ -7,7 +7,7 @@ func MulRegisterRegister(destination cpu.Register, multiplicand cpu.Register, mu
|
|||||||
return 0b10011011000<<21 | reg4(destination, multiplicand, multiplier, ZR)
|
return 0b10011011000<<21 | reg4(destination, multiplicand, multiplier, ZR)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MultiplySubtract multiplies `multiplicand` with `multiplier`, subtracts `minuend` and saves the result in `destination`.
|
// MultiplySubtract multiplies `multiplicand` with `multiplier`, subtracts the product from `minuend` and saves the result in `destination`.
|
||||||
func MultiplySubtract(destination cpu.Register, multiplicand cpu.Register, multiplier cpu.Register, minuend cpu.Register) uint32 {
|
func MultiplySubtract(destination cpu.Register, multiplicand cpu.Register, multiplier cpu.Register, minuend cpu.Register) uint32 {
|
||||||
return 0b10011011000<<21 | 1<<15 | reg4(destination, multiplicand, multiplier, minuend)
|
return 0b10011011000<<21 | 1<<15 | reg4(destination, multiplicand, multiplier, minuend)
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ func TestMultiplySubtract(t *testing.T) {
|
|||||||
Code uint32
|
Code uint32
|
||||||
}{
|
}{
|
||||||
{arm.X0, arm.X1, arm.X2, arm.X3, 0x9B028C20},
|
{arm.X0, arm.X1, arm.X2, arm.X3, 0x9B028C20},
|
||||||
|
{arm.X3, arm.X0, arm.X2, arm.X1, 0x9B028403},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, pattern := range usagePatterns {
|
for _, pattern := range usagePatterns {
|
||||||
|
@ -3,41 +3,41 @@ package riscv
|
|||||||
import "git.urbach.dev/cli/q/src/cpu"
|
import "git.urbach.dev/cli/q/src/cpu"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
X0 cpu.Register = iota
|
Zero cpu.Register = iota // hardwired zero
|
||||||
X1
|
RA // return address
|
||||||
X2
|
SP // stack pointer
|
||||||
X3
|
GP // global pointer
|
||||||
X4
|
TP // thread pointer
|
||||||
X5
|
T0 // temporary register 0
|
||||||
X6
|
T1 // temporary register 1
|
||||||
X7
|
T2 // temporary register 2
|
||||||
X8
|
S0 // saved register 0 / frame pointer
|
||||||
X9
|
S1 // saved register 1
|
||||||
X10
|
A0 // function argument 0 / return value 0
|
||||||
X11
|
A1 // function argument 1 / return value 1
|
||||||
X12
|
A2 // function argument 2
|
||||||
X13
|
A3 // function argument 3
|
||||||
X14
|
A4 // function argument 4
|
||||||
X15
|
A5 // function argument 5
|
||||||
X16
|
A6 // function argument 6
|
||||||
X17
|
A7 // function argument 7
|
||||||
X18
|
S2 // saved register 2
|
||||||
X19
|
S3 // saved register 3
|
||||||
X20
|
S4 // saved register 4
|
||||||
X21
|
S5 // saved register 5
|
||||||
X22
|
S6 // saved register 6
|
||||||
X23
|
S7 // saved register 7
|
||||||
X24
|
S8 // saved register 8
|
||||||
X25
|
S9 // saved register 9
|
||||||
X26
|
S10 // saved register 10
|
||||||
X27
|
S11 // saved register 11
|
||||||
X28
|
T3 // temporary register 3
|
||||||
X29
|
T4 // temporary register 4
|
||||||
X30
|
T5 // temporary register 5
|
||||||
X31
|
T6 // temporary register 6
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
SyscallInputRegisters = []cpu.Register{X17, X10, X11, X12, X13, X14, X15, X16}
|
SyscallInputRegisters = []cpu.Register{A7, A0, A1, A2, A3, A4, A5, A6}
|
||||||
SyscallOutputRegisters = []cpu.Register{X10, X11}
|
SyscallOutputRegisters = []cpu.Register{A0, A1}
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user