use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum GcnReg {
VGPR(u8),
SGPR(u8),
AGPR(u8),
}
impl std::fmt::Display for GcnReg {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
GcnReg::VGPR(n) => write!(f, "v{}", n),
GcnReg::SGPR(n) => write!(f, "s{}", n),
GcnReg::AGPR(n) => write!(f, "a{}", n),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum GcnInstruction {
VAddF32 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
VMulF32 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
VDot2F32F16 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
GlobalLoadDword { dst: GcnReg, addr: GcnReg, offset: u16 },
GlobalStoreDword { addr: GcnReg, src: GcnReg, offset: u16 },
SEndPgm,
SNop(u16),
}