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);