Skip to main content

vyre_primitives/
markers.rs

1//! Marker types — unit structs the reference interpreter and backend
2//! emitters dispatch on. Always compiled (zero deps); unrelated to
3//! the feature-gated Tier 2.5 subsystems.
4
5/// Stable identifier for a workgroup-shared memory region.
6#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd)]
7pub struct RegionId(pub u32);
8
9/// Associative reduction operator shared by scan/reduce primitives.
10#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
11#[non_exhaustive]
12pub enum CombineOp {
13    /// Integer wrap-around addition (default).
14    #[default]
15    Add,
16    /// Integer wrap-around multiplication.
17    Mul,
18    /// Bitwise AND.
19    BitAnd,
20    /// Bitwise OR.
21    BitOr,
22    /// Bitwise XOR.
23    BitXor,
24    /// Minimum (unsigned).
25    Min,
26    /// Maximum (unsigned).
27    Max,
28}
29
30macro_rules! primitive_marker {
31    ($(#[$m:meta])* $name:ident) => {
32        $(#[$m])*
33        #[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
34        pub struct $name;
35    };
36}
37
38primitive_marker!(
39    /// Integer wrap-around addition primitive.
40    ArithAdd
41);
42primitive_marker!(
43    /// Integer wrap-around multiplication primitive.
44    ArithMul
45);
46primitive_marker!(
47    /// Bitwise AND primitive.
48    BitwiseAnd
49);
50primitive_marker!(
51    /// Bitwise OR primitive.
52    BitwiseOr
53);
54primitive_marker!(
55    /// Bitwise XOR primitive.
56    BitwiseXor
57);
58primitive_marker!(
59    /// Count-leading-zeros primitive.
60    Clz
61);
62primitive_marker!(
63    /// Equality comparison primitive.
64    CompareEq
65);
66primitive_marker!(
67    /// Less-than comparison primitive.
68    CompareLt
69);
70primitive_marker!(
71    /// Workgroup-local gather primitive.
72    Gather
73);
74primitive_marker!(
75    /// BLAKE3 hashing primitive.
76    HashBlake3
77);
78primitive_marker!(
79    /// FNV-1a hashing primitive.
80    HashFnv1a
81);
82/// DFA-driven scan primitive.
83#[derive(Debug, Default, Clone, Eq, PartialEq, Hash)]
84pub struct PatternMatchDfa {
85    /// Serialized DFA bytes in the canonical flat format.
86    pub dfa: Vec<u8>,
87}
88
89/// Literal-string scan primitive.
90#[derive(Debug, Default, Clone, Eq, PartialEq, Hash)]
91pub struct PatternMatchLiteral {
92    /// Literal needle bytes to match.
93    pub literal: Vec<u8>,
94}
95primitive_marker!(
96    /// Population-count primitive.
97    Popcount
98);
99/// Associative reduction primitive.
100#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
101pub struct Reduce {
102    /// Reduction operator.
103    pub combine: CombineOp,
104}
105
106/// Inclusive/exclusive prefix scan primitive.
107#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
108pub struct Scan {
109    /// Scan combine operator.
110    pub combine: CombineOp,
111}
112primitive_marker!(
113    /// Scatter primitive.
114    Scatter
115);
116primitive_marker!(
117    /// Logical shift-left primitive.
118    ShiftLeft
119);
120primitive_marker!(
121    /// Logical shift-right primitive.
122    ShiftRight
123);
124primitive_marker!(
125    /// Workgroup-local shuffle primitive.
126    Shuffle
127);