urcl/
urcl.rs

1use codegem::ir::*;
2use codegem::arch::urcl::UrclSelector;
3use codegem::regalloc::RegAlloc;
4
5fn main() -> Result<(), ModuleCreationError> {
6    let mut builder = ModuleBuilder::default().with_name("test");
7    let main_func = builder.new_function("main",  Linkage::Public, &[], &Type::Void);
8    builder.switch_to_function(main_func);
9    let entry = builder.push_block().unwrap();
10    builder.switch_to_block(entry);
11    let val = builder.push_instruction(69u32.to_integer_operation())?.unwrap();
12    let val2 = builder.push_instruction(69u32.to_integer_operation())?.unwrap();
13    let val3 = builder.push_instruction(Operation::Add(val, val2))?.unwrap();
14    builder.set_terminator(Terminator::Return(val3))?;
15    let module = builder.build()?;
16    let mut vcode = module.lower_to_vcode::<_, UrclSelector>();
17    vcode.allocate_regs::<RegAlloc>();
18    vcode.emit_assembly(&mut std::fs::File::create("out.s").unwrap()).unwrap();
19    Ok(())
20}