Skip to main content

gcn_assembler/instructions/
mod.rs

1use serde::{Deserialize, Serialize};
2
3/// GCN 寄存器
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5pub enum GcnReg {
6    VGPR(u8),
7    SGPR(u8),
8    AGPR(u8),
9}
10
11impl std::fmt::Display for GcnReg {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        match self {
14            GcnReg::VGPR(n) => write!(f, "v{}", n),
15            GcnReg::SGPR(n) => write!(f, "s{}", n),
16            GcnReg::AGPR(n) => write!(f, "a{}", n),
17        }
18    }
19}
20
21/// GCN 指令集 (CDNA/RDNA 基础)
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23pub enum GcnInstruction {
24    /// 算术运算: v_add_f32 dst, src0, src1
25    VAddF32 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
26    /// 算术运算: v_mul_f32 dst, src0, src1
27    VMulF32 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
28    /// 算术运算: v_dot2_f32_f16 dst, src0, src1
29    VDot2F32F16 { dst: GcnReg, src0: GcnReg, src1: GcnReg },
30    /// 内存操作: global_load_dword dst, addr, off
31    GlobalLoadDword { dst: GcnReg, addr: GcnReg, offset: u16 },
32    /// 内存操作: global_store_dword addr, src, off
33    GlobalStoreDword { addr: GcnReg, src: GcnReg, offset: u16 },
34    /// 控制流: s_endpgm
35    SEndPgm,
36    /// 控制流: s_nop
37    SNop(u16),
38}