1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use codegem::ir::*;
use codegem::arch::urcl::UrclSelector;
use codegem::arch::x64::X64Selector;
use codegem::arch::rv64::RvSelector;
use codegem::regalloc::RegAlloc;




fn main() {
    let mut builder = ModuleBuilder::default().with_name("test");
    let main_func = builder.new_function("main", &[], &Type::Void);
    builder.switch_to_function(main_func);
    let entry = builder.push_block().unwrap();
    builder.switch_to_block(entry);
    let val = builder.push_instruction(&Type::Integer(true, 32), Operation::Integer(
        true,
        69u32.to_le_bytes().to_owned().to_vec())).unwrap();
    
    let val2 = builder.push_instruction(&Type::Integer(true, 32), Operation::Integer(
            true,
            69u32.to_le_bytes().to_owned().to_vec())).unwrap();
    
    let val3 = builder.push_instruction(&Type::Integer(true, 32), Operation::Add(val, val2)).unwrap();
    builder.set_terminator(Terminator::Return(val3));
    let module = builder.build();
    let mut vcode = module.lower_to_vcode::<_, UrclSelector>();
    vcode.allocate_regs::<RegAlloc>();
    vcode.emit_assembly();
    
}