[build] Introduce a TargetIsaBuilder to better encapsulate the TargetIsa;
It was the caller's responsibility to call TargetIsa::check() before; now one can't manipulate a TargetIsa without calling the TargetIsaBuilder::finish() method, which is less error-prone and more in line with what's coming for other things we're going to generate in the meta crate. Also splits the construction of a RegClass in two parts: a prototype is made first when declaring the RegClass, and missing bits are filled in when adding it to the TargetIsa(Builder). This avoids an awkward passing of the isa to the RegClass ctor.
This commit is contained in:
committed by
Dan Gohman
parent
f896bfb946
commit
add4043bb5
@@ -1,8 +1,8 @@
|
||||
use cdsl::isa::{TargetIsa, TargetIsaBuilder};
|
||||
use cdsl::regs::{RegBankBuilder, RegClassBuilder};
|
||||
use isa;
|
||||
|
||||
pub fn define() -> isa::TargetIsa {
|
||||
let mut isa = isa::TargetIsa::new("arm32");
|
||||
pub fn define() -> TargetIsa {
|
||||
let mut isa = TargetIsaBuilder::new("arm32");
|
||||
|
||||
let builder = RegBankBuilder::new("FloatRegs", "s")
|
||||
.units(64)
|
||||
@@ -20,20 +20,20 @@ pub fn define() -> isa::TargetIsa {
|
||||
.track_pressure(false);
|
||||
let flag_reg = isa.add_reg_bank(builder);
|
||||
|
||||
let builder = RegClassBuilder::new_toplevel(&mut isa, "S", float_regs).count(32);
|
||||
let builder = RegClassBuilder::new_toplevel("S", float_regs).count(32);
|
||||
isa.add_reg_class(builder);
|
||||
|
||||
let builder = RegClassBuilder::new_toplevel(&mut isa, "D", float_regs).width(2);
|
||||
let builder = RegClassBuilder::new_toplevel("D", float_regs).width(2);
|
||||
isa.add_reg_class(builder);
|
||||
|
||||
let builder = RegClassBuilder::new_toplevel(&mut isa, "Q", float_regs).width(4);
|
||||
let builder = RegClassBuilder::new_toplevel("Q", float_regs).width(4);
|
||||
isa.add_reg_class(builder);
|
||||
|
||||
let builder = RegClassBuilder::new_toplevel(&mut isa, "GPR", int_regs);
|
||||
let builder = RegClassBuilder::new_toplevel("GPR", int_regs);
|
||||
isa.add_reg_class(builder);
|
||||
|
||||
let builder = RegClassBuilder::new_toplevel(&mut isa, "FLAG", flag_reg);
|
||||
let builder = RegClassBuilder::new_toplevel("FLAG", flag_reg);
|
||||
isa.add_reg_class(builder);
|
||||
|
||||
isa
|
||||
isa.finish()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user