risc0_circuit_recursion/
layout.rs.inc

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];