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
32
33
34
35
36
37
38
39



pub mod Opcode {
    pub const LoadI: u8 = 0x1;
    pub const LoadF: u8 = 0x2;
    pub const LoadL: u8 = 0x3;
    pub const LoadD: u8 = 0x4;

    pub const LoadG: u8 = 0xa1;
    pub const LoadAt: u8 = 0xa2;
    pub const StoreAt: u8 = 0xa3;
    pub const Ret: u8 = 0xa4;
    pub const Ret0: u8 = 0xa5;
    pub const Call: u8 = 0xa6;
    pub const StoreG: u8 = 0xa7;
    pub const Move: u8 = 0xa8;

    pub const Label: u8 = 0xa9;
    pub const Goto: u8 = 0xe1;
    pub const GotoT: u8 = 0xe2;
    pub const GotoF: u8 = 0xe3;

    pub fn to_string<'a>(op: u8) -> &'a str {
        match op {
            LoadI => "LoadI",
            Move => "Move",
            _ => "",
        }
    }
}

pub mod Size {
    pub const Float: u32 = ::std::mem::size_of::<f32>() as u32;
    pub const Double: u32 = ::std::mem::size_of::<f64>() as u32;
    pub const Int: u32 = ::std::mem::size_of::<i32>() as u32;
    pub const Long: u32 = ::std::mem::size_of::<i64>() as u32;
    pub const Bool: u32 = ::std::mem::size_of::<bool>() as u32;
}