poulpy/poulpy-schemes/src/tfhe/bdd_arithmetic/circuits/u32/slt_codegen.rs
poulpy-schemes/src/tfhe/bdd_arithmetic/circuits/u32/slt_codegen.rsRaw
1use crate::tfhe::bdd_arithmetic::{BitCircuit, BitCircuitInfo, Circuit, GetBitCircuitInfo, Node};
2pub(crate) enum AnyBitCircuit {
3 B0(BitCircuit<256>),
4}
5impl BitCircuitInfo for AnyBitCircuit {
6 fn info(&self) -> (&[Node], usize) {
7 match self {
8 AnyBitCircuit::B0(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
9 }
10 }
11}
12
13impl GetBitCircuitInfo<u32> for Circuit<AnyBitCircuit, 1usize> {
14 fn input_size(&self) -> usize {
15 2 * u32::BITS as usize
16 }
17 fn output_size(&self) -> usize {
18 1
19 }
20 fn get_circuit(&self, bit: usize) -> (&[Node], usize) {
21 self.0[bit].info()
22 }
23}
24
25pub(crate) static OUTPUT_CIRCUITS: Circuit<AnyBitCircuit, 1usize> = Circuit([AnyBitCircuit::B0(BitCircuit::new(
26 [
27 Node::Copy,
28 Node::Copy,
29 Node::None,
30 Node::Cmux(32, 1, 0),
31 Node::Copy,
32 Node::Copy,
33 Node::None,
34 Node::Cmux(0, 0, 3),
35 Node::Copy,
36 Node::Copy,
37 Node::Cmux(33, 3, 0),
38 Node::Cmux(33, 1, 3),
39 Node::Copy,
40 Node::Copy,
41 Node::Cmux(1, 2, 3),
42 Node::None,
43 Node::Copy,
44 Node::Copy,
45 Node::Cmux(34, 1, 2),
46 Node::Cmux(34, 2, 0),
47 Node::Copy,
48 Node::Copy,
49 Node::None,
50 Node::Cmux(2, 3, 2),
51 Node::Copy,
52 Node::Copy,
53 Node::Cmux(35, 1, 3),
54 Node::Cmux(35, 3, 0),
55 Node::Copy,
56 Node::Copy,
57 Node::Cmux(3, 3, 2),
58 Node::None,
59 Node::Copy,
60 Node::Copy,
61 Node::Cmux(36, 1, 2),
62 Node::Cmux(36, 2, 0),
63 Node::Copy,
64 Node::Copy,
65 Node::Cmux(4, 3, 2),
66 Node::None,
67 Node::Copy,
68 Node::Copy,
69 Node::Cmux(37, 1, 2),
70 Node::Cmux(37, 2, 0),
71 Node::Copy,
72 Node::Copy,
73 Node::Cmux(5, 3, 2),
74 Node::None,
75 Node::Copy,
76 Node::Copy,
77 Node::Cmux(38, 1, 2),
78 Node::Cmux(38, 2, 0),
79 Node::Copy,
80 Node::Copy,
81 Node::None,
82 Node::Cmux(6, 3, 2),
83 Node::Copy,
84 Node::Copy,
85 Node::Cmux(39, 1, 3),
86 Node::Cmux(39, 3, 0),
87 Node::Copy,
88 Node::Copy,
89 Node::None,
90 Node::Cmux(7, 3, 2),
91 Node::Copy,
92 Node::Copy,
93 Node::Cmux(40, 3, 0),
94 Node::Cmux(40, 1, 3),
95 Node::Copy,
96 Node::Copy,
97 Node::None,
98 Node::Cmux(8, 2, 3),
99 Node::Copy,
100 Node::Copy,
101 Node::Cmux(41, 1, 3),
102 Node::Cmux(41, 3, 0),
103 Node::Copy,
104 Node::Copy,
105 Node::None,
106 Node::Cmux(9, 3, 2),
107 Node::Copy,
108 Node::Copy,
109 Node::Cmux(42, 1, 3),
110 Node::Cmux(42, 3, 0),
111 Node::Copy,
112 Node::Copy,
113 Node::Cmux(10, 3, 2),
114 Node::None,
115 Node::Copy,
116 Node::Copy,
117 Node::Cmux(43, 1, 2),
118 Node::Cmux(43, 2, 0),
119 Node::Copy,
120 Node::Copy,
121 Node::Cmux(11, 3, 2),
122 Node::None,
123 Node::Copy,
124 Node::Copy,
125 Node::Cmux(44, 2, 0),
126 Node::Cmux(44, 1, 2),
127 Node::Copy,
128 Node::Copy,
129 Node::Cmux(12, 2, 3),
130 Node::None,
131 Node::Copy,
132 Node::Copy,
133 Node::Cmux(45, 2, 0),
134 Node::Cmux(45, 1, 2),
135 Node::Copy,
136 Node::Copy,
137 Node::None,
138 Node::Cmux(13, 2, 3),
139 Node::Copy,
140 Node::Copy,
141 Node::Cmux(46, 1, 3),
142 Node::Cmux(46, 3, 0),
143 Node::Copy,
144 Node::Copy,
145 Node::Cmux(14, 3, 2),
146 Node::None,
147 Node::Copy,
148 Node::Copy,
149 Node::Cmux(47, 2, 0),
150 Node::Cmux(47, 1, 2),
151 Node::Copy,
152 Node::Copy,
153 Node::Cmux(15, 2, 3),
154 Node::None,
155 Node::Copy,
156 Node::Copy,
157 Node::Cmux(48, 2, 0),
158 Node::Cmux(48, 1, 2),
159 Node::Copy,
160 Node::Copy,
161 Node::Cmux(16, 2, 3),
162 Node::None,
163 Node::Copy,
164 Node::Copy,
165 Node::Cmux(49, 1, 2),
166 Node::Cmux(49, 2, 0),
167 Node::Copy,
168 Node::Copy,
169 Node::Cmux(17, 3, 2),
170 Node::None,
171 Node::Copy,
172 Node::Copy,
173 Node::Cmux(50, 1, 2),
174 Node::Cmux(50, 2, 0),
175 Node::Copy,
176 Node::Copy,
177 Node::Cmux(18, 3, 2),
178 Node::None,
179 Node::Copy,
180 Node::Copy,
181 Node::Cmux(51, 2, 0),
182 Node::Cmux(51, 1, 2),
183 Node::Copy,
184 Node::Copy,
185 Node::Cmux(19, 2, 3),
186 Node::None,
187 Node::Copy,
188 Node::Copy,
189 Node::Cmux(52, 1, 2),
190 Node::Cmux(52, 2, 0),
191 Node::Copy,
192 Node::Copy,
193 Node::None,
194 Node::Cmux(20, 3, 2),
195 Node::Copy,
196 Node::Copy,
197 Node::Cmux(53, 1, 3),
198 Node::Cmux(53, 3, 0),
199 Node::Copy,
200 Node::Copy,
201 Node::None,
202 Node::Cmux(21, 3, 2),
203 Node::Copy,
204 Node::Copy,
205 Node::Cmux(54, 1, 3),
206 Node::Cmux(54, 3, 0),
207 Node::Copy,
208 Node::Copy,
209 Node::None,
210 Node::Cmux(22, 3, 2),
211 Node::Copy,
212 Node::Copy,
213 Node::Cmux(55, 3, 0),
214 Node::Cmux(55, 1, 3),
215 Node::Copy,
216 Node::Copy,
217 Node::Cmux(23, 2, 3),
218 Node::None,
219 Node::Copy,
220 Node::Copy,
221 Node::Cmux(56, 2, 0),
222 Node::Cmux(56, 1, 2),
223 Node::Copy,
224 Node::Copy,
225 Node::Cmux(24, 2, 3),
226 Node::None,
227 Node::Copy,
228 Node::Copy,
229 Node::Cmux(57, 2, 0),
230 Node::Cmux(57, 1, 2),
231 Node::Copy,
232 Node::Copy,
233 Node::None,
234 Node::Cmux(25, 2, 3),
235 Node::Copy,
236 Node::Copy,
237 Node::Cmux(58, 1, 3),
238 Node::Cmux(58, 3, 0),
239 Node::Copy,
240 Node::Copy,
241 Node::Cmux(26, 3, 2),
242 Node::None,
243 Node::Copy,
244 Node::Copy,
245 Node::Cmux(59, 1, 2),
246 Node::Cmux(59, 2, 0),
247 Node::Copy,
248 Node::Copy,
249 Node::None,
250 Node::Cmux(27, 3, 2),
251 Node::Copy,
252 Node::Copy,
253 Node::Cmux(60, 3, 0),
254 Node::Cmux(60, 1, 3),
255 Node::Copy,
256 Node::Copy,
257 Node::Cmux(28, 2, 3),
258 Node::None,
259 Node::Copy,
260 Node::Copy,
261 Node::Cmux(61, 2, 0),
262 Node::Cmux(61, 1, 2),
263 Node::Copy,
264 Node::Copy,
265 Node::None,
266 Node::Cmux(29, 2, 3),
267 Node::Copy,
268 Node::Copy,
269 Node::Cmux(62, 1, 3),
270 Node::Cmux(62, 3, 0),
271 Node::Copy,
272 Node::Copy,
273 Node::None,
274 Node::Cmux(30, 3, 2),
275 Node::Cmux(63, 3, 1),
276 Node::None,
277 Node::None,
278 Node::Cmux(63, 0, 3),
279 Node::Cmux(31, 0, 3),
280 Node::None,
281 Node::None,
282 Node::None,
283 ],
284 4,
285))]);