1pub struct RecursionCheckedBytesInstLayout {
2 pub eval_point: &'static Reg,
3 pub keep_coeffs: &'static Reg,
4 pub keep_upper_state: &'static Reg,
5 pub prep_full: &'static Reg,
6}
7impl risc0_zkp::layout::Component for RecursionCheckedBytesInstLayout {
8 fn ty_name(&self) -> &'static str {
9 "RecursionCheckedBytesInstLayout"
10 }
11 #[allow(unused_variables)]
12 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
13 v.visit_component("eval_point", self.eval_point)?;
14 v.visit_component("keep_coeffs", self.keep_coeffs)?;
15 v.visit_component("keep_upper_state", self.keep_upper_state)?;
16 v.visit_component("prep_full", self.prep_full)?;
17 Ok(())
18 }
19}
20pub struct OneHotLayout {
21 pub bit_and_elem: &'static Reg,
22 pub bit_op_shorts: &'static Reg,
23 pub nop: &'static Reg,
24 pub set_global: &'static Reg,
25 pub sha_fini: &'static Reg,
26 pub sha_init: &'static Reg,
27 pub sha_load: &'static Reg,
28 pub sha_mix: &'static Reg,
29 pub wom_fini: &'static Reg,
30 pub wom_init: &'static Reg,
31}
32impl risc0_zkp::layout::Component for OneHotLayout {
33 fn ty_name(&self) -> &'static str {
34 "OneHotLayout"
35 }
36 #[allow(unused_variables)]
37 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
38 v.visit_component("bit_and_elem", self.bit_and_elem)?;
39 v.visit_component("bit_op_shorts", self.bit_op_shorts)?;
40 v.visit_component("nop", self.nop)?;
41 v.visit_component("set_global", self.set_global)?;
42 v.visit_component("sha_fini", self.sha_fini)?;
43 v.visit_component("sha_init", self.sha_init)?;
44 v.visit_component("sha_load", self.sha_load)?;
45 v.visit_component("sha_mix", self.sha_mix)?;
46 v.visit_component("wom_fini", self.wom_fini)?;
47 v.visit_component("wom_init", self.wom_init)?;
48 Ok(())
49 }
50}
51pub type Reg3LayoutArray = [&'static Reg; 3];
52pub struct RecursionMacroInstLayout {
53 pub opcode: &'static OneHotLayout,
54 pub operand: &'static Reg3LayoutArray,
55}
56impl risc0_zkp::layout::Component for RecursionMacroInstLayout {
57 fn ty_name(&self) -> &'static str {
58 "RecursionMacroInstLayout"
59 }
60 #[allow(unused_variables)]
61 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
62 v.visit_component("opcode", self.opcode)?;
63 v.visit_component("operand", self.operand)?;
64 Ok(())
65 }
66}
67pub struct RecursionMicroInstLayout {
68 pub opcode: &'static Reg,
69 pub operand: &'static Reg3LayoutArray,
70}
71impl risc0_zkp::layout::Component for RecursionMicroInstLayout {
72 fn ty_name(&self) -> &'static str {
73 "RecursionMicroInstLayout"
74 }
75 #[allow(unused_variables)]
76 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
77 v.visit_component("opcode", self.opcode)?;
78 v.visit_component("operand", self.operand)?;
79 Ok(())
80 }
81}
82pub type RecursionMicroInstLayout3LayoutArray = [&'static RecursionMicroInstLayout; 3];
83pub struct OneHot0Layout {
84 pub c0: &'static Reg,
85 pub c1: &'static Reg,
86 pub c2: &'static Reg,
87 pub c3: &'static Reg,
88}
89impl risc0_zkp::layout::Component for OneHot0Layout {
90 fn ty_name(&self) -> &'static str {
91 "OneHot0Layout"
92 }
93 #[allow(unused_variables)]
94 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
95 v.visit_component("c0", self.c0)?;
96 v.visit_component("c1", self.c1)?;
97 v.visit_component("c2", self.c2)?;
98 v.visit_component("c3", self.c3)?;
99 Ok(())
100 }
101}
102pub struct OneHot1Layout {
103 pub g0: &'static Reg,
104 pub g1: &'static Reg,
105 pub g2: &'static Reg,
106}
107impl risc0_zkp::layout::Component for OneHot1Layout {
108 fn ty_name(&self) -> &'static str {
109 "OneHot1Layout"
110 }
111 #[allow(unused_variables)]
112 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
113 v.visit_component("g0", self.g0)?;
114 v.visit_component("g1", self.g1)?;
115 v.visit_component("g2", self.g2)?;
116 Ok(())
117 }
118}
119pub type Reg8LayoutArray = [&'static Reg; 8];
120pub struct RecursionPoseidon2MemInstLayout {
121 pub do_mont: &'static Reg,
122 pub keep_state: &'static Reg,
123 pub keep_upper_state: &'static Reg,
124 pub prep_full: &'static Reg,
125 pub group: &'static OneHot1Layout,
126 pub inputs: &'static Reg8LayoutArray,
127}
128impl risc0_zkp::layout::Component for RecursionPoseidon2MemInstLayout {
129 fn ty_name(&self) -> &'static str {
130 "RecursionPoseidon2MemInstLayout"
131 }
132 #[allow(unused_variables)]
133 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
134 v.visit_component("do_mont", self.do_mont)?;
135 v.visit_component("keep_state", self.keep_state)?;
136 v.visit_component("keep_upper_state", self.keep_upper_state)?;
137 v.visit_component("prep_full", self.prep_full)?;
138 v.visit_component("group", self.group)?;
139 v.visit_component("inputs", self.inputs)?;
140 Ok(())
141 }
142}
143pub struct MuxLayout {
144 pub checked_bytes: &'static RecursionCheckedBytesInstLayout,
145 pub macro_ops: &'static RecursionMacroInstLayout,
146 pub micro_ops: &'static RecursionMicroInstLayout3LayoutArray,
147 pub poseidon2_full: &'static OneHot0Layout,
148 pub poseidon2_load: &'static RecursionPoseidon2MemInstLayout,
149 pub poseidon2_store: &'static RecursionPoseidon2MemInstLayout,
150}
151impl risc0_zkp::layout::Component for MuxLayout {
152 fn ty_name(&self) -> &'static str {
153 "MuxLayout"
154 }
155 #[allow(unused_variables)]
156 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
157 v.visit_component("checked_bytes", self.checked_bytes)?;
158 v.visit_component("macro_ops", self.macro_ops)?;
159 v.visit_component("micro_ops", self.micro_ops)?;
160 v.visit_component("poseidon2_full", self.poseidon2_full)?;
161 v.visit_component("poseidon2_load", self.poseidon2_load)?;
162 v.visit_component("poseidon2_store", self.poseidon2_store)?;
163 Ok(())
164 }
165}
166pub struct OneHot2Layout {
167 pub checked_bytes: &'static Reg,
168 pub macro_ops: &'static Reg,
169 pub micro_ops: &'static Reg,
170 pub poseidon2_full: &'static Reg,
171 pub poseidon2_load: &'static Reg,
172 pub poseidon2_partial: &'static Reg,
173 pub poseidon2_store: &'static Reg,
174}
175impl risc0_zkp::layout::Component for OneHot2Layout {
176 fn ty_name(&self) -> &'static str {
177 "OneHot2Layout"
178 }
179 #[allow(unused_variables)]
180 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
181 v.visit_component("checked_bytes", self.checked_bytes)?;
182 v.visit_component("macro_ops", self.macro_ops)?;
183 v.visit_component("micro_ops", self.micro_ops)?;
184 v.visit_component("poseidon2_full", self.poseidon2_full)?;
185 v.visit_component("poseidon2_load", self.poseidon2_load)?;
186 v.visit_component("poseidon2_partial", self.poseidon2_partial)?;
187 v.visit_component("poseidon2_store", self.poseidon2_store)?;
188 Ok(())
189 }
190}
191pub struct RecursionCodeLayout {
192 pub write_addr: &'static Reg,
193 pub inst: &'static MuxLayout,
194 pub select: &'static OneHot2Layout,
195}
196impl risc0_zkp::layout::Component for RecursionCodeLayout {
197 fn ty_name(&self) -> &'static str {
198 "RecursionCodeLayout"
199 }
200 #[allow(unused_variables)]
201 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
202 v.visit_component("write_addr", self.write_addr)?;
203 v.visit_component("inst", self.inst)?;
204 v.visit_component("select", self.select)?;
205 Ok(())
206 }
207}
208pub struct RecursionTopLayout {
209 pub code: &'static RecursionCodeLayout,
210 pub mux: &'static RecursionMicroInstLayout3LayoutArray,
211}
212impl risc0_zkp::layout::Component for RecursionTopLayout {
213 fn ty_name(&self) -> &'static str {
214 "RecursionTopLayout"
215 }
216 #[allow(unused_variables)]
217 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
218 v.visit_component("code", self.code)?;
219 v.visit_component("mux", self.mux)?;
220 Ok(())
221 }
222}
223pub const CODE_LAYOUT: &RecursionTopLayout = &RecursionTopLayout {
224 code: &RecursionCodeLayout {
225 write_addr: &Reg { offset: 0 },
226 inst: &MuxLayout {
227 checked_bytes: &RecursionCheckedBytesInstLayout {
228 eval_point: &Reg { offset: 8 },
229 keep_coeffs: &Reg { offset: 9 },
230 keep_upper_state: &Reg { offset: 10 },
231 prep_full: &Reg { offset: 11 },
232 },
233 macro_ops: &RecursionMacroInstLayout {
234 opcode: &OneHotLayout {
235 bit_and_elem: &Reg { offset: 11 },
236 bit_op_shorts: &Reg { offset: 12 },
237 nop: &Reg { offset: 8 },
238 set_global: &Reg { offset: 17 },
239 sha_fini: &Reg { offset: 14 },
240 sha_init: &Reg { offset: 13 },
241 sha_load: &Reg { offset: 15 },
242 sha_mix: &Reg { offset: 16 },
243 wom_fini: &Reg { offset: 10 },
244 wom_init: &Reg { offset: 9 },
245 },
246 operand: &[
247 &Reg { offset: 18 },
248 &Reg { offset: 19 },
249 &Reg { offset: 20 },
250 ],
251 },
252 micro_ops: &[
253 &RecursionMicroInstLayout {
254 opcode: &Reg { offset: 8 },
255 operand: &[&Reg { offset: 9 }, &Reg { offset: 10 }, &Reg { offset: 11 }],
256 },
257 &RecursionMicroInstLayout {
258 opcode: &Reg { offset: 12 },
259 operand: &[
260 &Reg { offset: 13 },
261 &Reg { offset: 14 },
262 &Reg { offset: 15 },
263 ],
264 },
265 &RecursionMicroInstLayout {
266 opcode: &Reg { offset: 16 },
267 operand: &[
268 &Reg { offset: 17 },
269 &Reg { offset: 18 },
270 &Reg { offset: 19 },
271 ],
272 },
273 ],
274 poseidon2_full: &OneHot0Layout {
275 c0: &Reg { offset: 8 },
276 c1: &Reg { offset: 9 },
277 c2: &Reg { offset: 10 },
278 c3: &Reg { offset: 11 },
279 },
280 poseidon2_load: &RecursionPoseidon2MemInstLayout {
281 do_mont: &Reg { offset: 8 },
282 keep_state: &Reg { offset: 9 },
283 keep_upper_state: &Reg { offset: 10 },
284 prep_full: &Reg { offset: 11 },
285 group: &OneHot1Layout {
286 g0: &Reg { offset: 12 },
287 g1: &Reg { offset: 13 },
288 g2: &Reg { offset: 14 },
289 },
290 inputs: &[
291 &Reg { offset: 15 },
292 &Reg { offset: 16 },
293 &Reg { offset: 17 },
294 &Reg { offset: 18 },
295 &Reg { offset: 19 },
296 &Reg { offset: 20 },
297 &Reg { offset: 21 },
298 &Reg { offset: 22 },
299 ],
300 },
301 poseidon2_store: &RecursionPoseidon2MemInstLayout {
302 do_mont: &Reg { offset: 8 },
303 keep_state: &Reg { offset: 9 },
304 keep_upper_state: &Reg { offset: 10 },
305 prep_full: &Reg { offset: 11 },
306 group: &OneHot1Layout {
307 g0: &Reg { offset: 12 },
308 g1: &Reg { offset: 13 },
309 g2: &Reg { offset: 14 },
310 },
311 inputs: &[
312 &Reg { offset: 15 },
313 &Reg { offset: 16 },
314 &Reg { offset: 17 },
315 &Reg { offset: 18 },
316 &Reg { offset: 19 },
317 &Reg { offset: 20 },
318 &Reg { offset: 21 },
319 &Reg { offset: 22 },
320 ],
321 },
322 },
323 select: &OneHot2Layout {
324 checked_bytes: &Reg { offset: 7 },
325 macro_ops: &Reg { offset: 2 },
326 micro_ops: &Reg { offset: 1 },
327 poseidon2_full: &Reg { offset: 4 },
328 poseidon2_load: &Reg { offset: 3 },
329 poseidon2_partial: &Reg { offset: 5 },
330 poseidon2_store: &Reg { offset: 6 },
331 },
332 },
333 mux: &[
334 &RecursionMicroInstLayout {
335 opcode: &Reg { offset: 8 },
336 operand: &[&Reg { offset: 9 }, &Reg { offset: 10 }, &Reg { offset: 11 }],
337 },
338 &RecursionMicroInstLayout {
339 opcode: &Reg { offset: 12 },
340 operand: &[
341 &Reg { offset: 13 },
342 &Reg { offset: 14 },
343 &Reg { offset: 15 },
344 ],
345 },
346 &RecursionMicroInstLayout {
347 opcode: &Reg { offset: 16 },
348 operand: &[
349 &Reg { offset: 17 },
350 &Reg { offset: 18 },
351 &Reg { offset: 19 },
352 ],
353 },
354 ],
355};
356pub type Reg4LayoutArray = [&'static Reg; 4];
357pub struct RecursionImplWomPlonkElementLayout {
358 pub addr: &'static Reg,
359 pub data: &'static Reg4LayoutArray,
360}
361impl risc0_zkp::layout::Component for RecursionImplWomPlonkElementLayout {
362 fn ty_name(&self) -> &'static str {
363 "RecursionImplWomPlonkElementLayout"
364 }
365 #[allow(unused_variables)]
366 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
367 v.visit_component("addr", self.addr)?;
368 v.visit_component("data", self.data)?;
369 Ok(())
370 }
371}
372pub type Reg31LayoutArray = [&'static Reg; 31];
373pub struct RecursionBitAndElemLayout {
374 pub in_a: &'static RecursionImplWomPlonkElementLayout,
375 pub in_b: &'static RecursionImplWomPlonkElementLayout,
376 pub out: &'static RecursionImplWomPlonkElementLayout,
377 pub bits_a: &'static Reg31LayoutArray,
378 pub bits_b: &'static Reg31LayoutArray,
379}
380impl risc0_zkp::layout::Component for RecursionBitAndElemLayout {
381 fn ty_name(&self) -> &'static str {
382 "RecursionBitAndElemLayout"
383 }
384 #[allow(unused_variables)]
385 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
386 v.visit_component("in_a", self.in_a)?;
387 v.visit_component("in_b", self.in_b)?;
388 v.visit_component("out", self.out)?;
389 v.visit_component("bits_a", self.bits_a)?;
390 v.visit_component("bits_b", self.bits_b)?;
391 Ok(())
392 }
393}
394pub type Reg32LayoutArray = [&'static Reg; 32];
395pub struct RecursionBitOpShortsLayout {
396 pub in_a: &'static RecursionImplWomPlonkElementLayout,
397 pub in_b: &'static RecursionImplWomPlonkElementLayout,
398 pub out: &'static RecursionImplWomPlonkElementLayout,
399 pub bits_a: &'static Reg32LayoutArray,
400 pub bits_b: &'static Reg32LayoutArray,
401}
402impl risc0_zkp::layout::Component for RecursionBitOpShortsLayout {
403 fn ty_name(&self) -> &'static str {
404 "RecursionBitOpShortsLayout"
405 }
406 #[allow(unused_variables)]
407 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
408 v.visit_component("in_a", self.in_a)?;
409 v.visit_component("in_b", self.in_b)?;
410 v.visit_component("out", self.out)?;
411 v.visit_component("bits_a", self.bits_a)?;
412 v.visit_component("bits_b", self.bits_b)?;
413 Ok(())
414 }
415}
416pub type RecursionImplWomPlonkElementLayout4LayoutArray =
417 [&'static RecursionImplWomPlonkElementLayout; 4];
418pub struct RecursionSetGlobalLayout {
419 pub select: &'static Reg4LayoutArray,
420 pub regs: &'static RecursionImplWomPlonkElementLayout4LayoutArray,
421}
422impl risc0_zkp::layout::Component for RecursionSetGlobalLayout {
423 fn ty_name(&self) -> &'static str {
424 "RecursionSetGlobalLayout"
425 }
426 #[allow(unused_variables)]
427 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
428 v.visit_component("select", self.select)?;
429 v.visit_component("regs", self.regs)?;
430 Ok(())
431 }
432}
433pub type Reg2LayoutArray = [&'static Reg; 2];
434pub struct RecursionShaCycleLayout {
435 pub a_carry_hi: &'static Reg,
436 pub a_carry_low: &'static Reg,
437 pub e_carry_high: &'static Reg,
438 pub e_carry_low: &'static Reg,
439 pub w_carry_high: &'static Reg,
440 pub w_carry_low: &'static Reg,
441 pub io0: &'static RecursionImplWomPlonkElementLayout,
442 pub io1: &'static RecursionImplWomPlonkElementLayout,
443 pub a: &'static Reg32LayoutArray,
444 pub a_raw: &'static Reg2LayoutArray,
445 pub e: &'static Reg32LayoutArray,
446 pub e_raw: &'static Reg2LayoutArray,
447 pub w: &'static Reg32LayoutArray,
448 pub w_raw: &'static Reg2LayoutArray,
449}
450impl risc0_zkp::layout::Component for RecursionShaCycleLayout {
451 fn ty_name(&self) -> &'static str {
452 "RecursionShaCycleLayout"
453 }
454 #[allow(unused_variables)]
455 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
456 v.visit_component("a_carry_hi", self.a_carry_hi)?;
457 v.visit_component("a_carry_low", self.a_carry_low)?;
458 v.visit_component("e_carry_high", self.e_carry_high)?;
459 v.visit_component("e_carry_low", self.e_carry_low)?;
460 v.visit_component("w_carry_high", self.w_carry_high)?;
461 v.visit_component("w_carry_low", self.w_carry_low)?;
462 v.visit_component("io0", self.io0)?;
463 v.visit_component("io1", self.io1)?;
464 v.visit_component("a", self.a)?;
465 v.visit_component("a_raw", self.a_raw)?;
466 v.visit_component("e", self.e)?;
467 v.visit_component("e_raw", self.e_raw)?;
468 v.visit_component("w", self.w)?;
469 v.visit_component("w_raw", self.w_raw)?;
470 Ok(())
471 }
472}
473pub struct Mux3Layout {
474 pub bit_and_elem: &'static RecursionBitAndElemLayout,
475 pub bit_op_shorts: &'static RecursionBitOpShortsLayout,
476 pub set_global: &'static RecursionSetGlobalLayout,
477 pub sha_fini: &'static RecursionShaCycleLayout,
478 pub sha_init: &'static RecursionShaCycleLayout,
479 pub sha_load: &'static RecursionShaCycleLayout,
480 pub sha_mix: &'static RecursionShaCycleLayout,
481}
482impl risc0_zkp::layout::Component for Mux3Layout {
483 fn ty_name(&self) -> &'static str {
484 "Mux3Layout"
485 }
486 #[allow(unused_variables)]
487 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
488 v.visit_component("bit_and_elem", self.bit_and_elem)?;
489 v.visit_component("bit_op_shorts", self.bit_op_shorts)?;
490 v.visit_component("set_global", self.set_global)?;
491 v.visit_component("sha_fini", self.sha_fini)?;
492 v.visit_component("sha_init", self.sha_init)?;
493 v.visit_component("sha_load", self.sha_load)?;
494 v.visit_component("sha_mix", self.sha_mix)?;
495 Ok(())
496 }
497}
498pub struct OneHot4Layout {
499 pub add: &'static Reg,
500 pub constop: &'static Reg,
501 pub eq: &'static Reg,
502 pub extract: &'static Reg,
503 pub inv: &'static Reg,
504 pub mix_rng: &'static Reg,
505 pub mul: &'static Reg,
506 pub read_iop_body: &'static Reg,
507 pub read_iop_header: &'static Reg,
508 pub select: &'static Reg,
509 pub sub: &'static Reg,
510}
511impl risc0_zkp::layout::Component for OneHot4Layout {
512 fn ty_name(&self) -> &'static str {
513 "OneHot4Layout"
514 }
515 #[allow(unused_variables)]
516 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
517 v.visit_component("add", self.add)?;
518 v.visit_component("constop", self.constop)?;
519 v.visit_component("eq", self.eq)?;
520 v.visit_component("extract", self.extract)?;
521 v.visit_component("inv", self.inv)?;
522 v.visit_component("mix_rng", self.mix_rng)?;
523 v.visit_component("mul", self.mul)?;
524 v.visit_component("read_iop_body", self.read_iop_body)?;
525 v.visit_component("read_iop_header", self.read_iop_header)?;
526 v.visit_component("select", self.select)?;
527 v.visit_component("sub", self.sub)?;
528 Ok(())
529 }
530}
531pub struct RecursionMicroOpLayout {
532 pub extra: &'static Reg,
533 pub decode: &'static OneHot4Layout,
534 pub in0: &'static RecursionImplWomPlonkElementLayout,
535 pub in1: &'static RecursionImplWomPlonkElementLayout,
536 pub out: &'static RecursionImplWomPlonkElementLayout,
537}
538impl risc0_zkp::layout::Component for RecursionMicroOpLayout {
539 fn ty_name(&self) -> &'static str {
540 "RecursionMicroOpLayout"
541 }
542 #[allow(unused_variables)]
543 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
544 v.visit_component("extra", self.extra)?;
545 v.visit_component("decode", self.decode)?;
546 v.visit_component("in0", self.in0)?;
547 v.visit_component("in1", self.in1)?;
548 v.visit_component("out", self.out)?;
549 Ok(())
550 }
551}
552pub type RecursionMicroOpLayout3LayoutArray = [&'static RecursionMicroOpLayout; 3];
553pub struct Mux5Layout {
554 pub checked_bytes: &'static RecursionImplWomPlonkElementLayout,
555 pub macro_ops: &'static Mux3Layout,
556 pub micro_ops: &'static RecursionMicroOpLayout3LayoutArray,
557}
558impl risc0_zkp::layout::Component for Mux5Layout {
559 fn ty_name(&self) -> &'static str {
560 "Mux5Layout"
561 }
562 #[allow(unused_variables)]
563 fn walk<V: risc0_zkp::layout::Visitor>(&self, v: &mut V) -> core::fmt::Result {
564 v.visit_component("checked_bytes", self.checked_bytes)?;
565 v.visit_component("macro_ops", self.macro_ops)?;
566 v.visit_component("micro_ops", self.micro_ops)?;
567 Ok(())
568 }
569}
570pub const DATA_LAYOUT: &Mux5Layout = &Mux5Layout {
571 checked_bytes: &RecursionImplWomPlonkElementLayout {
572 addr: &Reg { offset: 5 },
573 data: &[
574 &Reg { offset: 6 },
575 &Reg { offset: 7 },
576 &Reg { offset: 8 },
577 &Reg { offset: 9 },
578 ],
579 },
580 macro_ops: &Mux3Layout {
581 bit_and_elem: &RecursionBitAndElemLayout {
582 in_a: &RecursionImplWomPlonkElementLayout {
583 addr: &Reg { offset: 11 },
584 data: &[
585 &Reg { offset: 12 },
586 &Reg { offset: 13 },
587 &Reg { offset: 14 },
588 &Reg { offset: 15 },
589 ],
590 },
591 in_b: &RecursionImplWomPlonkElementLayout {
592 addr: &Reg { offset: 16 },
593 data: &[
594 &Reg { offset: 17 },
595 &Reg { offset: 18 },
596 &Reg { offset: 19 },
597 &Reg { offset: 20 },
598 ],
599 },
600 out: &RecursionImplWomPlonkElementLayout {
601 addr: &Reg { offset: 21 },
602 data: &[
603 &Reg { offset: 22 },
604 &Reg { offset: 23 },
605 &Reg { offset: 24 },
606 &Reg { offset: 25 },
607 ],
608 },
609 bits_a: &[
610 &Reg { offset: 36 },
611 &Reg { offset: 38 },
612 &Reg { offset: 40 },
613 &Reg { offset: 42 },
614 &Reg { offset: 44 },
615 &Reg { offset: 46 },
616 &Reg { offset: 48 },
617 &Reg { offset: 50 },
618 &Reg { offset: 52 },
619 &Reg { offset: 54 },
620 &Reg { offset: 56 },
621 &Reg { offset: 58 },
622 &Reg { offset: 60 },
623 &Reg { offset: 62 },
624 &Reg { offset: 64 },
625 &Reg { offset: 66 },
626 &Reg { offset: 68 },
627 &Reg { offset: 70 },
628 &Reg { offset: 72 },
629 &Reg { offset: 74 },
630 &Reg { offset: 76 },
631 &Reg { offset: 78 },
632 &Reg { offset: 80 },
633 &Reg { offset: 82 },
634 &Reg { offset: 84 },
635 &Reg { offset: 86 },
636 &Reg { offset: 88 },
637 &Reg { offset: 90 },
638 &Reg { offset: 92 },
639 &Reg { offset: 94 },
640 &Reg { offset: 96 },
641 ],
642 bits_b: &[
643 &Reg { offset: 37 },
644 &Reg { offset: 39 },
645 &Reg { offset: 41 },
646 &Reg { offset: 43 },
647 &Reg { offset: 45 },
648 &Reg { offset: 47 },
649 &Reg { offset: 49 },
650 &Reg { offset: 51 },
651 &Reg { offset: 53 },
652 &Reg { offset: 55 },
653 &Reg { offset: 57 },
654 &Reg { offset: 59 },
655 &Reg { offset: 61 },
656 &Reg { offset: 63 },
657 &Reg { offset: 65 },
658 &Reg { offset: 67 },
659 &Reg { offset: 69 },
660 &Reg { offset: 71 },
661 &Reg { offset: 73 },
662 &Reg { offset: 75 },
663 &Reg { offset: 77 },
664 &Reg { offset: 79 },
665 &Reg { offset: 81 },
666 &Reg { offset: 83 },
667 &Reg { offset: 85 },
668 &Reg { offset: 87 },
669 &Reg { offset: 89 },
670 &Reg { offset: 91 },
671 &Reg { offset: 93 },
672 &Reg { offset: 95 },
673 &Reg { offset: 97 },
674 ],
675 },
676 bit_op_shorts: &RecursionBitOpShortsLayout {
677 in_a: &RecursionImplWomPlonkElementLayout {
678 addr: &Reg { offset: 11 },
679 data: &[
680 &Reg { offset: 12 },
681 &Reg { offset: 13 },
682 &Reg { offset: 14 },
683 &Reg { offset: 15 },
684 ],
685 },
686 in_b: &RecursionImplWomPlonkElementLayout {
687 addr: &Reg { offset: 16 },
688 data: &[
689 &Reg { offset: 17 },
690 &Reg { offset: 18 },
691 &Reg { offset: 19 },
692 &Reg { offset: 20 },
693 ],
694 },
695 out: &RecursionImplWomPlonkElementLayout {
696 addr: &Reg { offset: 21 },
697 data: &[
698 &Reg { offset: 22 },
699 &Reg { offset: 23 },
700 &Reg { offset: 24 },
701 &Reg { offset: 25 },
702 ],
703 },
704 bits_a: &[
705 &Reg { offset: 36 },
706 &Reg { offset: 37 },
707 &Reg { offset: 38 },
708 &Reg { offset: 39 },
709 &Reg { offset: 40 },
710 &Reg { offset: 41 },
711 &Reg { offset: 42 },
712 &Reg { offset: 43 },
713 &Reg { offset: 44 },
714 &Reg { offset: 45 },
715 &Reg { offset: 46 },
716 &Reg { offset: 47 },
717 &Reg { offset: 48 },
718 &Reg { offset: 49 },
719 &Reg { offset: 50 },
720 &Reg { offset: 51 },
721 &Reg { offset: 52 },
722 &Reg { offset: 53 },
723 &Reg { offset: 54 },
724 &Reg { offset: 55 },
725 &Reg { offset: 56 },
726 &Reg { offset: 57 },
727 &Reg { offset: 58 },
728 &Reg { offset: 59 },
729 &Reg { offset: 60 },
730 &Reg { offset: 61 },
731 &Reg { offset: 62 },
732 &Reg { offset: 63 },
733 &Reg { offset: 64 },
734 &Reg { offset: 65 },
735 &Reg { offset: 66 },
736 &Reg { offset: 67 },
737 ],
738 bits_b: &[
739 &Reg { offset: 68 },
740 &Reg { offset: 69 },
741 &Reg { offset: 70 },
742 &Reg { offset: 71 },
743 &Reg { offset: 72 },
744 &Reg { offset: 73 },
745 &Reg { offset: 74 },
746 &Reg { offset: 75 },
747 &Reg { offset: 76 },
748 &Reg { offset: 77 },
749 &Reg { offset: 78 },
750 &Reg { offset: 79 },
751 &Reg { offset: 80 },
752 &Reg { offset: 81 },
753 &Reg { offset: 82 },
754 &Reg { offset: 83 },
755 &Reg { offset: 84 },
756 &Reg { offset: 85 },
757 &Reg { offset: 86 },
758 &Reg { offset: 87 },
759 &Reg { offset: 88 },
760 &Reg { offset: 89 },
761 &Reg { offset: 90 },
762 &Reg { offset: 91 },
763 &Reg { offset: 92 },
764 &Reg { offset: 93 },
765 &Reg { offset: 94 },
766 &Reg { offset: 95 },
767 &Reg { offset: 96 },
768 &Reg { offset: 97 },
769 &Reg { offset: 98 },
770 &Reg { offset: 99 },
771 ],
772 },
773 set_global: &RecursionSetGlobalLayout {
774 select: &[
775 &Reg { offset: 11 },
776 &Reg { offset: 12 },
777 &Reg { offset: 13 },
778 &Reg { offset: 14 },
779 ],
780 regs: &[
781 &RecursionImplWomPlonkElementLayout {
782 addr: &Reg { offset: 15 },
783 data: &[
784 &Reg { offset: 16 },
785 &Reg { offset: 17 },
786 &Reg { offset: 18 },
787 &Reg { offset: 19 },
788 ],
789 },
790 &RecursionImplWomPlonkElementLayout {
791 addr: &Reg { offset: 20 },
792 data: &[
793 &Reg { offset: 21 },
794 &Reg { offset: 22 },
795 &Reg { offset: 23 },
796 &Reg { offset: 24 },
797 ],
798 },
799 &RecursionImplWomPlonkElementLayout {
800 addr: &Reg { offset: 25 },
801 data: &[
802 &Reg { offset: 26 },
803 &Reg { offset: 27 },
804 &Reg { offset: 28 },
805 &Reg { offset: 29 },
806 ],
807 },
808 &RecursionImplWomPlonkElementLayout {
809 addr: &Reg { offset: 30 },
810 data: &[
811 &Reg { offset: 31 },
812 &Reg { offset: 32 },
813 &Reg { offset: 33 },
814 &Reg { offset: 34 },
815 ],
816 },
817 ],
818 },
819 sha_fini: &RecursionShaCycleLayout {
820 a_carry_hi: &Reg { offset: 6 },
821 a_carry_low: &Reg { offset: 5 },
822 e_carry_high: &Reg { offset: 8 },
823 e_carry_low: &Reg { offset: 7 },
824 w_carry_high: &Reg { offset: 10 },
825 w_carry_low: &Reg { offset: 9 },
826 io0: &RecursionImplWomPlonkElementLayout {
827 addr: &Reg { offset: 11 },
828 data: &[
829 &Reg { offset: 12 },
830 &Reg { offset: 13 },
831 &Reg { offset: 14 },
832 &Reg { offset: 15 },
833 ],
834 },
835 io1: &RecursionImplWomPlonkElementLayout {
836 addr: &Reg { offset: 16 },
837 data: &[
838 &Reg { offset: 17 },
839 &Reg { offset: 18 },
840 &Reg { offset: 19 },
841 &Reg { offset: 20 },
842 ],
843 },
844 a: &[
845 &Reg { offset: 26 },
846 &Reg { offset: 27 },
847 &Reg { offset: 28 },
848 &Reg { offset: 29 },
849 &Reg { offset: 30 },
850 &Reg { offset: 31 },
851 &Reg { offset: 32 },
852 &Reg { offset: 33 },
853 &Reg { offset: 34 },
854 &Reg { offset: 35 },
855 &Reg { offset: 36 },
856 &Reg { offset: 37 },
857 &Reg { offset: 38 },
858 &Reg { offset: 39 },
859 &Reg { offset: 40 },
860 &Reg { offset: 41 },
861 &Reg { offset: 42 },
862 &Reg { offset: 43 },
863 &Reg { offset: 44 },
864 &Reg { offset: 45 },
865 &Reg { offset: 46 },
866 &Reg { offset: 47 },
867 &Reg { offset: 48 },
868 &Reg { offset: 49 },
869 &Reg { offset: 50 },
870 &Reg { offset: 51 },
871 &Reg { offset: 52 },
872 &Reg { offset: 53 },
873 &Reg { offset: 54 },
874 &Reg { offset: 55 },
875 &Reg { offset: 56 },
876 &Reg { offset: 57 },
877 ],
878 a_raw: &[&Reg { offset: 58 }, &Reg { offset: 59 }],
879 e: &[
880 &Reg { offset: 60 },
881 &Reg { offset: 61 },
882 &Reg { offset: 62 },
883 &Reg { offset: 63 },
884 &Reg { offset: 64 },
885 &Reg { offset: 65 },
886 &Reg { offset: 66 },
887 &Reg { offset: 67 },
888 &Reg { offset: 68 },
889 &Reg { offset: 69 },
890 &Reg { offset: 70 },
891 &Reg { offset: 71 },
892 &Reg { offset: 72 },
893 &Reg { offset: 73 },
894 &Reg { offset: 74 },
895 &Reg { offset: 75 },
896 &Reg { offset: 76 },
897 &Reg { offset: 77 },
898 &Reg { offset: 78 },
899 &Reg { offset: 79 },
900 &Reg { offset: 80 },
901 &Reg { offset: 81 },
902 &Reg { offset: 82 },
903 &Reg { offset: 83 },
904 &Reg { offset: 84 },
905 &Reg { offset: 85 },
906 &Reg { offset: 86 },
907 &Reg { offset: 87 },
908 &Reg { offset: 88 },
909 &Reg { offset: 89 },
910 &Reg { offset: 90 },
911 &Reg { offset: 91 },
912 ],
913 e_raw: &[&Reg { offset: 92 }, &Reg { offset: 93 }],
914 w: &[
915 &Reg { offset: 94 },
916 &Reg { offset: 95 },
917 &Reg { offset: 96 },
918 &Reg { offset: 97 },
919 &Reg { offset: 98 },
920 &Reg { offset: 99 },
921 &Reg { offset: 100 },
922 &Reg { offset: 101 },
923 &Reg { offset: 102 },
924 &Reg { offset: 103 },
925 &Reg { offset: 104 },
926 &Reg { offset: 105 },
927 &Reg { offset: 106 },
928 &Reg { offset: 107 },
929 &Reg { offset: 108 },
930 &Reg { offset: 109 },
931 &Reg { offset: 110 },
932 &Reg { offset: 111 },
933 &Reg { offset: 112 },
934 &Reg { offset: 113 },
935 &Reg { offset: 114 },
936 &Reg { offset: 115 },
937 &Reg { offset: 116 },
938 &Reg { offset: 117 },
939 &Reg { offset: 118 },
940 &Reg { offset: 119 },
941 &Reg { offset: 120 },
942 &Reg { offset: 121 },
943 &Reg { offset: 122 },
944 &Reg { offset: 123 },
945 &Reg { offset: 124 },
946 &Reg { offset: 125 },
947 ],
948 w_raw: &[&Reg { offset: 126 }, &Reg { offset: 127 }],
949 },
950 sha_init: &RecursionShaCycleLayout {
951 a_carry_hi: &Reg { offset: 6 },
952 a_carry_low: &Reg { offset: 5 },
953 e_carry_high: &Reg { offset: 8 },
954 e_carry_low: &Reg { offset: 7 },
955 w_carry_high: &Reg { offset: 10 },
956 w_carry_low: &Reg { offset: 9 },
957 io0: &RecursionImplWomPlonkElementLayout {
958 addr: &Reg { offset: 11 },
959 data: &[
960 &Reg { offset: 12 },
961 &Reg { offset: 13 },
962 &Reg { offset: 14 },
963 &Reg { offset: 15 },
964 ],
965 },
966 io1: &RecursionImplWomPlonkElementLayout {
967 addr: &Reg { offset: 16 },
968 data: &[
969 &Reg { offset: 17 },
970 &Reg { offset: 18 },
971 &Reg { offset: 19 },
972 &Reg { offset: 20 },
973 ],
974 },
975 a: &[
976 &Reg { offset: 26 },
977 &Reg { offset: 27 },
978 &Reg { offset: 28 },
979 &Reg { offset: 29 },
980 &Reg { offset: 30 },
981 &Reg { offset: 31 },
982 &Reg { offset: 32 },
983 &Reg { offset: 33 },
984 &Reg { offset: 34 },
985 &Reg { offset: 35 },
986 &Reg { offset: 36 },
987 &Reg { offset: 37 },
988 &Reg { offset: 38 },
989 &Reg { offset: 39 },
990 &Reg { offset: 40 },
991 &Reg { offset: 41 },
992 &Reg { offset: 42 },
993 &Reg { offset: 43 },
994 &Reg { offset: 44 },
995 &Reg { offset: 45 },
996 &Reg { offset: 46 },
997 &Reg { offset: 47 },
998 &Reg { offset: 48 },
999 &Reg { offset: 49 },
1000 &Reg { offset: 50 },
1001 &Reg { offset: 51 },
1002 &Reg { offset: 52 },
1003 &Reg { offset: 53 },
1004 &Reg { offset: 54 },
1005 &Reg { offset: 55 },
1006 &Reg { offset: 56 },
1007 &Reg { offset: 57 },
1008 ],
1009 a_raw: &[&Reg { offset: 58 }, &Reg { offset: 59 }],
1010 e: &[
1011 &Reg { offset: 60 },
1012 &Reg { offset: 61 },
1013 &Reg { offset: 62 },
1014 &Reg { offset: 63 },
1015 &Reg { offset: 64 },
1016 &Reg { offset: 65 },
1017 &Reg { offset: 66 },
1018 &Reg { offset: 67 },
1019 &Reg { offset: 68 },
1020 &Reg { offset: 69 },
1021 &Reg { offset: 70 },
1022 &Reg { offset: 71 },
1023 &Reg { offset: 72 },
1024 &Reg { offset: 73 },
1025 &Reg { offset: 74 },
1026 &Reg { offset: 75 },
1027 &Reg { offset: 76 },
1028 &Reg { offset: 77 },
1029 &Reg { offset: 78 },
1030 &Reg { offset: 79 },
1031 &Reg { offset: 80 },
1032 &Reg { offset: 81 },
1033 &Reg { offset: 82 },
1034 &Reg { offset: 83 },
1035 &Reg { offset: 84 },
1036 &Reg { offset: 85 },
1037 &Reg { offset: 86 },
1038 &Reg { offset: 87 },
1039 &Reg { offset: 88 },
1040 &Reg { offset: 89 },
1041 &Reg { offset: 90 },
1042 &Reg { offset: 91 },
1043 ],
1044 e_raw: &[&Reg { offset: 92 }, &Reg { offset: 93 }],
1045 w: &[
1046 &Reg { offset: 94 },
1047 &Reg { offset: 95 },
1048 &Reg { offset: 96 },
1049 &Reg { offset: 97 },
1050 &Reg { offset: 98 },
1051 &Reg { offset: 99 },
1052 &Reg { offset: 100 },
1053 &Reg { offset: 101 },
1054 &Reg { offset: 102 },
1055 &Reg { offset: 103 },
1056 &Reg { offset: 104 },
1057 &Reg { offset: 105 },
1058 &Reg { offset: 106 },
1059 &Reg { offset: 107 },
1060 &Reg { offset: 108 },
1061 &Reg { offset: 109 },
1062 &Reg { offset: 110 },
1063 &Reg { offset: 111 },
1064 &Reg { offset: 112 },
1065 &Reg { offset: 113 },
1066 &Reg { offset: 114 },
1067 &Reg { offset: 115 },
1068 &Reg { offset: 116 },
1069 &Reg { offset: 117 },
1070 &Reg { offset: 118 },
1071 &Reg { offset: 119 },
1072 &Reg { offset: 120 },
1073 &Reg { offset: 121 },
1074 &Reg { offset: 122 },
1075 &Reg { offset: 123 },
1076 &Reg { offset: 124 },
1077 &Reg { offset: 125 },
1078 ],
1079 w_raw: &[&Reg { offset: 126 }, &Reg { offset: 127 }],
1080 },
1081 sha_load: &RecursionShaCycleLayout {
1082 a_carry_hi: &Reg { offset: 6 },
1083 a_carry_low: &Reg { offset: 5 },
1084 e_carry_high: &Reg { offset: 8 },
1085 e_carry_low: &Reg { offset: 7 },
1086 w_carry_high: &Reg { offset: 10 },
1087 w_carry_low: &Reg { offset: 9 },
1088 io0: &RecursionImplWomPlonkElementLayout {
1089 addr: &Reg { offset: 11 },
1090 data: &[
1091 &Reg { offset: 12 },
1092 &Reg { offset: 13 },
1093 &Reg { offset: 14 },
1094 &Reg { offset: 15 },
1095 ],
1096 },
1097 io1: &RecursionImplWomPlonkElementLayout {
1098 addr: &Reg { offset: 16 },
1099 data: &[
1100 &Reg { offset: 17 },
1101 &Reg { offset: 18 },
1102 &Reg { offset: 19 },
1103 &Reg { offset: 20 },
1104 ],
1105 },
1106 a: &[
1107 &Reg { offset: 26 },
1108 &Reg { offset: 27 },
1109 &Reg { offset: 28 },
1110 &Reg { offset: 29 },
1111 &Reg { offset: 30 },
1112 &Reg { offset: 31 },
1113 &Reg { offset: 32 },
1114 &Reg { offset: 33 },
1115 &Reg { offset: 34 },
1116 &Reg { offset: 35 },
1117 &Reg { offset: 36 },
1118 &Reg { offset: 37 },
1119 &Reg { offset: 38 },
1120 &Reg { offset: 39 },
1121 &Reg { offset: 40 },
1122 &Reg { offset: 41 },
1123 &Reg { offset: 42 },
1124 &Reg { offset: 43 },
1125 &Reg { offset: 44 },
1126 &Reg { offset: 45 },
1127 &Reg { offset: 46 },
1128 &Reg { offset: 47 },
1129 &Reg { offset: 48 },
1130 &Reg { offset: 49 },
1131 &Reg { offset: 50 },
1132 &Reg { offset: 51 },
1133 &Reg { offset: 52 },
1134 &Reg { offset: 53 },
1135 &Reg { offset: 54 },
1136 &Reg { offset: 55 },
1137 &Reg { offset: 56 },
1138 &Reg { offset: 57 },
1139 ],
1140 a_raw: &[&Reg { offset: 58 }, &Reg { offset: 59 }],
1141 e: &[
1142 &Reg { offset: 60 },
1143 &Reg { offset: 61 },
1144 &Reg { offset: 62 },
1145 &Reg { offset: 63 },
1146 &Reg { offset: 64 },
1147 &Reg { offset: 65 },
1148 &Reg { offset: 66 },
1149 &Reg { offset: 67 },
1150 &Reg { offset: 68 },
1151 &Reg { offset: 69 },
1152 &Reg { offset: 70 },
1153 &Reg { offset: 71 },
1154 &Reg { offset: 72 },
1155 &Reg { offset: 73 },
1156 &Reg { offset: 74 },
1157 &Reg { offset: 75 },
1158 &Reg { offset: 76 },
1159 &Reg { offset: 77 },
1160 &Reg { offset: 78 },
1161 &Reg { offset: 79 },
1162 &Reg { offset: 80 },
1163 &Reg { offset: 81 },
1164 &Reg { offset: 82 },
1165 &Reg { offset: 83 },
1166 &Reg { offset: 84 },
1167 &Reg { offset: 85 },
1168 &Reg { offset: 86 },
1169 &Reg { offset: 87 },
1170 &Reg { offset: 88 },
1171 &Reg { offset: 89 },
1172 &Reg { offset: 90 },
1173 &Reg { offset: 91 },
1174 ],
1175 e_raw: &[&Reg { offset: 92 }, &Reg { offset: 93 }],
1176 w: &[
1177 &Reg { offset: 94 },
1178 &Reg { offset: 95 },
1179 &Reg { offset: 96 },
1180 &Reg { offset: 97 },
1181 &Reg { offset: 98 },
1182 &Reg { offset: 99 },
1183 &Reg { offset: 100 },
1184 &Reg { offset: 101 },
1185 &Reg { offset: 102 },
1186 &Reg { offset: 103 },
1187 &Reg { offset: 104 },
1188 &Reg { offset: 105 },
1189 &Reg { offset: 106 },
1190 &Reg { offset: 107 },
1191 &Reg { offset: 108 },
1192 &Reg { offset: 109 },
1193 &Reg { offset: 110 },
1194 &Reg { offset: 111 },
1195 &Reg { offset: 112 },
1196 &Reg { offset: 113 },
1197 &Reg { offset: 114 },
1198 &Reg { offset: 115 },
1199 &Reg { offset: 116 },
1200 &Reg { offset: 117 },
1201 &Reg { offset: 118 },
1202 &Reg { offset: 119 },
1203 &Reg { offset: 120 },
1204 &Reg { offset: 121 },
1205 &Reg { offset: 122 },
1206 &Reg { offset: 123 },
1207 &Reg { offset: 124 },
1208 &Reg { offset: 125 },
1209 ],
1210 w_raw: &[&Reg { offset: 126 }, &Reg { offset: 127 }],
1211 },
1212 sha_mix: &RecursionShaCycleLayout {
1213 a_carry_hi: &Reg { offset: 6 },
1214 a_carry_low: &Reg { offset: 5 },
1215 e_carry_high: &Reg { offset: 8 },
1216 e_carry_low: &Reg { offset: 7 },
1217 w_carry_high: &Reg { offset: 10 },
1218 w_carry_low: &Reg { offset: 9 },
1219 io0: &RecursionImplWomPlonkElementLayout {
1220 addr: &Reg { offset: 11 },
1221 data: &[
1222 &Reg { offset: 12 },
1223 &Reg { offset: 13 },
1224 &Reg { offset: 14 },
1225 &Reg { offset: 15 },
1226 ],
1227 },
1228 io1: &RecursionImplWomPlonkElementLayout {
1229 addr: &Reg { offset: 16 },
1230 data: &[
1231 &Reg { offset: 17 },
1232 &Reg { offset: 18 },
1233 &Reg { offset: 19 },
1234 &Reg { offset: 20 },
1235 ],
1236 },
1237 a: &[
1238 &Reg { offset: 26 },
1239 &Reg { offset: 27 },
1240 &Reg { offset: 28 },
1241 &Reg { offset: 29 },
1242 &Reg { offset: 30 },
1243 &Reg { offset: 31 },
1244 &Reg { offset: 32 },
1245 &Reg { offset: 33 },
1246 &Reg { offset: 34 },
1247 &Reg { offset: 35 },
1248 &Reg { offset: 36 },
1249 &Reg { offset: 37 },
1250 &Reg { offset: 38 },
1251 &Reg { offset: 39 },
1252 &Reg { offset: 40 },
1253 &Reg { offset: 41 },
1254 &Reg { offset: 42 },
1255 &Reg { offset: 43 },
1256 &Reg { offset: 44 },
1257 &Reg { offset: 45 },
1258 &Reg { offset: 46 },
1259 &Reg { offset: 47 },
1260 &Reg { offset: 48 },
1261 &Reg { offset: 49 },
1262 &Reg { offset: 50 },
1263 &Reg { offset: 51 },
1264 &Reg { offset: 52 },
1265 &Reg { offset: 53 },
1266 &Reg { offset: 54 },
1267 &Reg { offset: 55 },
1268 &Reg { offset: 56 },
1269 &Reg { offset: 57 },
1270 ],
1271 a_raw: &[&Reg { offset: 58 }, &Reg { offset: 59 }],
1272 e: &[
1273 &Reg { offset: 60 },
1274 &Reg { offset: 61 },
1275 &Reg { offset: 62 },
1276 &Reg { offset: 63 },
1277 &Reg { offset: 64 },
1278 &Reg { offset: 65 },
1279 &Reg { offset: 66 },
1280 &Reg { offset: 67 },
1281 &Reg { offset: 68 },
1282 &Reg { offset: 69 },
1283 &Reg { offset: 70 },
1284 &Reg { offset: 71 },
1285 &Reg { offset: 72 },
1286 &Reg { offset: 73 },
1287 &Reg { offset: 74 },
1288 &Reg { offset: 75 },
1289 &Reg { offset: 76 },
1290 &Reg { offset: 77 },
1291 &Reg { offset: 78 },
1292 &Reg { offset: 79 },
1293 &Reg { offset: 80 },
1294 &Reg { offset: 81 },
1295 &Reg { offset: 82 },
1296 &Reg { offset: 83 },
1297 &Reg { offset: 84 },
1298 &Reg { offset: 85 },
1299 &Reg { offset: 86 },
1300 &Reg { offset: 87 },
1301 &Reg { offset: 88 },
1302 &Reg { offset: 89 },
1303 &Reg { offset: 90 },
1304 &Reg { offset: 91 },
1305 ],
1306 e_raw: &[&Reg { offset: 92 }, &Reg { offset: 93 }],
1307 w: &[
1308 &Reg { offset: 94 },
1309 &Reg { offset: 95 },
1310 &Reg { offset: 96 },
1311 &Reg { offset: 97 },
1312 &Reg { offset: 98 },
1313 &Reg { offset: 99 },
1314 &Reg { offset: 100 },
1315 &Reg { offset: 101 },
1316 &Reg { offset: 102 },
1317 &Reg { offset: 103 },
1318 &Reg { offset: 104 },
1319 &Reg { offset: 105 },
1320 &Reg { offset: 106 },
1321 &Reg { offset: 107 },
1322 &Reg { offset: 108 },
1323 &Reg { offset: 109 },
1324 &Reg { offset: 110 },
1325 &Reg { offset: 111 },
1326 &Reg { offset: 112 },
1327 &Reg { offset: 113 },
1328 &Reg { offset: 114 },
1329 &Reg { offset: 115 },
1330 &Reg { offset: 116 },
1331 &Reg { offset: 117 },
1332 &Reg { offset: 118 },
1333 &Reg { offset: 119 },
1334 &Reg { offset: 120 },
1335 &Reg { offset: 121 },
1336 &Reg { offset: 122 },
1337 &Reg { offset: 123 },
1338 &Reg { offset: 124 },
1339 &Reg { offset: 125 },
1340 ],
1341 w_raw: &[&Reg { offset: 126 }, &Reg { offset: 127 }],
1342 },
1343 },
1344 micro_ops: &[
1345 &RecursionMicroOpLayout {
1346 extra: &Reg { offset: 101 },
1347 decode: &OneHot4Layout {
1348 add: &Reg { offset: 91 },
1349 constop: &Reg { offset: 90 },
1350 eq: &Reg { offset: 95 },
1351 extract: &Reg { offset: 100 },
1352 inv: &Reg { offset: 94 },
1353 mix_rng: &Reg { offset: 98 },
1354 mul: &Reg { offset: 93 },
1355 read_iop_body: &Reg { offset: 97 },
1356 read_iop_header: &Reg { offset: 96 },
1357 select: &Reg { offset: 99 },
1358 sub: &Reg { offset: 92 },
1359 },
1360 in0: &RecursionImplWomPlonkElementLayout {
1361 addr: &Reg { offset: 5 },
1362 data: &[
1363 &Reg { offset: 6 },
1364 &Reg { offset: 7 },
1365 &Reg { offset: 8 },
1366 &Reg { offset: 9 },
1367 ],
1368 },
1369 in1: &RecursionImplWomPlonkElementLayout {
1370 addr: &Reg { offset: 10 },
1371 data: &[
1372 &Reg { offset: 11 },
1373 &Reg { offset: 12 },
1374 &Reg { offset: 13 },
1375 &Reg { offset: 14 },
1376 ],
1377 },
1378 out: &RecursionImplWomPlonkElementLayout {
1379 addr: &Reg { offset: 15 },
1380 data: &[
1381 &Reg { offset: 16 },
1382 &Reg { offset: 17 },
1383 &Reg { offset: 18 },
1384 &Reg { offset: 19 },
1385 ],
1386 },
1387 },
1388 &RecursionMicroOpLayout {
1389 extra: &Reg { offset: 113 },
1390 decode: &OneHot4Layout {
1391 add: &Reg { offset: 103 },
1392 constop: &Reg { offset: 102 },
1393 eq: &Reg { offset: 107 },
1394 extract: &Reg { offset: 112 },
1395 inv: &Reg { offset: 106 },
1396 mix_rng: &Reg { offset: 110 },
1397 mul: &Reg { offset: 105 },
1398 read_iop_body: &Reg { offset: 109 },
1399 read_iop_header: &Reg { offset: 108 },
1400 select: &Reg { offset: 111 },
1401 sub: &Reg { offset: 104 },
1402 },
1403 in0: &RecursionImplWomPlonkElementLayout {
1404 addr: &Reg { offset: 20 },
1405 data: &[
1406 &Reg { offset: 21 },
1407 &Reg { offset: 22 },
1408 &Reg { offset: 23 },
1409 &Reg { offset: 24 },
1410 ],
1411 },
1412 in1: &RecursionImplWomPlonkElementLayout {
1413 addr: &Reg { offset: 25 },
1414 data: &[
1415 &Reg { offset: 26 },
1416 &Reg { offset: 27 },
1417 &Reg { offset: 28 },
1418 &Reg { offset: 29 },
1419 ],
1420 },
1421 out: &RecursionImplWomPlonkElementLayout {
1422 addr: &Reg { offset: 30 },
1423 data: &[
1424 &Reg { offset: 31 },
1425 &Reg { offset: 32 },
1426 &Reg { offset: 33 },
1427 &Reg { offset: 34 },
1428 ],
1429 },
1430 },
1431 &RecursionMicroOpLayout {
1432 extra: &Reg { offset: 125 },
1433 decode: &OneHot4Layout {
1434 add: &Reg { offset: 115 },
1435 constop: &Reg { offset: 114 },
1436 eq: &Reg { offset: 119 },
1437 extract: &Reg { offset: 124 },
1438 inv: &Reg { offset: 118 },
1439 mix_rng: &Reg { offset: 122 },
1440 mul: &Reg { offset: 117 },
1441 read_iop_body: &Reg { offset: 121 },
1442 read_iop_header: &Reg { offset: 120 },
1443 select: &Reg { offset: 123 },
1444 sub: &Reg { offset: 116 },
1445 },
1446 in0: &RecursionImplWomPlonkElementLayout {
1447 addr: &Reg { offset: 35 },
1448 data: &[
1449 &Reg { offset: 36 },
1450 &Reg { offset: 37 },
1451 &Reg { offset: 38 },
1452 &Reg { offset: 39 },
1453 ],
1454 },
1455 in1: &RecursionImplWomPlonkElementLayout {
1456 addr: &Reg { offset: 40 },
1457 data: &[
1458 &Reg { offset: 41 },
1459 &Reg { offset: 42 },
1460 &Reg { offset: 43 },
1461 &Reg { offset: 44 },
1462 ],
1463 },
1464 out: &RecursionImplWomPlonkElementLayout {
1465 addr: &Reg { offset: 45 },
1466 data: &[
1467 &Reg { offset: 46 },
1468 &Reg { offset: 47 },
1469 &Reg { offset: 48 },
1470 &Reg { offset: 49 },
1471 ],
1472 },
1473 },
1474 ],
1475};
1476pub const OUT_LAYOUT: &Reg32LayoutArray = &[
1477 &Reg { offset: 0 },
1478 &Reg { offset: 1 },
1479 &Reg { offset: 2 },
1480 &Reg { offset: 3 },
1481 &Reg { offset: 4 },
1482 &Reg { offset: 5 },
1483 &Reg { offset: 6 },
1484 &Reg { offset: 7 },
1485 &Reg { offset: 8 },
1486 &Reg { offset: 9 },
1487 &Reg { offset: 10 },
1488 &Reg { offset: 11 },
1489 &Reg { offset: 12 },
1490 &Reg { offset: 13 },
1491 &Reg { offset: 14 },
1492 &Reg { offset: 15 },
1493 &Reg { offset: 16 },
1494 &Reg { offset: 17 },
1495 &Reg { offset: 18 },
1496 &Reg { offset: 19 },
1497 &Reg { offset: 20 },
1498 &Reg { offset: 21 },
1499 &Reg { offset: 22 },
1500 &Reg { offset: 23 },
1501 &Reg { offset: 24 },
1502 &Reg { offset: 25 },
1503 &Reg { offset: 26 },
1504 &Reg { offset: 27 },
1505 &Reg { offset: 28 },
1506 &Reg { offset: 29 },
1507 &Reg { offset: 30 },
1508 &Reg { offset: 31 },
1509];