gcn-assembler 0.1.1

GCN assembler for Gaia project
Documentation
//! GCN program structure for AMD GPUs.

use crate::instructions::GcnInstruction;
use serde::{Deserialize, Serialize};

/// GCN program (HSACO/ELF wrapper)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GcnProgram {
    /// Program name
    pub name: String,
    /// Kernels in the program
    pub kernels: Vec<GcnKernel>,
}

impl GcnProgram {
    /// Create a new GCN program.
    ///
    /// # Arguments
    /// * `name` - Program name
    pub fn new(name: String) -> Self {
        Self { name, kernels: Vec::new() }
    }
}

/// GCN kernel definition
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GcnKernel {
    /// Kernel name
    pub name: String,
    /// Instructions in the kernel
    pub instructions: Vec<GcnInstruction>,
    /// Kernel arguments
    pub args: Vec<GcnKernelArg>,
}

/// GCN kernel argument
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GcnKernelArg {
    /// Argument name
    pub name: String,
    /// Argument size in bytes
    pub size: usize,
    /// Argument offset in bytes
    pub offset: usize,
}