MCPcopy Create free account
hub / github.com/Amanieu/regalloc3 / emit

Method emit

regalloc3-tool/src/example_reginfo/mod.rs:100–174  ·  view source on GitHub ↗

Writes the register definition to the given sink.

(&self, f: &mut impl fmt::Write)

Source from the content-addressed store, hash-verified

98
99 /// Writes the register definition to the given sink.
100 pub fn emit(&self, f: &mut impl fmt::Write) -> Result<()> {
101 writeln!(f, "; Generated by regalloc3-tool, do not edit manually")?;
102 writeln!(
103 f,
104 "; Re-generate with: cargo run -p regalloc3-tool -- example-reginfo -f {} {}",
105 self.num_fixed_stack, self.arch,
106 )?;
107
108 writeln!(f)?;
109 for (reg, regdata) in self.regs.iter() {
110 let location = if regdata.is_stack { "stack" } else { "reg" };
111 if regdata.units.is_empty() {
112 writeln!(f, "{reg} = {location} nonallocatable ; {}", regdata.name,)?;
113 } else {
114 writeln!(
115 f,
116 "{reg} = {location} {} ; {}",
117 DisplayIter(regdata.units.iter()),
118 regdata.name,
119 )?;
120 }
121 }
122
123 writeln!(f)?;
124 for (group, groupdata) in self.groups.iter() {
125 writeln!(
126 f,
127 "{group} = {} ; ({})",
128 DisplayIter(groupdata.regs.iter()),
129 DisplayIter(groupdata.regs.iter().map(|&r| &self.regs[r].name)),
130 )?;
131 }
132
133 for (bank, bankdata) in self.banks.iter() {
134 writeln!(f)?;
135 writeln!(f, "; {}", bankdata.desc)?;
136 writeln!(f, "{bank} {{")?;
137 writeln!(f, " top_level_class = {}", bankdata.top_level_class)?;
138 writeln!(
139 f,
140 " stack_to_stack_class = {}",
141 bankdata.stack_to_stack_class
142 )?;
143 writeln!(f, " spillslot_size = {}", bankdata.spillslot_size)?;
144
145 for &class in &bankdata.classes {
146 let classdata = &self.classes[class];
147 writeln!(f)?;
148 writeln!(f, " ; {}", classdata.desc)?;
149 if let Some(superclass) = classdata.superclass {
150 writeln!(f, " {class}: {superclass} {{")?;
151 } else {
152 writeln!(f, " {class} {{")?;
153 }
154 if classdata.group_size != 1 {
155 writeln!(f, " group_size = {}", classdata.group_size)?;
156 }
157 if classdata.allows_spillslots {

Callers 1

mainFunction · 0.80

Calls 2

iterMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected