1use serde::Serialize;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
4pub enum BuiltinIntegerClass {
5 Int8,
6 Int16,
7 Int32,
8 Int64,
9 Uint8,
10 Uint16,
11 Uint32,
12 Uint64,
13}
14
15pub const ALL_INTEGER_CLASSES: [BuiltinIntegerClass; 8] = [
16 BuiltinIntegerClass::Int8,
17 BuiltinIntegerClass::Int16,
18 BuiltinIntegerClass::Int32,
19 BuiltinIntegerClass::Int64,
20 BuiltinIntegerClass::Uint8,
21 BuiltinIntegerClass::Uint16,
22 BuiltinIntegerClass::Uint32,
23 BuiltinIntegerClass::Uint64,
24];
25
26pub const SIGNED_INTEGER_CLASSES: [BuiltinIntegerClass; 4] = [
27 BuiltinIntegerClass::Int8,
28 BuiltinIntegerClass::Int16,
29 BuiltinIntegerClass::Int32,
30 BuiltinIntegerClass::Int64,
31];
32
33pub const INTEGER_CLASSES_THROUGH_16_BITS: [BuiltinIntegerClass; 4] = [
34 BuiltinIntegerClass::Int8,
35 BuiltinIntegerClass::Int16,
36 BuiltinIntegerClass::Uint8,
37 BuiltinIntegerClass::Uint16,
38];
39
40pub const INTEGER_CLASSES_THROUGH_32_BITS: [BuiltinIntegerClass; 6] = [
41 BuiltinIntegerClass::Int8,
42 BuiltinIntegerClass::Int16,
43 BuiltinIntegerClass::Int32,
44 BuiltinIntegerClass::Uint8,
45 BuiltinIntegerClass::Uint16,
46 BuiltinIntegerClass::Uint32,
47];
48
49pub const UNSIGNED_8_16_CLASSES: [BuiltinIntegerClass; 2] =
50 [BuiltinIntegerClass::Uint8, BuiltinIntegerClass::Uint16];
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
53pub enum BuiltinIntegerScalarDoubleRule {
54 NotApplicable,
55 Allowed,
56 AllowedExceptWith64BitInteger,
57 Rejected,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
61pub enum BuiltinIntegerInputAvailability {
62 Documented,
63 RunMatOnly,
64 Rejected,
65}
66
67#[derive(Debug, Clone, Serialize)]
68pub struct BuiltinIntegerInputCapability {
69 pub name: &'static str,
70 pub classes: &'static [BuiltinIntegerClass],
71 pub availability: BuiltinIntegerInputAvailability,
72 pub scalar_double: BuiltinIntegerScalarDoubleRule,
73 pub notes: &'static str,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
77pub enum BuiltinIntegerComputationDomain {
78 ExactInteger,
79 FloatingPoint,
80 Predicate,
81 Structural,
82 FunctionSpecific,
83}
84
85#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
86pub enum BuiltinIntegerOutputClassRule {
87 PreserveInput,
88 PreserveNondoubleInput,
89 Double,
90 Logical,
91 OptionDependent,
92 NotApplicable,
93 FunctionSpecific,
94}
95
96#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
97pub enum BuiltinIntegerOverflowRule {
98 Saturate,
99 Error,
100 NotApplicable,
101 EvidenceOpen,
102 FunctionSpecific,
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
106pub enum BuiltinIntegerBackendRule {
107 HostOnly,
108 HostAndGpu,
109 GatherFallback,
110 GpuRestricted,
111 FunctionSpecific,
112}
113
114#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
115pub enum BuiltinIntegerOverloadKind {
116 ScalarOnly,
117 ElementwiseShapePreserving,
118 SameSizeOrScalar,
119 BroadcastCompatible,
120 StructuralParameter,
121 Multiple,
122 FunctionSpecific,
123}
124
125#[derive(Debug, Clone, Serialize)]
126pub struct BuiltinIntegerCapabilityDescriptor {
127 pub form: &'static str,
128 pub inputs: &'static [BuiltinIntegerInputCapability],
129 pub computation_domain: BuiltinIntegerComputationDomain,
130 pub output_class: BuiltinIntegerOutputClassRule,
131 pub overflow: BuiltinIntegerOverflowRule,
132 pub backend: BuiltinIntegerBackendRule,
133 pub overload: BuiltinIntegerOverloadKind,
134 pub notes: &'static str,
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
138pub enum BuiltinIntegerAuditKind {
139 AliasOf,
140 NotApplicable,
141}
142
143#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
144pub struct BuiltinIntegerAuditDescriptor {
145 pub kind: BuiltinIntegerAuditKind,
146 #[serde(skip_serializing_if = "Option::is_none")]
147 pub canonical_builtin: Option<&'static str>,
148 pub notes: &'static str,
149}