use sp1_jit::{RiscOperand, RiscRegister};
pub const NUM_REGISTERS: usize = 32;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Register {
X0 = 0,
X1 = 1,
X2 = 2,
X3 = 3,
X4 = 4,
X5 = 5,
X6 = 6,
X7 = 7,
X8 = 8,
X9 = 9,
X10 = 10,
X11 = 11,
X12 = 12,
X13 = 13,
X14 = 14,
X15 = 15,
X16 = 16,
X17 = 17,
X18 = 18,
X19 = 19,
X20 = 20,
X21 = 21,
X22 = 22,
X23 = 23,
X24 = 24,
X25 = 25,
X26 = 26,
X27 = 27,
X28 = 28,
X29 = 29,
X30 = 30,
X31 = 31,
}
impl Register {
#[inline]
#[must_use]
pub fn from_u8(value: u8) -> Self {
match value {
0 => Register::X0,
1 => Register::X1,
2 => Register::X2,
3 => Register::X3,
4 => Register::X4,
5 => Register::X5,
6 => Register::X6,
7 => Register::X7,
8 => Register::X8,
9 => Register::X9,
10 => Register::X10,
11 => Register::X11,
12 => Register::X12,
13 => Register::X13,
14 => Register::X14,
15 => Register::X15,
16 => Register::X16,
17 => Register::X17,
18 => Register::X18,
19 => Register::X19,
20 => Register::X20,
21 => Register::X21,
22 => Register::X22,
23 => Register::X23,
24 => Register::X24,
25 => Register::X25,
26 => Register::X26,
27 => Register::X27,
28 => Register::X28,
29 => Register::X29,
30 => Register::X30,
31 => Register::X31,
_ => panic!("invalid register {value}"),
}
}
}
impl From<Register> for RiscOperand {
fn from(value: Register) -> Self {
RiscOperand::Register(value.into())
}
}
impl From<Register> for RiscRegister {
fn from(value: Register) -> Self {
match value {
Register::X0 => RiscRegister::X0,
Register::X1 => RiscRegister::X1,
Register::X2 => RiscRegister::X2,
Register::X3 => RiscRegister::X3,
Register::X4 => RiscRegister::X4,
Register::X5 => RiscRegister::X5,
Register::X6 => RiscRegister::X6,
Register::X7 => RiscRegister::X7,
Register::X8 => RiscRegister::X8,
Register::X9 => RiscRegister::X9,
Register::X10 => RiscRegister::X10,
Register::X11 => RiscRegister::X11,
Register::X12 => RiscRegister::X12,
Register::X13 => RiscRegister::X13,
Register::X14 => RiscRegister::X14,
Register::X15 => RiscRegister::X15,
Register::X16 => RiscRegister::X16,
Register::X17 => RiscRegister::X17,
Register::X18 => RiscRegister::X18,
Register::X19 => RiscRegister::X19,
Register::X20 => RiscRegister::X20,
Register::X21 => RiscRegister::X21,
Register::X22 => RiscRegister::X22,
Register::X23 => RiscRegister::X23,
Register::X24 => RiscRegister::X24,
Register::X25 => RiscRegister::X25,
Register::X26 => RiscRegister::X26,
Register::X27 => RiscRegister::X27,
Register::X28 => RiscRegister::X28,
Register::X29 => RiscRegister::X29,
Register::X30 => RiscRegister::X30,
Register::X31 => RiscRegister::X31,
}
}
}