cranelift_codegen/isa/riscv64/inst/
regs.rs1use crate::machinst::{Reg, Writable};
5
6use alloc::vec;
7use alloc::vec::Vec;
8
9use regalloc2::{PReg, RegClass, VReg};
10
11#[inline]
13pub fn a0() -> Reg {
14 x_reg(10)
15}
16
17#[inline]
19#[allow(dead_code)]
20pub fn a1() -> Reg {
21 x_reg(11)
22}
23
24#[inline]
26#[allow(dead_code)]
27pub fn a2() -> Reg {
28 x_reg(12)
29}
30
31#[inline]
32#[allow(dead_code)]
33pub fn writable_a0() -> Writable<Reg> {
34 Writable::from_reg(a0())
35}
36#[inline]
37#[allow(dead_code)]
38pub fn writable_a1() -> Writable<Reg> {
39 Writable::from_reg(a1())
40}
41#[inline]
42#[allow(dead_code)]
43pub fn writable_a2() -> Writable<Reg> {
44 Writable::from_reg(a2())
45}
46
47#[inline]
48#[allow(dead_code)]
49pub fn fa0() -> Reg {
50 f_reg(10)
51}
52#[inline]
53#[allow(dead_code)]
54pub fn writable_fa0() -> Writable<Reg> {
55 Writable::from_reg(fa0())
56}
57#[inline]
58#[allow(dead_code)]
59pub fn writable_fa1() -> Writable<Reg> {
60 Writable::from_reg(fa1())
61}
62#[inline]
63pub fn fa1() -> Reg {
64 f_reg(11)
65}
66
67#[inline]
69pub fn zero_reg() -> Reg {
70 x_reg(0)
71}
72
73#[inline]
75pub fn writable_zero_reg() -> Writable<Reg> {
76 Writable::from_reg(zero_reg())
77}
78#[inline]
79pub fn stack_reg() -> Reg {
80 x_reg(2)
81}
82
83#[inline]
85pub fn writable_stack_reg() -> Writable<Reg> {
86 Writable::from_reg(stack_reg())
87}
88
89pub fn link_reg() -> Reg {
91 x_reg(1)
92}
93
94#[inline]
96pub fn writable_link_reg() -> Writable<Reg> {
97 Writable::from_reg(link_reg())
98}
99
100#[inline]
102pub fn fp_reg() -> Reg {
103 x_reg(8)
104}
105
106#[inline]
108pub fn writable_fp_reg() -> Writable<Reg> {
109 Writable::from_reg(fp_reg())
110}
111
112#[inline]
115pub fn spilltmp_reg() -> Reg {
116 x_reg(31)
117}
118
119#[inline]
121pub fn writable_spilltmp_reg() -> Writable<Reg> {
122 Writable::from_reg(spilltmp_reg())
123}
124
125#[inline]
127pub fn spilltmp_reg2() -> Reg {
128 x_reg(30)
129}
130
131#[inline]
133pub fn writable_spilltmp_reg2() -> Writable<Reg> {
134 Writable::from_reg(spilltmp_reg2())
135}
136
137#[inline]
138pub fn x_reg(enc: usize) -> Reg {
139 let p_reg = PReg::new(enc, RegClass::Int);
140 let v_reg = VReg::new(p_reg.index(), p_reg.class());
141 Reg::from(v_reg)
142}
143pub const fn px_reg(enc: usize) -> PReg {
144 PReg::new(enc, RegClass::Int)
145}
146
147#[inline]
148pub fn f_reg(enc: usize) -> Reg {
149 let p_reg = PReg::new(enc, RegClass::Float);
150 let v_reg = VReg::new(p_reg.index(), p_reg.class());
151 Reg::from(v_reg)
152}
153pub const fn pf_reg(enc: usize) -> PReg {
154 PReg::new(enc, RegClass::Float)
155}
156
157#[allow(dead_code)]
158pub(crate) fn x_reg_range(start: usize, end: usize) -> Vec<Writable<Reg>> {
159 let mut regs = vec![];
160 for i in start..=end {
161 regs.push(Writable::from_reg(x_reg(i)));
162 }
163 regs
164}
165
166pub const fn pv_reg(enc: usize) -> PReg {
167 PReg::new(enc, RegClass::Vector)
168}