1use sp1_jit::{RiscOperand, RiscRegister};
4
5pub const NUM_REGISTERS: usize = 32;
7
8#[derive(Debug, Clone, Copy, PartialEq)]
10pub enum Register {
11 X0 = 0,
13 X1 = 1,
15 X2 = 2,
17 X3 = 3,
19 X4 = 4,
21 X5 = 5,
23 X6 = 6,
25 X7 = 7,
27 X8 = 8,
29 X9 = 9,
31 X10 = 10,
33 X11 = 11,
35 X12 = 12,
37 X13 = 13,
39 X14 = 14,
41 X15 = 15,
43 X16 = 16,
45 X17 = 17,
47 X18 = 18,
49 X19 = 19,
51 X20 = 20,
53 X21 = 21,
55 X22 = 22,
57 X23 = 23,
59 X24 = 24,
61 X25 = 25,
63 X26 = 26,
65 X27 = 27,
67 X28 = 28,
69 X29 = 29,
71 X30 = 30,
73 X31 = 31,
75}
76
77impl Register {
78 #[inline]
84 #[must_use]
85 pub fn from_u8(value: u8) -> Self {
86 match value {
87 0 => Register::X0,
88 1 => Register::X1,
89 2 => Register::X2,
90 3 => Register::X3,
91 4 => Register::X4,
92 5 => Register::X5,
93 6 => Register::X6,
94 7 => Register::X7,
95 8 => Register::X8,
96 9 => Register::X9,
97 10 => Register::X10,
98 11 => Register::X11,
99 12 => Register::X12,
100 13 => Register::X13,
101 14 => Register::X14,
102 15 => Register::X15,
103 16 => Register::X16,
104 17 => Register::X17,
105 18 => Register::X18,
106 19 => Register::X19,
107 20 => Register::X20,
108 21 => Register::X21,
109 22 => Register::X22,
110 23 => Register::X23,
111 24 => Register::X24,
112 25 => Register::X25,
113 26 => Register::X26,
114 27 => Register::X27,
115 28 => Register::X28,
116 29 => Register::X29,
117 30 => Register::X30,
118 31 => Register::X31,
119 _ => panic!("invalid register {value}"),
120 }
121 }
122}
123
124impl From<Register> for RiscOperand {
125 fn from(value: Register) -> Self {
126 RiscOperand::Register(value.into())
127 }
128}
129
130impl From<Register> for RiscRegister {
131 fn from(value: Register) -> Self {
132 match value {
133 Register::X0 => RiscRegister::X0,
134 Register::X1 => RiscRegister::X1,
135 Register::X2 => RiscRegister::X2,
136 Register::X3 => RiscRegister::X3,
137 Register::X4 => RiscRegister::X4,
138 Register::X5 => RiscRegister::X5,
139 Register::X6 => RiscRegister::X6,
140 Register::X7 => RiscRegister::X7,
141 Register::X8 => RiscRegister::X8,
142 Register::X9 => RiscRegister::X9,
143 Register::X10 => RiscRegister::X10,
144 Register::X11 => RiscRegister::X11,
145 Register::X12 => RiscRegister::X12,
146 Register::X13 => RiscRegister::X13,
147 Register::X14 => RiscRegister::X14,
148 Register::X15 => RiscRegister::X15,
149 Register::X16 => RiscRegister::X16,
150 Register::X17 => RiscRegister::X17,
151 Register::X18 => RiscRegister::X18,
152 Register::X19 => RiscRegister::X19,
153 Register::X20 => RiscRegister::X20,
154 Register::X21 => RiscRegister::X21,
155 Register::X22 => RiscRegister::X22,
156 Register::X23 => RiscRegister::X23,
157 Register::X24 => RiscRegister::X24,
158 Register::X25 => RiscRegister::X25,
159 Register::X26 => RiscRegister::X26,
160 Register::X27 => RiscRegister::X27,
161 Register::X28 => RiscRegister::X28,
162 Register::X29 => RiscRegister::X29,
163 Register::X30 => RiscRegister::X30,
164 Register::X31 => RiscRegister::X31,
165 }
166 }
167}