use crate::machinst::{Reg, Writable};
use regalloc2::{PReg, RegClass, VReg};
#[inline]
pub const fn a0() -> Reg {
x_reg(10)
}
#[inline]
pub const fn a1() -> Reg {
x_reg(11)
}
#[inline]
pub fn a2() -> Reg {
x_reg(12)
}
#[inline]
pub fn writable_a0() -> Writable<Reg> {
Writable::from_reg(a0())
}
#[inline]
#[cfg(test)]
pub fn writable_a1() -> Writable<Reg> {
Writable::from_reg(a1())
}
#[inline]
#[expect(dead_code, reason = "here if needed in the future")]
pub fn writable_a2() -> Writable<Reg> {
Writable::from_reg(a2())
}
#[inline]
#[cfg(test)]
pub fn fa0() -> Reg {
f_reg(10)
}
#[inline]
#[cfg(test)]
pub fn writable_fa0() -> Writable<Reg> {
Writable::from_reg(fa0())
}
#[inline]
#[expect(dead_code, reason = "here if needed in the future")]
pub fn writable_fa1() -> Writable<Reg> {
Writable::from_reg(fa1())
}
#[inline]
pub fn fa1() -> Reg {
f_reg(11)
}
#[inline]
pub fn zero_reg() -> Reg {
x_reg(0)
}
#[inline]
pub fn writable_zero_reg() -> Writable<Reg> {
Writable::from_reg(zero_reg())
}
#[inline]
pub fn stack_reg() -> Reg {
x_reg(2)
}
#[inline]
pub fn writable_stack_reg() -> Writable<Reg> {
Writable::from_reg(stack_reg())
}
pub fn link_reg() -> Reg {
x_reg(1)
}
#[inline]
pub fn writable_link_reg() -> Writable<Reg> {
Writable::from_reg(link_reg())
}
#[inline]
pub fn fp_reg() -> Reg {
x_reg(8)
}
#[inline]
pub fn writable_fp_reg() -> Writable<Reg> {
Writable::from_reg(fp_reg())
}
#[inline]
pub fn spilltmp_reg() -> Reg {
x_reg(31)
}
#[inline]
pub fn writable_spilltmp_reg() -> Writable<Reg> {
Writable::from_reg(spilltmp_reg())
}
#[inline]
pub fn spilltmp_reg2() -> Reg {
x_reg(30)
}
#[inline]
pub fn writable_spilltmp_reg2() -> Writable<Reg> {
Writable::from_reg(spilltmp_reg2())
}
#[inline]
pub const fn x_reg(enc: usize) -> Reg {
let p_reg = PReg::new(enc, RegClass::Int);
let v_reg = VReg::new(p_reg.index(), p_reg.class());
Reg::from_virtual_reg(v_reg)
}
pub const fn px_reg(enc: usize) -> PReg {
PReg::new(enc, RegClass::Int)
}
#[inline]
pub fn f_reg(enc: usize) -> Reg {
let p_reg = PReg::new(enc, RegClass::Float);
let v_reg = VReg::new(p_reg.index(), p_reg.class());
Reg::from(v_reg)
}
pub const fn pf_reg(enc: usize) -> PReg {
PReg::new(enc, RegClass::Float)
}
pub const fn pv_reg(enc: usize) -> PReg {
PReg::new(enc, RegClass::Vector)
}