poulpy/poulpy-schemes/src/bin_fhe/bdd_arithmetic/circuits/u32/xor_codegen.rs
poulpy-schemes/src/bin_fhe/bdd_arithmetic/circuits/u32/xor_codegen.rsRaw
1use crate::bin_fhe::bdd_arithmetic::{BitCircuit, BitCircuitFamily, BitCircuitInfo, Circuit, Node};
2pub(crate) enum AnyBitCircuit {
3 B0(BitCircuit<4>),
4 B1(BitCircuit<4>),
5 B2(BitCircuit<4>),
6 B3(BitCircuit<4>),
7 B4(BitCircuit<4>),
8 B5(BitCircuit<4>),
9 B6(BitCircuit<4>),
10 B7(BitCircuit<4>),
11 B8(BitCircuit<4>),
12 B9(BitCircuit<4>),
13 B10(BitCircuit<4>),
14 B11(BitCircuit<4>),
15 B12(BitCircuit<4>),
16 B13(BitCircuit<4>),
17 B14(BitCircuit<4>),
18 B15(BitCircuit<4>),
19 B16(BitCircuit<4>),
20 B17(BitCircuit<4>),
21 B18(BitCircuit<4>),
22 B19(BitCircuit<4>),
23 B20(BitCircuit<4>),
24 B21(BitCircuit<4>),
25 B22(BitCircuit<4>),
26 B23(BitCircuit<4>),
27 B24(BitCircuit<4>),
28 B25(BitCircuit<4>),
29 B26(BitCircuit<4>),
30 B27(BitCircuit<4>),
31 B28(BitCircuit<4>),
32 B29(BitCircuit<4>),
33 B30(BitCircuit<4>),
34 B31(BitCircuit<4>),
35}
36impl BitCircuitInfo for AnyBitCircuit {
37 fn info(&self) -> (&[Node], usize) {
38 match self {
39 AnyBitCircuit::B0(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
40 AnyBitCircuit::B1(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
41 AnyBitCircuit::B2(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
42 AnyBitCircuit::B3(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
43 AnyBitCircuit::B4(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
44 AnyBitCircuit::B5(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
45 AnyBitCircuit::B6(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
46 AnyBitCircuit::B7(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
47 AnyBitCircuit::B8(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
48 AnyBitCircuit::B9(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
49 AnyBitCircuit::B10(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
50 AnyBitCircuit::B11(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
51 AnyBitCircuit::B12(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
52 AnyBitCircuit::B13(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
53 AnyBitCircuit::B14(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
54 AnyBitCircuit::B15(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
55 AnyBitCircuit::B16(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
56 AnyBitCircuit::B17(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
57 AnyBitCircuit::B18(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
58 AnyBitCircuit::B19(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
59 AnyBitCircuit::B20(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
60 AnyBitCircuit::B21(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
61 AnyBitCircuit::B22(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
62 AnyBitCircuit::B23(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
63 AnyBitCircuit::B24(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
64 AnyBitCircuit::B25(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
65 AnyBitCircuit::B26(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
66 AnyBitCircuit::B27(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
67 AnyBitCircuit::B28(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
68 AnyBitCircuit::B29(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
69 AnyBitCircuit::B30(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
70 AnyBitCircuit::B31(bit_circuit) => (bit_circuit.nodes.as_ref(), bit_circuit.max_inter_state),
71 }
72 }
73}
74
75impl BitCircuitFamily for AnyBitCircuit {
76 const INPUT_BITS: usize = 64;
77 const OUTPUT_BITS: usize = 32;
78}
79
80pub(crate) static OUTPUT_CIRCUITS: Circuit<AnyBitCircuit, 32usize> = Circuit([
81 AnyBitCircuit::B0(BitCircuit::new(
82 [Node::Cmux(32, 0, 1), Node::Cmux(32, 1, 0), Node::Cmux(0, 0, 1), Node::None],
83 2,
84 )),
85 AnyBitCircuit::B1(BitCircuit::new(
86 [Node::Cmux(33, 0, 1), Node::Cmux(33, 1, 0), Node::Cmux(1, 0, 1), Node::None],
87 2,
88 )),
89 AnyBitCircuit::B2(BitCircuit::new(
90 [Node::Cmux(34, 1, 0), Node::Cmux(34, 0, 1), Node::Cmux(2, 1, 0), Node::None],
91 2,
92 )),
93 AnyBitCircuit::B3(BitCircuit::new(
94 [Node::Cmux(35, 0, 1), Node::Cmux(35, 1, 0), Node::Cmux(3, 0, 1), Node::None],
95 2,
96 )),
97 AnyBitCircuit::B4(BitCircuit::new(
98 [Node::Cmux(36, 0, 1), Node::Cmux(36, 1, 0), Node::Cmux(4, 0, 1), Node::None],
99 2,
100 )),
101 AnyBitCircuit::B5(BitCircuit::new(
102 [Node::Cmux(37, 0, 1), Node::Cmux(37, 1, 0), Node::Cmux(5, 0, 1), Node::None],
103 2,
104 )),
105 AnyBitCircuit::B6(BitCircuit::new(
106 [Node::Cmux(38, 1, 0), Node::Cmux(38, 0, 1), Node::Cmux(6, 1, 0), Node::None],
107 2,
108 )),
109 AnyBitCircuit::B7(BitCircuit::new(
110 [Node::Cmux(39, 1, 0), Node::Cmux(39, 0, 1), Node::Cmux(7, 1, 0), Node::None],
111 2,
112 )),
113 AnyBitCircuit::B8(BitCircuit::new(
114 [Node::Cmux(40, 0, 1), Node::Cmux(40, 1, 0), Node::Cmux(8, 0, 1), Node::None],
115 2,
116 )),
117 AnyBitCircuit::B9(BitCircuit::new(
118 [Node::Cmux(41, 1, 0), Node::Cmux(41, 0, 1), Node::Cmux(9, 1, 0), Node::None],
119 2,
120 )),
121 AnyBitCircuit::B10(BitCircuit::new(
122 [Node::Cmux(42, 0, 1), Node::Cmux(42, 1, 0), Node::Cmux(10, 0, 1), Node::None],
123 2,
124 )),
125 AnyBitCircuit::B11(BitCircuit::new(
126 [Node::Cmux(43, 0, 1), Node::Cmux(43, 1, 0), Node::Cmux(11, 0, 1), Node::None],
127 2,
128 )),
129 AnyBitCircuit::B12(BitCircuit::new(
130 [Node::Cmux(44, 0, 1), Node::Cmux(44, 1, 0), Node::Cmux(12, 0, 1), Node::None],
131 2,
132 )),
133 AnyBitCircuit::B13(BitCircuit::new(
134 [Node::Cmux(45, 1, 0), Node::Cmux(45, 0, 1), Node::Cmux(13, 1, 0), Node::None],
135 2,
136 )),
137 AnyBitCircuit::B14(BitCircuit::new(
138 [Node::Cmux(46, 1, 0), Node::Cmux(46, 0, 1), Node::Cmux(14, 1, 0), Node::None],
139 2,
140 )),
141 AnyBitCircuit::B15(BitCircuit::new(
142 [Node::Cmux(47, 1, 0), Node::Cmux(47, 0, 1), Node::Cmux(15, 1, 0), Node::None],
143 2,
144 )),
145 AnyBitCircuit::B16(BitCircuit::new(
146 [Node::Cmux(48, 0, 1), Node::Cmux(48, 1, 0), Node::Cmux(16, 0, 1), Node::None],
147 2,
148 )),
149 AnyBitCircuit::B17(BitCircuit::new(
150 [Node::Cmux(49, 0, 1), Node::Cmux(49, 1, 0), Node::Cmux(17, 0, 1), Node::None],
151 2,
152 )),
153 AnyBitCircuit::B18(BitCircuit::new(
154 [Node::Cmux(50, 0, 1), Node::Cmux(50, 1, 0), Node::Cmux(18, 0, 1), Node::None],
155 2,
156 )),
157 AnyBitCircuit::B19(BitCircuit::new(
158 [Node::Cmux(51, 1, 0), Node::Cmux(51, 0, 1), Node::Cmux(19, 1, 0), Node::None],
159 2,
160 )),
161 AnyBitCircuit::B20(BitCircuit::new(
162 [Node::Cmux(52, 1, 0), Node::Cmux(52, 0, 1), Node::Cmux(20, 1, 0), Node::None],
163 2,
164 )),
165 AnyBitCircuit::B21(BitCircuit::new(
166 [Node::Cmux(53, 0, 1), Node::Cmux(53, 1, 0), Node::Cmux(21, 0, 1), Node::None],
167 2,
168 )),
169 AnyBitCircuit::B22(BitCircuit::new(
170 [Node::Cmux(54, 1, 0), Node::Cmux(54, 0, 1), Node::Cmux(22, 1, 0), Node::None],
171 2,
172 )),
173 AnyBitCircuit::B23(BitCircuit::new(
174 [Node::Cmux(55, 1, 0), Node::Cmux(55, 0, 1), Node::Cmux(23, 1, 0), Node::None],
175 2,
176 )),
177 AnyBitCircuit::B24(BitCircuit::new(
178 [Node::Cmux(56, 0, 1), Node::Cmux(56, 1, 0), Node::Cmux(24, 0, 1), Node::None],
179 2,
180 )),
181 AnyBitCircuit::B25(BitCircuit::new(
182 [Node::Cmux(57, 0, 1), Node::Cmux(57, 1, 0), Node::Cmux(25, 0, 1), Node::None],
183 2,
184 )),
185 AnyBitCircuit::B26(BitCircuit::new(
186 [Node::Cmux(58, 1, 0), Node::Cmux(58, 0, 1), Node::Cmux(26, 1, 0), Node::None],
187 2,
188 )),
189 AnyBitCircuit::B27(BitCircuit::new(
190 [Node::Cmux(59, 0, 1), Node::Cmux(59, 1, 0), Node::Cmux(27, 0, 1), Node::None],
191 2,
192 )),
193 AnyBitCircuit::B28(BitCircuit::new(
194 [Node::Cmux(60, 0, 1), Node::Cmux(60, 1, 0), Node::Cmux(28, 0, 1), Node::None],
195 2,
196 )),
197 AnyBitCircuit::B29(BitCircuit::new(
198 [Node::Cmux(61, 0, 1), Node::Cmux(61, 1, 0), Node::Cmux(29, 0, 1), Node::None],
199 2,
200 )),
201 AnyBitCircuit::B30(BitCircuit::new(
202 [Node::Cmux(62, 0, 1), Node::Cmux(62, 1, 0), Node::Cmux(30, 0, 1), Node::None],
203 2,
204 )),
205 AnyBitCircuit::B31(BitCircuit::new(
206 [Node::Cmux(63, 1, 0), Node::Cmux(63, 0, 1), Node::Cmux(31, 1, 0), Node::None],
207 2,
208 )),
209]);