actually compiles and does stuff now
This commit is contained in:
41
src/ir/lower/func.rs
Normal file
41
src/ir/lower/func.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
use super::*;
|
||||
use crate::compiler::arch::riscv64::Reg;
|
||||
use arch::riscv64::RV64Instruction;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct IRLFunction {
|
||||
pub name: String,
|
||||
pub addr: AddrID,
|
||||
pub instructions: Vec<IRLInstruction>,
|
||||
pub stack: HashMap<VarID, usize>,
|
||||
pub args: Vec<(VarID, usize)>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum IRLInstruction {
|
||||
Mv {
|
||||
dest: VarID,
|
||||
src: VarID,
|
||||
},
|
||||
Ref {
|
||||
dest: VarID,
|
||||
src: VarID,
|
||||
},
|
||||
LoadAddr {
|
||||
dest: VarID,
|
||||
src: AddrID,
|
||||
},
|
||||
Call {
|
||||
dest: VarID,
|
||||
f: AddrID,
|
||||
args: Vec<(VarID, usize)>,
|
||||
},
|
||||
AsmBlock {
|
||||
instructions: Vec<RV64Instruction>,
|
||||
args: Vec<(Reg, VarID)>,
|
||||
},
|
||||
Ret {
|
||||
src: VarID,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user