vyre-emit-ptx 0.6.1

PTX text emitter for vyre KernelDescriptor. Produces NVRTC-compatible CUDA assembly.
Documentation
use crate::EmitError;
use vyre_lower::KernelOp;

pub(super) fn read_two_operands(op: &KernelOp, op_name: &str) -> Result<(u32, u32), EmitError> {
    let a = *op
        .operands
        .first()
        .ok_or_else(|| EmitError::InvalidDescriptor(format!("{op_name} missing operand 0")))?;
    let b = *op
        .operands
        .get(1)
        .ok_or_else(|| EmitError::InvalidDescriptor(format!("{op_name} missing operand 1")))?;
    Ok((a, b))
}

pub(super) fn read_store_operands(op: &KernelOp) -> Result<(u32, u32, u32), EmitError> {
    let binding_slot = *op
        .operands
        .first()
        .ok_or_else(|| EmitError::InvalidDescriptor("StoreGlobal missing slot".into()))?;
    let index_op_id = *op
        .operands
        .get(1)
        .ok_or_else(|| EmitError::InvalidDescriptor("StoreGlobal missing index".into()))?;
    let value_op_id = *op
        .operands
        .get(2)
        .ok_or_else(|| EmitError::InvalidDescriptor("StoreGlobal missing value".into()))?;
    Ok((binding_slot, index_op_id, value_op_id))
}