#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CodeLinkage {
Visible,
Extern,
Weak,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataLinkage {
Visible,
Extern,
Weak,
Common,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CodeOrDataLinkage {
Visible,
Extern,
Weak,
Common,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TexType {
TexRef,
SamplerRef,
SurfRef,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AddressSpace {
Global,
Const,
Shared,
Local,
Param,
Reg,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AttributeDirective {
Unified(u64, u64),
Managed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataType {
U8,
U16,
U32,
U64,
S8,
S16,
S32,
S64,
F16,
F16x2,
F32,
F64,
B8,
B16,
B32,
B64,
B128,
Pred,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Sign {
Negative,
Positive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Axis {
None,
X,
Y,
Z,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Label(pub String);
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SpecialRegister {
AggrSmemSize,
DynamicSmemSize,
LanemaskGt,
ReservedSmemOffsetBegin,
Clock,
Envreg(u8),
LanemaskLe,
ReservedSmemOffsetCap,
Clock64,
Globaltimer,
LanemaskLt,
ReservedSmemOffsetEnd,
ClusterCtaid(Axis),
GlobaltimerHi,
Nclusterid,
Smid,
ClusterCtarank(Axis),
GlobaltimerLo,
Nctaid(Axis),
Tid(Axis),
ClusterNctaid(Axis),
Gridid,
Nsmid,
TotalSmemSize,
ClusterNctarank(Axis),
IsExplicitCluster,
Ntid(Axis),
Warpid,
Clusterid,
Laneid,
Nwarpid,
WARPSZ,
Ctaid(Axis),
LanemaskEq,
Pm(u8),
Pm64(u8),
CurrentGraphExec,
LanemaskGe,
ReservedSmemOffset(u8),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TexHandler2(pub [GeneralOperand; 2]);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TexHandler3Optional {
pub handle: GeneralOperand,
pub sampler: Option<GeneralOperand>,
pub coords: GeneralOperand,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TexHandler3 {
pub handle: GeneralOperand,
pub sampler: GeneralOperand,
pub coords: GeneralOperand,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GeneralOperand {
Vec(VectorOperand),
Single(Operand),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VectorOperand {
Vector1(Operand),
Vector2([Operand; 2]),
Vector3([Operand; 3]),
Vector4([Operand; 4]),
Vector8([Operand; 8]),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Operand {
Register(RegisterOperand),
Immediate(Immediate),
Symbol(String),
SymbolOffset(String, Immediate),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RegisterOperand(pub String);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PredicateRegister(pub String);
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AddressOperand {
Array(VariableSymbol, Immediate),
ImmediateAddress(Immediate),
Offset(AddressBase, Option<AddressOffset>),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AddressBase {
Register(RegisterOperand),
Variable(VariableSymbol),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AddressOffset {
Register(RegisterOperand),
Immediate(Sign, Immediate),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Immediate(pub String);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FunctionSymbol(pub String);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VariableSymbol(pub String);
#[derive(Debug, Clone, PartialEq)]
pub struct Predicate {
pub negated: bool,
pub operand: Operand,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Instruction {
pub predicate: Option<Predicate>,
pub inst: crate::r#type::instruction::Inst,
}