use crate::enums::ir_cmd::IrCmd;
use crate::records::ir_op::IrOp;
use crate::records::register_a_64::RegisterA64;
use crate::records::register_x_64::RegisterX64;
use crate::type_aliases::ir_ops::IrOps;
#[derive(Debug, Clone)]
#[repr(C)]
pub struct IrInst {
pub cmd: IrCmd,
pub ops: IrOps,
pub last_use: u32,
pub use_count: u16,
pub reg_x64: RegisterX64,
pub reg_a64: RegisterA64,
pub reused_reg: bool,
pub spilled: bool,
pub needs_reload: bool,
}
impl IrInst {
pub fn ir_inst_new(cmd: IrCmd, ops: &[IrOp]) -> Self {
Self {
cmd,
ops: ops.iter().cloned().collect(),
..Self::default()
}
}
}
impl Default for IrInst {
fn default() -> Self {
Self {
cmd: IrCmd::NOP,
ops: IrOps::new(),
last_use: 0,
use_count: 0,
reg_x64: RegisterX64::noreg,
reg_a64: RegisterA64::noreg,
reused_reg: false,
spilled: false,
needs_reload: false,
}
}
}