Skip to main content

gcn_assembler/program/
mod.rs

1//! GCN program structure for AMD GPUs.
2
3use crate::instructions::GcnInstruction;
4use serde::{Deserialize, Serialize};
5
6/// GCN program (HSACO/ELF wrapper)
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct GcnProgram {
9    /// Program name
10    pub name: String,
11    /// Kernels in the program
12    pub kernels: Vec<GcnKernel>,
13}
14
15impl GcnProgram {
16    /// Create a new GCN program.
17    ///
18    /// # Arguments
19    /// * `name` - Program name
20    pub fn new(name: String) -> Self {
21        Self { name, kernels: Vec::new() }
22    }
23}
24
25/// GCN kernel definition
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct GcnKernel {
28    /// Kernel name
29    pub name: String,
30    /// Instructions in the kernel
31    pub instructions: Vec<GcnInstruction>,
32    /// Kernel arguments
33    pub args: Vec<GcnKernelArg>,
34}
35
36/// GCN kernel argument
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct GcnKernelArg {
39    /// Argument name
40    pub name: String,
41    /// Argument size in bytes
42    pub size: usize,
43    /// Argument offset in bytes
44    pub offset: usize,
45}