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