use crate::{
backends::{Backend, GeneratedFiles},
config::GaiaConfig,
instruction::{DomainInstruction, GaiaInstruction},
program::{GaiaModule, GaiaTerminator},
};
use gaia_types::{
helpers::{AbiCompatible, ApiCompatible, Architecture, ArtifactType, CompilationTarget},
neural::NeuralNode,
Result,
};
use sass_assembler::{
instructions::{SassInstruction, SassReg},
program::{SassKernel, SassProgram},
SassWriter,
};
use std::collections::HashMap;
pub struct SassBackend {
writer: SassWriter,
}
impl SassBackend {
pub fn new() -> Self {
Self { writer: SassWriter::new() }
}
}
impl Backend for SassBackend {
fn name(&self) -> &'static str {
"NVIDIA SASS"
}
fn primary_target(&self) -> CompilationTarget {
CompilationTarget { build: Architecture::NvSass, host: AbiCompatible::PTX, target: ApiCompatible::Unknown }
}
fn artifact_type(&self) -> ArtifactType {
ArtifactType::Executable
}
fn match_score(&self, target: &CompilationTarget) -> f32 {
if target.build == Architecture::NvSass {
return 100.0;
}
0.0
}
fn generate(&self, program: &GaiaModule, config: &GaiaConfig) -> Result<GeneratedFiles> {
let mut files = HashMap::new();
let sass_program = convert_gaia_to_sass(program)?;
let binary = self.writer.write(&sass_program)?;
files.insert("kernel.bin".to_string(), binary);
Ok(GeneratedFiles { artifact_type: ArtifactType::Executable, files, custom: None, diagnostics: vec![] })
}
}
fn convert_gaia_to_sass(program: &GaiaModule) -> Result<SassProgram> {
Ok(SassProgram { name: program.name.clone(), kernels: vec![] })
}