arnaucube
arnaucube/poulpyPublic Self-hosted repository
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))]);