1use crate::program::Reg;
2pub use polkavm_assembler::amd64::RegIndex as NativeReg;
3use polkavm_assembler::amd64::RegIndex::*;
4
5#[inline]
6pub const fn to_native_reg(reg: Reg) -> NativeReg {
7 match reg {
10 Reg::A0 => rdi,
11 Reg::A1 => rax,
12 Reg::SP => rsi,
13 Reg::RA => rbx,
14 Reg::A2 => rdx,
15 Reg::A3 => rbp,
16 Reg::S0 => r8,
17 Reg::S1 => r9,
18 Reg::A4 => r10,
19 Reg::A5 => r11,
20 Reg::T0 => r13,
21 Reg::T1 => r14,
22 Reg::T2 => r12,
23 }
24}
25
26pub const TMP_REG: NativeReg = rcx;
28
29pub const AUX_TMP_REG: NativeReg = r15;
31
32#[inline]
33pub const fn to_guest_reg(reg: NativeReg) -> Option<Reg> {
34 let mut index = 0;
35 while index < Reg::ALL.len() {
36 let guest_reg = Reg::ALL[index];
37 if to_native_reg(guest_reg) as u32 == reg as u32 {
38 return Some(guest_reg);
39 }
40
41 index += 1;
42 }
43
44 None
45}