diff --git a/stwo_cairo_prover/Cargo.lock b/stwo_cairo_prover/Cargo.lock index c883a547..09a55463 100644 --- a/stwo_cairo_prover/Cargo.lock +++ b/stwo_cairo_prover/Cargo.lock @@ -1510,7 +1510,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "stwo-air-utils" version = "0.1.1" -source = "git+https://github.com/starkware-libs/stwo?rev=af5475cb#af5475cb946a29de7d04dfa8c77a17034f888df4" +source = "git+https://github.com/starkware-libs/stwo?rev=29d124e#29d124e0a1dbedbe054557ad115151741dcebce2" dependencies = [ "bytemuck", "itertools 0.12.1", @@ -1522,7 +1522,7 @@ dependencies = [ [[package]] name = "stwo-air-utils-derive" version = "0.1.0" -source = "git+https://github.com/starkware-libs/stwo?rev=af5475cb#af5475cb946a29de7d04dfa8c77a17034f888df4" +source = "git+https://github.com/starkware-libs/stwo?rev=29d124e#29d124e0a1dbedbe054557ad115151741dcebce2" dependencies = [ "itertools 0.13.0", "proc-macro2", @@ -1551,7 +1551,7 @@ dependencies = [ [[package]] name = "stwo-prover" version = "0.1.1" -source = "git+https://github.com/starkware-libs/stwo?rev=af5475cb#af5475cb946a29de7d04dfa8c77a17034f888df4" +source = "git+https://github.com/starkware-libs/stwo?rev=29d124e#29d124e0a1dbedbe054557ad115151741dcebce2" dependencies = [ "blake2", "blake3", diff --git a/stwo_cairo_prover/Cargo.toml b/stwo_cairo_prover/Cargo.toml index b5e5f2d4..eb096c5d 100644 --- a/stwo_cairo_prover/Cargo.toml +++ b/stwo_cairo_prover/Cargo.toml @@ -36,7 +36,7 @@ serde_json = "1.0.1" stwo_cairo_prover = { path = "crates/prover", version = "~0.1.0" } stwo_cairo_utils = { path = "crates/utils", version = "~0.1.0" } # TODO(ShaharS): take stwo version from the source repository. -stwo-prover = { git = "https://github.com/starkware-libs/stwo", rev = "af5475cb", features = [ +stwo-prover = { git = "https://github.com/starkware-libs/stwo", rev = "29d124e", features = [ "parallel", ], default-features = false } thiserror = { version = "2.0.10", default-features = false } diff --git a/stwo_cairo_prover/crates/prover/Cargo.toml b/stwo_cairo_prover/crates/prover/Cargo.toml index 74e3036b..e23f7225 100644 --- a/stwo_cairo_prover/crates/prover/Cargo.toml +++ b/stwo_cairo_prover/crates/prover/Cargo.toml @@ -8,8 +8,8 @@ slow-tests = [] [dependencies] air_structs_derive = { path = "../air_structs_derive" } -stwo-air-utils-derive = { git = "https://github.com/starkware-libs/stwo", rev = "af5475cb" } -stwo-air-utils = { git = "https://github.com/starkware-libs/stwo", rev = "af5475cb" } +stwo-air-utils-derive = { git = "https://github.com/starkware-libs/stwo", rev = "29d124e" } +stwo-air-utils = { git = "https://github.com/starkware-libs/stwo", rev = "29d124e" } bytemuck.workspace = true cairo-lang-casm.workspace = true cairo-vm.workspace = true diff --git a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode/prover.rs index 26829c2e..da0d7c05 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -165,159 +130,153 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |( - (((row_index, row), add_ap_opcode_input), lookup_data), - mut sub_components_inputs, - )| { - let input_tmp_c921e_0 = add_ap_opcode_input; - let input_pc_col0 = input_tmp_c921e_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_c921e_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_c921e_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), add_ap_opcode_input), lookup_data)| { + let input_tmp_c921e_0 = add_ap_opcode_input; + let input_pc_col0 = input_tmp_c921e_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_c921e_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_c921e_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_c921e_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_c921e_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c921e_1); - let offset2_tmp_c921e_3 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c921e_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c921e_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c921e_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col3 = offset2_tmp_c921e_3.as_m31(); - *row[3] = offset2_col3; - for (i, &input) in ( - input_pc_col0, - [M31_32767, M31_32767, offset2_col3], - [ - M31_1, M31_1, M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, M31_0, M31_0, - M31_1, M31_0, M31_0, M31_0, M31_0, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32767, - M31_32767, - offset2_col3, - M31_1, - M31_1, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - ]; + let memory_address_to_id_value_tmp_c921e_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_c921e_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c921e_1); + let offset2_tmp_c921e_3 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c921e_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c921e_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c921e_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col3 = offset2_tmp_c921e_3.as_m31(); + *row[3] = offset2_col3; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32767, M31_32767, offset2_col3], + [ + M31_1, M31_1, M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, M31_0, M31_0, M31_1, + M31_0, M31_0, M31_0, M31_0, + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32767, + M31_32767, + offset2_col3, + M31_1, + M31_1, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ]; - // Read Small. + // Read Small. - let memory_address_to_id_value_tmp_c921e_4 = memory_address_to_id_state - .deduce_output(((input_ap_col1) + ((offset2_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_c921e_5 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c921e_4); - let op1_id_col4 = memory_address_to_id_value_tmp_c921e_4; - *row[4] = op1_id_col4; - for (i, &input) in ((input_ap_col1) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [ - ((input_ap_col1) + ((offset2_col3) - (M31_32768))), - op1_id_col4, - ]; + let memory_address_to_id_value_tmp_c921e_4 = memory_address_to_id_state + .deduce_output(((input_ap_col1) + ((offset2_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_c921e_5 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c921e_4); + let op1_id_col4 = memory_address_to_id_value_tmp_c921e_4; + *row[4] = op1_id_col4; + let memory_address_to_id_inputs_0 = + ((input_ap_col1) + ((offset2_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((input_ap_col1) + ((offset2_col3) - (M31_32768))), + op1_id_col4, + ]; - // Cond Decode Small Sign. + // Cond Decode Small Sign. - let msb_tmp_c921e_6 = memory_id_to_big_value_tmp_c921e_5.get_m31(27).eq(M31_256); - let msb_col5 = msb_tmp_c921e_6.as_m31(); - *row[5] = msb_col5; - let mid_limbs_set_tmp_c921e_7 = - memory_id_to_big_value_tmp_c921e_5.get_m31(20).eq(M31_511); - let mid_limbs_set_col6 = mid_limbs_set_tmp_c921e_7.as_m31(); - *row[6] = mid_limbs_set_col6; + let msb_tmp_c921e_6 = memory_id_to_big_value_tmp_c921e_5.get_m31(27).eq(M31_256); + let msb_col5 = msb_tmp_c921e_6.as_m31(); + *row[5] = msb_col5; + let mid_limbs_set_tmp_c921e_7 = + memory_id_to_big_value_tmp_c921e_5.get_m31(20).eq(M31_511); + let mid_limbs_set_col6 = mid_limbs_set_tmp_c921e_7.as_m31(); + *row[6] = mid_limbs_set_col6; - let op1_limb_0_col7 = memory_id_to_big_value_tmp_c921e_5.get_m31(0); - *row[7] = op1_limb_0_col7; - let op1_limb_1_col8 = memory_id_to_big_value_tmp_c921e_5.get_m31(1); - *row[8] = op1_limb_1_col8; - let op1_limb_2_col9 = memory_id_to_big_value_tmp_c921e_5.get_m31(2); - *row[9] = op1_limb_2_col9; - for (i, &input) in op1_id_col4.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - op1_id_col4, - op1_limb_0_col7, - op1_limb_1_col8, - op1_limb_2_col9, - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - ((mid_limbs_set_col6) * (M31_511)), - (((M31_136) * (msb_col5)) - (mid_limbs_set_col6)), - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ((msb_col5) * (M31_256)), - ]; + let op1_limb_0_col7 = memory_id_to_big_value_tmp_c921e_5.get_m31(0); + *row[7] = op1_limb_0_col7; + let op1_limb_1_col8 = memory_id_to_big_value_tmp_c921e_5.get_m31(1); + *row[8] = op1_limb_1_col8; + let op1_limb_2_col9 = memory_id_to_big_value_tmp_c921e_5.get_m31(2); + *row[9] = op1_limb_2_col9; + let memory_id_to_big_inputs_0 = op1_id_col4.unpack(); + *lookup_data.memory_id_to_big_0 = [ + op1_id_col4, + op1_limb_0_col7, + op1_limb_1_col8, + op1_limb_2_col9, + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + ((mid_limbs_set_col6) * (M31_511)), + (((M31_136) * (msb_col5)) - (mid_limbs_set_col6)), + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ((msb_col5) * (M31_256)), + ]; - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_1)), - ((input_ap_col1) - + (((((op1_limb_0_col7) + ((op1_limb_1_col8) * (M31_512))) - + ((op1_limb_2_col9) * (M31_262144))) - - (msb_col5)) - - ((M31_134217728) * (mid_limbs_set_col6)))), - input_fp_col2, - ]; - }, - ); + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_1)), + ((input_ap_col1) + + (((((op1_limb_0_col7) + ((op1_limb_1_col8) * (M31_512))) + + ((op1_limb_2_col9) * (M31_262144))) + - (msb_col5)) + - ((M31_134217728) * (mid_limbs_set_col6)))), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + } + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_imm/prover.rs index 1232302d..94d146c7 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -162,12 +127,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), add_ap_opcode_imm_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), add_ap_opcode_imm_input), lookup_data)| { let input_tmp_f4f1f_0 = add_ap_opcode_imm_input; let input_pc_col0 = input_tmp_f4f1f_0.pc; *row[0] = input_pc_col0; @@ -182,7 +143,7 @@ fn write_trace_simd( memory_address_to_id_state.deduce_output(input_pc_col0); let memory_id_to_big_value_tmp_f4f1f_2 = memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_f4f1f_1); - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [M31_32767, M31_32767, M31_32769], [ @@ -190,12 +151,7 @@ fn write_trace_simd( M31_1, M31_0, M31_0, M31_0, M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, M31_32767, @@ -226,9 +182,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_f4f1f_3); let op1_id_col3 = memory_address_to_id_value_tmp_f4f1f_3; *row[3] = op1_id_col3; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_0 = [((input_pc_col0) + (M31_1)), op1_id_col3]; // Cond Decode Small Sign. @@ -247,9 +201,7 @@ fn write_trace_simd( *row[7] = op1_limb_1_col7; let op1_limb_2_col8 = memory_id_to_big_value_tmp_f4f1f_4.get_m31(2); *row[8] = op1_limb_2_col8; - for (i, &input) in op1_id_col3.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = op1_id_col3.unpack(); *lookup_data.memory_id_to_big_0 = [ op1_id_col3, op1_limb_0_col6, @@ -292,10 +244,24 @@ fn write_trace_simd( - ((M31_134217728) * (mid_limbs_set_col5)))), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_op_1_base_fp/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_op_1_base_fp/prover.rs index 2f36d091..c88d034a 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_op_1_base_fp/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_ap_opcode_op_1_base_fp/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -165,12 +130,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), add_ap_opcode_op_1_base_fp_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), add_ap_opcode_op_1_base_fp_input), lookup_data)| { let input_tmp_fc5da_0 = add_ap_opcode_op_1_base_fp_input; let input_pc_col0 = input_tmp_fc5da_0.pc; *row[0] = input_pc_col0; @@ -197,7 +158,7 @@ fn write_trace_simd( << (UInt16_13))); let offset2_col3 = offset2_tmp_fc5da_3.as_m31(); *row[3] = offset2_col3; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [M31_32767, M31_32767, offset2_col3], [ @@ -205,12 +166,7 @@ fn write_trace_simd( M31_1, M31_0, M31_0, M31_0, M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, M31_32767, @@ -241,13 +197,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_fc5da_4); let op1_id_col4 = memory_address_to_id_value_tmp_fc5da_4; *row[4] = op1_id_col4; - for (i, &input) in ((input_fp_col2) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((input_fp_col2) + ((offset2_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((input_fp_col2) + ((offset2_col3) - (M31_32768))), op1_id_col4, @@ -269,9 +220,7 @@ fn write_trace_simd( *row[8] = op1_limb_1_col8; let op1_limb_2_col9 = memory_id_to_big_value_tmp_fc5da_5.get_m31(2); *row[9] = op1_limb_2_col9; - for (i, &input) in op1_id_col4.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = op1_id_col4.unpack(); *lookup_data.memory_id_to_big_0 = [ op1_id_col4, op1_limb_0_col7, @@ -314,10 +263,24 @@ fn write_trace_simd( - ((M31_134217728) * (mid_limbs_set_col6)))), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_opcode/prover.rs index 51a40849..f7c17015 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -167,137 +132,97 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), add_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_3fa46_0 = add_opcode_input; - let input_pc_col0 = input_tmp_3fa46_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_3fa46_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_3fa46_0.fp; - *row[2] = input_fp_col2; - - // Decode Instruction. - - let memory_address_to_id_value_tmp_3fa46_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_3fa46_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_1); - let offset0_tmp_3fa46_3 = - ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(0))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(1), - )) & (UInt16_127)) - << (UInt16_9))); - let offset0_col3 = offset0_tmp_3fa46_3.as_m31(); - *row[3] = offset0_col3; - let offset1_tmp_3fa46_4 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(1))) - >> (UInt16_7)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(2), - )) << (UInt16_2))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(3), - )) & (UInt16_31)) - << (UInt16_11))); - let offset1_col4 = offset1_tmp_3fa46_4.as_m31(); - *row[4] = offset1_col4; - let offset2_tmp_3fa46_5 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col5 = offset2_tmp_3fa46_5.as_m31(); - *row[5] = offset2_col5; - let dst_base_fp_tmp_3fa46_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_0)) - & (UInt16_1)); - let dst_base_fp_col6 = dst_base_fp_tmp_3fa46_6.as_m31(); - *row[6] = dst_base_fp_col6; - let op0_base_fp_tmp_3fa46_7 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_1)) - & (UInt16_1)); - let op0_base_fp_col7 = op0_base_fp_tmp_3fa46_7.as_m31(); - *row[7] = op0_base_fp_col7; - let op1_base_fp_tmp_3fa46_8 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_3)) - & (UInt16_1)); - let op1_base_fp_col8 = op1_base_fp_tmp_3fa46_8.as_m31(); - *row[8] = op1_base_fp_col8; - let op1_base_ap_tmp_3fa46_9 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_4)) - & (UInt16_1)); - let op1_base_ap_col9 = op1_base_ap_tmp_3fa46_9.as_m31(); - *row[9] = op1_base_ap_col9; - let ap_update_add_1_tmp_3fa46_10 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_3fa46_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col10 = ap_update_add_1_tmp_3fa46_10.as_m31(); - *row[10] = ap_update_add_1_col10; - for (i, &input) in ( - input_pc_col0, - [offset0_col3, offset1_col4, offset2_col5], - [ - dst_base_fp_col6, - op0_base_fp_col7, - M31_0, - op1_base_fp_col8, - op1_base_ap_col9, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ap_update_add_1_col10, - M31_0, - M31_0, - M31_1, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - offset0_col3, - offset1_col4, - offset2_col5, + .for_each(|(((row_index, row), add_opcode_input), lookup_data)| { + let input_tmp_3fa46_0 = add_opcode_input; + let input_pc_col0 = input_tmp_3fa46_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_3fa46_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_3fa46_0.fp; + *row[2] = input_fp_col2; + + // Decode Instruction. + + let memory_address_to_id_value_tmp_3fa46_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_3fa46_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_1); + let offset0_tmp_3fa46_3 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_3fa46_3.as_m31(); + *row[3] = offset0_col3; + let offset1_tmp_3fa46_4 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_3fa46_4.as_m31(); + *row[4] = offset1_col4; + let offset2_tmp_3fa46_5 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col5 = offset2_tmp_3fa46_5.as_m31(); + *row[5] = offset2_col5; + let dst_base_fp_tmp_3fa46_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col6 = dst_base_fp_tmp_3fa46_6.as_m31(); + *row[6] = dst_base_fp_col6; + let op0_base_fp_tmp_3fa46_7 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col7 = op0_base_fp_tmp_3fa46_7.as_m31(); + *row[7] = op0_base_fp_col7; + let op1_base_fp_tmp_3fa46_8 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_3)) + & (UInt16_1)); + let op1_base_fp_col8 = op1_base_fp_tmp_3fa46_8.as_m31(); + *row[8] = op1_base_fp_col8; + let op1_base_ap_tmp_3fa46_9 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_4)) + & (UInt16_1)); + let op1_base_ap_col9 = op1_base_ap_tmp_3fa46_9.as_m31(); + *row[9] = op1_base_ap_col9; + let ap_update_add_1_tmp_3fa46_10 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_3fa46_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col10 = ap_update_add_1_tmp_3fa46_10.as_m31(); + *row[10] = ap_update_add_1_col10; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [offset0_col3, offset1_col4, offset2_col5], + [ dst_base_fp_col6, op0_base_fp_col7, M31_0, @@ -313,367 +238,386 @@ fn write_trace_simd( M31_0, M31_0, M31_1, - ]; - - let mem_dst_base_col11 = (((dst_base_fp_col6) * (input_fp_col2)) - + (((M31_1) - (dst_base_fp_col6)) * (input_ap_col1))); - *row[11] = mem_dst_base_col11; - let mem0_base_col12 = (((op0_base_fp_col7) * (input_fp_col2)) - + (((M31_1) - (op0_base_fp_col7)) * (input_ap_col1))); - *row[12] = mem0_base_col12; - let mem1_base_col13 = (((op1_base_fp_col8) * (input_fp_col2)) - + ((op1_base_ap_col9) * (input_ap_col1))); - *row[13] = mem1_base_col13; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_3fa46_11 = memory_address_to_id_state - .deduce_output(((mem_dst_base_col11) + ((offset0_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_3fa46_12 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_11); - let dst_id_col14 = memory_address_to_id_value_tmp_3fa46_11; - *row[14] = dst_id_col14; - for (i, &input) in ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + offset0_col3, + offset1_col4, + offset2_col5, + dst_base_fp_col6, + op0_base_fp_col7, + M31_0, + op1_base_fp_col8, + op1_base_ap_col9, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col10, + M31_0, + M31_0, + M31_1, + ]; + + let mem_dst_base_col11 = (((dst_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col6)) * (input_ap_col1))); + *row[11] = mem_dst_base_col11; + let mem0_base_col12 = (((op0_base_fp_col7) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col7)) * (input_ap_col1))); + *row[12] = mem0_base_col12; + let mem1_base_col13 = + (((op1_base_fp_col8) * (input_fp_col2)) + ((op1_base_ap_col9) * (input_ap_col1))); + *row[13] = mem1_base_col13; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_3fa46_11 = memory_address_to_id_state + .deduce_output(((mem_dst_base_col11) + ((offset0_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_3fa46_12 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_11); + let dst_id_col14 = memory_address_to_id_value_tmp_3fa46_11; + *row[14] = dst_id_col14; + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))), + dst_id_col14, + ]; + let dst_limb_0_col15 = memory_id_to_big_value_tmp_3fa46_12.get_m31(0); + *row[15] = dst_limb_0_col15; + let dst_limb_1_col16 = memory_id_to_big_value_tmp_3fa46_12.get_m31(1); + *row[16] = dst_limb_1_col16; + let dst_limb_2_col17 = memory_id_to_big_value_tmp_3fa46_12.get_m31(2); + *row[17] = dst_limb_2_col17; + let dst_limb_3_col18 = memory_id_to_big_value_tmp_3fa46_12.get_m31(3); + *row[18] = dst_limb_3_col18; + let dst_limb_4_col19 = memory_id_to_big_value_tmp_3fa46_12.get_m31(4); + *row[19] = dst_limb_4_col19; + let dst_limb_5_col20 = memory_id_to_big_value_tmp_3fa46_12.get_m31(5); + *row[20] = dst_limb_5_col20; + let dst_limb_6_col21 = memory_id_to_big_value_tmp_3fa46_12.get_m31(6); + *row[21] = dst_limb_6_col21; + let dst_limb_7_col22 = memory_id_to_big_value_tmp_3fa46_12.get_m31(7); + *row[22] = dst_limb_7_col22; + let dst_limb_8_col23 = memory_id_to_big_value_tmp_3fa46_12.get_m31(8); + *row[23] = dst_limb_8_col23; + let dst_limb_9_col24 = memory_id_to_big_value_tmp_3fa46_12.get_m31(9); + *row[24] = dst_limb_9_col24; + let dst_limb_10_col25 = memory_id_to_big_value_tmp_3fa46_12.get_m31(10); + *row[25] = dst_limb_10_col25; + let dst_limb_11_col26 = memory_id_to_big_value_tmp_3fa46_12.get_m31(11); + *row[26] = dst_limb_11_col26; + let dst_limb_12_col27 = memory_id_to_big_value_tmp_3fa46_12.get_m31(12); + *row[27] = dst_limb_12_col27; + let dst_limb_13_col28 = memory_id_to_big_value_tmp_3fa46_12.get_m31(13); + *row[28] = dst_limb_13_col28; + let dst_limb_14_col29 = memory_id_to_big_value_tmp_3fa46_12.get_m31(14); + *row[29] = dst_limb_14_col29; + let dst_limb_15_col30 = memory_id_to_big_value_tmp_3fa46_12.get_m31(15); + *row[30] = dst_limb_15_col30; + let dst_limb_16_col31 = memory_id_to_big_value_tmp_3fa46_12.get_m31(16); + *row[31] = dst_limb_16_col31; + let dst_limb_17_col32 = memory_id_to_big_value_tmp_3fa46_12.get_m31(17); + *row[32] = dst_limb_17_col32; + let dst_limb_18_col33 = memory_id_to_big_value_tmp_3fa46_12.get_m31(18); + *row[33] = dst_limb_18_col33; + let dst_limb_19_col34 = memory_id_to_big_value_tmp_3fa46_12.get_m31(19); + *row[34] = dst_limb_19_col34; + let dst_limb_20_col35 = memory_id_to_big_value_tmp_3fa46_12.get_m31(20); + *row[35] = dst_limb_20_col35; + let dst_limb_21_col36 = memory_id_to_big_value_tmp_3fa46_12.get_m31(21); + *row[36] = dst_limb_21_col36; + let dst_limb_22_col37 = memory_id_to_big_value_tmp_3fa46_12.get_m31(22); + *row[37] = dst_limb_22_col37; + let dst_limb_23_col38 = memory_id_to_big_value_tmp_3fa46_12.get_m31(23); + *row[38] = dst_limb_23_col38; + let dst_limb_24_col39 = memory_id_to_big_value_tmp_3fa46_12.get_m31(24); + *row[39] = dst_limb_24_col39; + let dst_limb_25_col40 = memory_id_to_big_value_tmp_3fa46_12.get_m31(25); + *row[40] = dst_limb_25_col40; + let dst_limb_26_col41 = memory_id_to_big_value_tmp_3fa46_12.get_m31(26); + *row[41] = dst_limb_26_col41; + let dst_limb_27_col42 = memory_id_to_big_value_tmp_3fa46_12.get_m31(27); + *row[42] = dst_limb_27_col42; + let memory_id_to_big_inputs_0 = dst_id_col14.unpack(); + *lookup_data.memory_id_to_big_0 = [ + dst_id_col14, + dst_limb_0_col15, + dst_limb_1_col16, + dst_limb_2_col17, + dst_limb_3_col18, + dst_limb_4_col19, + dst_limb_5_col20, + dst_limb_6_col21, + dst_limb_7_col22, + dst_limb_8_col23, + dst_limb_9_col24, + dst_limb_10_col25, + dst_limb_11_col26, + dst_limb_12_col27, + dst_limb_13_col28, + dst_limb_14_col29, + dst_limb_15_col30, + dst_limb_16_col31, + dst_limb_17_col32, + dst_limb_18_col33, + dst_limb_19_col34, + dst_limb_20_col35, + dst_limb_21_col36, + dst_limb_22_col37, + dst_limb_23_col38, + dst_limb_24_col39, + dst_limb_25_col40, + dst_limb_26_col41, + dst_limb_27_col42, + ]; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_3fa46_13 = memory_address_to_id_state + .deduce_output(((mem0_base_col12) + ((offset1_col4) - (M31_32768)))); + let memory_id_to_big_value_tmp_3fa46_14 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_13); + let op0_id_col43 = memory_address_to_id_value_tmp_3fa46_13; + *row[43] = op0_id_col43; + let memory_address_to_id_inputs_1 = + ((mem0_base_col12) + ((offset1_col4) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_1 = [ + ((mem0_base_col12) + ((offset1_col4) - (M31_32768))), + op0_id_col43, + ]; + let op0_limb_0_col44 = memory_id_to_big_value_tmp_3fa46_14.get_m31(0); + *row[44] = op0_limb_0_col44; + let op0_limb_1_col45 = memory_id_to_big_value_tmp_3fa46_14.get_m31(1); + *row[45] = op0_limb_1_col45; + let op0_limb_2_col46 = memory_id_to_big_value_tmp_3fa46_14.get_m31(2); + *row[46] = op0_limb_2_col46; + let op0_limb_3_col47 = memory_id_to_big_value_tmp_3fa46_14.get_m31(3); + *row[47] = op0_limb_3_col47; + let op0_limb_4_col48 = memory_id_to_big_value_tmp_3fa46_14.get_m31(4); + *row[48] = op0_limb_4_col48; + let op0_limb_5_col49 = memory_id_to_big_value_tmp_3fa46_14.get_m31(5); + *row[49] = op0_limb_5_col49; + let op0_limb_6_col50 = memory_id_to_big_value_tmp_3fa46_14.get_m31(6); + *row[50] = op0_limb_6_col50; + let op0_limb_7_col51 = memory_id_to_big_value_tmp_3fa46_14.get_m31(7); + *row[51] = op0_limb_7_col51; + let op0_limb_8_col52 = memory_id_to_big_value_tmp_3fa46_14.get_m31(8); + *row[52] = op0_limb_8_col52; + let op0_limb_9_col53 = memory_id_to_big_value_tmp_3fa46_14.get_m31(9); + *row[53] = op0_limb_9_col53; + let op0_limb_10_col54 = memory_id_to_big_value_tmp_3fa46_14.get_m31(10); + *row[54] = op0_limb_10_col54; + let op0_limb_11_col55 = memory_id_to_big_value_tmp_3fa46_14.get_m31(11); + *row[55] = op0_limb_11_col55; + let op0_limb_12_col56 = memory_id_to_big_value_tmp_3fa46_14.get_m31(12); + *row[56] = op0_limb_12_col56; + let op0_limb_13_col57 = memory_id_to_big_value_tmp_3fa46_14.get_m31(13); + *row[57] = op0_limb_13_col57; + let op0_limb_14_col58 = memory_id_to_big_value_tmp_3fa46_14.get_m31(14); + *row[58] = op0_limb_14_col58; + let op0_limb_15_col59 = memory_id_to_big_value_tmp_3fa46_14.get_m31(15); + *row[59] = op0_limb_15_col59; + let op0_limb_16_col60 = memory_id_to_big_value_tmp_3fa46_14.get_m31(16); + *row[60] = op0_limb_16_col60; + let op0_limb_17_col61 = memory_id_to_big_value_tmp_3fa46_14.get_m31(17); + *row[61] = op0_limb_17_col61; + let op0_limb_18_col62 = memory_id_to_big_value_tmp_3fa46_14.get_m31(18); + *row[62] = op0_limb_18_col62; + let op0_limb_19_col63 = memory_id_to_big_value_tmp_3fa46_14.get_m31(19); + *row[63] = op0_limb_19_col63; + let op0_limb_20_col64 = memory_id_to_big_value_tmp_3fa46_14.get_m31(20); + *row[64] = op0_limb_20_col64; + let op0_limb_21_col65 = memory_id_to_big_value_tmp_3fa46_14.get_m31(21); + *row[65] = op0_limb_21_col65; + let op0_limb_22_col66 = memory_id_to_big_value_tmp_3fa46_14.get_m31(22); + *row[66] = op0_limb_22_col66; + let op0_limb_23_col67 = memory_id_to_big_value_tmp_3fa46_14.get_m31(23); + *row[67] = op0_limb_23_col67; + let op0_limb_24_col68 = memory_id_to_big_value_tmp_3fa46_14.get_m31(24); + *row[68] = op0_limb_24_col68; + let op0_limb_25_col69 = memory_id_to_big_value_tmp_3fa46_14.get_m31(25); + *row[69] = op0_limb_25_col69; + let op0_limb_26_col70 = memory_id_to_big_value_tmp_3fa46_14.get_m31(26); + *row[70] = op0_limb_26_col70; + let op0_limb_27_col71 = memory_id_to_big_value_tmp_3fa46_14.get_m31(27); + *row[71] = op0_limb_27_col71; + let memory_id_to_big_inputs_1 = op0_id_col43.unpack(); + *lookup_data.memory_id_to_big_1 = [ + op0_id_col43, + op0_limb_0_col44, + op0_limb_1_col45, + op0_limb_2_col46, + op0_limb_3_col47, + op0_limb_4_col48, + op0_limb_5_col49, + op0_limb_6_col50, + op0_limb_7_col51, + op0_limb_8_col52, + op0_limb_9_col53, + op0_limb_10_col54, + op0_limb_11_col55, + op0_limb_12_col56, + op0_limb_13_col57, + op0_limb_14_col58, + op0_limb_15_col59, + op0_limb_16_col60, + op0_limb_17_col61, + op0_limb_18_col62, + op0_limb_19_col63, + op0_limb_20_col64, + op0_limb_21_col65, + op0_limb_22_col66, + op0_limb_23_col67, + op0_limb_24_col68, + op0_limb_25_col69, + op0_limb_26_col70, + op0_limb_27_col71, + ]; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_3fa46_15 = memory_address_to_id_state + .deduce_output(((mem1_base_col13) + ((offset2_col5) - (M31_32768)))); + let memory_id_to_big_value_tmp_3fa46_16 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_15); + let op1_id_col72 = memory_address_to_id_value_tmp_3fa46_15; + *row[72] = op1_id_col72; + let memory_address_to_id_inputs_2 = + ((mem1_base_col13) + ((offset2_col5) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_2 = [ + ((mem1_base_col13) + ((offset2_col5) - (M31_32768))), + op1_id_col72, + ]; + let op1_limb_0_col73 = memory_id_to_big_value_tmp_3fa46_16.get_m31(0); + *row[73] = op1_limb_0_col73; + let op1_limb_1_col74 = memory_id_to_big_value_tmp_3fa46_16.get_m31(1); + *row[74] = op1_limb_1_col74; + let op1_limb_2_col75 = memory_id_to_big_value_tmp_3fa46_16.get_m31(2); + *row[75] = op1_limb_2_col75; + let op1_limb_3_col76 = memory_id_to_big_value_tmp_3fa46_16.get_m31(3); + *row[76] = op1_limb_3_col76; + let op1_limb_4_col77 = memory_id_to_big_value_tmp_3fa46_16.get_m31(4); + *row[77] = op1_limb_4_col77; + let op1_limb_5_col78 = memory_id_to_big_value_tmp_3fa46_16.get_m31(5); + *row[78] = op1_limb_5_col78; + let op1_limb_6_col79 = memory_id_to_big_value_tmp_3fa46_16.get_m31(6); + *row[79] = op1_limb_6_col79; + let op1_limb_7_col80 = memory_id_to_big_value_tmp_3fa46_16.get_m31(7); + *row[80] = op1_limb_7_col80; + let op1_limb_8_col81 = memory_id_to_big_value_tmp_3fa46_16.get_m31(8); + *row[81] = op1_limb_8_col81; + let op1_limb_9_col82 = memory_id_to_big_value_tmp_3fa46_16.get_m31(9); + *row[82] = op1_limb_9_col82; + let op1_limb_10_col83 = memory_id_to_big_value_tmp_3fa46_16.get_m31(10); + *row[83] = op1_limb_10_col83; + let op1_limb_11_col84 = memory_id_to_big_value_tmp_3fa46_16.get_m31(11); + *row[84] = op1_limb_11_col84; + let op1_limb_12_col85 = memory_id_to_big_value_tmp_3fa46_16.get_m31(12); + *row[85] = op1_limb_12_col85; + let op1_limb_13_col86 = memory_id_to_big_value_tmp_3fa46_16.get_m31(13); + *row[86] = op1_limb_13_col86; + let op1_limb_14_col87 = memory_id_to_big_value_tmp_3fa46_16.get_m31(14); + *row[87] = op1_limb_14_col87; + let op1_limb_15_col88 = memory_id_to_big_value_tmp_3fa46_16.get_m31(15); + *row[88] = op1_limb_15_col88; + let op1_limb_16_col89 = memory_id_to_big_value_tmp_3fa46_16.get_m31(16); + *row[89] = op1_limb_16_col89; + let op1_limb_17_col90 = memory_id_to_big_value_tmp_3fa46_16.get_m31(17); + *row[90] = op1_limb_17_col90; + let op1_limb_18_col91 = memory_id_to_big_value_tmp_3fa46_16.get_m31(18); + *row[91] = op1_limb_18_col91; + let op1_limb_19_col92 = memory_id_to_big_value_tmp_3fa46_16.get_m31(19); + *row[92] = op1_limb_19_col92; + let op1_limb_20_col93 = memory_id_to_big_value_tmp_3fa46_16.get_m31(20); + *row[93] = op1_limb_20_col93; + let op1_limb_21_col94 = memory_id_to_big_value_tmp_3fa46_16.get_m31(21); + *row[94] = op1_limb_21_col94; + let op1_limb_22_col95 = memory_id_to_big_value_tmp_3fa46_16.get_m31(22); + *row[95] = op1_limb_22_col95; + let op1_limb_23_col96 = memory_id_to_big_value_tmp_3fa46_16.get_m31(23); + *row[96] = op1_limb_23_col96; + let op1_limb_24_col97 = memory_id_to_big_value_tmp_3fa46_16.get_m31(24); + *row[97] = op1_limb_24_col97; + let op1_limb_25_col98 = memory_id_to_big_value_tmp_3fa46_16.get_m31(25); + *row[98] = op1_limb_25_col98; + let op1_limb_26_col99 = memory_id_to_big_value_tmp_3fa46_16.get_m31(26); + *row[99] = op1_limb_26_col99; + let op1_limb_27_col100 = memory_id_to_big_value_tmp_3fa46_16.get_m31(27); + *row[100] = op1_limb_27_col100; + let memory_id_to_big_inputs_2 = op1_id_col72.unpack(); + *lookup_data.memory_id_to_big_2 = [ + op1_id_col72, + op1_limb_0_col73, + op1_limb_1_col74, + op1_limb_2_col75, + op1_limb_3_col76, + op1_limb_4_col77, + op1_limb_5_col78, + op1_limb_6_col79, + op1_limb_7_col80, + op1_limb_8_col81, + op1_limb_9_col82, + op1_limb_10_col83, + op1_limb_11_col84, + op1_limb_12_col85, + op1_limb_13_col86, + op1_limb_14_col87, + op1_limb_15_col88, + op1_limb_16_col89, + op1_limb_17_col90, + op1_limb_18_col91, + op1_limb_19_col92, + op1_limb_20_col93, + op1_limb_21_col94, + op1_limb_22_col95, + op1_limb_23_col96, + op1_limb_24_col97, + op1_limb_25_col98, + op1_limb_26_col99, + op1_limb_27_col100, + ]; + + // Verify Add 252. + + let sub_p_bit_tmp_3fa46_17 = ((UInt16_1) + & (((PackedUInt16::from_m31(op0_limb_0_col44)) + ^ (PackedUInt16::from_m31(op1_limb_0_col73))) + ^ (PackedUInt16::from_m31(dst_limb_0_col15)))); + let sub_p_bit_col101 = sub_p_bit_tmp_3fa46_17.as_m31(); + *row[101] = sub_p_bit_col101; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_1)), + ((input_ap_col1) + (ap_update_add_1_col10)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); } - *lookup_data.memory_address_to_id_0 = [ - ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))), - dst_id_col14, - ]; - let dst_limb_0_col15 = memory_id_to_big_value_tmp_3fa46_12.get_m31(0); - *row[15] = dst_limb_0_col15; - let dst_limb_1_col16 = memory_id_to_big_value_tmp_3fa46_12.get_m31(1); - *row[16] = dst_limb_1_col16; - let dst_limb_2_col17 = memory_id_to_big_value_tmp_3fa46_12.get_m31(2); - *row[17] = dst_limb_2_col17; - let dst_limb_3_col18 = memory_id_to_big_value_tmp_3fa46_12.get_m31(3); - *row[18] = dst_limb_3_col18; - let dst_limb_4_col19 = memory_id_to_big_value_tmp_3fa46_12.get_m31(4); - *row[19] = dst_limb_4_col19; - let dst_limb_5_col20 = memory_id_to_big_value_tmp_3fa46_12.get_m31(5); - *row[20] = dst_limb_5_col20; - let dst_limb_6_col21 = memory_id_to_big_value_tmp_3fa46_12.get_m31(6); - *row[21] = dst_limb_6_col21; - let dst_limb_7_col22 = memory_id_to_big_value_tmp_3fa46_12.get_m31(7); - *row[22] = dst_limb_7_col22; - let dst_limb_8_col23 = memory_id_to_big_value_tmp_3fa46_12.get_m31(8); - *row[23] = dst_limb_8_col23; - let dst_limb_9_col24 = memory_id_to_big_value_tmp_3fa46_12.get_m31(9); - *row[24] = dst_limb_9_col24; - let dst_limb_10_col25 = memory_id_to_big_value_tmp_3fa46_12.get_m31(10); - *row[25] = dst_limb_10_col25; - let dst_limb_11_col26 = memory_id_to_big_value_tmp_3fa46_12.get_m31(11); - *row[26] = dst_limb_11_col26; - let dst_limb_12_col27 = memory_id_to_big_value_tmp_3fa46_12.get_m31(12); - *row[27] = dst_limb_12_col27; - let dst_limb_13_col28 = memory_id_to_big_value_tmp_3fa46_12.get_m31(13); - *row[28] = dst_limb_13_col28; - let dst_limb_14_col29 = memory_id_to_big_value_tmp_3fa46_12.get_m31(14); - *row[29] = dst_limb_14_col29; - let dst_limb_15_col30 = memory_id_to_big_value_tmp_3fa46_12.get_m31(15); - *row[30] = dst_limb_15_col30; - let dst_limb_16_col31 = memory_id_to_big_value_tmp_3fa46_12.get_m31(16); - *row[31] = dst_limb_16_col31; - let dst_limb_17_col32 = memory_id_to_big_value_tmp_3fa46_12.get_m31(17); - *row[32] = dst_limb_17_col32; - let dst_limb_18_col33 = memory_id_to_big_value_tmp_3fa46_12.get_m31(18); - *row[33] = dst_limb_18_col33; - let dst_limb_19_col34 = memory_id_to_big_value_tmp_3fa46_12.get_m31(19); - *row[34] = dst_limb_19_col34; - let dst_limb_20_col35 = memory_id_to_big_value_tmp_3fa46_12.get_m31(20); - *row[35] = dst_limb_20_col35; - let dst_limb_21_col36 = memory_id_to_big_value_tmp_3fa46_12.get_m31(21); - *row[36] = dst_limb_21_col36; - let dst_limb_22_col37 = memory_id_to_big_value_tmp_3fa46_12.get_m31(22); - *row[37] = dst_limb_22_col37; - let dst_limb_23_col38 = memory_id_to_big_value_tmp_3fa46_12.get_m31(23); - *row[38] = dst_limb_23_col38; - let dst_limb_24_col39 = memory_id_to_big_value_tmp_3fa46_12.get_m31(24); - *row[39] = dst_limb_24_col39; - let dst_limb_25_col40 = memory_id_to_big_value_tmp_3fa46_12.get_m31(25); - *row[40] = dst_limb_25_col40; - let dst_limb_26_col41 = memory_id_to_big_value_tmp_3fa46_12.get_m31(26); - *row[41] = dst_limb_26_col41; - let dst_limb_27_col42 = memory_id_to_big_value_tmp_3fa46_12.get_m31(27); - *row[42] = dst_limb_27_col42; - for (i, &input) in dst_id_col14.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - dst_id_col14, - dst_limb_0_col15, - dst_limb_1_col16, - dst_limb_2_col17, - dst_limb_3_col18, - dst_limb_4_col19, - dst_limb_5_col20, - dst_limb_6_col21, - dst_limb_7_col22, - dst_limb_8_col23, - dst_limb_9_col24, - dst_limb_10_col25, - dst_limb_11_col26, - dst_limb_12_col27, - dst_limb_13_col28, - dst_limb_14_col29, - dst_limb_15_col30, - dst_limb_16_col31, - dst_limb_17_col32, - dst_limb_18_col33, - dst_limb_19_col34, - dst_limb_20_col35, - dst_limb_21_col36, - dst_limb_22_col37, - dst_limb_23_col38, - dst_limb_24_col39, - dst_limb_25_col40, - dst_limb_26_col41, - dst_limb_27_col42, - ]; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_3fa46_13 = memory_address_to_id_state - .deduce_output(((mem0_base_col12) + ((offset1_col4) - (M31_32768)))); - let memory_id_to_big_value_tmp_3fa46_14 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_13); - let op0_id_col43 = memory_address_to_id_value_tmp_3fa46_13; - *row[43] = op0_id_col43; - for (i, &input) in ((mem0_base_col12) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = [ - ((mem0_base_col12) + ((offset1_col4) - (M31_32768))), - op0_id_col43, - ]; - let op0_limb_0_col44 = memory_id_to_big_value_tmp_3fa46_14.get_m31(0); - *row[44] = op0_limb_0_col44; - let op0_limb_1_col45 = memory_id_to_big_value_tmp_3fa46_14.get_m31(1); - *row[45] = op0_limb_1_col45; - let op0_limb_2_col46 = memory_id_to_big_value_tmp_3fa46_14.get_m31(2); - *row[46] = op0_limb_2_col46; - let op0_limb_3_col47 = memory_id_to_big_value_tmp_3fa46_14.get_m31(3); - *row[47] = op0_limb_3_col47; - let op0_limb_4_col48 = memory_id_to_big_value_tmp_3fa46_14.get_m31(4); - *row[48] = op0_limb_4_col48; - let op0_limb_5_col49 = memory_id_to_big_value_tmp_3fa46_14.get_m31(5); - *row[49] = op0_limb_5_col49; - let op0_limb_6_col50 = memory_id_to_big_value_tmp_3fa46_14.get_m31(6); - *row[50] = op0_limb_6_col50; - let op0_limb_7_col51 = memory_id_to_big_value_tmp_3fa46_14.get_m31(7); - *row[51] = op0_limb_7_col51; - let op0_limb_8_col52 = memory_id_to_big_value_tmp_3fa46_14.get_m31(8); - *row[52] = op0_limb_8_col52; - let op0_limb_9_col53 = memory_id_to_big_value_tmp_3fa46_14.get_m31(9); - *row[53] = op0_limb_9_col53; - let op0_limb_10_col54 = memory_id_to_big_value_tmp_3fa46_14.get_m31(10); - *row[54] = op0_limb_10_col54; - let op0_limb_11_col55 = memory_id_to_big_value_tmp_3fa46_14.get_m31(11); - *row[55] = op0_limb_11_col55; - let op0_limb_12_col56 = memory_id_to_big_value_tmp_3fa46_14.get_m31(12); - *row[56] = op0_limb_12_col56; - let op0_limb_13_col57 = memory_id_to_big_value_tmp_3fa46_14.get_m31(13); - *row[57] = op0_limb_13_col57; - let op0_limb_14_col58 = memory_id_to_big_value_tmp_3fa46_14.get_m31(14); - *row[58] = op0_limb_14_col58; - let op0_limb_15_col59 = memory_id_to_big_value_tmp_3fa46_14.get_m31(15); - *row[59] = op0_limb_15_col59; - let op0_limb_16_col60 = memory_id_to_big_value_tmp_3fa46_14.get_m31(16); - *row[60] = op0_limb_16_col60; - let op0_limb_17_col61 = memory_id_to_big_value_tmp_3fa46_14.get_m31(17); - *row[61] = op0_limb_17_col61; - let op0_limb_18_col62 = memory_id_to_big_value_tmp_3fa46_14.get_m31(18); - *row[62] = op0_limb_18_col62; - let op0_limb_19_col63 = memory_id_to_big_value_tmp_3fa46_14.get_m31(19); - *row[63] = op0_limb_19_col63; - let op0_limb_20_col64 = memory_id_to_big_value_tmp_3fa46_14.get_m31(20); - *row[64] = op0_limb_20_col64; - let op0_limb_21_col65 = memory_id_to_big_value_tmp_3fa46_14.get_m31(21); - *row[65] = op0_limb_21_col65; - let op0_limb_22_col66 = memory_id_to_big_value_tmp_3fa46_14.get_m31(22); - *row[66] = op0_limb_22_col66; - let op0_limb_23_col67 = memory_id_to_big_value_tmp_3fa46_14.get_m31(23); - *row[67] = op0_limb_23_col67; - let op0_limb_24_col68 = memory_id_to_big_value_tmp_3fa46_14.get_m31(24); - *row[68] = op0_limb_24_col68; - let op0_limb_25_col69 = memory_id_to_big_value_tmp_3fa46_14.get_m31(25); - *row[69] = op0_limb_25_col69; - let op0_limb_26_col70 = memory_id_to_big_value_tmp_3fa46_14.get_m31(26); - *row[70] = op0_limb_26_col70; - let op0_limb_27_col71 = memory_id_to_big_value_tmp_3fa46_14.get_m31(27); - *row[71] = op0_limb_27_col71; - for (i, &input) in op0_id_col43.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - op0_id_col43, - op0_limb_0_col44, - op0_limb_1_col45, - op0_limb_2_col46, - op0_limb_3_col47, - op0_limb_4_col48, - op0_limb_5_col49, - op0_limb_6_col50, - op0_limb_7_col51, - op0_limb_8_col52, - op0_limb_9_col53, - op0_limb_10_col54, - op0_limb_11_col55, - op0_limb_12_col56, - op0_limb_13_col57, - op0_limb_14_col58, - op0_limb_15_col59, - op0_limb_16_col60, - op0_limb_17_col61, - op0_limb_18_col62, - op0_limb_19_col63, - op0_limb_20_col64, - op0_limb_21_col65, - op0_limb_22_col66, - op0_limb_23_col67, - op0_limb_24_col68, - op0_limb_25_col69, - op0_limb_26_col70, - op0_limb_27_col71, - ]; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_3fa46_15 = memory_address_to_id_state - .deduce_output(((mem1_base_col13) + ((offset2_col5) - (M31_32768)))); - let memory_id_to_big_value_tmp_3fa46_16 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_3fa46_15); - let op1_id_col72 = memory_address_to_id_value_tmp_3fa46_15; - *row[72] = op1_id_col72; - for (i, &input) in ((mem1_base_col13) + ((offset2_col5) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = [ - ((mem1_base_col13) + ((offset2_col5) - (M31_32768))), - op1_id_col72, - ]; - let op1_limb_0_col73 = memory_id_to_big_value_tmp_3fa46_16.get_m31(0); - *row[73] = op1_limb_0_col73; - let op1_limb_1_col74 = memory_id_to_big_value_tmp_3fa46_16.get_m31(1); - *row[74] = op1_limb_1_col74; - let op1_limb_2_col75 = memory_id_to_big_value_tmp_3fa46_16.get_m31(2); - *row[75] = op1_limb_2_col75; - let op1_limb_3_col76 = memory_id_to_big_value_tmp_3fa46_16.get_m31(3); - *row[76] = op1_limb_3_col76; - let op1_limb_4_col77 = memory_id_to_big_value_tmp_3fa46_16.get_m31(4); - *row[77] = op1_limb_4_col77; - let op1_limb_5_col78 = memory_id_to_big_value_tmp_3fa46_16.get_m31(5); - *row[78] = op1_limb_5_col78; - let op1_limb_6_col79 = memory_id_to_big_value_tmp_3fa46_16.get_m31(6); - *row[79] = op1_limb_6_col79; - let op1_limb_7_col80 = memory_id_to_big_value_tmp_3fa46_16.get_m31(7); - *row[80] = op1_limb_7_col80; - let op1_limb_8_col81 = memory_id_to_big_value_tmp_3fa46_16.get_m31(8); - *row[81] = op1_limb_8_col81; - let op1_limb_9_col82 = memory_id_to_big_value_tmp_3fa46_16.get_m31(9); - *row[82] = op1_limb_9_col82; - let op1_limb_10_col83 = memory_id_to_big_value_tmp_3fa46_16.get_m31(10); - *row[83] = op1_limb_10_col83; - let op1_limb_11_col84 = memory_id_to_big_value_tmp_3fa46_16.get_m31(11); - *row[84] = op1_limb_11_col84; - let op1_limb_12_col85 = memory_id_to_big_value_tmp_3fa46_16.get_m31(12); - *row[85] = op1_limb_12_col85; - let op1_limb_13_col86 = memory_id_to_big_value_tmp_3fa46_16.get_m31(13); - *row[86] = op1_limb_13_col86; - let op1_limb_14_col87 = memory_id_to_big_value_tmp_3fa46_16.get_m31(14); - *row[87] = op1_limb_14_col87; - let op1_limb_15_col88 = memory_id_to_big_value_tmp_3fa46_16.get_m31(15); - *row[88] = op1_limb_15_col88; - let op1_limb_16_col89 = memory_id_to_big_value_tmp_3fa46_16.get_m31(16); - *row[89] = op1_limb_16_col89; - let op1_limb_17_col90 = memory_id_to_big_value_tmp_3fa46_16.get_m31(17); - *row[90] = op1_limb_17_col90; - let op1_limb_18_col91 = memory_id_to_big_value_tmp_3fa46_16.get_m31(18); - *row[91] = op1_limb_18_col91; - let op1_limb_19_col92 = memory_id_to_big_value_tmp_3fa46_16.get_m31(19); - *row[92] = op1_limb_19_col92; - let op1_limb_20_col93 = memory_id_to_big_value_tmp_3fa46_16.get_m31(20); - *row[93] = op1_limb_20_col93; - let op1_limb_21_col94 = memory_id_to_big_value_tmp_3fa46_16.get_m31(21); - *row[94] = op1_limb_21_col94; - let op1_limb_22_col95 = memory_id_to_big_value_tmp_3fa46_16.get_m31(22); - *row[95] = op1_limb_22_col95; - let op1_limb_23_col96 = memory_id_to_big_value_tmp_3fa46_16.get_m31(23); - *row[96] = op1_limb_23_col96; - let op1_limb_24_col97 = memory_id_to_big_value_tmp_3fa46_16.get_m31(24); - *row[97] = op1_limb_24_col97; - let op1_limb_25_col98 = memory_id_to_big_value_tmp_3fa46_16.get_m31(25); - *row[98] = op1_limb_25_col98; - let op1_limb_26_col99 = memory_id_to_big_value_tmp_3fa46_16.get_m31(26); - *row[99] = op1_limb_26_col99; - let op1_limb_27_col100 = memory_id_to_big_value_tmp_3fa46_16.get_m31(27); - *row[100] = op1_limb_27_col100; - for (i, &input) in op1_id_col72.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - op1_id_col72, - op1_limb_0_col73, - op1_limb_1_col74, - op1_limb_2_col75, - op1_limb_3_col76, - op1_limb_4_col77, - op1_limb_5_col78, - op1_limb_6_col79, - op1_limb_7_col80, - op1_limb_8_col81, - op1_limb_9_col82, - op1_limb_10_col83, - op1_limb_11_col84, - op1_limb_12_col85, - op1_limb_13_col86, - op1_limb_14_col87, - op1_limb_15_col88, - op1_limb_16_col89, - op1_limb_17_col90, - op1_limb_18_col91, - op1_limb_19_col92, - op1_limb_20_col93, - op1_limb_21_col94, - op1_limb_22_col95, - op1_limb_23_col96, - op1_limb_24_col97, - op1_limb_25_col98, - op1_limb_26_col99, - op1_limb_27_col100, - ]; - - // Verify Add 252. - - let sub_p_bit_tmp_3fa46_17 = ((UInt16_1) - & (((PackedUInt16::from_m31(op0_limb_0_col44)) - ^ (PackedUInt16::from_m31(op1_limb_0_col73))) - ^ (PackedUInt16::from_m31(dst_limb_0_col15)))); - let sub_p_bit_col101 = sub_p_bit_tmp_3fa46_17.as_m31(); - *row[101] = sub_p_bit_col101; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_1)), - ((input_ap_col1) + (ap_update_add_1_col10)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_opcode_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_opcode_imm/prover.rs index 8023ecee..99116d3d 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_opcode_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_opcode_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -166,108 +131,69 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |( - (((row_index, row), add_opcode_imm_input), lookup_data), - mut sub_components_inputs, - )| { - let input_tmp_7e965_0 = add_opcode_imm_input; - let input_pc_col0 = input_tmp_7e965_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_7e965_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_7e965_0.fp; - *row[2] = input_fp_col2; - - // Decode Instruction. - - let memory_address_to_id_value_tmp_7e965_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_7e965_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_1); - let offset0_tmp_7e965_3 = - ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(0))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(1), - )) & (UInt16_127)) - << (UInt16_9))); - let offset0_col3 = offset0_tmp_7e965_3.as_m31(); - *row[3] = offset0_col3; - let offset1_tmp_7e965_4 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(1))) - >> (UInt16_7)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(2), - )) << (UInt16_2))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(3), - )) & (UInt16_31)) - << (UInt16_11))); - let offset1_col4 = offset1_tmp_7e965_4.as_m31(); - *row[4] = offset1_col4; - let dst_base_fp_tmp_7e965_5 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_0)) - & (UInt16_1)); - let dst_base_fp_col5 = dst_base_fp_tmp_7e965_5.as_m31(); - *row[5] = dst_base_fp_col5; - let op0_base_fp_tmp_7e965_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_1)) - & (UInt16_1)); - let op0_base_fp_col6 = op0_base_fp_tmp_7e965_6.as_m31(); - *row[6] = op0_base_fp_col6; - let ap_update_add_1_tmp_7e965_7 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_7e965_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col7 = ap_update_add_1_tmp_7e965_7.as_m31(); - *row[7] = ap_update_add_1_col7; - for (i, &input) in ( - input_pc_col0, - [offset0_col3, offset1_col4, M31_32769], - [ - dst_base_fp_col5, - op0_base_fp_col6, - M31_1, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ap_update_add_1_col7, - M31_0, - M31_0, - M31_1, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - offset0_col3, - offset1_col4, - M31_32769, + .for_each(|(((row_index, row), add_opcode_imm_input), lookup_data)| { + let input_tmp_7e965_0 = add_opcode_imm_input; + let input_pc_col0 = input_tmp_7e965_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_7e965_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_7e965_0.fp; + *row[2] = input_fp_col2; + + // Decode Instruction. + + let memory_address_to_id_value_tmp_7e965_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_7e965_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_1); + let offset0_tmp_7e965_3 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_7e965_3.as_m31(); + *row[3] = offset0_col3; + let offset1_tmp_7e965_4 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_7e965_4.as_m31(); + *row[4] = offset1_col4; + let dst_base_fp_tmp_7e965_5 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col5 = dst_base_fp_tmp_7e965_5.as_m31(); + *row[5] = dst_base_fp_col5; + let op0_base_fp_tmp_7e965_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col6 = op0_base_fp_tmp_7e965_6.as_m31(); + *row[6] = op0_base_fp_col6; + let ap_update_add_1_tmp_7e965_7 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_7e965_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col7 = ap_update_add_1_tmp_7e965_7.as_m31(); + *row[7] = ap_update_add_1_col7; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [offset0_col3, offset1_col4, M31_32769], + [ dst_base_fp_col5, op0_base_fp_col6, M31_1, @@ -283,357 +209,379 @@ fn write_trace_simd( M31_0, M31_0, M31_1, - ]; - - let mem_dst_base_col8 = (((dst_base_fp_col5) * (input_fp_col2)) - + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))); - *row[8] = mem_dst_base_col8; - let mem0_base_col9 = (((op0_base_fp_col6) * (input_fp_col2)) - + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))); - *row[9] = mem0_base_col9; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_7e965_8 = memory_address_to_id_state - .deduce_output(((mem_dst_base_col8) + ((offset0_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_7e965_9 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_8); - let dst_id_col10 = memory_address_to_id_value_tmp_7e965_8; - *row[10] = dst_id_col10; - for (i, &input) in ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + offset0_col3, + offset1_col4, + M31_32769, + dst_base_fp_col5, + op0_base_fp_col6, + M31_1, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col7, + M31_0, + M31_0, + M31_1, + ]; + + let mem_dst_base_col8 = (((dst_base_fp_col5) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))); + *row[8] = mem_dst_base_col8; + let mem0_base_col9 = (((op0_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))); + *row[9] = mem0_base_col9; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_7e965_8 = memory_address_to_id_state + .deduce_output(((mem_dst_base_col8) + ((offset0_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_7e965_9 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_8); + let dst_id_col10 = memory_address_to_id_value_tmp_7e965_8; + *row[10] = dst_id_col10; + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))), + dst_id_col10, + ]; + let dst_limb_0_col11 = memory_id_to_big_value_tmp_7e965_9.get_m31(0); + *row[11] = dst_limb_0_col11; + let dst_limb_1_col12 = memory_id_to_big_value_tmp_7e965_9.get_m31(1); + *row[12] = dst_limb_1_col12; + let dst_limb_2_col13 = memory_id_to_big_value_tmp_7e965_9.get_m31(2); + *row[13] = dst_limb_2_col13; + let dst_limb_3_col14 = memory_id_to_big_value_tmp_7e965_9.get_m31(3); + *row[14] = dst_limb_3_col14; + let dst_limb_4_col15 = memory_id_to_big_value_tmp_7e965_9.get_m31(4); + *row[15] = dst_limb_4_col15; + let dst_limb_5_col16 = memory_id_to_big_value_tmp_7e965_9.get_m31(5); + *row[16] = dst_limb_5_col16; + let dst_limb_6_col17 = memory_id_to_big_value_tmp_7e965_9.get_m31(6); + *row[17] = dst_limb_6_col17; + let dst_limb_7_col18 = memory_id_to_big_value_tmp_7e965_9.get_m31(7); + *row[18] = dst_limb_7_col18; + let dst_limb_8_col19 = memory_id_to_big_value_tmp_7e965_9.get_m31(8); + *row[19] = dst_limb_8_col19; + let dst_limb_9_col20 = memory_id_to_big_value_tmp_7e965_9.get_m31(9); + *row[20] = dst_limb_9_col20; + let dst_limb_10_col21 = memory_id_to_big_value_tmp_7e965_9.get_m31(10); + *row[21] = dst_limb_10_col21; + let dst_limb_11_col22 = memory_id_to_big_value_tmp_7e965_9.get_m31(11); + *row[22] = dst_limb_11_col22; + let dst_limb_12_col23 = memory_id_to_big_value_tmp_7e965_9.get_m31(12); + *row[23] = dst_limb_12_col23; + let dst_limb_13_col24 = memory_id_to_big_value_tmp_7e965_9.get_m31(13); + *row[24] = dst_limb_13_col24; + let dst_limb_14_col25 = memory_id_to_big_value_tmp_7e965_9.get_m31(14); + *row[25] = dst_limb_14_col25; + let dst_limb_15_col26 = memory_id_to_big_value_tmp_7e965_9.get_m31(15); + *row[26] = dst_limb_15_col26; + let dst_limb_16_col27 = memory_id_to_big_value_tmp_7e965_9.get_m31(16); + *row[27] = dst_limb_16_col27; + let dst_limb_17_col28 = memory_id_to_big_value_tmp_7e965_9.get_m31(17); + *row[28] = dst_limb_17_col28; + let dst_limb_18_col29 = memory_id_to_big_value_tmp_7e965_9.get_m31(18); + *row[29] = dst_limb_18_col29; + let dst_limb_19_col30 = memory_id_to_big_value_tmp_7e965_9.get_m31(19); + *row[30] = dst_limb_19_col30; + let dst_limb_20_col31 = memory_id_to_big_value_tmp_7e965_9.get_m31(20); + *row[31] = dst_limb_20_col31; + let dst_limb_21_col32 = memory_id_to_big_value_tmp_7e965_9.get_m31(21); + *row[32] = dst_limb_21_col32; + let dst_limb_22_col33 = memory_id_to_big_value_tmp_7e965_9.get_m31(22); + *row[33] = dst_limb_22_col33; + let dst_limb_23_col34 = memory_id_to_big_value_tmp_7e965_9.get_m31(23); + *row[34] = dst_limb_23_col34; + let dst_limb_24_col35 = memory_id_to_big_value_tmp_7e965_9.get_m31(24); + *row[35] = dst_limb_24_col35; + let dst_limb_25_col36 = memory_id_to_big_value_tmp_7e965_9.get_m31(25); + *row[36] = dst_limb_25_col36; + let dst_limb_26_col37 = memory_id_to_big_value_tmp_7e965_9.get_m31(26); + *row[37] = dst_limb_26_col37; + let dst_limb_27_col38 = memory_id_to_big_value_tmp_7e965_9.get_m31(27); + *row[38] = dst_limb_27_col38; + let memory_id_to_big_inputs_0 = dst_id_col10.unpack(); + *lookup_data.memory_id_to_big_0 = [ + dst_id_col10, + dst_limb_0_col11, + dst_limb_1_col12, + dst_limb_2_col13, + dst_limb_3_col14, + dst_limb_4_col15, + dst_limb_5_col16, + dst_limb_6_col17, + dst_limb_7_col18, + dst_limb_8_col19, + dst_limb_9_col20, + dst_limb_10_col21, + dst_limb_11_col22, + dst_limb_12_col23, + dst_limb_13_col24, + dst_limb_14_col25, + dst_limb_15_col26, + dst_limb_16_col27, + dst_limb_17_col28, + dst_limb_18_col29, + dst_limb_19_col30, + dst_limb_20_col31, + dst_limb_21_col32, + dst_limb_22_col33, + dst_limb_23_col34, + dst_limb_24_col35, + dst_limb_25_col36, + dst_limb_26_col37, + dst_limb_27_col38, + ]; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_7e965_10 = memory_address_to_id_state + .deduce_output(((mem0_base_col9) + ((offset1_col4) - (M31_32768)))); + let memory_id_to_big_value_tmp_7e965_11 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_10); + let op0_id_col39 = memory_address_to_id_value_tmp_7e965_10; + *row[39] = op0_id_col39; + let memory_address_to_id_inputs_1 = + ((mem0_base_col9) + ((offset1_col4) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_1 = [ + ((mem0_base_col9) + ((offset1_col4) - (M31_32768))), + op0_id_col39, + ]; + let op0_limb_0_col40 = memory_id_to_big_value_tmp_7e965_11.get_m31(0); + *row[40] = op0_limb_0_col40; + let op0_limb_1_col41 = memory_id_to_big_value_tmp_7e965_11.get_m31(1); + *row[41] = op0_limb_1_col41; + let op0_limb_2_col42 = memory_id_to_big_value_tmp_7e965_11.get_m31(2); + *row[42] = op0_limb_2_col42; + let op0_limb_3_col43 = memory_id_to_big_value_tmp_7e965_11.get_m31(3); + *row[43] = op0_limb_3_col43; + let op0_limb_4_col44 = memory_id_to_big_value_tmp_7e965_11.get_m31(4); + *row[44] = op0_limb_4_col44; + let op0_limb_5_col45 = memory_id_to_big_value_tmp_7e965_11.get_m31(5); + *row[45] = op0_limb_5_col45; + let op0_limb_6_col46 = memory_id_to_big_value_tmp_7e965_11.get_m31(6); + *row[46] = op0_limb_6_col46; + let op0_limb_7_col47 = memory_id_to_big_value_tmp_7e965_11.get_m31(7); + *row[47] = op0_limb_7_col47; + let op0_limb_8_col48 = memory_id_to_big_value_tmp_7e965_11.get_m31(8); + *row[48] = op0_limb_8_col48; + let op0_limb_9_col49 = memory_id_to_big_value_tmp_7e965_11.get_m31(9); + *row[49] = op0_limb_9_col49; + let op0_limb_10_col50 = memory_id_to_big_value_tmp_7e965_11.get_m31(10); + *row[50] = op0_limb_10_col50; + let op0_limb_11_col51 = memory_id_to_big_value_tmp_7e965_11.get_m31(11); + *row[51] = op0_limb_11_col51; + let op0_limb_12_col52 = memory_id_to_big_value_tmp_7e965_11.get_m31(12); + *row[52] = op0_limb_12_col52; + let op0_limb_13_col53 = memory_id_to_big_value_tmp_7e965_11.get_m31(13); + *row[53] = op0_limb_13_col53; + let op0_limb_14_col54 = memory_id_to_big_value_tmp_7e965_11.get_m31(14); + *row[54] = op0_limb_14_col54; + let op0_limb_15_col55 = memory_id_to_big_value_tmp_7e965_11.get_m31(15); + *row[55] = op0_limb_15_col55; + let op0_limb_16_col56 = memory_id_to_big_value_tmp_7e965_11.get_m31(16); + *row[56] = op0_limb_16_col56; + let op0_limb_17_col57 = memory_id_to_big_value_tmp_7e965_11.get_m31(17); + *row[57] = op0_limb_17_col57; + let op0_limb_18_col58 = memory_id_to_big_value_tmp_7e965_11.get_m31(18); + *row[58] = op0_limb_18_col58; + let op0_limb_19_col59 = memory_id_to_big_value_tmp_7e965_11.get_m31(19); + *row[59] = op0_limb_19_col59; + let op0_limb_20_col60 = memory_id_to_big_value_tmp_7e965_11.get_m31(20); + *row[60] = op0_limb_20_col60; + let op0_limb_21_col61 = memory_id_to_big_value_tmp_7e965_11.get_m31(21); + *row[61] = op0_limb_21_col61; + let op0_limb_22_col62 = memory_id_to_big_value_tmp_7e965_11.get_m31(22); + *row[62] = op0_limb_22_col62; + let op0_limb_23_col63 = memory_id_to_big_value_tmp_7e965_11.get_m31(23); + *row[63] = op0_limb_23_col63; + let op0_limb_24_col64 = memory_id_to_big_value_tmp_7e965_11.get_m31(24); + *row[64] = op0_limb_24_col64; + let op0_limb_25_col65 = memory_id_to_big_value_tmp_7e965_11.get_m31(25); + *row[65] = op0_limb_25_col65; + let op0_limb_26_col66 = memory_id_to_big_value_tmp_7e965_11.get_m31(26); + *row[66] = op0_limb_26_col66; + let op0_limb_27_col67 = memory_id_to_big_value_tmp_7e965_11.get_m31(27); + *row[67] = op0_limb_27_col67; + let memory_id_to_big_inputs_1 = op0_id_col39.unpack(); + *lookup_data.memory_id_to_big_1 = [ + op0_id_col39, + op0_limb_0_col40, + op0_limb_1_col41, + op0_limb_2_col42, + op0_limb_3_col43, + op0_limb_4_col44, + op0_limb_5_col45, + op0_limb_6_col46, + op0_limb_7_col47, + op0_limb_8_col48, + op0_limb_9_col49, + op0_limb_10_col50, + op0_limb_11_col51, + op0_limb_12_col52, + op0_limb_13_col53, + op0_limb_14_col54, + op0_limb_15_col55, + op0_limb_16_col56, + op0_limb_17_col57, + op0_limb_18_col58, + op0_limb_19_col59, + op0_limb_20_col60, + op0_limb_21_col61, + op0_limb_22_col62, + op0_limb_23_col63, + op0_limb_24_col64, + op0_limb_25_col65, + op0_limb_26_col66, + op0_limb_27_col67, + ]; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_7e965_12 = + memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); + let memory_id_to_big_value_tmp_7e965_13 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_12); + let op1_id_col68 = memory_address_to_id_value_tmp_7e965_12; + *row[68] = op1_id_col68; + let memory_address_to_id_inputs_2 = ((input_pc_col0) + (M31_1)).unpack(); + *lookup_data.memory_address_to_id_2 = [((input_pc_col0) + (M31_1)), op1_id_col68]; + let op1_limb_0_col69 = memory_id_to_big_value_tmp_7e965_13.get_m31(0); + *row[69] = op1_limb_0_col69; + let op1_limb_1_col70 = memory_id_to_big_value_tmp_7e965_13.get_m31(1); + *row[70] = op1_limb_1_col70; + let op1_limb_2_col71 = memory_id_to_big_value_tmp_7e965_13.get_m31(2); + *row[71] = op1_limb_2_col71; + let op1_limb_3_col72 = memory_id_to_big_value_tmp_7e965_13.get_m31(3); + *row[72] = op1_limb_3_col72; + let op1_limb_4_col73 = memory_id_to_big_value_tmp_7e965_13.get_m31(4); + *row[73] = op1_limb_4_col73; + let op1_limb_5_col74 = memory_id_to_big_value_tmp_7e965_13.get_m31(5); + *row[74] = op1_limb_5_col74; + let op1_limb_6_col75 = memory_id_to_big_value_tmp_7e965_13.get_m31(6); + *row[75] = op1_limb_6_col75; + let op1_limb_7_col76 = memory_id_to_big_value_tmp_7e965_13.get_m31(7); + *row[76] = op1_limb_7_col76; + let op1_limb_8_col77 = memory_id_to_big_value_tmp_7e965_13.get_m31(8); + *row[77] = op1_limb_8_col77; + let op1_limb_9_col78 = memory_id_to_big_value_tmp_7e965_13.get_m31(9); + *row[78] = op1_limb_9_col78; + let op1_limb_10_col79 = memory_id_to_big_value_tmp_7e965_13.get_m31(10); + *row[79] = op1_limb_10_col79; + let op1_limb_11_col80 = memory_id_to_big_value_tmp_7e965_13.get_m31(11); + *row[80] = op1_limb_11_col80; + let op1_limb_12_col81 = memory_id_to_big_value_tmp_7e965_13.get_m31(12); + *row[81] = op1_limb_12_col81; + let op1_limb_13_col82 = memory_id_to_big_value_tmp_7e965_13.get_m31(13); + *row[82] = op1_limb_13_col82; + let op1_limb_14_col83 = memory_id_to_big_value_tmp_7e965_13.get_m31(14); + *row[83] = op1_limb_14_col83; + let op1_limb_15_col84 = memory_id_to_big_value_tmp_7e965_13.get_m31(15); + *row[84] = op1_limb_15_col84; + let op1_limb_16_col85 = memory_id_to_big_value_tmp_7e965_13.get_m31(16); + *row[85] = op1_limb_16_col85; + let op1_limb_17_col86 = memory_id_to_big_value_tmp_7e965_13.get_m31(17); + *row[86] = op1_limb_17_col86; + let op1_limb_18_col87 = memory_id_to_big_value_tmp_7e965_13.get_m31(18); + *row[87] = op1_limb_18_col87; + let op1_limb_19_col88 = memory_id_to_big_value_tmp_7e965_13.get_m31(19); + *row[88] = op1_limb_19_col88; + let op1_limb_20_col89 = memory_id_to_big_value_tmp_7e965_13.get_m31(20); + *row[89] = op1_limb_20_col89; + let op1_limb_21_col90 = memory_id_to_big_value_tmp_7e965_13.get_m31(21); + *row[90] = op1_limb_21_col90; + let op1_limb_22_col91 = memory_id_to_big_value_tmp_7e965_13.get_m31(22); + *row[91] = op1_limb_22_col91; + let op1_limb_23_col92 = memory_id_to_big_value_tmp_7e965_13.get_m31(23); + *row[92] = op1_limb_23_col92; + let op1_limb_24_col93 = memory_id_to_big_value_tmp_7e965_13.get_m31(24); + *row[93] = op1_limb_24_col93; + let op1_limb_25_col94 = memory_id_to_big_value_tmp_7e965_13.get_m31(25); + *row[94] = op1_limb_25_col94; + let op1_limb_26_col95 = memory_id_to_big_value_tmp_7e965_13.get_m31(26); + *row[95] = op1_limb_26_col95; + let op1_limb_27_col96 = memory_id_to_big_value_tmp_7e965_13.get_m31(27); + *row[96] = op1_limb_27_col96; + let memory_id_to_big_inputs_2 = op1_id_col68.unpack(); + *lookup_data.memory_id_to_big_2 = [ + op1_id_col68, + op1_limb_0_col69, + op1_limb_1_col70, + op1_limb_2_col71, + op1_limb_3_col72, + op1_limb_4_col73, + op1_limb_5_col74, + op1_limb_6_col75, + op1_limb_7_col76, + op1_limb_8_col77, + op1_limb_9_col78, + op1_limb_10_col79, + op1_limb_11_col80, + op1_limb_12_col81, + op1_limb_13_col82, + op1_limb_14_col83, + op1_limb_15_col84, + op1_limb_16_col85, + op1_limb_17_col86, + op1_limb_18_col87, + op1_limb_19_col88, + op1_limb_20_col89, + op1_limb_21_col90, + op1_limb_22_col91, + op1_limb_23_col92, + op1_limb_24_col93, + op1_limb_25_col94, + op1_limb_26_col95, + op1_limb_27_col96, + ]; + + // Verify Add 252. + + let sub_p_bit_tmp_7e965_14 = ((UInt16_1) + & (((PackedUInt16::from_m31(op0_limb_0_col40)) + ^ (PackedUInt16::from_m31(op1_limb_0_col69))) + ^ (PackedUInt16::from_m31(dst_limb_0_col11)))); + let sub_p_bit_col97 = sub_p_bit_tmp_7e965_14.as_m31(); + *row[97] = sub_p_bit_col97; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_2)), + ((input_ap_col1) + (ap_update_add_1_col7)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [ - ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))), - dst_id_col10, - ]; - let dst_limb_0_col11 = memory_id_to_big_value_tmp_7e965_9.get_m31(0); - *row[11] = dst_limb_0_col11; - let dst_limb_1_col12 = memory_id_to_big_value_tmp_7e965_9.get_m31(1); - *row[12] = dst_limb_1_col12; - let dst_limb_2_col13 = memory_id_to_big_value_tmp_7e965_9.get_m31(2); - *row[13] = dst_limb_2_col13; - let dst_limb_3_col14 = memory_id_to_big_value_tmp_7e965_9.get_m31(3); - *row[14] = dst_limb_3_col14; - let dst_limb_4_col15 = memory_id_to_big_value_tmp_7e965_9.get_m31(4); - *row[15] = dst_limb_4_col15; - let dst_limb_5_col16 = memory_id_to_big_value_tmp_7e965_9.get_m31(5); - *row[16] = dst_limb_5_col16; - let dst_limb_6_col17 = memory_id_to_big_value_tmp_7e965_9.get_m31(6); - *row[17] = dst_limb_6_col17; - let dst_limb_7_col18 = memory_id_to_big_value_tmp_7e965_9.get_m31(7); - *row[18] = dst_limb_7_col18; - let dst_limb_8_col19 = memory_id_to_big_value_tmp_7e965_9.get_m31(8); - *row[19] = dst_limb_8_col19; - let dst_limb_9_col20 = memory_id_to_big_value_tmp_7e965_9.get_m31(9); - *row[20] = dst_limb_9_col20; - let dst_limb_10_col21 = memory_id_to_big_value_tmp_7e965_9.get_m31(10); - *row[21] = dst_limb_10_col21; - let dst_limb_11_col22 = memory_id_to_big_value_tmp_7e965_9.get_m31(11); - *row[22] = dst_limb_11_col22; - let dst_limb_12_col23 = memory_id_to_big_value_tmp_7e965_9.get_m31(12); - *row[23] = dst_limb_12_col23; - let dst_limb_13_col24 = memory_id_to_big_value_tmp_7e965_9.get_m31(13); - *row[24] = dst_limb_13_col24; - let dst_limb_14_col25 = memory_id_to_big_value_tmp_7e965_9.get_m31(14); - *row[25] = dst_limb_14_col25; - let dst_limb_15_col26 = memory_id_to_big_value_tmp_7e965_9.get_m31(15); - *row[26] = dst_limb_15_col26; - let dst_limb_16_col27 = memory_id_to_big_value_tmp_7e965_9.get_m31(16); - *row[27] = dst_limb_16_col27; - let dst_limb_17_col28 = memory_id_to_big_value_tmp_7e965_9.get_m31(17); - *row[28] = dst_limb_17_col28; - let dst_limb_18_col29 = memory_id_to_big_value_tmp_7e965_9.get_m31(18); - *row[29] = dst_limb_18_col29; - let dst_limb_19_col30 = memory_id_to_big_value_tmp_7e965_9.get_m31(19); - *row[30] = dst_limb_19_col30; - let dst_limb_20_col31 = memory_id_to_big_value_tmp_7e965_9.get_m31(20); - *row[31] = dst_limb_20_col31; - let dst_limb_21_col32 = memory_id_to_big_value_tmp_7e965_9.get_m31(21); - *row[32] = dst_limb_21_col32; - let dst_limb_22_col33 = memory_id_to_big_value_tmp_7e965_9.get_m31(22); - *row[33] = dst_limb_22_col33; - let dst_limb_23_col34 = memory_id_to_big_value_tmp_7e965_9.get_m31(23); - *row[34] = dst_limb_23_col34; - let dst_limb_24_col35 = memory_id_to_big_value_tmp_7e965_9.get_m31(24); - *row[35] = dst_limb_24_col35; - let dst_limb_25_col36 = memory_id_to_big_value_tmp_7e965_9.get_m31(25); - *row[36] = dst_limb_25_col36; - let dst_limb_26_col37 = memory_id_to_big_value_tmp_7e965_9.get_m31(26); - *row[37] = dst_limb_26_col37; - let dst_limb_27_col38 = memory_id_to_big_value_tmp_7e965_9.get_m31(27); - *row[38] = dst_limb_27_col38; - for (i, &input) in dst_id_col10.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - dst_id_col10, - dst_limb_0_col11, - dst_limb_1_col12, - dst_limb_2_col13, - dst_limb_3_col14, - dst_limb_4_col15, - dst_limb_5_col16, - dst_limb_6_col17, - dst_limb_7_col18, - dst_limb_8_col19, - dst_limb_9_col20, - dst_limb_10_col21, - dst_limb_11_col22, - dst_limb_12_col23, - dst_limb_13_col24, - dst_limb_14_col25, - dst_limb_15_col26, - dst_limb_16_col27, - dst_limb_17_col28, - dst_limb_18_col29, - dst_limb_19_col30, - dst_limb_20_col31, - dst_limb_21_col32, - dst_limb_22_col33, - dst_limb_23_col34, - dst_limb_24_col35, - dst_limb_25_col36, - dst_limb_26_col37, - dst_limb_27_col38, - ]; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_7e965_10 = memory_address_to_id_state - .deduce_output(((mem0_base_col9) + ((offset1_col4) - (M31_32768)))); - let memory_id_to_big_value_tmp_7e965_11 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_10); - let op0_id_col39 = memory_address_to_id_value_tmp_7e965_10; - *row[39] = op0_id_col39; - for (i, &input) in ((mem0_base_col9) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = [ - ((mem0_base_col9) + ((offset1_col4) - (M31_32768))), - op0_id_col39, - ]; - let op0_limb_0_col40 = memory_id_to_big_value_tmp_7e965_11.get_m31(0); - *row[40] = op0_limb_0_col40; - let op0_limb_1_col41 = memory_id_to_big_value_tmp_7e965_11.get_m31(1); - *row[41] = op0_limb_1_col41; - let op0_limb_2_col42 = memory_id_to_big_value_tmp_7e965_11.get_m31(2); - *row[42] = op0_limb_2_col42; - let op0_limb_3_col43 = memory_id_to_big_value_tmp_7e965_11.get_m31(3); - *row[43] = op0_limb_3_col43; - let op0_limb_4_col44 = memory_id_to_big_value_tmp_7e965_11.get_m31(4); - *row[44] = op0_limb_4_col44; - let op0_limb_5_col45 = memory_id_to_big_value_tmp_7e965_11.get_m31(5); - *row[45] = op0_limb_5_col45; - let op0_limb_6_col46 = memory_id_to_big_value_tmp_7e965_11.get_m31(6); - *row[46] = op0_limb_6_col46; - let op0_limb_7_col47 = memory_id_to_big_value_tmp_7e965_11.get_m31(7); - *row[47] = op0_limb_7_col47; - let op0_limb_8_col48 = memory_id_to_big_value_tmp_7e965_11.get_m31(8); - *row[48] = op0_limb_8_col48; - let op0_limb_9_col49 = memory_id_to_big_value_tmp_7e965_11.get_m31(9); - *row[49] = op0_limb_9_col49; - let op0_limb_10_col50 = memory_id_to_big_value_tmp_7e965_11.get_m31(10); - *row[50] = op0_limb_10_col50; - let op0_limb_11_col51 = memory_id_to_big_value_tmp_7e965_11.get_m31(11); - *row[51] = op0_limb_11_col51; - let op0_limb_12_col52 = memory_id_to_big_value_tmp_7e965_11.get_m31(12); - *row[52] = op0_limb_12_col52; - let op0_limb_13_col53 = memory_id_to_big_value_tmp_7e965_11.get_m31(13); - *row[53] = op0_limb_13_col53; - let op0_limb_14_col54 = memory_id_to_big_value_tmp_7e965_11.get_m31(14); - *row[54] = op0_limb_14_col54; - let op0_limb_15_col55 = memory_id_to_big_value_tmp_7e965_11.get_m31(15); - *row[55] = op0_limb_15_col55; - let op0_limb_16_col56 = memory_id_to_big_value_tmp_7e965_11.get_m31(16); - *row[56] = op0_limb_16_col56; - let op0_limb_17_col57 = memory_id_to_big_value_tmp_7e965_11.get_m31(17); - *row[57] = op0_limb_17_col57; - let op0_limb_18_col58 = memory_id_to_big_value_tmp_7e965_11.get_m31(18); - *row[58] = op0_limb_18_col58; - let op0_limb_19_col59 = memory_id_to_big_value_tmp_7e965_11.get_m31(19); - *row[59] = op0_limb_19_col59; - let op0_limb_20_col60 = memory_id_to_big_value_tmp_7e965_11.get_m31(20); - *row[60] = op0_limb_20_col60; - let op0_limb_21_col61 = memory_id_to_big_value_tmp_7e965_11.get_m31(21); - *row[61] = op0_limb_21_col61; - let op0_limb_22_col62 = memory_id_to_big_value_tmp_7e965_11.get_m31(22); - *row[62] = op0_limb_22_col62; - let op0_limb_23_col63 = memory_id_to_big_value_tmp_7e965_11.get_m31(23); - *row[63] = op0_limb_23_col63; - let op0_limb_24_col64 = memory_id_to_big_value_tmp_7e965_11.get_m31(24); - *row[64] = op0_limb_24_col64; - let op0_limb_25_col65 = memory_id_to_big_value_tmp_7e965_11.get_m31(25); - *row[65] = op0_limb_25_col65; - let op0_limb_26_col66 = memory_id_to_big_value_tmp_7e965_11.get_m31(26); - *row[66] = op0_limb_26_col66; - let op0_limb_27_col67 = memory_id_to_big_value_tmp_7e965_11.get_m31(27); - *row[67] = op0_limb_27_col67; - for (i, &input) in op0_id_col39.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); } - *lookup_data.memory_id_to_big_1 = [ - op0_id_col39, - op0_limb_0_col40, - op0_limb_1_col41, - op0_limb_2_col42, - op0_limb_3_col43, - op0_limb_4_col44, - op0_limb_5_col45, - op0_limb_6_col46, - op0_limb_7_col47, - op0_limb_8_col48, - op0_limb_9_col49, - op0_limb_10_col50, - op0_limb_11_col51, - op0_limb_12_col52, - op0_limb_13_col53, - op0_limb_14_col54, - op0_limb_15_col55, - op0_limb_16_col56, - op0_limb_17_col57, - op0_limb_18_col58, - op0_limb_19_col59, - op0_limb_20_col60, - op0_limb_21_col61, - op0_limb_22_col62, - op0_limb_23_col63, - op0_limb_24_col64, - op0_limb_25_col65, - op0_limb_26_col66, - op0_limb_27_col67, - ]; - - // Read Positive Num Bits 252. - - let memory_address_to_id_value_tmp_7e965_12 = - memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); - let memory_id_to_big_value_tmp_7e965_13 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_7e965_12); - let op1_id_col68 = memory_address_to_id_value_tmp_7e965_12; - *row[68] = op1_id_col68; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = [((input_pc_col0) + (M31_1)), op1_id_col68]; - let op1_limb_0_col69 = memory_id_to_big_value_tmp_7e965_13.get_m31(0); - *row[69] = op1_limb_0_col69; - let op1_limb_1_col70 = memory_id_to_big_value_tmp_7e965_13.get_m31(1); - *row[70] = op1_limb_1_col70; - let op1_limb_2_col71 = memory_id_to_big_value_tmp_7e965_13.get_m31(2); - *row[71] = op1_limb_2_col71; - let op1_limb_3_col72 = memory_id_to_big_value_tmp_7e965_13.get_m31(3); - *row[72] = op1_limb_3_col72; - let op1_limb_4_col73 = memory_id_to_big_value_tmp_7e965_13.get_m31(4); - *row[73] = op1_limb_4_col73; - let op1_limb_5_col74 = memory_id_to_big_value_tmp_7e965_13.get_m31(5); - *row[74] = op1_limb_5_col74; - let op1_limb_6_col75 = memory_id_to_big_value_tmp_7e965_13.get_m31(6); - *row[75] = op1_limb_6_col75; - let op1_limb_7_col76 = memory_id_to_big_value_tmp_7e965_13.get_m31(7); - *row[76] = op1_limb_7_col76; - let op1_limb_8_col77 = memory_id_to_big_value_tmp_7e965_13.get_m31(8); - *row[77] = op1_limb_8_col77; - let op1_limb_9_col78 = memory_id_to_big_value_tmp_7e965_13.get_m31(9); - *row[78] = op1_limb_9_col78; - let op1_limb_10_col79 = memory_id_to_big_value_tmp_7e965_13.get_m31(10); - *row[79] = op1_limb_10_col79; - let op1_limb_11_col80 = memory_id_to_big_value_tmp_7e965_13.get_m31(11); - *row[80] = op1_limb_11_col80; - let op1_limb_12_col81 = memory_id_to_big_value_tmp_7e965_13.get_m31(12); - *row[81] = op1_limb_12_col81; - let op1_limb_13_col82 = memory_id_to_big_value_tmp_7e965_13.get_m31(13); - *row[82] = op1_limb_13_col82; - let op1_limb_14_col83 = memory_id_to_big_value_tmp_7e965_13.get_m31(14); - *row[83] = op1_limb_14_col83; - let op1_limb_15_col84 = memory_id_to_big_value_tmp_7e965_13.get_m31(15); - *row[84] = op1_limb_15_col84; - let op1_limb_16_col85 = memory_id_to_big_value_tmp_7e965_13.get_m31(16); - *row[85] = op1_limb_16_col85; - let op1_limb_17_col86 = memory_id_to_big_value_tmp_7e965_13.get_m31(17); - *row[86] = op1_limb_17_col86; - let op1_limb_18_col87 = memory_id_to_big_value_tmp_7e965_13.get_m31(18); - *row[87] = op1_limb_18_col87; - let op1_limb_19_col88 = memory_id_to_big_value_tmp_7e965_13.get_m31(19); - *row[88] = op1_limb_19_col88; - let op1_limb_20_col89 = memory_id_to_big_value_tmp_7e965_13.get_m31(20); - *row[89] = op1_limb_20_col89; - let op1_limb_21_col90 = memory_id_to_big_value_tmp_7e965_13.get_m31(21); - *row[90] = op1_limb_21_col90; - let op1_limb_22_col91 = memory_id_to_big_value_tmp_7e965_13.get_m31(22); - *row[91] = op1_limb_22_col91; - let op1_limb_23_col92 = memory_id_to_big_value_tmp_7e965_13.get_m31(23); - *row[92] = op1_limb_23_col92; - let op1_limb_24_col93 = memory_id_to_big_value_tmp_7e965_13.get_m31(24); - *row[93] = op1_limb_24_col93; - let op1_limb_25_col94 = memory_id_to_big_value_tmp_7e965_13.get_m31(25); - *row[94] = op1_limb_25_col94; - let op1_limb_26_col95 = memory_id_to_big_value_tmp_7e965_13.get_m31(26); - *row[95] = op1_limb_26_col95; - let op1_limb_27_col96 = memory_id_to_big_value_tmp_7e965_13.get_m31(27); - *row[96] = op1_limb_27_col96; - for (i, &input) in op1_id_col68.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - op1_id_col68, - op1_limb_0_col69, - op1_limb_1_col70, - op1_limb_2_col71, - op1_limb_3_col72, - op1_limb_4_col73, - op1_limb_5_col74, - op1_limb_6_col75, - op1_limb_7_col76, - op1_limb_8_col77, - op1_limb_9_col78, - op1_limb_10_col79, - op1_limb_11_col80, - op1_limb_12_col81, - op1_limb_13_col82, - op1_limb_14_col83, - op1_limb_15_col84, - op1_limb_16_col85, - op1_limb_17_col86, - op1_limb_18_col87, - op1_limb_19_col88, - op1_limb_20_col89, - op1_limb_21_col90, - op1_limb_22_col91, - op1_limb_23_col92, - op1_limb_24_col93, - op1_limb_25_col94, - op1_limb_26_col95, - op1_limb_27_col96, - ]; - - // Verify Add 252. - - let sub_p_bit_tmp_7e965_14 = ((UInt16_1) - & (((PackedUInt16::from_m31(op0_limb_0_col40)) - ^ (PackedUInt16::from_m31(op1_limb_0_col69))) - ^ (PackedUInt16::from_m31(dst_limb_0_col11)))); - let sub_p_bit_col97 = sub_p_bit_tmp_7e965_14.as_m31(); - *row[97] = sub_p_bit_col97; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_2)), - ((input_ap_col1) + (ap_update_add_1_col7)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_opcode_small/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_opcode_small/prover.rs index 636245ba..965002cf 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_opcode_small/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_opcode_small/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -170,12 +135,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), add_opcode_small_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), add_opcode_small_input), lookup_data)| { let input_tmp_8d553_0 = add_opcode_small_input; let input_pc_col0 = input_tmp_8d553_0.pc; *row[0] = input_pc_col0; @@ -272,7 +233,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col10 = ap_update_add_1_tmp_8d553_10.as_m31(); *row[10] = ap_update_add_1_col10; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, offset1_col4, offset2_col5], [ @@ -293,12 +254,7 @@ fn write_trace_simd( M31_1, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -339,13 +295,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_8d553_11); let dst_id_col14 = memory_address_to_id_value_tmp_8d553_11; *row[14] = dst_id_col14; - for (i, &input) in ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))), dst_id_col14, @@ -367,9 +318,7 @@ fn write_trace_simd( *row[18] = dst_limb_1_col18; let dst_limb_2_col19 = memory_id_to_big_value_tmp_8d553_12.get_m31(2); *row[19] = dst_limb_2_col19; - for (i, &input) in dst_id_col14.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = dst_id_col14.unpack(); *lookup_data.memory_id_to_big_0 = [ dst_id_col14, dst_limb_0_col17, @@ -410,13 +359,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_8d553_15); let op0_id_col20 = memory_address_to_id_value_tmp_8d553_15; *row[20] = op0_id_col20; - for (i, &input) in ((mem0_base_col12) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = + ((mem0_base_col12) + ((offset1_col4) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_1 = [ ((mem0_base_col12) + ((offset1_col4) - (M31_32768))), op0_id_col20, @@ -438,9 +382,7 @@ fn write_trace_simd( *row[24] = op0_limb_1_col24; let op0_limb_2_col25 = memory_id_to_big_value_tmp_8d553_16.get_m31(2); *row[25] = op0_limb_2_col25; - for (i, &input) in op0_id_col20.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = op0_id_col20.unpack(); *lookup_data.memory_id_to_big_1 = [ op0_id_col20, op0_limb_0_col23, @@ -481,13 +423,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_8d553_19); let op1_id_col26 = memory_address_to_id_value_tmp_8d553_19; *row[26] = op1_id_col26; - for (i, &input) in ((mem1_base_col13) + ((offset2_col5) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } + let memory_address_to_id_inputs_2 = + ((mem1_base_col13) + ((offset2_col5) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_2 = [ ((mem1_base_col13) + ((offset2_col5) - (M31_32768))), op1_id_col26, @@ -509,9 +446,7 @@ fn write_trace_simd( *row[30] = op1_limb_1_col30; let op1_limb_2_col31 = memory_id_to_big_value_tmp_8d553_20.get_m31(2); *row[31] = op1_limb_2_col31; - for (i, &input) in op1_id_col26.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } + let memory_id_to_big_inputs_2 = op1_id_col26.unpack(); *lookup_data.memory_id_to_big_2 = [ op1_id_col26, op1_limb_0_col29, @@ -550,10 +485,28 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col10)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/add_opcode_small_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/add_opcode_small_imm/prover.rs index 5d0409e0..5b3ab2c0 100644 --- a/stwo_cairo_prover/crates/prover/src/components/add_opcode_small_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/add_opcode_small_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -169,12 +134,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), add_opcode_small_imm_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), add_opcode_small_imm_input), lookup_data)| { let input_tmp_49e92_0 = add_opcode_small_imm_input; let input_pc_col0 = input_tmp_49e92_0.pc; *row[0] = input_pc_col0; @@ -239,7 +200,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col7 = ap_update_add_1_tmp_49e92_7.as_m31(); *row[7] = ap_update_add_1_col7; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, offset1_col4, M31_32769], [ @@ -260,12 +221,7 @@ fn write_trace_simd( M31_1, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -303,13 +259,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_49e92_8); let dst_id_col10 = memory_address_to_id_value_tmp_49e92_8; *row[10] = dst_id_col10; - for (i, &input) in ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))), dst_id_col10, @@ -331,9 +282,7 @@ fn write_trace_simd( *row[14] = dst_limb_1_col14; let dst_limb_2_col15 = memory_id_to_big_value_tmp_49e92_9.get_m31(2); *row[15] = dst_limb_2_col15; - for (i, &input) in dst_id_col10.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = dst_id_col10.unpack(); *lookup_data.memory_id_to_big_0 = [ dst_id_col10, dst_limb_0_col13, @@ -374,13 +323,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_49e92_12); let op0_id_col16 = memory_address_to_id_value_tmp_49e92_12; *row[16] = op0_id_col16; - for (i, &input) in ((mem0_base_col9) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = + ((mem0_base_col9) + ((offset1_col4) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_1 = [ ((mem0_base_col9) + ((offset1_col4) - (M31_32768))), op0_id_col16, @@ -402,9 +346,7 @@ fn write_trace_simd( *row[20] = op0_limb_1_col20; let op0_limb_2_col21 = memory_id_to_big_value_tmp_49e92_13.get_m31(2); *row[21] = op0_limb_2_col21; - for (i, &input) in op0_id_col16.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = op0_id_col16.unpack(); *lookup_data.memory_id_to_big_1 = [ op0_id_col16, op0_limb_0_col19, @@ -445,9 +387,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_49e92_16); let op1_id_col22 = memory_address_to_id_value_tmp_49e92_16; *row[22] = op1_id_col22; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } + let memory_address_to_id_inputs_2 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_2 = [((input_pc_col0) + (M31_1)), op1_id_col22]; // Cond Decode Small Sign. @@ -466,9 +406,7 @@ fn write_trace_simd( *row[26] = op1_limb_1_col26; let op1_limb_2_col27 = memory_id_to_big_value_tmp_49e92_17.get_m31(2); *row[27] = op1_limb_2_col27; - for (i, &input) in op1_id_col22.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } + let memory_id_to_big_inputs_2 = op1_id_col22.unpack(); *lookup_data.memory_id_to_big_2 = [ op1_id_col22, op1_limb_0_col25, @@ -507,10 +445,28 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col7)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode/prover.rs index daf9fc93..00a77c59 100644 --- a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,29 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -102,16 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -123,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -159,12 +131,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), assert_eq_opcode_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), assert_eq_opcode_input), lookup_data)| { let input_tmp_d6f03_0 = assert_eq_opcode_input; let input_pc_col0 = input_tmp_d6f03_0.pc; *row[0] = input_pc_col0; @@ -239,7 +207,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col8 = ap_update_add_1_tmp_d6f03_8.as_m31(); *row[8] = ap_update_add_1_col8; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, M31_32767, offset2_col4], [ @@ -260,12 +228,7 @@ fn write_trace_simd( M31_1, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -301,24 +264,14 @@ fn write_trace_simd( .deduce_output(((mem_dst_base_col9) + ((offset0_col3) - (M31_32768)))); let dst_id_col11 = memory_address_to_id_value_tmp_d6f03_9; *row[11] = dst_id_col11; - for (i, &input) in ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))), dst_id_col11, ]; - for (i, &input) in ((mem1_base_col10) + ((offset2_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = + ((mem1_base_col10) + ((offset2_col4) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_1 = [ ((mem1_base_col10) + ((offset2_col4) - (M31_32768))), dst_id_col11, @@ -330,10 +283,24 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col8)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_double_deref/prover.rs b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_double_deref/prover.rs index c3caeac9..a9ef87bb 100644 --- a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_double_deref/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_double_deref/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -169,12 +134,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), assert_eq_opcode_double_deref_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), assert_eq_opcode_double_deref_input), lookup_data)| { let input_tmp_26616_0 = assert_eq_opcode_double_deref_input; let input_pc_col0 = input_tmp_26616_0.pc; *row[0] = input_pc_col0; @@ -251,7 +212,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col8 = ap_update_add_1_tmp_26616_8.as_m31(); *row[8] = ap_update_add_1_col8; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, offset1_col4, offset2_col5], [ @@ -272,12 +233,7 @@ fn write_trace_simd( M31_1, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -315,13 +271,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_26616_9); let mem1_base_id_col11 = memory_address_to_id_value_tmp_26616_9; *row[11] = mem1_base_id_col11; - for (i, &input) in ((mem0_base_col10) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem0_base_col10) + ((offset1_col4) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem0_base_col10) + ((offset1_col4) - (M31_32768))), mem1_base_id_col11, @@ -332,9 +283,7 @@ fn write_trace_simd( *row[13] = mem1_base_limb_1_col13; let mem1_base_limb_2_col14 = memory_id_to_big_value_tmp_26616_10.get_m31(2); *row[14] = mem1_base_limb_2_col14; - for (i, &input) in mem1_base_id_col11.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = mem1_base_id_col11.unpack(); *lookup_data.memory_id_to_big_0 = [ mem1_base_id_col11, mem1_base_limb_0_col12, @@ -373,27 +322,17 @@ fn write_trace_simd( .deduce_output(((mem_dst_base_col9) + ((offset0_col3) - (M31_32768)))); let dst_id_col15 = memory_address_to_id_value_tmp_26616_11; *row[15] = dst_id_col15; - for (i, &input) in ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = + ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_1 = [ ((mem_dst_base_col9) + ((offset0_col3) - (M31_32768))), dst_id_col15, ]; - for (i, &input) in ((((mem1_base_limb_0_col12) + let memory_address_to_id_inputs_2 = ((((mem1_base_limb_0_col12) + ((mem1_base_limb_1_col13) * (M31_512))) + ((mem1_base_limb_2_col14) * (M31_262144))) + ((offset2_col5) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } + .unpack(); *lookup_data.memory_address_to_id_2 = [ ((((mem1_base_limb_0_col12) + ((mem1_base_limb_1_col13) * (M31_512))) + ((mem1_base_limb_2_col14) * (M31_262144))) @@ -407,10 +346,26 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col8)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_imm/prover.rs index 5a3d6d64..a2173f6c 100644 --- a/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/assert_eq_opcode_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,29 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -102,16 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -123,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -157,12 +129,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), assert_eq_opcode_imm_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), assert_eq_opcode_imm_input), lookup_data)| { let input_tmp_90279_0 = assert_eq_opcode_imm_input; let input_pc_col0 = input_tmp_90279_0.pc; *row[0] = input_pc_col0; @@ -205,7 +173,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col5 = ap_update_add_1_tmp_90279_5.as_m31(); *row[5] = ap_update_add_1_col5; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, M31_32767, M31_32769], [ @@ -226,12 +194,7 @@ fn write_trace_simd( M31_1, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -264,20 +227,13 @@ fn write_trace_simd( .deduce_output(((mem_dst_base_col6) + ((offset0_col3) - (M31_32768)))); let dst_id_col7 = memory_address_to_id_value_tmp_90279_6; *row[7] = dst_id_col7; - for (i, &input) in ((mem_dst_base_col6) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col6) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem_dst_base_col6) + ((offset0_col3) - (M31_32768))), dst_id_col7, ]; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_1 = [((input_pc_col0) + (M31_1)), dst_id_col7]; *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; @@ -286,10 +242,24 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col5)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/call_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/call_opcode/prover.rs index 2e7fb29e..81a20001 100644 --- a/stwo_cairo_prover/crates/prover/src/components/call_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/call_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -162,249 +127,242 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), call_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_32b66_0 = call_opcode_input; - let input_pc_col0 = input_tmp_32b66_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_32b66_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_32b66_0.fp; - *row[2] = input_fp_col2; - - // Decode Instruction. - - let memory_address_to_id_value_tmp_32b66_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_32b66_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_1); - let offset2_tmp_32b66_3 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_32b66_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_32b66_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_32b66_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col3 = offset2_tmp_32b66_3.as_m31(); - *row[3] = offset2_col3; - for (i, &input) in ( - input_pc_col0, - [M31_32768, M31_32769, offset2_col3], - [ - M31_0, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, M31_1, M31_0, M31_0, - M31_0, M31_0, M31_1, M31_0, M31_0, - ], - ) - .unpack() - .iter() - .enumerate() + .for_each(|(((row_index, row), call_opcode_input), lookup_data)| { + let input_tmp_32b66_0 = call_opcode_input; + let input_pc_col0 = input_tmp_32b66_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_32b66_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_32b66_0.fp; + *row[2] = input_fp_col2; + + // Decode Instruction. + + let memory_address_to_id_value_tmp_32b66_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_32b66_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_1); + let offset2_tmp_32b66_3 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_32b66_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_32b66_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_32b66_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col3 = offset2_tmp_32b66_3.as_m31(); + *row[3] = offset2_col3; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32768, M31_32769, offset2_col3], + [ + M31_0, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, + M31_0, M31_1, M31_0, M31_0, + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32768, + M31_32769, + offset2_col3, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 27. + + let memory_address_to_id_value_tmp_32b66_4 = + memory_address_to_id_state.deduce_output(input_ap_col1); + let memory_id_to_big_value_tmp_32b66_5 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_4); + let stored_fp_id_col4 = memory_address_to_id_value_tmp_32b66_4; + *row[4] = stored_fp_id_col4; + let memory_address_to_id_inputs_0 = input_ap_col1.unpack(); + *lookup_data.memory_address_to_id_0 = [input_ap_col1, stored_fp_id_col4]; + let stored_fp_limb_0_col5 = memory_id_to_big_value_tmp_32b66_5.get_m31(0); + *row[5] = stored_fp_limb_0_col5; + let stored_fp_limb_1_col6 = memory_id_to_big_value_tmp_32b66_5.get_m31(1); + *row[6] = stored_fp_limb_1_col6; + let stored_fp_limb_2_col7 = memory_id_to_big_value_tmp_32b66_5.get_m31(2); + *row[7] = stored_fp_limb_2_col7; + let memory_id_to_big_inputs_0 = stored_fp_id_col4.unpack(); + *lookup_data.memory_id_to_big_0 = [ + stored_fp_id_col4, + stored_fp_limb_0_col5, + stored_fp_limb_1_col6, + stored_fp_limb_2_col7, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 27. + + let memory_address_to_id_value_tmp_32b66_6 = + memory_address_to_id_state.deduce_output(((input_ap_col1) + (M31_1))); + let memory_id_to_big_value_tmp_32b66_7 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_6); + let stored_ret_pc_id_col8 = memory_address_to_id_value_tmp_32b66_6; + *row[8] = stored_ret_pc_id_col8; + let memory_address_to_id_inputs_1 = ((input_ap_col1) + (M31_1)).unpack(); + *lookup_data.memory_address_to_id_1 = + [((input_ap_col1) + (M31_1)), stored_ret_pc_id_col8]; + let stored_ret_pc_limb_0_col9 = memory_id_to_big_value_tmp_32b66_7.get_m31(0); + *row[9] = stored_ret_pc_limb_0_col9; + let stored_ret_pc_limb_1_col10 = memory_id_to_big_value_tmp_32b66_7.get_m31(1); + *row[10] = stored_ret_pc_limb_1_col10; + let stored_ret_pc_limb_2_col11 = memory_id_to_big_value_tmp_32b66_7.get_m31(2); + *row[11] = stored_ret_pc_limb_2_col11; + let memory_id_to_big_inputs_1 = stored_ret_pc_id_col8.unpack(); + *lookup_data.memory_id_to_big_1 = [ + stored_ret_pc_id_col8, + stored_ret_pc_limb_0_col9, + stored_ret_pc_limb_1_col10, + stored_ret_pc_limb_2_col11, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 27. + + let memory_address_to_id_value_tmp_32b66_8 = memory_address_to_id_state + .deduce_output(((input_ap_col1) + ((offset2_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_32b66_9 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_8); + let next_pc_id_col12 = memory_address_to_id_value_tmp_32b66_8; + *row[12] = next_pc_id_col12; + let memory_address_to_id_inputs_2 = + ((input_ap_col1) + ((offset2_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_2 = [ + ((input_ap_col1) + ((offset2_col3) - (M31_32768))), + next_pc_id_col12, + ]; + let next_pc_limb_0_col13 = memory_id_to_big_value_tmp_32b66_9.get_m31(0); + *row[13] = next_pc_limb_0_col13; + let next_pc_limb_1_col14 = memory_id_to_big_value_tmp_32b66_9.get_m31(1); + *row[14] = next_pc_limb_1_col14; + let next_pc_limb_2_col15 = memory_id_to_big_value_tmp_32b66_9.get_m31(2); + *row[15] = next_pc_limb_2_col15; + let memory_id_to_big_inputs_2 = next_pc_id_col12.unpack(); + *lookup_data.memory_id_to_big_2 = [ + next_pc_id_col12, + next_pc_limb_0_col13, + next_pc_limb_1_col14, + next_pc_limb_2_col15, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + (((next_pc_limb_0_col13) + ((next_pc_limb_1_col14) * (M31_512))) + + ((next_pc_limb_2_col15) * (M31_262144))), + ((input_ap_col1) + (M31_2)), + ((input_ap_col1) + (M31_2)), + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32768, - M31_32769, - offset2_col3, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - ]; - - // Read Positive Num Bits 27. - - let memory_address_to_id_value_tmp_32b66_4 = - memory_address_to_id_state.deduce_output(input_ap_col1); - let memory_id_to_big_value_tmp_32b66_5 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_4); - let stored_fp_id_col4 = memory_address_to_id_value_tmp_32b66_4; - *row[4] = stored_fp_id_col4; - for (i, &input) in input_ap_col1.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); } - *lookup_data.memory_address_to_id_0 = [input_ap_col1, stored_fp_id_col4]; - let stored_fp_limb_0_col5 = memory_id_to_big_value_tmp_32b66_5.get_m31(0); - *row[5] = stored_fp_limb_0_col5; - let stored_fp_limb_1_col6 = memory_id_to_big_value_tmp_32b66_5.get_m31(1); - *row[6] = stored_fp_limb_1_col6; - let stored_fp_limb_2_col7 = memory_id_to_big_value_tmp_32b66_5.get_m31(2); - *row[7] = stored_fp_limb_2_col7; - for (i, &input) in stored_fp_id_col4.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - stored_fp_id_col4, - stored_fp_limb_0_col5, - stored_fp_limb_1_col6, - stored_fp_limb_2_col7, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - // Read Positive Num Bits 27. - - let memory_address_to_id_value_tmp_32b66_6 = - memory_address_to_id_state.deduce_output(((input_ap_col1) + (M31_1))); - let memory_id_to_big_value_tmp_32b66_7 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_6); - let stored_ret_pc_id_col8 = memory_address_to_id_value_tmp_32b66_6; - *row[8] = stored_ret_pc_id_col8; - for (i, &input) in ((input_ap_col1) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = - [((input_ap_col1) + (M31_1)), stored_ret_pc_id_col8]; - let stored_ret_pc_limb_0_col9 = memory_id_to_big_value_tmp_32b66_7.get_m31(0); - *row[9] = stored_ret_pc_limb_0_col9; - let stored_ret_pc_limb_1_col10 = memory_id_to_big_value_tmp_32b66_7.get_m31(1); - *row[10] = stored_ret_pc_limb_1_col10; - let stored_ret_pc_limb_2_col11 = memory_id_to_big_value_tmp_32b66_7.get_m31(2); - *row[11] = stored_ret_pc_limb_2_col11; - for (i, &input) in stored_ret_pc_id_col8.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - stored_ret_pc_id_col8, - stored_ret_pc_limb_0_col9, - stored_ret_pc_limb_1_col10, - stored_ret_pc_limb_2_col11, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - // Read Positive Num Bits 27. - - let memory_address_to_id_value_tmp_32b66_8 = memory_address_to_id_state - .deduce_output(((input_ap_col1) + ((offset2_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_32b66_9 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_32b66_8); - let next_pc_id_col12 = memory_address_to_id_value_tmp_32b66_8; - *row[12] = next_pc_id_col12; - for (i, &input) in ((input_ap_col1) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = [ - ((input_ap_col1) + ((offset2_col3) - (M31_32768))), - next_pc_id_col12, - ]; - let next_pc_limb_0_col13 = memory_id_to_big_value_tmp_32b66_9.get_m31(0); - *row[13] = next_pc_limb_0_col13; - let next_pc_limb_1_col14 = memory_id_to_big_value_tmp_32b66_9.get_m31(1); - *row[14] = next_pc_limb_1_col14; - let next_pc_limb_2_col15 = memory_id_to_big_value_tmp_32b66_9.get_m31(2); - *row[15] = next_pc_limb_2_col15; - for (i, &input) in next_pc_id_col12.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - next_pc_id_col12, - next_pc_limb_0_col13, - next_pc_limb_1_col14, - next_pc_limb_2_col15, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - (((next_pc_limb_0_col13) + ((next_pc_limb_1_col14) * (M31_512))) - + ((next_pc_limb_2_col15) * (M31_262144))), - ((input_ap_col1) + (M31_2)), - ((input_ap_col1) + (M31_2)), - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/call_opcode_op_1_base_fp/prover.rs b/stwo_cairo_prover/crates/prover/src/components/call_opcode_op_1_base_fp/prover.rs index 4b59d089..29e52055 100644 --- a/stwo_cairo_prover/crates/prover/src/components/call_opcode_op_1_base_fp/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/call_opcode_op_1_base_fp/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -162,12 +127,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), call_opcode_op_1_base_fp_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), call_opcode_op_1_base_fp_input), lookup_data)| { let input_tmp_82665_0 = call_opcode_op_1_base_fp_input; let input_pc_col0 = input_tmp_82665_0.pc; *row[0] = input_pc_col0; @@ -194,7 +155,7 @@ fn write_trace_simd( << (UInt16_13))); let offset2_col3 = offset2_tmp_82665_3.as_m31(); *row[3] = offset2_col3; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [M31_32768, M31_32769, offset2_col3], [ @@ -202,12 +163,7 @@ fn write_trace_simd( M31_0, M31_0, M31_1, M31_0, M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, M31_32768, @@ -238,9 +194,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_82665_4); let stored_fp_id_col4 = memory_address_to_id_value_tmp_82665_4; *row[4] = stored_fp_id_col4; - for (i, &input) in input_ap_col1.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = input_ap_col1.unpack(); *lookup_data.memory_address_to_id_0 = [input_ap_col1, stored_fp_id_col4]; let stored_fp_limb_0_col5 = memory_id_to_big_value_tmp_82665_5.get_m31(0); *row[5] = stored_fp_limb_0_col5; @@ -248,9 +202,7 @@ fn write_trace_simd( *row[6] = stored_fp_limb_1_col6; let stored_fp_limb_2_col7 = memory_id_to_big_value_tmp_82665_5.get_m31(2); *row[7] = stored_fp_limb_2_col7; - for (i, &input) in stored_fp_id_col4.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = stored_fp_id_col4.unpack(); *lookup_data.memory_id_to_big_0 = [ stored_fp_id_col4, stored_fp_limb_0_col5, @@ -291,9 +243,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_82665_6); let stored_ret_pc_id_col8 = memory_address_to_id_value_tmp_82665_6; *row[8] = stored_ret_pc_id_col8; - for (i, &input) in ((input_ap_col1) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = ((input_ap_col1) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_1 = [((input_ap_col1) + (M31_1)), stored_ret_pc_id_col8]; let stored_ret_pc_limb_0_col9 = memory_id_to_big_value_tmp_82665_7.get_m31(0); @@ -302,9 +252,7 @@ fn write_trace_simd( *row[10] = stored_ret_pc_limb_1_col10; let stored_ret_pc_limb_2_col11 = memory_id_to_big_value_tmp_82665_7.get_m31(2); *row[11] = stored_ret_pc_limb_2_col11; - for (i, &input) in stored_ret_pc_id_col8.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = stored_ret_pc_id_col8.unpack(); *lookup_data.memory_id_to_big_1 = [ stored_ret_pc_id_col8, stored_ret_pc_limb_0_col9, @@ -345,13 +293,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_82665_8); let next_pc_id_col12 = memory_address_to_id_value_tmp_82665_8; *row[12] = next_pc_id_col12; - for (i, &input) in ((input_fp_col2) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } + let memory_address_to_id_inputs_2 = + ((input_fp_col2) + ((offset2_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_2 = [ ((input_fp_col2) + ((offset2_col3) - (M31_32768))), next_pc_id_col12, @@ -362,9 +305,7 @@ fn write_trace_simd( *row[14] = next_pc_limb_1_col14; let next_pc_limb_2_col15 = memory_id_to_big_value_tmp_82665_9.get_m31(2); *row[15] = next_pc_limb_2_col15; - for (i, &input) in next_pc_id_col12.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } + let memory_id_to_big_inputs_2 = next_pc_id_col12.unpack(); *lookup_data.memory_id_to_big_2 = [ next_pc_id_col12, next_pc_limb_0_col13, @@ -404,10 +345,28 @@ fn write_trace_simd( ((input_ap_col1) + (M31_2)), ((input_ap_col1) + (M31_2)), ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/call_opcode_rel/prover.rs b/stwo_cairo_prover/crates/prover/src/components/call_opcode_rel/prover.rs index 0941e240..e26920c8 100644 --- a/stwo_cairo_prover/crates/prover/src/components/call_opcode_rel/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/call_opcode_rel/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -162,252 +127,244 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |( - (((row_index, row), call_opcode_rel_input), lookup_data), - mut sub_components_inputs, - )| { - let input_tmp_4997f_0 = call_opcode_rel_input; - let input_pc_col0 = input_tmp_4997f_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_4997f_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_4997f_0.fp; - *row[2] = input_fp_col2; - - // Decode Instruction. - - let memory_address_to_id_value_tmp_4997f_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_4997f_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_1); - for (i, &input) in ( - input_pc_col0, - [M31_32768, M31_32769, M31_32769], - [ - M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, M31_0, M31_0, M31_1, M31_0, - M31_0, M31_0, M31_1, M31_0, M31_0, - ], - ) - .unpack() - .iter() - .enumerate() + .for_each(|(((row_index, row), call_opcode_rel_input), lookup_data)| { + let input_tmp_4997f_0 = call_opcode_rel_input; + let input_pc_col0 = input_tmp_4997f_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_4997f_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_4997f_0.fp; + *row[2] = input_fp_col2; + + // Decode Instruction. + + let memory_address_to_id_value_tmp_4997f_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_4997f_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_1); + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32768, M31_32769, M31_32769], + [ + M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, + M31_0, M31_1, M31_0, M31_0, + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32768, + M31_32769, + M31_32769, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 27. + + let memory_address_to_id_value_tmp_4997f_3 = + memory_address_to_id_state.deduce_output(input_ap_col1); + let memory_id_to_big_value_tmp_4997f_4 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_3); + let stored_fp_id_col3 = memory_address_to_id_value_tmp_4997f_3; + *row[3] = stored_fp_id_col3; + let memory_address_to_id_inputs_0 = input_ap_col1.unpack(); + *lookup_data.memory_address_to_id_0 = [input_ap_col1, stored_fp_id_col3]; + let stored_fp_limb_0_col4 = memory_id_to_big_value_tmp_4997f_4.get_m31(0); + *row[4] = stored_fp_limb_0_col4; + let stored_fp_limb_1_col5 = memory_id_to_big_value_tmp_4997f_4.get_m31(1); + *row[5] = stored_fp_limb_1_col5; + let stored_fp_limb_2_col6 = memory_id_to_big_value_tmp_4997f_4.get_m31(2); + *row[6] = stored_fp_limb_2_col6; + let memory_id_to_big_inputs_0 = stored_fp_id_col3.unpack(); + *lookup_data.memory_id_to_big_0 = [ + stored_fp_id_col3, + stored_fp_limb_0_col4, + stored_fp_limb_1_col5, + stored_fp_limb_2_col6, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 27. + + let memory_address_to_id_value_tmp_4997f_5 = + memory_address_to_id_state.deduce_output(((input_ap_col1) + (M31_1))); + let memory_id_to_big_value_tmp_4997f_6 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_5); + let stored_ret_pc_id_col7 = memory_address_to_id_value_tmp_4997f_5; + *row[7] = stored_ret_pc_id_col7; + let memory_address_to_id_inputs_1 = ((input_ap_col1) + (M31_1)).unpack(); + *lookup_data.memory_address_to_id_1 = + [((input_ap_col1) + (M31_1)), stored_ret_pc_id_col7]; + let stored_ret_pc_limb_0_col8 = memory_id_to_big_value_tmp_4997f_6.get_m31(0); + *row[8] = stored_ret_pc_limb_0_col8; + let stored_ret_pc_limb_1_col9 = memory_id_to_big_value_tmp_4997f_6.get_m31(1); + *row[9] = stored_ret_pc_limb_1_col9; + let stored_ret_pc_limb_2_col10 = memory_id_to_big_value_tmp_4997f_6.get_m31(2); + *row[10] = stored_ret_pc_limb_2_col10; + let memory_id_to_big_inputs_1 = stored_ret_pc_id_col7.unpack(); + *lookup_data.memory_id_to_big_1 = [ + stored_ret_pc_id_col7, + stored_ret_pc_limb_0_col8, + stored_ret_pc_limb_1_col9, + stored_ret_pc_limb_2_col10, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; + + // Read Small. + + let memory_address_to_id_value_tmp_4997f_7 = + memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); + let memory_id_to_big_value_tmp_4997f_8 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_7); + let distance_to_next_pc_id_col11 = memory_address_to_id_value_tmp_4997f_7; + *row[11] = distance_to_next_pc_id_col11; + let memory_address_to_id_inputs_2 = ((input_pc_col0) + (M31_1)).unpack(); + *lookup_data.memory_address_to_id_2 = + [((input_pc_col0) + (M31_1)), distance_to_next_pc_id_col11]; + + // Cond Decode Small Sign. + + let msb_tmp_4997f_9 = memory_id_to_big_value_tmp_4997f_8.get_m31(27).eq(M31_256); + let msb_col12 = msb_tmp_4997f_9.as_m31(); + *row[12] = msb_col12; + let mid_limbs_set_tmp_4997f_10 = + memory_id_to_big_value_tmp_4997f_8.get_m31(20).eq(M31_511); + let mid_limbs_set_col13 = mid_limbs_set_tmp_4997f_10.as_m31(); + *row[13] = mid_limbs_set_col13; + + let distance_to_next_pc_limb_0_col14 = memory_id_to_big_value_tmp_4997f_8.get_m31(0); + *row[14] = distance_to_next_pc_limb_0_col14; + let distance_to_next_pc_limb_1_col15 = memory_id_to_big_value_tmp_4997f_8.get_m31(1); + *row[15] = distance_to_next_pc_limb_1_col15; + let distance_to_next_pc_limb_2_col16 = memory_id_to_big_value_tmp_4997f_8.get_m31(2); + *row[16] = distance_to_next_pc_limb_2_col16; + let memory_id_to_big_inputs_2 = distance_to_next_pc_id_col11.unpack(); + *lookup_data.memory_id_to_big_2 = [ + distance_to_next_pc_id_col11, + distance_to_next_pc_limb_0_col14, + distance_to_next_pc_limb_1_col15, + distance_to_next_pc_limb_2_col16, + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + ((mid_limbs_set_col13) * (M31_511)), + (((M31_136) * (msb_col12)) - (mid_limbs_set_col13)), + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ((msb_col12) * (M31_256)), + ]; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + + (((((distance_to_next_pc_limb_0_col14) + + ((distance_to_next_pc_limb_1_col15) * (M31_512))) + + ((distance_to_next_pc_limb_2_col16) * (M31_262144))) + - (msb_col12)) + - ((M31_134217728) * (mid_limbs_set_col13)))), + ((input_ap_col1) + (M31_2)), + ((input_ap_col1) + (M31_2)), + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32768, - M31_32769, - M31_32769, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - ]; - - // Read Positive Num Bits 27. - - let memory_address_to_id_value_tmp_4997f_3 = - memory_address_to_id_state.deduce_output(input_ap_col1); - let memory_id_to_big_value_tmp_4997f_4 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_3); - let stored_fp_id_col3 = memory_address_to_id_value_tmp_4997f_3; - *row[3] = stored_fp_id_col3; - for (i, &input) in input_ap_col1.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [input_ap_col1, stored_fp_id_col3]; - let stored_fp_limb_0_col4 = memory_id_to_big_value_tmp_4997f_4.get_m31(0); - *row[4] = stored_fp_limb_0_col4; - let stored_fp_limb_1_col5 = memory_id_to_big_value_tmp_4997f_4.get_m31(1); - *row[5] = stored_fp_limb_1_col5; - let stored_fp_limb_2_col6 = memory_id_to_big_value_tmp_4997f_4.get_m31(2); - *row[6] = stored_fp_limb_2_col6; - for (i, &input) in stored_fp_id_col3.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - stored_fp_id_col3, - stored_fp_limb_0_col4, - stored_fp_limb_1_col5, - stored_fp_limb_2_col6, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - // Read Positive Num Bits 27. - - let memory_address_to_id_value_tmp_4997f_5 = - memory_address_to_id_state.deduce_output(((input_ap_col1) + (M31_1))); - let memory_id_to_big_value_tmp_4997f_6 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_5); - let stored_ret_pc_id_col7 = memory_address_to_id_value_tmp_4997f_5; - *row[7] = stored_ret_pc_id_col7; - for (i, &input) in ((input_ap_col1) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = - [((input_ap_col1) + (M31_1)), stored_ret_pc_id_col7]; - let stored_ret_pc_limb_0_col8 = memory_id_to_big_value_tmp_4997f_6.get_m31(0); - *row[8] = stored_ret_pc_limb_0_col8; - let stored_ret_pc_limb_1_col9 = memory_id_to_big_value_tmp_4997f_6.get_m31(1); - *row[9] = stored_ret_pc_limb_1_col9; - let stored_ret_pc_limb_2_col10 = memory_id_to_big_value_tmp_4997f_6.get_m31(2); - *row[10] = stored_ret_pc_limb_2_col10; - for (i, &input) in stored_ret_pc_id_col7.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - stored_ret_pc_id_col7, - stored_ret_pc_limb_0_col8, - stored_ret_pc_limb_1_col9, - stored_ret_pc_limb_2_col10, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - // Read Small. - - let memory_address_to_id_value_tmp_4997f_7 = - memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); - let memory_id_to_big_value_tmp_4997f_8 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4997f_7); - let distance_to_next_pc_id_col11 = memory_address_to_id_value_tmp_4997f_7; - *row[11] = distance_to_next_pc_id_col11; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = - [((input_pc_col0) + (M31_1)), distance_to_next_pc_id_col11]; - - // Cond Decode Small Sign. - - let msb_tmp_4997f_9 = memory_id_to_big_value_tmp_4997f_8.get_m31(27).eq(M31_256); - let msb_col12 = msb_tmp_4997f_9.as_m31(); - *row[12] = msb_col12; - let mid_limbs_set_tmp_4997f_10 = - memory_id_to_big_value_tmp_4997f_8.get_m31(20).eq(M31_511); - let mid_limbs_set_col13 = mid_limbs_set_tmp_4997f_10.as_m31(); - *row[13] = mid_limbs_set_col13; - - let distance_to_next_pc_limb_0_col14 = - memory_id_to_big_value_tmp_4997f_8.get_m31(0); - *row[14] = distance_to_next_pc_limb_0_col14; - let distance_to_next_pc_limb_1_col15 = - memory_id_to_big_value_tmp_4997f_8.get_m31(1); - *row[15] = distance_to_next_pc_limb_1_col15; - let distance_to_next_pc_limb_2_col16 = - memory_id_to_big_value_tmp_4997f_8.get_m31(2); - *row[16] = distance_to_next_pc_limb_2_col16; - for (i, &input) in distance_to_next_pc_id_col11.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - distance_to_next_pc_id_col11, - distance_to_next_pc_limb_0_col14, - distance_to_next_pc_limb_1_col15, - distance_to_next_pc_limb_2_col16, - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - ((mid_limbs_set_col13) * (M31_511)), - (((M31_136) * (msb_col12)) - (mid_limbs_set_col13)), - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ((msb_col12) * (M31_256)), - ]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) - + (((((distance_to_next_pc_limb_0_col14) - + ((distance_to_next_pc_limb_1_col15) * (M31_512))) - + ((distance_to_next_pc_limb_2_col16) * (M31_262144))) - - (msb_col12)) - - ((M31_134217728) * (mid_limbs_set_col13)))), - ((input_ap_col1) + (M31_2)), - ((input_ap_col1) + (M31_2)), - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs index c4ed0aa1..f69f7e2c 100644 --- a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,6 +27,8 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; +use stwo_prover::core::utils::bit_reverse_index; +use stwo_prover::core::utils::coset_index_to_circle_domain_index; use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -66,23 +67,8 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = - write_trace_simd(n_rows,packed_inputs,memory_address_to_id_state,memory_id_to_big_state,); - - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs.memory_address_to_id_inputs.iter().for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - });sub_components_inputs.memory_id_to_big_inputs.iter().for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - });sub_components_inputs.range_check_19_inputs.iter().for_each(|inputs| { - range_check_19_state.add_inputs(&inputs[..n_rows]); - });sub_components_inputs.range_check_9_9_inputs.iter().for_each(|inputs| { - range_check_9_9_state.add_inputs(&inputs[..n_rows]); - });sub_components_inputs.verify_instruction_inputs.iter().for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); + let (trace, lookup_data) = + write_trace_simd(n_rows,packed_inputs,memory_address_to_id_state,memory_id_to_big_state,range_check_19_state,range_check_9_9_state,verify_instruction_state,); tree_builder.extend_evals(trace.to_evals()); @@ -96,30 +82,22 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType],) {unimplemented!("Implement manually");} } -#[derive(SubComponentInputs,Uninitialized,IterMut, ParIterMut)] -pub struct SubComponentInputs -{pub memory_address_to_id_inputs: [Vec; 3],pub memory_id_to_big_inputs: [Vec; 3],pub range_check_19_inputs: [Vec; 28],pub range_check_9_9_inputs: [Vec; 28],pub verify_instruction_inputs: [Vec; 1],} - #[allow(clippy::useless_conversion)] #[allow(unused_variables)] #[allow(clippy::double_parens)] #[allow(non_snake_case)] fn write_trace_simd( - n_rows: usize,inputs: Vec,memory_address_to_id_state: &memory_address_to_id::ClaimGenerator,memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, + n_rows: usize,inputs: Vec,memory_address_to_id_state: &memory_address_to_id::ClaimGenerator,memory_id_to_big_state: &memory_id_to_big::ClaimGenerator,range_check_19_state: &range_check_19::ClaimGenerator,range_check_9_9_state: &range_check_9_9::ClaimGenerator,verify_instruction_state: &verify_instruction::ClaimGenerator, ) -> (ComponentTrace, - SubComponentInputs, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -130,1068 +108,589 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |((((row_index, row), generic_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_57455_0 = generic_opcode_input; -let input_pc_col0 = input_tmp_57455_0.pc; - *row[0] = input_pc_col0; -let input_ap_col1 = input_tmp_57455_0.ap; - *row[1] = input_ap_col1; -let input_fp_col2 = input_tmp_57455_0.fp; + |(((row_index, row), generic_opcode_input), lookup_data)| { + let input_tmp_57455_0 = generic_opcode_input;let input_pc_col0 = input_tmp_57455_0.pc; + *row[0] = input_pc_col0;let input_ap_col1 = input_tmp_57455_0.ap; + *row[1] = input_ap_col1;let input_fp_col2 = input_tmp_57455_0.fp; *row[2] = input_fp_col2; - //Decode Generic Instruction. - - - //Decode Instruction. - -let memory_address_to_id_value_tmp_57455_1 = memory_address_to_id_state.deduce_output( + let memory_address_to_id_value_tmp_57455_1 = memory_address_to_id_state.deduce_output( input_pc_col0 - ); -let memory_id_to_big_value_tmp_57455_2 = memory_id_to_big_state.deduce_output( + );let memory_id_to_big_value_tmp_57455_2 = memory_id_to_big_state.deduce_output( memory_address_to_id_value_tmp_57455_1 - ); -let offset0_tmp_57455_3 = ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(0))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(1))) & (UInt16_127))) << (UInt16_9)))); -let offset0_col3 = offset0_tmp_57455_3.as_m31(); - *row[3] = offset0_col3; -let offset1_tmp_57455_4 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(1))) >> (UInt16_7))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(2))) << (UInt16_2))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(3))) & (UInt16_31))) << (UInt16_11)))); -let offset1_col4 = offset1_tmp_57455_4.as_m31(); - *row[4] = offset1_col4; -let offset2_tmp_57455_5 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(3))) >> (UInt16_5))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(4))) << (UInt16_4))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) & (UInt16_7))) << (UInt16_13)))); -let offset2_col5 = offset2_tmp_57455_5.as_m31(); - *row[5] = offset2_col5; -let dst_base_fp_tmp_57455_6 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_0))) & (UInt16_1)); -let dst_base_fp_col6 = dst_base_fp_tmp_57455_6.as_m31(); - *row[6] = dst_base_fp_col6; -let op0_base_fp_tmp_57455_7 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_1))) & (UInt16_1)); -let op0_base_fp_col7 = op0_base_fp_tmp_57455_7.as_m31(); - *row[7] = op0_base_fp_col7; -let op1_imm_tmp_57455_8 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_2))) & (UInt16_1)); -let op1_imm_col8 = op1_imm_tmp_57455_8.as_m31(); - *row[8] = op1_imm_col8; -let op1_base_fp_tmp_57455_9 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_3))) & (UInt16_1)); -let op1_base_fp_col9 = op1_base_fp_tmp_57455_9.as_m31(); - *row[9] = op1_base_fp_col9; -let op1_base_ap_tmp_57455_10 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_4))) & (UInt16_1)); -let op1_base_ap_col10 = op1_base_ap_tmp_57455_10.as_m31(); - *row[10] = op1_base_ap_col10; -let res_add_tmp_57455_11 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_5))) & (UInt16_1)); -let res_add_col11 = res_add_tmp_57455_11.as_m31(); - *row[11] = res_add_col11; -let res_mul_tmp_57455_12 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_6))) & (UInt16_1)); -let res_mul_col12 = res_mul_tmp_57455_12.as_m31(); - *row[12] = res_mul_col12; -let pc_update_jump_tmp_57455_13 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_7))) & (UInt16_1)); -let pc_update_jump_col13 = pc_update_jump_tmp_57455_13.as_m31(); - *row[13] = pc_update_jump_col13; -let pc_update_jump_rel_tmp_57455_14 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_8))) & (UInt16_1)); -let pc_update_jump_rel_col14 = pc_update_jump_rel_tmp_57455_14.as_m31(); - *row[14] = pc_update_jump_rel_col14; -let pc_update_jnz_tmp_57455_15 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_9))) & (UInt16_1)); -let pc_update_jnz_col15 = pc_update_jnz_tmp_57455_15.as_m31(); - *row[15] = pc_update_jnz_col15; -let ap_update_add_tmp_57455_16 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_10))) & (UInt16_1)); -let ap_update_add_col16 = ap_update_add_tmp_57455_16.as_m31(); - *row[16] = ap_update_add_col16; -let ap_update_add_1_tmp_57455_17 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_11))) & (UInt16_1)); -let ap_update_add_1_col17 = ap_update_add_1_tmp_57455_17.as_m31(); - *row[17] = ap_update_add_1_col17; -let opcode_call_tmp_57455_18 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_12))) & (UInt16_1)); -let opcode_call_col18 = opcode_call_tmp_57455_18.as_m31(); - *row[18] = opcode_call_col18; -let opcode_ret_tmp_57455_19 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_13))) & (UInt16_1)); -let opcode_ret_col19 = opcode_ret_tmp_57455_19.as_m31(); - *row[19] = opcode_ret_col19; -let opcode_assert_eq_tmp_57455_20 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_14))) & (UInt16_1)); -let opcode_assert_eq_col20 = opcode_assert_eq_tmp_57455_20.as_m31(); - *row[20] = opcode_assert_eq_col20; -for (i, &input) in (input_pc_col0, [offset0_col3, offset1_col4, offset2_col5], [dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]).unpack().iter().enumerate() { - *sub_components_inputs[i] - .verify_instruction_inputs[0] = input; - } -*lookup_data.verify_instruction_0 = [input_pc_col0, offset0_col3, offset1_col4, offset2_col5, dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]; - - - -let op1_base_op0_tmp_57455_21 = ((((((M31_1) - (op1_imm_col8))) - (op1_base_fp_col9))) - (op1_base_ap_col10)); -let res_op1_tmp_57455_22 = ((((((M31_1) - (res_add_col11))) - (res_mul_col12))) - (pc_update_jnz_col15)); -let pc_update_regular_tmp_57455_23 = ((((((M31_1) - (pc_update_jump_col13))) - (pc_update_jump_rel_col14))) - (pc_update_jnz_col15)); -let ap_update_regular_tmp_57455_24 = ((((((M31_1) - (ap_update_add_col16))) - (ap_update_add_1_col17))) - (opcode_call_col18)); -let fp_update_regular_tmp_57455_25 = ((((M31_1) - (opcode_call_col18))) - (opcode_ret_col19)); - - - - + );let offset0_tmp_57455_3 = ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(0))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(1))) & (UInt16_127))) << (UInt16_9))));let offset0_col3 = offset0_tmp_57455_3.as_m31(); + *row[3] = offset0_col3;let offset1_tmp_57455_4 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(1))) >> (UInt16_7))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(2))) << (UInt16_2))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(3))) & (UInt16_31))) << (UInt16_11))));let offset1_col4 = offset1_tmp_57455_4.as_m31(); + *row[4] = offset1_col4;let offset2_tmp_57455_5 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(3))) >> (UInt16_5))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(4))) << (UInt16_4))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) & (UInt16_7))) << (UInt16_13))));let offset2_col5 = offset2_tmp_57455_5.as_m31(); + *row[5] = offset2_col5;let dst_base_fp_tmp_57455_6 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_0))) & (UInt16_1));let dst_base_fp_col6 = dst_base_fp_tmp_57455_6.as_m31(); + *row[6] = dst_base_fp_col6;let op0_base_fp_tmp_57455_7 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_1))) & (UInt16_1));let op0_base_fp_col7 = op0_base_fp_tmp_57455_7.as_m31(); + *row[7] = op0_base_fp_col7;let op1_imm_tmp_57455_8 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_2))) & (UInt16_1));let op1_imm_col8 = op1_imm_tmp_57455_8.as_m31(); + *row[8] = op1_imm_col8;let op1_base_fp_tmp_57455_9 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_3))) & (UInt16_1));let op1_base_fp_col9 = op1_base_fp_tmp_57455_9.as_m31(); + *row[9] = op1_base_fp_col9;let op1_base_ap_tmp_57455_10 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_4))) & (UInt16_1));let op1_base_ap_col10 = op1_base_ap_tmp_57455_10.as_m31(); + *row[10] = op1_base_ap_col10;let res_add_tmp_57455_11 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_5))) & (UInt16_1));let res_add_col11 = res_add_tmp_57455_11.as_m31(); + *row[11] = res_add_col11;let res_mul_tmp_57455_12 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_6))) & (UInt16_1));let res_mul_col12 = res_mul_tmp_57455_12.as_m31(); + *row[12] = res_mul_col12;let pc_update_jump_tmp_57455_13 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_7))) & (UInt16_1));let pc_update_jump_col13 = pc_update_jump_tmp_57455_13.as_m31(); + *row[13] = pc_update_jump_col13;let pc_update_jump_rel_tmp_57455_14 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_8))) & (UInt16_1));let pc_update_jump_rel_col14 = pc_update_jump_rel_tmp_57455_14.as_m31(); + *row[14] = pc_update_jump_rel_col14;let pc_update_jnz_tmp_57455_15 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_9))) & (UInt16_1));let pc_update_jnz_col15 = pc_update_jnz_tmp_57455_15.as_m31(); + *row[15] = pc_update_jnz_col15;let ap_update_add_tmp_57455_16 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_10))) & (UInt16_1));let ap_update_add_col16 = ap_update_add_tmp_57455_16.as_m31(); + *row[16] = ap_update_add_col16;let ap_update_add_1_tmp_57455_17 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_11))) & (UInt16_1));let ap_update_add_1_col17 = ap_update_add_1_tmp_57455_17.as_m31(); + *row[17] = ap_update_add_1_col17;let opcode_call_tmp_57455_18 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_12))) & (UInt16_1));let opcode_call_col18 = opcode_call_tmp_57455_18.as_m31(); + *row[18] = opcode_call_col18;let opcode_ret_tmp_57455_19 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_13))) & (UInt16_1));let opcode_ret_col19 = opcode_ret_tmp_57455_19.as_m31(); + *row[19] = opcode_ret_col19;let opcode_assert_eq_tmp_57455_20 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_57455_2.get_m31(6))) << (UInt16_6))))) >> (UInt16_14))) & (UInt16_1));let opcode_assert_eq_col20 = opcode_assert_eq_tmp_57455_20.as_m31(); + *row[20] = opcode_assert_eq_col20;let verify_instruction_inputs_0 = + (input_pc_col0, [offset0_col3, offset1_col4, offset2_col5], [dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]).unpack(); + *lookup_data.verify_instruction_0 = [input_pc_col0, offset0_col3, offset1_col4, offset2_col5, dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]; + + let op1_base_op0_tmp_57455_21 = ((((((M31_1) - (op1_imm_col8))) - (op1_base_fp_col9))) - (op1_base_ap_col10));let res_op1_tmp_57455_22 = ((((((M31_1) - (res_add_col11))) - (res_mul_col12))) - (pc_update_jnz_col15));let pc_update_regular_tmp_57455_23 = ((((((M31_1) - (pc_update_jump_col13))) - (pc_update_jump_rel_col14))) - (pc_update_jnz_col15));let ap_update_regular_tmp_57455_24 = ((((((M31_1) - (ap_update_add_col16))) - (ap_update_add_1_col17))) - (opcode_call_col18));let fp_update_regular_tmp_57455_25 = ((((M31_1) - (opcode_call_col18))) - (opcode_ret_col19)); //Eval Operands. - - - //Read Positive Num Bits 252. - -let memory_address_to_id_value_tmp_57455_26 = memory_address_to_id_state.deduce_output( + let memory_address_to_id_value_tmp_57455_26 = memory_address_to_id_state.deduce_output( ((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))) - ); -let memory_id_to_big_value_tmp_57455_27 = memory_id_to_big_state.deduce_output( + );let memory_id_to_big_value_tmp_57455_27 = memory_id_to_big_state.deduce_output( memory_address_to_id_value_tmp_57455_26 - ); -let dst_id_col21 = memory_address_to_id_value_tmp_57455_26; - *row[21] = dst_id_col21; -for (i, &input) in ((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))).unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_address_to_id_inputs[0] = input; - } -*lookup_data.memory_address_to_id_0 = [((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))), dst_id_col21]; -let dst_limb_0_col22 = memory_id_to_big_value_tmp_57455_27.get_m31(0); - *row[22] = dst_limb_0_col22; -let dst_limb_1_col23 = memory_id_to_big_value_tmp_57455_27.get_m31(1); - *row[23] = dst_limb_1_col23; -let dst_limb_2_col24 = memory_id_to_big_value_tmp_57455_27.get_m31(2); - *row[24] = dst_limb_2_col24; -let dst_limb_3_col25 = memory_id_to_big_value_tmp_57455_27.get_m31(3); - *row[25] = dst_limb_3_col25; -let dst_limb_4_col26 = memory_id_to_big_value_tmp_57455_27.get_m31(4); - *row[26] = dst_limb_4_col26; -let dst_limb_5_col27 = memory_id_to_big_value_tmp_57455_27.get_m31(5); - *row[27] = dst_limb_5_col27; -let dst_limb_6_col28 = memory_id_to_big_value_tmp_57455_27.get_m31(6); - *row[28] = dst_limb_6_col28; -let dst_limb_7_col29 = memory_id_to_big_value_tmp_57455_27.get_m31(7); - *row[29] = dst_limb_7_col29; -let dst_limb_8_col30 = memory_id_to_big_value_tmp_57455_27.get_m31(8); - *row[30] = dst_limb_8_col30; -let dst_limb_9_col31 = memory_id_to_big_value_tmp_57455_27.get_m31(9); - *row[31] = dst_limb_9_col31; -let dst_limb_10_col32 = memory_id_to_big_value_tmp_57455_27.get_m31(10); - *row[32] = dst_limb_10_col32; -let dst_limb_11_col33 = memory_id_to_big_value_tmp_57455_27.get_m31(11); - *row[33] = dst_limb_11_col33; -let dst_limb_12_col34 = memory_id_to_big_value_tmp_57455_27.get_m31(12); - *row[34] = dst_limb_12_col34; -let dst_limb_13_col35 = memory_id_to_big_value_tmp_57455_27.get_m31(13); - *row[35] = dst_limb_13_col35; -let dst_limb_14_col36 = memory_id_to_big_value_tmp_57455_27.get_m31(14); - *row[36] = dst_limb_14_col36; -let dst_limb_15_col37 = memory_id_to_big_value_tmp_57455_27.get_m31(15); - *row[37] = dst_limb_15_col37; -let dst_limb_16_col38 = memory_id_to_big_value_tmp_57455_27.get_m31(16); - *row[38] = dst_limb_16_col38; -let dst_limb_17_col39 = memory_id_to_big_value_tmp_57455_27.get_m31(17); - *row[39] = dst_limb_17_col39; -let dst_limb_18_col40 = memory_id_to_big_value_tmp_57455_27.get_m31(18); - *row[40] = dst_limb_18_col40; -let dst_limb_19_col41 = memory_id_to_big_value_tmp_57455_27.get_m31(19); - *row[41] = dst_limb_19_col41; -let dst_limb_20_col42 = memory_id_to_big_value_tmp_57455_27.get_m31(20); - *row[42] = dst_limb_20_col42; -let dst_limb_21_col43 = memory_id_to_big_value_tmp_57455_27.get_m31(21); - *row[43] = dst_limb_21_col43; -let dst_limb_22_col44 = memory_id_to_big_value_tmp_57455_27.get_m31(22); - *row[44] = dst_limb_22_col44; -let dst_limb_23_col45 = memory_id_to_big_value_tmp_57455_27.get_m31(23); - *row[45] = dst_limb_23_col45; -let dst_limb_24_col46 = memory_id_to_big_value_tmp_57455_27.get_m31(24); - *row[46] = dst_limb_24_col46; -let dst_limb_25_col47 = memory_id_to_big_value_tmp_57455_27.get_m31(25); - *row[47] = dst_limb_25_col47; -let dst_limb_26_col48 = memory_id_to_big_value_tmp_57455_27.get_m31(26); - *row[48] = dst_limb_26_col48; -let dst_limb_27_col49 = memory_id_to_big_value_tmp_57455_27.get_m31(27); - *row[49] = dst_limb_27_col49; -for (i, &input) in dst_id_col21.unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_id_to_big_inputs[0] = input; - } -*lookup_data.memory_id_to_big_0 = [dst_id_col21, dst_limb_0_col22, dst_limb_1_col23, dst_limb_2_col24, dst_limb_3_col25, dst_limb_4_col26, dst_limb_5_col27, dst_limb_6_col28, dst_limb_7_col29, dst_limb_8_col30, dst_limb_9_col31, dst_limb_10_col32, dst_limb_11_col33, dst_limb_12_col34, dst_limb_13_col35, dst_limb_14_col36, dst_limb_15_col37, dst_limb_16_col38, dst_limb_17_col39, dst_limb_18_col40, dst_limb_19_col41, dst_limb_20_col42, dst_limb_21_col43, dst_limb_22_col44, dst_limb_23_col45, dst_limb_24_col46, dst_limb_25_col47, dst_limb_26_col48, dst_limb_27_col49]; - - - - + );let dst_id_col21 = memory_address_to_id_value_tmp_57455_26; + *row[21] = dst_id_col21;let memory_address_to_id_inputs_0 = + ((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))).unpack(); + *lookup_data.memory_address_to_id_0 = [((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))), dst_id_col21];let dst_limb_0_col22 = memory_id_to_big_value_tmp_57455_27.get_m31(0); + *row[22] = dst_limb_0_col22;let dst_limb_1_col23 = memory_id_to_big_value_tmp_57455_27.get_m31(1); + *row[23] = dst_limb_1_col23;let dst_limb_2_col24 = memory_id_to_big_value_tmp_57455_27.get_m31(2); + *row[24] = dst_limb_2_col24;let dst_limb_3_col25 = memory_id_to_big_value_tmp_57455_27.get_m31(3); + *row[25] = dst_limb_3_col25;let dst_limb_4_col26 = memory_id_to_big_value_tmp_57455_27.get_m31(4); + *row[26] = dst_limb_4_col26;let dst_limb_5_col27 = memory_id_to_big_value_tmp_57455_27.get_m31(5); + *row[27] = dst_limb_5_col27;let dst_limb_6_col28 = memory_id_to_big_value_tmp_57455_27.get_m31(6); + *row[28] = dst_limb_6_col28;let dst_limb_7_col29 = memory_id_to_big_value_tmp_57455_27.get_m31(7); + *row[29] = dst_limb_7_col29;let dst_limb_8_col30 = memory_id_to_big_value_tmp_57455_27.get_m31(8); + *row[30] = dst_limb_8_col30;let dst_limb_9_col31 = memory_id_to_big_value_tmp_57455_27.get_m31(9); + *row[31] = dst_limb_9_col31;let dst_limb_10_col32 = memory_id_to_big_value_tmp_57455_27.get_m31(10); + *row[32] = dst_limb_10_col32;let dst_limb_11_col33 = memory_id_to_big_value_tmp_57455_27.get_m31(11); + *row[33] = dst_limb_11_col33;let dst_limb_12_col34 = memory_id_to_big_value_tmp_57455_27.get_m31(12); + *row[34] = dst_limb_12_col34;let dst_limb_13_col35 = memory_id_to_big_value_tmp_57455_27.get_m31(13); + *row[35] = dst_limb_13_col35;let dst_limb_14_col36 = memory_id_to_big_value_tmp_57455_27.get_m31(14); + *row[36] = dst_limb_14_col36;let dst_limb_15_col37 = memory_id_to_big_value_tmp_57455_27.get_m31(15); + *row[37] = dst_limb_15_col37;let dst_limb_16_col38 = memory_id_to_big_value_tmp_57455_27.get_m31(16); + *row[38] = dst_limb_16_col38;let dst_limb_17_col39 = memory_id_to_big_value_tmp_57455_27.get_m31(17); + *row[39] = dst_limb_17_col39;let dst_limb_18_col40 = memory_id_to_big_value_tmp_57455_27.get_m31(18); + *row[40] = dst_limb_18_col40;let dst_limb_19_col41 = memory_id_to_big_value_tmp_57455_27.get_m31(19); + *row[41] = dst_limb_19_col41;let dst_limb_20_col42 = memory_id_to_big_value_tmp_57455_27.get_m31(20); + *row[42] = dst_limb_20_col42;let dst_limb_21_col43 = memory_id_to_big_value_tmp_57455_27.get_m31(21); + *row[43] = dst_limb_21_col43;let dst_limb_22_col44 = memory_id_to_big_value_tmp_57455_27.get_m31(22); + *row[44] = dst_limb_22_col44;let dst_limb_23_col45 = memory_id_to_big_value_tmp_57455_27.get_m31(23); + *row[45] = dst_limb_23_col45;let dst_limb_24_col46 = memory_id_to_big_value_tmp_57455_27.get_m31(24); + *row[46] = dst_limb_24_col46;let dst_limb_25_col47 = memory_id_to_big_value_tmp_57455_27.get_m31(25); + *row[47] = dst_limb_25_col47;let dst_limb_26_col48 = memory_id_to_big_value_tmp_57455_27.get_m31(26); + *row[48] = dst_limb_26_col48;let dst_limb_27_col49 = memory_id_to_big_value_tmp_57455_27.get_m31(27); + *row[49] = dst_limb_27_col49;let memory_id_to_big_inputs_0 = + dst_id_col21.unpack(); + *lookup_data.memory_id_to_big_0 = [dst_id_col21, dst_limb_0_col22, dst_limb_1_col23, dst_limb_2_col24, dst_limb_3_col25, dst_limb_4_col26, dst_limb_5_col27, dst_limb_6_col28, dst_limb_7_col29, dst_limb_8_col30, dst_limb_9_col31, dst_limb_10_col32, dst_limb_11_col33, dst_limb_12_col34, dst_limb_13_col35, dst_limb_14_col36, dst_limb_15_col37, dst_limb_16_col38, dst_limb_17_col39, dst_limb_18_col40, dst_limb_19_col41, dst_limb_20_col42, dst_limb_21_col43, dst_limb_22_col44, dst_limb_23_col45, dst_limb_24_col46, dst_limb_25_col47, dst_limb_26_col48, dst_limb_27_col49]; //Read Positive Num Bits 252. - -let memory_address_to_id_value_tmp_57455_28 = memory_address_to_id_state.deduce_output( + let memory_address_to_id_value_tmp_57455_28 = memory_address_to_id_state.deduce_output( ((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))) - ); -let memory_id_to_big_value_tmp_57455_29 = memory_id_to_big_state.deduce_output( + );let memory_id_to_big_value_tmp_57455_29 = memory_id_to_big_state.deduce_output( memory_address_to_id_value_tmp_57455_28 - ); -let op0_id_col50 = memory_address_to_id_value_tmp_57455_28; - *row[50] = op0_id_col50; -for (i, &input) in ((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))).unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_address_to_id_inputs[1] = input; - } -*lookup_data.memory_address_to_id_1 = [((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))), op0_id_col50]; -let op0_limb_0_col51 = memory_id_to_big_value_tmp_57455_29.get_m31(0); - *row[51] = op0_limb_0_col51; -let op0_limb_1_col52 = memory_id_to_big_value_tmp_57455_29.get_m31(1); - *row[52] = op0_limb_1_col52; -let op0_limb_2_col53 = memory_id_to_big_value_tmp_57455_29.get_m31(2); - *row[53] = op0_limb_2_col53; -let op0_limb_3_col54 = memory_id_to_big_value_tmp_57455_29.get_m31(3); - *row[54] = op0_limb_3_col54; -let op0_limb_4_col55 = memory_id_to_big_value_tmp_57455_29.get_m31(4); - *row[55] = op0_limb_4_col55; -let op0_limb_5_col56 = memory_id_to_big_value_tmp_57455_29.get_m31(5); - *row[56] = op0_limb_5_col56; -let op0_limb_6_col57 = memory_id_to_big_value_tmp_57455_29.get_m31(6); - *row[57] = op0_limb_6_col57; -let op0_limb_7_col58 = memory_id_to_big_value_tmp_57455_29.get_m31(7); - *row[58] = op0_limb_7_col58; -let op0_limb_8_col59 = memory_id_to_big_value_tmp_57455_29.get_m31(8); - *row[59] = op0_limb_8_col59; -let op0_limb_9_col60 = memory_id_to_big_value_tmp_57455_29.get_m31(9); - *row[60] = op0_limb_9_col60; -let op0_limb_10_col61 = memory_id_to_big_value_tmp_57455_29.get_m31(10); - *row[61] = op0_limb_10_col61; -let op0_limb_11_col62 = memory_id_to_big_value_tmp_57455_29.get_m31(11); - *row[62] = op0_limb_11_col62; -let op0_limb_12_col63 = memory_id_to_big_value_tmp_57455_29.get_m31(12); - *row[63] = op0_limb_12_col63; -let op0_limb_13_col64 = memory_id_to_big_value_tmp_57455_29.get_m31(13); - *row[64] = op0_limb_13_col64; -let op0_limb_14_col65 = memory_id_to_big_value_tmp_57455_29.get_m31(14); - *row[65] = op0_limb_14_col65; -let op0_limb_15_col66 = memory_id_to_big_value_tmp_57455_29.get_m31(15); - *row[66] = op0_limb_15_col66; -let op0_limb_16_col67 = memory_id_to_big_value_tmp_57455_29.get_m31(16); - *row[67] = op0_limb_16_col67; -let op0_limb_17_col68 = memory_id_to_big_value_tmp_57455_29.get_m31(17); - *row[68] = op0_limb_17_col68; -let op0_limb_18_col69 = memory_id_to_big_value_tmp_57455_29.get_m31(18); - *row[69] = op0_limb_18_col69; -let op0_limb_19_col70 = memory_id_to_big_value_tmp_57455_29.get_m31(19); - *row[70] = op0_limb_19_col70; -let op0_limb_20_col71 = memory_id_to_big_value_tmp_57455_29.get_m31(20); - *row[71] = op0_limb_20_col71; -let op0_limb_21_col72 = memory_id_to_big_value_tmp_57455_29.get_m31(21); - *row[72] = op0_limb_21_col72; -let op0_limb_22_col73 = memory_id_to_big_value_tmp_57455_29.get_m31(22); - *row[73] = op0_limb_22_col73; -let op0_limb_23_col74 = memory_id_to_big_value_tmp_57455_29.get_m31(23); - *row[74] = op0_limb_23_col74; -let op0_limb_24_col75 = memory_id_to_big_value_tmp_57455_29.get_m31(24); - *row[75] = op0_limb_24_col75; -let op0_limb_25_col76 = memory_id_to_big_value_tmp_57455_29.get_m31(25); - *row[76] = op0_limb_25_col76; -let op0_limb_26_col77 = memory_id_to_big_value_tmp_57455_29.get_m31(26); - *row[77] = op0_limb_26_col77; -let op0_limb_27_col78 = memory_id_to_big_value_tmp_57455_29.get_m31(27); - *row[78] = op0_limb_27_col78; -for (i, &input) in op0_id_col50.unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_id_to_big_inputs[1] = input; - } -*lookup_data.memory_id_to_big_1 = [op0_id_col50, op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78]; - - - - + );let op0_id_col50 = memory_address_to_id_value_tmp_57455_28; + *row[50] = op0_id_col50;let memory_address_to_id_inputs_1 = + ((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))).unpack(); + *lookup_data.memory_address_to_id_1 = [((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))), op0_id_col50];let op0_limb_0_col51 = memory_id_to_big_value_tmp_57455_29.get_m31(0); + *row[51] = op0_limb_0_col51;let op0_limb_1_col52 = memory_id_to_big_value_tmp_57455_29.get_m31(1); + *row[52] = op0_limb_1_col52;let op0_limb_2_col53 = memory_id_to_big_value_tmp_57455_29.get_m31(2); + *row[53] = op0_limb_2_col53;let op0_limb_3_col54 = memory_id_to_big_value_tmp_57455_29.get_m31(3); + *row[54] = op0_limb_3_col54;let op0_limb_4_col55 = memory_id_to_big_value_tmp_57455_29.get_m31(4); + *row[55] = op0_limb_4_col55;let op0_limb_5_col56 = memory_id_to_big_value_tmp_57455_29.get_m31(5); + *row[56] = op0_limb_5_col56;let op0_limb_6_col57 = memory_id_to_big_value_tmp_57455_29.get_m31(6); + *row[57] = op0_limb_6_col57;let op0_limb_7_col58 = memory_id_to_big_value_tmp_57455_29.get_m31(7); + *row[58] = op0_limb_7_col58;let op0_limb_8_col59 = memory_id_to_big_value_tmp_57455_29.get_m31(8); + *row[59] = op0_limb_8_col59;let op0_limb_9_col60 = memory_id_to_big_value_tmp_57455_29.get_m31(9); + *row[60] = op0_limb_9_col60;let op0_limb_10_col61 = memory_id_to_big_value_tmp_57455_29.get_m31(10); + *row[61] = op0_limb_10_col61;let op0_limb_11_col62 = memory_id_to_big_value_tmp_57455_29.get_m31(11); + *row[62] = op0_limb_11_col62;let op0_limb_12_col63 = memory_id_to_big_value_tmp_57455_29.get_m31(12); + *row[63] = op0_limb_12_col63;let op0_limb_13_col64 = memory_id_to_big_value_tmp_57455_29.get_m31(13); + *row[64] = op0_limb_13_col64;let op0_limb_14_col65 = memory_id_to_big_value_tmp_57455_29.get_m31(14); + *row[65] = op0_limb_14_col65;let op0_limb_15_col66 = memory_id_to_big_value_tmp_57455_29.get_m31(15); + *row[66] = op0_limb_15_col66;let op0_limb_16_col67 = memory_id_to_big_value_tmp_57455_29.get_m31(16); + *row[67] = op0_limb_16_col67;let op0_limb_17_col68 = memory_id_to_big_value_tmp_57455_29.get_m31(17); + *row[68] = op0_limb_17_col68;let op0_limb_18_col69 = memory_id_to_big_value_tmp_57455_29.get_m31(18); + *row[69] = op0_limb_18_col69;let op0_limb_19_col70 = memory_id_to_big_value_tmp_57455_29.get_m31(19); + *row[70] = op0_limb_19_col70;let op0_limb_20_col71 = memory_id_to_big_value_tmp_57455_29.get_m31(20); + *row[71] = op0_limb_20_col71;let op0_limb_21_col72 = memory_id_to_big_value_tmp_57455_29.get_m31(21); + *row[72] = op0_limb_21_col72;let op0_limb_22_col73 = memory_id_to_big_value_tmp_57455_29.get_m31(22); + *row[73] = op0_limb_22_col73;let op0_limb_23_col74 = memory_id_to_big_value_tmp_57455_29.get_m31(23); + *row[74] = op0_limb_23_col74;let op0_limb_24_col75 = memory_id_to_big_value_tmp_57455_29.get_m31(24); + *row[75] = op0_limb_24_col75;let op0_limb_25_col76 = memory_id_to_big_value_tmp_57455_29.get_m31(25); + *row[76] = op0_limb_25_col76;let op0_limb_26_col77 = memory_id_to_big_value_tmp_57455_29.get_m31(26); + *row[77] = op0_limb_26_col77;let op0_limb_27_col78 = memory_id_to_big_value_tmp_57455_29.get_m31(27); + *row[78] = op0_limb_27_col78;let memory_id_to_big_inputs_1 = + op0_id_col50.unpack(); + *lookup_data.memory_id_to_big_1 = [op0_id_col50, op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78]; //Read Positive Num Bits 252. - -let memory_address_to_id_value_tmp_57455_30 = memory_address_to_id_state.deduce_output( + let memory_address_to_id_value_tmp_57455_30 = memory_address_to_id_state.deduce_output( ((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_57455_21) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))) - ); -let memory_id_to_big_value_tmp_57455_31 = memory_id_to_big_state.deduce_output( + );let memory_id_to_big_value_tmp_57455_31 = memory_id_to_big_state.deduce_output( memory_address_to_id_value_tmp_57455_30 - ); -let op1_id_col79 = memory_address_to_id_value_tmp_57455_30; - *row[79] = op1_id_col79; -for (i, &input) in ((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_57455_21) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))).unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_address_to_id_inputs[2] = input; - } -*lookup_data.memory_address_to_id_2 = [((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_57455_21) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))), op1_id_col79]; -let op1_limb_0_col80 = memory_id_to_big_value_tmp_57455_31.get_m31(0); - *row[80] = op1_limb_0_col80; -let op1_limb_1_col81 = memory_id_to_big_value_tmp_57455_31.get_m31(1); - *row[81] = op1_limb_1_col81; -let op1_limb_2_col82 = memory_id_to_big_value_tmp_57455_31.get_m31(2); - *row[82] = op1_limb_2_col82; -let op1_limb_3_col83 = memory_id_to_big_value_tmp_57455_31.get_m31(3); - *row[83] = op1_limb_3_col83; -let op1_limb_4_col84 = memory_id_to_big_value_tmp_57455_31.get_m31(4); - *row[84] = op1_limb_4_col84; -let op1_limb_5_col85 = memory_id_to_big_value_tmp_57455_31.get_m31(5); - *row[85] = op1_limb_5_col85; -let op1_limb_6_col86 = memory_id_to_big_value_tmp_57455_31.get_m31(6); - *row[86] = op1_limb_6_col86; -let op1_limb_7_col87 = memory_id_to_big_value_tmp_57455_31.get_m31(7); - *row[87] = op1_limb_7_col87; -let op1_limb_8_col88 = memory_id_to_big_value_tmp_57455_31.get_m31(8); - *row[88] = op1_limb_8_col88; -let op1_limb_9_col89 = memory_id_to_big_value_tmp_57455_31.get_m31(9); - *row[89] = op1_limb_9_col89; -let op1_limb_10_col90 = memory_id_to_big_value_tmp_57455_31.get_m31(10); - *row[90] = op1_limb_10_col90; -let op1_limb_11_col91 = memory_id_to_big_value_tmp_57455_31.get_m31(11); - *row[91] = op1_limb_11_col91; -let op1_limb_12_col92 = memory_id_to_big_value_tmp_57455_31.get_m31(12); - *row[92] = op1_limb_12_col92; -let op1_limb_13_col93 = memory_id_to_big_value_tmp_57455_31.get_m31(13); - *row[93] = op1_limb_13_col93; -let op1_limb_14_col94 = memory_id_to_big_value_tmp_57455_31.get_m31(14); - *row[94] = op1_limb_14_col94; -let op1_limb_15_col95 = memory_id_to_big_value_tmp_57455_31.get_m31(15); - *row[95] = op1_limb_15_col95; -let op1_limb_16_col96 = memory_id_to_big_value_tmp_57455_31.get_m31(16); - *row[96] = op1_limb_16_col96; -let op1_limb_17_col97 = memory_id_to_big_value_tmp_57455_31.get_m31(17); - *row[97] = op1_limb_17_col97; -let op1_limb_18_col98 = memory_id_to_big_value_tmp_57455_31.get_m31(18); - *row[98] = op1_limb_18_col98; -let op1_limb_19_col99 = memory_id_to_big_value_tmp_57455_31.get_m31(19); - *row[99] = op1_limb_19_col99; -let op1_limb_20_col100 = memory_id_to_big_value_tmp_57455_31.get_m31(20); - *row[100] = op1_limb_20_col100; -let op1_limb_21_col101 = memory_id_to_big_value_tmp_57455_31.get_m31(21); - *row[101] = op1_limb_21_col101; -let op1_limb_22_col102 = memory_id_to_big_value_tmp_57455_31.get_m31(22); - *row[102] = op1_limb_22_col102; -let op1_limb_23_col103 = memory_id_to_big_value_tmp_57455_31.get_m31(23); - *row[103] = op1_limb_23_col103; -let op1_limb_24_col104 = memory_id_to_big_value_tmp_57455_31.get_m31(24); - *row[104] = op1_limb_24_col104; -let op1_limb_25_col105 = memory_id_to_big_value_tmp_57455_31.get_m31(25); - *row[105] = op1_limb_25_col105; -let op1_limb_26_col106 = memory_id_to_big_value_tmp_57455_31.get_m31(26); - *row[106] = op1_limb_26_col106; -let op1_limb_27_col107 = memory_id_to_big_value_tmp_57455_31.get_m31(27); - *row[107] = op1_limb_27_col107; -for (i, &input) in op1_id_col79.unpack().iter().enumerate() { - *sub_components_inputs[i] - .memory_id_to_big_inputs[2] = input; - } -*lookup_data.memory_id_to_big_2 = [op1_id_col79, op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]; - - - - + );let op1_id_col79 = memory_address_to_id_value_tmp_57455_30; + *row[79] = op1_id_col79;let memory_address_to_id_inputs_2 = + ((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_57455_21) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))).unpack(); + *lookup_data.memory_address_to_id_2 = [((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_57455_21) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))), op1_id_col79];let op1_limb_0_col80 = memory_id_to_big_value_tmp_57455_31.get_m31(0); + *row[80] = op1_limb_0_col80;let op1_limb_1_col81 = memory_id_to_big_value_tmp_57455_31.get_m31(1); + *row[81] = op1_limb_1_col81;let op1_limb_2_col82 = memory_id_to_big_value_tmp_57455_31.get_m31(2); + *row[82] = op1_limb_2_col82;let op1_limb_3_col83 = memory_id_to_big_value_tmp_57455_31.get_m31(3); + *row[83] = op1_limb_3_col83;let op1_limb_4_col84 = memory_id_to_big_value_tmp_57455_31.get_m31(4); + *row[84] = op1_limb_4_col84;let op1_limb_5_col85 = memory_id_to_big_value_tmp_57455_31.get_m31(5); + *row[85] = op1_limb_5_col85;let op1_limb_6_col86 = memory_id_to_big_value_tmp_57455_31.get_m31(6); + *row[86] = op1_limb_6_col86;let op1_limb_7_col87 = memory_id_to_big_value_tmp_57455_31.get_m31(7); + *row[87] = op1_limb_7_col87;let op1_limb_8_col88 = memory_id_to_big_value_tmp_57455_31.get_m31(8); + *row[88] = op1_limb_8_col88;let op1_limb_9_col89 = memory_id_to_big_value_tmp_57455_31.get_m31(9); + *row[89] = op1_limb_9_col89;let op1_limb_10_col90 = memory_id_to_big_value_tmp_57455_31.get_m31(10); + *row[90] = op1_limb_10_col90;let op1_limb_11_col91 = memory_id_to_big_value_tmp_57455_31.get_m31(11); + *row[91] = op1_limb_11_col91;let op1_limb_12_col92 = memory_id_to_big_value_tmp_57455_31.get_m31(12); + *row[92] = op1_limb_12_col92;let op1_limb_13_col93 = memory_id_to_big_value_tmp_57455_31.get_m31(13); + *row[93] = op1_limb_13_col93;let op1_limb_14_col94 = memory_id_to_big_value_tmp_57455_31.get_m31(14); + *row[94] = op1_limb_14_col94;let op1_limb_15_col95 = memory_id_to_big_value_tmp_57455_31.get_m31(15); + *row[95] = op1_limb_15_col95;let op1_limb_16_col96 = memory_id_to_big_value_tmp_57455_31.get_m31(16); + *row[96] = op1_limb_16_col96;let op1_limb_17_col97 = memory_id_to_big_value_tmp_57455_31.get_m31(17); + *row[97] = op1_limb_17_col97;let op1_limb_18_col98 = memory_id_to_big_value_tmp_57455_31.get_m31(18); + *row[98] = op1_limb_18_col98;let op1_limb_19_col99 = memory_id_to_big_value_tmp_57455_31.get_m31(19); + *row[99] = op1_limb_19_col99;let op1_limb_20_col100 = memory_id_to_big_value_tmp_57455_31.get_m31(20); + *row[100] = op1_limb_20_col100;let op1_limb_21_col101 = memory_id_to_big_value_tmp_57455_31.get_m31(21); + *row[101] = op1_limb_21_col101;let op1_limb_22_col102 = memory_id_to_big_value_tmp_57455_31.get_m31(22); + *row[102] = op1_limb_22_col102;let op1_limb_23_col103 = memory_id_to_big_value_tmp_57455_31.get_m31(23); + *row[103] = op1_limb_23_col103;let op1_limb_24_col104 = memory_id_to_big_value_tmp_57455_31.get_m31(24); + *row[104] = op1_limb_24_col104;let op1_limb_25_col105 = memory_id_to_big_value_tmp_57455_31.get_m31(25); + *row[105] = op1_limb_25_col105;let op1_limb_26_col106 = memory_id_to_big_value_tmp_57455_31.get_m31(26); + *row[106] = op1_limb_26_col106;let op1_limb_27_col107 = memory_id_to_big_value_tmp_57455_31.get_m31(27); + *row[107] = op1_limb_27_col107;let memory_id_to_big_inputs_2 = + op1_id_col79.unpack(); + *lookup_data.memory_id_to_big_2 = [op1_id_col79, op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]; //Add 252. - -let add_res_tmp_57455_32 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) + (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); -let add_res_limb_0_col108 = add_res_tmp_57455_32.get_m31(0); - *row[108] = add_res_limb_0_col108; -let add_res_limb_1_col109 = add_res_tmp_57455_32.get_m31(1); - *row[109] = add_res_limb_1_col109; -let add_res_limb_2_col110 = add_res_tmp_57455_32.get_m31(2); - *row[110] = add_res_limb_2_col110; -let add_res_limb_3_col111 = add_res_tmp_57455_32.get_m31(3); - *row[111] = add_res_limb_3_col111; -let add_res_limb_4_col112 = add_res_tmp_57455_32.get_m31(4); - *row[112] = add_res_limb_4_col112; -let add_res_limb_5_col113 = add_res_tmp_57455_32.get_m31(5); - *row[113] = add_res_limb_5_col113; -let add_res_limb_6_col114 = add_res_tmp_57455_32.get_m31(6); - *row[114] = add_res_limb_6_col114; -let add_res_limb_7_col115 = add_res_tmp_57455_32.get_m31(7); - *row[115] = add_res_limb_7_col115; -let add_res_limb_8_col116 = add_res_tmp_57455_32.get_m31(8); - *row[116] = add_res_limb_8_col116; -let add_res_limb_9_col117 = add_res_tmp_57455_32.get_m31(9); - *row[117] = add_res_limb_9_col117; -let add_res_limb_10_col118 = add_res_tmp_57455_32.get_m31(10); - *row[118] = add_res_limb_10_col118; -let add_res_limb_11_col119 = add_res_tmp_57455_32.get_m31(11); - *row[119] = add_res_limb_11_col119; -let add_res_limb_12_col120 = add_res_tmp_57455_32.get_m31(12); - *row[120] = add_res_limb_12_col120; -let add_res_limb_13_col121 = add_res_tmp_57455_32.get_m31(13); - *row[121] = add_res_limb_13_col121; -let add_res_limb_14_col122 = add_res_tmp_57455_32.get_m31(14); - *row[122] = add_res_limb_14_col122; -let add_res_limb_15_col123 = add_res_tmp_57455_32.get_m31(15); - *row[123] = add_res_limb_15_col123; -let add_res_limb_16_col124 = add_res_tmp_57455_32.get_m31(16); - *row[124] = add_res_limb_16_col124; -let add_res_limb_17_col125 = add_res_tmp_57455_32.get_m31(17); - *row[125] = add_res_limb_17_col125; -let add_res_limb_18_col126 = add_res_tmp_57455_32.get_m31(18); - *row[126] = add_res_limb_18_col126; -let add_res_limb_19_col127 = add_res_tmp_57455_32.get_m31(19); - *row[127] = add_res_limb_19_col127; -let add_res_limb_20_col128 = add_res_tmp_57455_32.get_m31(20); - *row[128] = add_res_limb_20_col128; -let add_res_limb_21_col129 = add_res_tmp_57455_32.get_m31(21); - *row[129] = add_res_limb_21_col129; -let add_res_limb_22_col130 = add_res_tmp_57455_32.get_m31(22); - *row[130] = add_res_limb_22_col130; -let add_res_limb_23_col131 = add_res_tmp_57455_32.get_m31(23); - *row[131] = add_res_limb_23_col131; -let add_res_limb_24_col132 = add_res_tmp_57455_32.get_m31(24); - *row[132] = add_res_limb_24_col132; -let add_res_limb_25_col133 = add_res_tmp_57455_32.get_m31(25); - *row[133] = add_res_limb_25_col133; -let add_res_limb_26_col134 = add_res_tmp_57455_32.get_m31(26); - *row[134] = add_res_limb_26_col134; -let add_res_limb_27_col135 = add_res_tmp_57455_32.get_m31(27); + let add_res_tmp_57455_32 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) + (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])));let add_res_limb_0_col108 = add_res_tmp_57455_32.get_m31(0); + *row[108] = add_res_limb_0_col108;let add_res_limb_1_col109 = add_res_tmp_57455_32.get_m31(1); + *row[109] = add_res_limb_1_col109;let add_res_limb_2_col110 = add_res_tmp_57455_32.get_m31(2); + *row[110] = add_res_limb_2_col110;let add_res_limb_3_col111 = add_res_tmp_57455_32.get_m31(3); + *row[111] = add_res_limb_3_col111;let add_res_limb_4_col112 = add_res_tmp_57455_32.get_m31(4); + *row[112] = add_res_limb_4_col112;let add_res_limb_5_col113 = add_res_tmp_57455_32.get_m31(5); + *row[113] = add_res_limb_5_col113;let add_res_limb_6_col114 = add_res_tmp_57455_32.get_m31(6); + *row[114] = add_res_limb_6_col114;let add_res_limb_7_col115 = add_res_tmp_57455_32.get_m31(7); + *row[115] = add_res_limb_7_col115;let add_res_limb_8_col116 = add_res_tmp_57455_32.get_m31(8); + *row[116] = add_res_limb_8_col116;let add_res_limb_9_col117 = add_res_tmp_57455_32.get_m31(9); + *row[117] = add_res_limb_9_col117;let add_res_limb_10_col118 = add_res_tmp_57455_32.get_m31(10); + *row[118] = add_res_limb_10_col118;let add_res_limb_11_col119 = add_res_tmp_57455_32.get_m31(11); + *row[119] = add_res_limb_11_col119;let add_res_limb_12_col120 = add_res_tmp_57455_32.get_m31(12); + *row[120] = add_res_limb_12_col120;let add_res_limb_13_col121 = add_res_tmp_57455_32.get_m31(13); + *row[121] = add_res_limb_13_col121;let add_res_limb_14_col122 = add_res_tmp_57455_32.get_m31(14); + *row[122] = add_res_limb_14_col122;let add_res_limb_15_col123 = add_res_tmp_57455_32.get_m31(15); + *row[123] = add_res_limb_15_col123;let add_res_limb_16_col124 = add_res_tmp_57455_32.get_m31(16); + *row[124] = add_res_limb_16_col124;let add_res_limb_17_col125 = add_res_tmp_57455_32.get_m31(17); + *row[125] = add_res_limb_17_col125;let add_res_limb_18_col126 = add_res_tmp_57455_32.get_m31(18); + *row[126] = add_res_limb_18_col126;let add_res_limb_19_col127 = add_res_tmp_57455_32.get_m31(19); + *row[127] = add_res_limb_19_col127;let add_res_limb_20_col128 = add_res_tmp_57455_32.get_m31(20); + *row[128] = add_res_limb_20_col128;let add_res_limb_21_col129 = add_res_tmp_57455_32.get_m31(21); + *row[129] = add_res_limb_21_col129;let add_res_limb_22_col130 = add_res_tmp_57455_32.get_m31(22); + *row[130] = add_res_limb_22_col130;let add_res_limb_23_col131 = add_res_tmp_57455_32.get_m31(23); + *row[131] = add_res_limb_23_col131;let add_res_limb_24_col132 = add_res_tmp_57455_32.get_m31(24); + *row[132] = add_res_limb_24_col132;let add_res_limb_25_col133 = add_res_tmp_57455_32.get_m31(25); + *row[133] = add_res_limb_25_col133;let add_res_limb_26_col134 = add_res_tmp_57455_32.get_m31(26); + *row[134] = add_res_limb_26_col134;let add_res_limb_27_col135 = add_res_tmp_57455_32.get_m31(27); *row[135] = add_res_limb_27_col135; - //Range Check Big Value. - -for (i, &input) in [add_res_limb_0_col108, add_res_limb_1_col109].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[0] = input; - } -*lookup_data.range_check_9_9_0 = [add_res_limb_0_col108, add_res_limb_1_col109]; -for (i, &input) in [add_res_limb_2_col110, add_res_limb_3_col111].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[1] = input; - } -*lookup_data.range_check_9_9_1 = [add_res_limb_2_col110, add_res_limb_3_col111]; -for (i, &input) in [add_res_limb_4_col112, add_res_limb_5_col113].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[2] = input; - } -*lookup_data.range_check_9_9_2 = [add_res_limb_4_col112, add_res_limb_5_col113]; -for (i, &input) in [add_res_limb_6_col114, add_res_limb_7_col115].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[3] = input; - } -*lookup_data.range_check_9_9_3 = [add_res_limb_6_col114, add_res_limb_7_col115]; -for (i, &input) in [add_res_limb_8_col116, add_res_limb_9_col117].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[4] = input; - } -*lookup_data.range_check_9_9_4 = [add_res_limb_8_col116, add_res_limb_9_col117]; -for (i, &input) in [add_res_limb_10_col118, add_res_limb_11_col119].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[5] = input; - } -*lookup_data.range_check_9_9_5 = [add_res_limb_10_col118, add_res_limb_11_col119]; -for (i, &input) in [add_res_limb_12_col120, add_res_limb_13_col121].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[6] = input; - } -*lookup_data.range_check_9_9_6 = [add_res_limb_12_col120, add_res_limb_13_col121]; -for (i, &input) in [add_res_limb_14_col122, add_res_limb_15_col123].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[7] = input; - } -*lookup_data.range_check_9_9_7 = [add_res_limb_14_col122, add_res_limb_15_col123]; -for (i, &input) in [add_res_limb_16_col124, add_res_limb_17_col125].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[8] = input; - } -*lookup_data.range_check_9_9_8 = [add_res_limb_16_col124, add_res_limb_17_col125]; -for (i, &input) in [add_res_limb_18_col126, add_res_limb_19_col127].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[9] = input; - } -*lookup_data.range_check_9_9_9 = [add_res_limb_18_col126, add_res_limb_19_col127]; -for (i, &input) in [add_res_limb_20_col128, add_res_limb_21_col129].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[10] = input; - } -*lookup_data.range_check_9_9_10 = [add_res_limb_20_col128, add_res_limb_21_col129]; -for (i, &input) in [add_res_limb_22_col130, add_res_limb_23_col131].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[11] = input; - } -*lookup_data.range_check_9_9_11 = [add_res_limb_22_col130, add_res_limb_23_col131]; -for (i, &input) in [add_res_limb_24_col132, add_res_limb_25_col133].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[12] = input; - } -*lookup_data.range_check_9_9_12 = [add_res_limb_24_col132, add_res_limb_25_col133]; -for (i, &input) in [add_res_limb_26_col134, add_res_limb_27_col135].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[13] = input; - } -*lookup_data.range_check_9_9_13 = [add_res_limb_26_col134, add_res_limb_27_col135]; - - - - + let range_check_9_9_inputs_0 = + [add_res_limb_0_col108, add_res_limb_1_col109].unpack(); + *lookup_data.range_check_9_9_0 = [add_res_limb_0_col108, add_res_limb_1_col109];let range_check_9_9_inputs_1 = + [add_res_limb_2_col110, add_res_limb_3_col111].unpack(); + *lookup_data.range_check_9_9_1 = [add_res_limb_2_col110, add_res_limb_3_col111];let range_check_9_9_inputs_2 = + [add_res_limb_4_col112, add_res_limb_5_col113].unpack(); + *lookup_data.range_check_9_9_2 = [add_res_limb_4_col112, add_res_limb_5_col113];let range_check_9_9_inputs_3 = + [add_res_limb_6_col114, add_res_limb_7_col115].unpack(); + *lookup_data.range_check_9_9_3 = [add_res_limb_6_col114, add_res_limb_7_col115];let range_check_9_9_inputs_4 = + [add_res_limb_8_col116, add_res_limb_9_col117].unpack(); + *lookup_data.range_check_9_9_4 = [add_res_limb_8_col116, add_res_limb_9_col117];let range_check_9_9_inputs_5 = + [add_res_limb_10_col118, add_res_limb_11_col119].unpack(); + *lookup_data.range_check_9_9_5 = [add_res_limb_10_col118, add_res_limb_11_col119];let range_check_9_9_inputs_6 = + [add_res_limb_12_col120, add_res_limb_13_col121].unpack(); + *lookup_data.range_check_9_9_6 = [add_res_limb_12_col120, add_res_limb_13_col121];let range_check_9_9_inputs_7 = + [add_res_limb_14_col122, add_res_limb_15_col123].unpack(); + *lookup_data.range_check_9_9_7 = [add_res_limb_14_col122, add_res_limb_15_col123];let range_check_9_9_inputs_8 = + [add_res_limb_16_col124, add_res_limb_17_col125].unpack(); + *lookup_data.range_check_9_9_8 = [add_res_limb_16_col124, add_res_limb_17_col125];let range_check_9_9_inputs_9 = + [add_res_limb_18_col126, add_res_limb_19_col127].unpack(); + *lookup_data.range_check_9_9_9 = [add_res_limb_18_col126, add_res_limb_19_col127];let range_check_9_9_inputs_10 = + [add_res_limb_20_col128, add_res_limb_21_col129].unpack(); + *lookup_data.range_check_9_9_10 = [add_res_limb_20_col128, add_res_limb_21_col129];let range_check_9_9_inputs_11 = + [add_res_limb_22_col130, add_res_limb_23_col131].unpack(); + *lookup_data.range_check_9_9_11 = [add_res_limb_22_col130, add_res_limb_23_col131];let range_check_9_9_inputs_12 = + [add_res_limb_24_col132, add_res_limb_25_col133].unpack(); + *lookup_data.range_check_9_9_12 = [add_res_limb_24_col132, add_res_limb_25_col133];let range_check_9_9_inputs_13 = + [add_res_limb_26_col134, add_res_limb_27_col135].unpack(); + *lookup_data.range_check_9_9_13 = [add_res_limb_26_col134, add_res_limb_27_col135]; //Verify Add 252. - -let sub_p_bit_tmp_57455_33 = ((UInt16_1) & (((((PackedUInt16::from_m31(op0_limb_0_col51)) ^ (PackedUInt16::from_m31(op1_limb_0_col80)))) ^ (PackedUInt16::from_m31(add_res_limb_0_col108))))); -let sub_p_bit_col136 = sub_p_bit_tmp_57455_33.as_m31(); + let sub_p_bit_tmp_57455_33 = ((UInt16_1) & (((((PackedUInt16::from_m31(op0_limb_0_col51)) ^ (PackedUInt16::from_m31(op1_limb_0_col80)))) ^ (PackedUInt16::from_m31(add_res_limb_0_col108)))));let sub_p_bit_col136 = sub_p_bit_tmp_57455_33.as_m31(); *row[136] = sub_p_bit_col136; - - - - - - - //Mul 252. - -let mul_res_tmp_57455_61 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); -let mul_res_limb_0_col137 = mul_res_tmp_57455_61.get_m31(0); - *row[137] = mul_res_limb_0_col137; -let mul_res_limb_1_col138 = mul_res_tmp_57455_61.get_m31(1); - *row[138] = mul_res_limb_1_col138; -let mul_res_limb_2_col139 = mul_res_tmp_57455_61.get_m31(2); - *row[139] = mul_res_limb_2_col139; -let mul_res_limb_3_col140 = mul_res_tmp_57455_61.get_m31(3); - *row[140] = mul_res_limb_3_col140; -let mul_res_limb_4_col141 = mul_res_tmp_57455_61.get_m31(4); - *row[141] = mul_res_limb_4_col141; -let mul_res_limb_5_col142 = mul_res_tmp_57455_61.get_m31(5); - *row[142] = mul_res_limb_5_col142; -let mul_res_limb_6_col143 = mul_res_tmp_57455_61.get_m31(6); - *row[143] = mul_res_limb_6_col143; -let mul_res_limb_7_col144 = mul_res_tmp_57455_61.get_m31(7); - *row[144] = mul_res_limb_7_col144; -let mul_res_limb_8_col145 = mul_res_tmp_57455_61.get_m31(8); - *row[145] = mul_res_limb_8_col145; -let mul_res_limb_9_col146 = mul_res_tmp_57455_61.get_m31(9); - *row[146] = mul_res_limb_9_col146; -let mul_res_limb_10_col147 = mul_res_tmp_57455_61.get_m31(10); - *row[147] = mul_res_limb_10_col147; -let mul_res_limb_11_col148 = mul_res_tmp_57455_61.get_m31(11); - *row[148] = mul_res_limb_11_col148; -let mul_res_limb_12_col149 = mul_res_tmp_57455_61.get_m31(12); - *row[149] = mul_res_limb_12_col149; -let mul_res_limb_13_col150 = mul_res_tmp_57455_61.get_m31(13); - *row[150] = mul_res_limb_13_col150; -let mul_res_limb_14_col151 = mul_res_tmp_57455_61.get_m31(14); - *row[151] = mul_res_limb_14_col151; -let mul_res_limb_15_col152 = mul_res_tmp_57455_61.get_m31(15); - *row[152] = mul_res_limb_15_col152; -let mul_res_limb_16_col153 = mul_res_tmp_57455_61.get_m31(16); - *row[153] = mul_res_limb_16_col153; -let mul_res_limb_17_col154 = mul_res_tmp_57455_61.get_m31(17); - *row[154] = mul_res_limb_17_col154; -let mul_res_limb_18_col155 = mul_res_tmp_57455_61.get_m31(18); - *row[155] = mul_res_limb_18_col155; -let mul_res_limb_19_col156 = mul_res_tmp_57455_61.get_m31(19); - *row[156] = mul_res_limb_19_col156; -let mul_res_limb_20_col157 = mul_res_tmp_57455_61.get_m31(20); - *row[157] = mul_res_limb_20_col157; -let mul_res_limb_21_col158 = mul_res_tmp_57455_61.get_m31(21); - *row[158] = mul_res_limb_21_col158; -let mul_res_limb_22_col159 = mul_res_tmp_57455_61.get_m31(22); - *row[159] = mul_res_limb_22_col159; -let mul_res_limb_23_col160 = mul_res_tmp_57455_61.get_m31(23); - *row[160] = mul_res_limb_23_col160; -let mul_res_limb_24_col161 = mul_res_tmp_57455_61.get_m31(24); - *row[161] = mul_res_limb_24_col161; -let mul_res_limb_25_col162 = mul_res_tmp_57455_61.get_m31(25); - *row[162] = mul_res_limb_25_col162; -let mul_res_limb_26_col163 = mul_res_tmp_57455_61.get_m31(26); - *row[163] = mul_res_limb_26_col163; -let mul_res_limb_27_col164 = mul_res_tmp_57455_61.get_m31(27); + let mul_res_tmp_57455_61 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])));let mul_res_limb_0_col137 = mul_res_tmp_57455_61.get_m31(0); + *row[137] = mul_res_limb_0_col137;let mul_res_limb_1_col138 = mul_res_tmp_57455_61.get_m31(1); + *row[138] = mul_res_limb_1_col138;let mul_res_limb_2_col139 = mul_res_tmp_57455_61.get_m31(2); + *row[139] = mul_res_limb_2_col139;let mul_res_limb_3_col140 = mul_res_tmp_57455_61.get_m31(3); + *row[140] = mul_res_limb_3_col140;let mul_res_limb_4_col141 = mul_res_tmp_57455_61.get_m31(4); + *row[141] = mul_res_limb_4_col141;let mul_res_limb_5_col142 = mul_res_tmp_57455_61.get_m31(5); + *row[142] = mul_res_limb_5_col142;let mul_res_limb_6_col143 = mul_res_tmp_57455_61.get_m31(6); + *row[143] = mul_res_limb_6_col143;let mul_res_limb_7_col144 = mul_res_tmp_57455_61.get_m31(7); + *row[144] = mul_res_limb_7_col144;let mul_res_limb_8_col145 = mul_res_tmp_57455_61.get_m31(8); + *row[145] = mul_res_limb_8_col145;let mul_res_limb_9_col146 = mul_res_tmp_57455_61.get_m31(9); + *row[146] = mul_res_limb_9_col146;let mul_res_limb_10_col147 = mul_res_tmp_57455_61.get_m31(10); + *row[147] = mul_res_limb_10_col147;let mul_res_limb_11_col148 = mul_res_tmp_57455_61.get_m31(11); + *row[148] = mul_res_limb_11_col148;let mul_res_limb_12_col149 = mul_res_tmp_57455_61.get_m31(12); + *row[149] = mul_res_limb_12_col149;let mul_res_limb_13_col150 = mul_res_tmp_57455_61.get_m31(13); + *row[150] = mul_res_limb_13_col150;let mul_res_limb_14_col151 = mul_res_tmp_57455_61.get_m31(14); + *row[151] = mul_res_limb_14_col151;let mul_res_limb_15_col152 = mul_res_tmp_57455_61.get_m31(15); + *row[152] = mul_res_limb_15_col152;let mul_res_limb_16_col153 = mul_res_tmp_57455_61.get_m31(16); + *row[153] = mul_res_limb_16_col153;let mul_res_limb_17_col154 = mul_res_tmp_57455_61.get_m31(17); + *row[154] = mul_res_limb_17_col154;let mul_res_limb_18_col155 = mul_res_tmp_57455_61.get_m31(18); + *row[155] = mul_res_limb_18_col155;let mul_res_limb_19_col156 = mul_res_tmp_57455_61.get_m31(19); + *row[156] = mul_res_limb_19_col156;let mul_res_limb_20_col157 = mul_res_tmp_57455_61.get_m31(20); + *row[157] = mul_res_limb_20_col157;let mul_res_limb_21_col158 = mul_res_tmp_57455_61.get_m31(21); + *row[158] = mul_res_limb_21_col158;let mul_res_limb_22_col159 = mul_res_tmp_57455_61.get_m31(22); + *row[159] = mul_res_limb_22_col159;let mul_res_limb_23_col160 = mul_res_tmp_57455_61.get_m31(23); + *row[160] = mul_res_limb_23_col160;let mul_res_limb_24_col161 = mul_res_tmp_57455_61.get_m31(24); + *row[161] = mul_res_limb_24_col161;let mul_res_limb_25_col162 = mul_res_tmp_57455_61.get_m31(25); + *row[162] = mul_res_limb_25_col162;let mul_res_limb_26_col163 = mul_res_tmp_57455_61.get_m31(26); + *row[163] = mul_res_limb_26_col163;let mul_res_limb_27_col164 = mul_res_tmp_57455_61.get_m31(27); *row[164] = mul_res_limb_27_col164; - //Range Check Big Value. - -for (i, &input) in [mul_res_limb_0_col137, mul_res_limb_1_col138].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[14] = input; - } -*lookup_data.range_check_9_9_14 = [mul_res_limb_0_col137, mul_res_limb_1_col138]; -for (i, &input) in [mul_res_limb_2_col139, mul_res_limb_3_col140].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[15] = input; - } -*lookup_data.range_check_9_9_15 = [mul_res_limb_2_col139, mul_res_limb_3_col140]; -for (i, &input) in [mul_res_limb_4_col141, mul_res_limb_5_col142].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[16] = input; - } -*lookup_data.range_check_9_9_16 = [mul_res_limb_4_col141, mul_res_limb_5_col142]; -for (i, &input) in [mul_res_limb_6_col143, mul_res_limb_7_col144].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[17] = input; - } -*lookup_data.range_check_9_9_17 = [mul_res_limb_6_col143, mul_res_limb_7_col144]; -for (i, &input) in [mul_res_limb_8_col145, mul_res_limb_9_col146].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[18] = input; - } -*lookup_data.range_check_9_9_18 = [mul_res_limb_8_col145, mul_res_limb_9_col146]; -for (i, &input) in [mul_res_limb_10_col147, mul_res_limb_11_col148].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[19] = input; - } -*lookup_data.range_check_9_9_19 = [mul_res_limb_10_col147, mul_res_limb_11_col148]; -for (i, &input) in [mul_res_limb_12_col149, mul_res_limb_13_col150].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[20] = input; - } -*lookup_data.range_check_9_9_20 = [mul_res_limb_12_col149, mul_res_limb_13_col150]; -for (i, &input) in [mul_res_limb_14_col151, mul_res_limb_15_col152].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[21] = input; - } -*lookup_data.range_check_9_9_21 = [mul_res_limb_14_col151, mul_res_limb_15_col152]; -for (i, &input) in [mul_res_limb_16_col153, mul_res_limb_17_col154].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[22] = input; - } -*lookup_data.range_check_9_9_22 = [mul_res_limb_16_col153, mul_res_limb_17_col154]; -for (i, &input) in [mul_res_limb_18_col155, mul_res_limb_19_col156].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[23] = input; - } -*lookup_data.range_check_9_9_23 = [mul_res_limb_18_col155, mul_res_limb_19_col156]; -for (i, &input) in [mul_res_limb_20_col157, mul_res_limb_21_col158].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[24] = input; - } -*lookup_data.range_check_9_9_24 = [mul_res_limb_20_col157, mul_res_limb_21_col158]; -for (i, &input) in [mul_res_limb_22_col159, mul_res_limb_23_col160].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[25] = input; - } -*lookup_data.range_check_9_9_25 = [mul_res_limb_22_col159, mul_res_limb_23_col160]; -for (i, &input) in [mul_res_limb_24_col161, mul_res_limb_25_col162].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[26] = input; - } -*lookup_data.range_check_9_9_26 = [mul_res_limb_24_col161, mul_res_limb_25_col162]; -for (i, &input) in [mul_res_limb_26_col163, mul_res_limb_27_col164].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_9_9_inputs[27] = input; - } -*lookup_data.range_check_9_9_27 = [mul_res_limb_26_col163, mul_res_limb_27_col164]; - - - - + let range_check_9_9_inputs_14 = + [mul_res_limb_0_col137, mul_res_limb_1_col138].unpack(); + *lookup_data.range_check_9_9_14 = [mul_res_limb_0_col137, mul_res_limb_1_col138];let range_check_9_9_inputs_15 = + [mul_res_limb_2_col139, mul_res_limb_3_col140].unpack(); + *lookup_data.range_check_9_9_15 = [mul_res_limb_2_col139, mul_res_limb_3_col140];let range_check_9_9_inputs_16 = + [mul_res_limb_4_col141, mul_res_limb_5_col142].unpack(); + *lookup_data.range_check_9_9_16 = [mul_res_limb_4_col141, mul_res_limb_5_col142];let range_check_9_9_inputs_17 = + [mul_res_limb_6_col143, mul_res_limb_7_col144].unpack(); + *lookup_data.range_check_9_9_17 = [mul_res_limb_6_col143, mul_res_limb_7_col144];let range_check_9_9_inputs_18 = + [mul_res_limb_8_col145, mul_res_limb_9_col146].unpack(); + *lookup_data.range_check_9_9_18 = [mul_res_limb_8_col145, mul_res_limb_9_col146];let range_check_9_9_inputs_19 = + [mul_res_limb_10_col147, mul_res_limb_11_col148].unpack(); + *lookup_data.range_check_9_9_19 = [mul_res_limb_10_col147, mul_res_limb_11_col148];let range_check_9_9_inputs_20 = + [mul_res_limb_12_col149, mul_res_limb_13_col150].unpack(); + *lookup_data.range_check_9_9_20 = [mul_res_limb_12_col149, mul_res_limb_13_col150];let range_check_9_9_inputs_21 = + [mul_res_limb_14_col151, mul_res_limb_15_col152].unpack(); + *lookup_data.range_check_9_9_21 = [mul_res_limb_14_col151, mul_res_limb_15_col152];let range_check_9_9_inputs_22 = + [mul_res_limb_16_col153, mul_res_limb_17_col154].unpack(); + *lookup_data.range_check_9_9_22 = [mul_res_limb_16_col153, mul_res_limb_17_col154];let range_check_9_9_inputs_23 = + [mul_res_limb_18_col155, mul_res_limb_19_col156].unpack(); + *lookup_data.range_check_9_9_23 = [mul_res_limb_18_col155, mul_res_limb_19_col156];let range_check_9_9_inputs_24 = + [mul_res_limb_20_col157, mul_res_limb_21_col158].unpack(); + *lookup_data.range_check_9_9_24 = [mul_res_limb_20_col157, mul_res_limb_21_col158];let range_check_9_9_inputs_25 = + [mul_res_limb_22_col159, mul_res_limb_23_col160].unpack(); + *lookup_data.range_check_9_9_25 = [mul_res_limb_22_col159, mul_res_limb_23_col160];let range_check_9_9_inputs_26 = + [mul_res_limb_24_col161, mul_res_limb_25_col162].unpack(); + *lookup_data.range_check_9_9_26 = [mul_res_limb_24_col161, mul_res_limb_25_col162];let range_check_9_9_inputs_27 = + [mul_res_limb_26_col163, mul_res_limb_27_col164].unpack(); + *lookup_data.range_check_9_9_27 = [mul_res_limb_26_col163, mul_res_limb_27_col164]; //Verify Mul 252. - -let conv_tmp_57455_62 = ((((M31_0) - (mul_res_limb_0_col137))) + (((op0_limb_0_col51) * (op1_limb_0_col80)))); -let conv_tmp_57455_63 = ((((((M31_0) - (mul_res_limb_1_col138))) + (((op0_limb_0_col51) * (op1_limb_1_col81))))) + (((op0_limb_1_col52) * (op1_limb_0_col80)))); -let conv_tmp_57455_64 = ((((((((M31_0) - (mul_res_limb_2_col139))) + (((op0_limb_0_col51) * (op1_limb_2_col82))))) + (((op0_limb_1_col52) * (op1_limb_1_col81))))) + (((op0_limb_2_col53) * (op1_limb_0_col80)))); -let conv_tmp_57455_65 = ((((((((((M31_0) - (mul_res_limb_3_col140))) + (((op0_limb_0_col51) * (op1_limb_3_col83))))) + (((op0_limb_1_col52) * (op1_limb_2_col82))))) + (((op0_limb_2_col53) * (op1_limb_1_col81))))) + (((op0_limb_3_col54) * (op1_limb_0_col80)))); -let conv_tmp_57455_66 = ((((((((((((M31_0) - (mul_res_limb_4_col141))) + (((op0_limb_0_col51) * (op1_limb_4_col84))))) + (((op0_limb_1_col52) * (op1_limb_3_col83))))) + (((op0_limb_2_col53) * (op1_limb_2_col82))))) + (((op0_limb_3_col54) * (op1_limb_1_col81))))) + (((op0_limb_4_col55) * (op1_limb_0_col80)))); -let conv_tmp_57455_67 = ((((((((((((((M31_0) - (mul_res_limb_5_col142))) + (((op0_limb_0_col51) * (op1_limb_5_col85))))) + (((op0_limb_1_col52) * (op1_limb_4_col84))))) + (((op0_limb_2_col53) * (op1_limb_3_col83))))) + (((op0_limb_3_col54) * (op1_limb_2_col82))))) + (((op0_limb_4_col55) * (op1_limb_1_col81))))) + (((op0_limb_5_col56) * (op1_limb_0_col80)))); -let conv_tmp_57455_68 = ((((((((((((((((M31_0) - (mul_res_limb_6_col143))) + (((op0_limb_0_col51) * (op1_limb_6_col86))))) + (((op0_limb_1_col52) * (op1_limb_5_col85))))) + (((op0_limb_2_col53) * (op1_limb_4_col84))))) + (((op0_limb_3_col54) * (op1_limb_3_col83))))) + (((op0_limb_4_col55) * (op1_limb_2_col82))))) + (((op0_limb_5_col56) * (op1_limb_1_col81))))) + (((op0_limb_6_col57) * (op1_limb_0_col80)))); -let conv_tmp_57455_69 = ((((((((((((((((((M31_0) - (mul_res_limb_7_col144))) + (((op0_limb_0_col51) * (op1_limb_7_col87))))) + (((op0_limb_1_col52) * (op1_limb_6_col86))))) + (((op0_limb_2_col53) * (op1_limb_5_col85))))) + (((op0_limb_3_col54) * (op1_limb_4_col84))))) + (((op0_limb_4_col55) * (op1_limb_3_col83))))) + (((op0_limb_5_col56) * (op1_limb_2_col82))))) + (((op0_limb_6_col57) * (op1_limb_1_col81))))) + (((op0_limb_7_col58) * (op1_limb_0_col80)))); -let conv_tmp_57455_70 = ((((((((((((((((((((M31_0) - (mul_res_limb_8_col145))) + (((op0_limb_0_col51) * (op1_limb_8_col88))))) + (((op0_limb_1_col52) * (op1_limb_7_col87))))) + (((op0_limb_2_col53) * (op1_limb_6_col86))))) + (((op0_limb_3_col54) * (op1_limb_5_col85))))) + (((op0_limb_4_col55) * (op1_limb_4_col84))))) + (((op0_limb_5_col56) * (op1_limb_3_col83))))) + (((op0_limb_6_col57) * (op1_limb_2_col82))))) + (((op0_limb_7_col58) * (op1_limb_1_col81))))) + (((op0_limb_8_col59) * (op1_limb_0_col80)))); -let conv_tmp_57455_71 = ((((((((((((((((((((((M31_0) - (mul_res_limb_9_col146))) + (((op0_limb_0_col51) * (op1_limb_9_col89))))) + (((op0_limb_1_col52) * (op1_limb_8_col88))))) + (((op0_limb_2_col53) * (op1_limb_7_col87))))) + (((op0_limb_3_col54) * (op1_limb_6_col86))))) + (((op0_limb_4_col55) * (op1_limb_5_col85))))) + (((op0_limb_5_col56) * (op1_limb_4_col84))))) + (((op0_limb_6_col57) * (op1_limb_3_col83))))) + (((op0_limb_7_col58) * (op1_limb_2_col82))))) + (((op0_limb_8_col59) * (op1_limb_1_col81))))) + (((op0_limb_9_col60) * (op1_limb_0_col80)))); -let conv_tmp_57455_72 = ((((((((((((((((((((((((M31_0) - (mul_res_limb_10_col147))) + (((op0_limb_0_col51) * (op1_limb_10_col90))))) + (((op0_limb_1_col52) * (op1_limb_9_col89))))) + (((op0_limb_2_col53) * (op1_limb_8_col88))))) + (((op0_limb_3_col54) * (op1_limb_7_col87))))) + (((op0_limb_4_col55) * (op1_limb_6_col86))))) + (((op0_limb_5_col56) * (op1_limb_5_col85))))) + (((op0_limb_6_col57) * (op1_limb_4_col84))))) + (((op0_limb_7_col58) * (op1_limb_3_col83))))) + (((op0_limb_8_col59) * (op1_limb_2_col82))))) + (((op0_limb_9_col60) * (op1_limb_1_col81))))) + (((op0_limb_10_col61) * (op1_limb_0_col80)))); -let conv_tmp_57455_73 = ((((((((((((((((((((((((((M31_0) - (mul_res_limb_11_col148))) + (((op0_limb_0_col51) * (op1_limb_11_col91))))) + (((op0_limb_1_col52) * (op1_limb_10_col90))))) + (((op0_limb_2_col53) * (op1_limb_9_col89))))) + (((op0_limb_3_col54) * (op1_limb_8_col88))))) + (((op0_limb_4_col55) * (op1_limb_7_col87))))) + (((op0_limb_5_col56) * (op1_limb_6_col86))))) + (((op0_limb_6_col57) * (op1_limb_5_col85))))) + (((op0_limb_7_col58) * (op1_limb_4_col84))))) + (((op0_limb_8_col59) * (op1_limb_3_col83))))) + (((op0_limb_9_col60) * (op1_limb_2_col82))))) + (((op0_limb_10_col61) * (op1_limb_1_col81))))) + (((op0_limb_11_col62) * (op1_limb_0_col80)))); -let conv_tmp_57455_74 = ((((((((((((((((((((((((((((M31_0) - (mul_res_limb_12_col149))) + (((op0_limb_0_col51) * (op1_limb_12_col92))))) + (((op0_limb_1_col52) * (op1_limb_11_col91))))) + (((op0_limb_2_col53) * (op1_limb_10_col90))))) + (((op0_limb_3_col54) * (op1_limb_9_col89))))) + (((op0_limb_4_col55) * (op1_limb_8_col88))))) + (((op0_limb_5_col56) * (op1_limb_7_col87))))) + (((op0_limb_6_col57) * (op1_limb_6_col86))))) + (((op0_limb_7_col58) * (op1_limb_5_col85))))) + (((op0_limb_8_col59) * (op1_limb_4_col84))))) + (((op0_limb_9_col60) * (op1_limb_3_col83))))) + (((op0_limb_10_col61) * (op1_limb_2_col82))))) + (((op0_limb_11_col62) * (op1_limb_1_col81))))) + (((op0_limb_12_col63) * (op1_limb_0_col80)))); -let conv_tmp_57455_75 = ((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_13_col150))) + (((op0_limb_0_col51) * (op1_limb_13_col93))))) + (((op0_limb_1_col52) * (op1_limb_12_col92))))) + (((op0_limb_2_col53) * (op1_limb_11_col91))))) + (((op0_limb_3_col54) * (op1_limb_10_col90))))) + (((op0_limb_4_col55) * (op1_limb_9_col89))))) + (((op0_limb_5_col56) * (op1_limb_8_col88))))) + (((op0_limb_6_col57) * (op1_limb_7_col87))))) + (((op0_limb_7_col58) * (op1_limb_6_col86))))) + (((op0_limb_8_col59) * (op1_limb_5_col85))))) + (((op0_limb_9_col60) * (op1_limb_4_col84))))) + (((op0_limb_10_col61) * (op1_limb_3_col83))))) + (((op0_limb_11_col62) * (op1_limb_2_col82))))) + (((op0_limb_12_col63) * (op1_limb_1_col81))))) + (((op0_limb_13_col64) * (op1_limb_0_col80)))); -let conv_tmp_57455_76 = ((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_14_col151))) + (((op0_limb_0_col51) * (op1_limb_14_col94))))) + (((op0_limb_1_col52) * (op1_limb_13_col93))))) + (((op0_limb_2_col53) * (op1_limb_12_col92))))) + (((op0_limb_3_col54) * (op1_limb_11_col91))))) + (((op0_limb_4_col55) * (op1_limb_10_col90))))) + (((op0_limb_5_col56) * (op1_limb_9_col89))))) + (((op0_limb_6_col57) * (op1_limb_8_col88))))) + (((op0_limb_7_col58) * (op1_limb_7_col87))))) + (((op0_limb_8_col59) * (op1_limb_6_col86))))) + (((op0_limb_9_col60) * (op1_limb_5_col85))))) + (((op0_limb_10_col61) * (op1_limb_4_col84))))) + (((op0_limb_11_col62) * (op1_limb_3_col83))))) + (((op0_limb_12_col63) * (op1_limb_2_col82))))) + (((op0_limb_13_col64) * (op1_limb_1_col81))))) + (((op0_limb_14_col65) * (op1_limb_0_col80)))); -let conv_tmp_57455_77 = ((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_15_col152))) + (((op0_limb_0_col51) * (op1_limb_15_col95))))) + (((op0_limb_1_col52) * (op1_limb_14_col94))))) + (((op0_limb_2_col53) * (op1_limb_13_col93))))) + (((op0_limb_3_col54) * (op1_limb_12_col92))))) + (((op0_limb_4_col55) * (op1_limb_11_col91))))) + (((op0_limb_5_col56) * (op1_limb_10_col90))))) + (((op0_limb_6_col57) * (op1_limb_9_col89))))) + (((op0_limb_7_col58) * (op1_limb_8_col88))))) + (((op0_limb_8_col59) * (op1_limb_7_col87))))) + (((op0_limb_9_col60) * (op1_limb_6_col86))))) + (((op0_limb_10_col61) * (op1_limb_5_col85))))) + (((op0_limb_11_col62) * (op1_limb_4_col84))))) + (((op0_limb_12_col63) * (op1_limb_3_col83))))) + (((op0_limb_13_col64) * (op1_limb_2_col82))))) + (((op0_limb_14_col65) * (op1_limb_1_col81))))) + (((op0_limb_15_col66) * (op1_limb_0_col80)))); -let conv_tmp_57455_78 = ((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_16_col153))) + (((op0_limb_0_col51) * (op1_limb_16_col96))))) + (((op0_limb_1_col52) * (op1_limb_15_col95))))) + (((op0_limb_2_col53) * (op1_limb_14_col94))))) + (((op0_limb_3_col54) * (op1_limb_13_col93))))) + (((op0_limb_4_col55) * (op1_limb_12_col92))))) + (((op0_limb_5_col56) * (op1_limb_11_col91))))) + (((op0_limb_6_col57) * (op1_limb_10_col90))))) + (((op0_limb_7_col58) * (op1_limb_9_col89))))) + (((op0_limb_8_col59) * (op1_limb_8_col88))))) + (((op0_limb_9_col60) * (op1_limb_7_col87))))) + (((op0_limb_10_col61) * (op1_limb_6_col86))))) + (((op0_limb_11_col62) * (op1_limb_5_col85))))) + (((op0_limb_12_col63) * (op1_limb_4_col84))))) + (((op0_limb_13_col64) * (op1_limb_3_col83))))) + (((op0_limb_14_col65) * (op1_limb_2_col82))))) + (((op0_limb_15_col66) * (op1_limb_1_col81))))) + (((op0_limb_16_col67) * (op1_limb_0_col80)))); -let conv_tmp_57455_79 = ((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_17_col154))) + (((op0_limb_0_col51) * (op1_limb_17_col97))))) + (((op0_limb_1_col52) * (op1_limb_16_col96))))) + (((op0_limb_2_col53) * (op1_limb_15_col95))))) + (((op0_limb_3_col54) * (op1_limb_14_col94))))) + (((op0_limb_4_col55) * (op1_limb_13_col93))))) + (((op0_limb_5_col56) * (op1_limb_12_col92))))) + (((op0_limb_6_col57) * (op1_limb_11_col91))))) + (((op0_limb_7_col58) * (op1_limb_10_col90))))) + (((op0_limb_8_col59) * (op1_limb_9_col89))))) + (((op0_limb_9_col60) * (op1_limb_8_col88))))) + (((op0_limb_10_col61) * (op1_limb_7_col87))))) + (((op0_limb_11_col62) * (op1_limb_6_col86))))) + (((op0_limb_12_col63) * (op1_limb_5_col85))))) + (((op0_limb_13_col64) * (op1_limb_4_col84))))) + (((op0_limb_14_col65) * (op1_limb_3_col83))))) + (((op0_limb_15_col66) * (op1_limb_2_col82))))) + (((op0_limb_16_col67) * (op1_limb_1_col81))))) + (((op0_limb_17_col68) * (op1_limb_0_col80)))); -let conv_tmp_57455_80 = ((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_18_col155))) + (((op0_limb_0_col51) * (op1_limb_18_col98))))) + (((op0_limb_1_col52) * (op1_limb_17_col97))))) + (((op0_limb_2_col53) * (op1_limb_16_col96))))) + (((op0_limb_3_col54) * (op1_limb_15_col95))))) + (((op0_limb_4_col55) * (op1_limb_14_col94))))) + (((op0_limb_5_col56) * (op1_limb_13_col93))))) + (((op0_limb_6_col57) * (op1_limb_12_col92))))) + (((op0_limb_7_col58) * (op1_limb_11_col91))))) + (((op0_limb_8_col59) * (op1_limb_10_col90))))) + (((op0_limb_9_col60) * (op1_limb_9_col89))))) + (((op0_limb_10_col61) * (op1_limb_8_col88))))) + (((op0_limb_11_col62) * (op1_limb_7_col87))))) + (((op0_limb_12_col63) * (op1_limb_6_col86))))) + (((op0_limb_13_col64) * (op1_limb_5_col85))))) + (((op0_limb_14_col65) * (op1_limb_4_col84))))) + (((op0_limb_15_col66) * (op1_limb_3_col83))))) + (((op0_limb_16_col67) * (op1_limb_2_col82))))) + (((op0_limb_17_col68) * (op1_limb_1_col81))))) + (((op0_limb_18_col69) * (op1_limb_0_col80)))); -let conv_tmp_57455_81 = ((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_19_col156))) + (((op0_limb_0_col51) * (op1_limb_19_col99))))) + (((op0_limb_1_col52) * (op1_limb_18_col98))))) + (((op0_limb_2_col53) * (op1_limb_17_col97))))) + (((op0_limb_3_col54) * (op1_limb_16_col96))))) + (((op0_limb_4_col55) * (op1_limb_15_col95))))) + (((op0_limb_5_col56) * (op1_limb_14_col94))))) + (((op0_limb_6_col57) * (op1_limb_13_col93))))) + (((op0_limb_7_col58) * (op1_limb_12_col92))))) + (((op0_limb_8_col59) * (op1_limb_11_col91))))) + (((op0_limb_9_col60) * (op1_limb_10_col90))))) + (((op0_limb_10_col61) * (op1_limb_9_col89))))) + (((op0_limb_11_col62) * (op1_limb_8_col88))))) + (((op0_limb_12_col63) * (op1_limb_7_col87))))) + (((op0_limb_13_col64) * (op1_limb_6_col86))))) + (((op0_limb_14_col65) * (op1_limb_5_col85))))) + (((op0_limb_15_col66) * (op1_limb_4_col84))))) + (((op0_limb_16_col67) * (op1_limb_3_col83))))) + (((op0_limb_17_col68) * (op1_limb_2_col82))))) + (((op0_limb_18_col69) * (op1_limb_1_col81))))) + (((op0_limb_19_col70) * (op1_limb_0_col80)))); -let conv_tmp_57455_82 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_20_col157))) + (((op0_limb_0_col51) * (op1_limb_20_col100))))) + (((op0_limb_1_col52) * (op1_limb_19_col99))))) + (((op0_limb_2_col53) * (op1_limb_18_col98))))) + (((op0_limb_3_col54) * (op1_limb_17_col97))))) + (((op0_limb_4_col55) * (op1_limb_16_col96))))) + (((op0_limb_5_col56) * (op1_limb_15_col95))))) + (((op0_limb_6_col57) * (op1_limb_14_col94))))) + (((op0_limb_7_col58) * (op1_limb_13_col93))))) + (((op0_limb_8_col59) * (op1_limb_12_col92))))) + (((op0_limb_9_col60) * (op1_limb_11_col91))))) + (((op0_limb_10_col61) * (op1_limb_10_col90))))) + (((op0_limb_11_col62) * (op1_limb_9_col89))))) + (((op0_limb_12_col63) * (op1_limb_8_col88))))) + (((op0_limb_13_col64) * (op1_limb_7_col87))))) + (((op0_limb_14_col65) * (op1_limb_6_col86))))) + (((op0_limb_15_col66) * (op1_limb_5_col85))))) + (((op0_limb_16_col67) * (op1_limb_4_col84))))) + (((op0_limb_17_col68) * (op1_limb_3_col83))))) + (((op0_limb_18_col69) * (op1_limb_2_col82))))) + (((op0_limb_19_col70) * (op1_limb_1_col81))))) + (((op0_limb_20_col71) * (op1_limb_0_col80)))); -let conv_tmp_57455_83 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_21_col158))) + (((op0_limb_0_col51) * (op1_limb_21_col101))))) + (((op0_limb_1_col52) * (op1_limb_20_col100))))) + (((op0_limb_2_col53) * (op1_limb_19_col99))))) + (((op0_limb_3_col54) * (op1_limb_18_col98))))) + (((op0_limb_4_col55) * (op1_limb_17_col97))))) + (((op0_limb_5_col56) * (op1_limb_16_col96))))) + (((op0_limb_6_col57) * (op1_limb_15_col95))))) + (((op0_limb_7_col58) * (op1_limb_14_col94))))) + (((op0_limb_8_col59) * (op1_limb_13_col93))))) + (((op0_limb_9_col60) * (op1_limb_12_col92))))) + (((op0_limb_10_col61) * (op1_limb_11_col91))))) + (((op0_limb_11_col62) * (op1_limb_10_col90))))) + (((op0_limb_12_col63) * (op1_limb_9_col89))))) + (((op0_limb_13_col64) * (op1_limb_8_col88))))) + (((op0_limb_14_col65) * (op1_limb_7_col87))))) + (((op0_limb_15_col66) * (op1_limb_6_col86))))) + (((op0_limb_16_col67) * (op1_limb_5_col85))))) + (((op0_limb_17_col68) * (op1_limb_4_col84))))) + (((op0_limb_18_col69) * (op1_limb_3_col83))))) + (((op0_limb_19_col70) * (op1_limb_2_col82))))) + (((op0_limb_20_col71) * (op1_limb_1_col81))))) + (((op0_limb_21_col72) * (op1_limb_0_col80)))); -let conv_tmp_57455_84 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_22_col159))) + (((op0_limb_0_col51) * (op1_limb_22_col102))))) + (((op0_limb_1_col52) * (op1_limb_21_col101))))) + (((op0_limb_2_col53) * (op1_limb_20_col100))))) + (((op0_limb_3_col54) * (op1_limb_19_col99))))) + (((op0_limb_4_col55) * (op1_limb_18_col98))))) + (((op0_limb_5_col56) * (op1_limb_17_col97))))) + (((op0_limb_6_col57) * (op1_limb_16_col96))))) + (((op0_limb_7_col58) * (op1_limb_15_col95))))) + (((op0_limb_8_col59) * (op1_limb_14_col94))))) + (((op0_limb_9_col60) * (op1_limb_13_col93))))) + (((op0_limb_10_col61) * (op1_limb_12_col92))))) + (((op0_limb_11_col62) * (op1_limb_11_col91))))) + (((op0_limb_12_col63) * (op1_limb_10_col90))))) + (((op0_limb_13_col64) * (op1_limb_9_col89))))) + (((op0_limb_14_col65) * (op1_limb_8_col88))))) + (((op0_limb_15_col66) * (op1_limb_7_col87))))) + (((op0_limb_16_col67) * (op1_limb_6_col86))))) + (((op0_limb_17_col68) * (op1_limb_5_col85))))) + (((op0_limb_18_col69) * (op1_limb_4_col84))))) + (((op0_limb_19_col70) * (op1_limb_3_col83))))) + (((op0_limb_20_col71) * (op1_limb_2_col82))))) + (((op0_limb_21_col72) * (op1_limb_1_col81))))) + (((op0_limb_22_col73) * (op1_limb_0_col80)))); -let conv_tmp_57455_85 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_23_col160))) + (((op0_limb_0_col51) * (op1_limb_23_col103))))) + (((op0_limb_1_col52) * (op1_limb_22_col102))))) + (((op0_limb_2_col53) * (op1_limb_21_col101))))) + (((op0_limb_3_col54) * (op1_limb_20_col100))))) + (((op0_limb_4_col55) * (op1_limb_19_col99))))) + (((op0_limb_5_col56) * (op1_limb_18_col98))))) + (((op0_limb_6_col57) * (op1_limb_17_col97))))) + (((op0_limb_7_col58) * (op1_limb_16_col96))))) + (((op0_limb_8_col59) * (op1_limb_15_col95))))) + (((op0_limb_9_col60) * (op1_limb_14_col94))))) + (((op0_limb_10_col61) * (op1_limb_13_col93))))) + (((op0_limb_11_col62) * (op1_limb_12_col92))))) + (((op0_limb_12_col63) * (op1_limb_11_col91))))) + (((op0_limb_13_col64) * (op1_limb_10_col90))))) + (((op0_limb_14_col65) * (op1_limb_9_col89))))) + (((op0_limb_15_col66) * (op1_limb_8_col88))))) + (((op0_limb_16_col67) * (op1_limb_7_col87))))) + (((op0_limb_17_col68) * (op1_limb_6_col86))))) + (((op0_limb_18_col69) * (op1_limb_5_col85))))) + (((op0_limb_19_col70) * (op1_limb_4_col84))))) + (((op0_limb_20_col71) * (op1_limb_3_col83))))) + (((op0_limb_21_col72) * (op1_limb_2_col82))))) + (((op0_limb_22_col73) * (op1_limb_1_col81))))) + (((op0_limb_23_col74) * (op1_limb_0_col80)))); -let conv_tmp_57455_86 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_24_col161))) + (((op0_limb_0_col51) * (op1_limb_24_col104))))) + (((op0_limb_1_col52) * (op1_limb_23_col103))))) + (((op0_limb_2_col53) * (op1_limb_22_col102))))) + (((op0_limb_3_col54) * (op1_limb_21_col101))))) + (((op0_limb_4_col55) * (op1_limb_20_col100))))) + (((op0_limb_5_col56) * (op1_limb_19_col99))))) + (((op0_limb_6_col57) * (op1_limb_18_col98))))) + (((op0_limb_7_col58) * (op1_limb_17_col97))))) + (((op0_limb_8_col59) * (op1_limb_16_col96))))) + (((op0_limb_9_col60) * (op1_limb_15_col95))))) + (((op0_limb_10_col61) * (op1_limb_14_col94))))) + (((op0_limb_11_col62) * (op1_limb_13_col93))))) + (((op0_limb_12_col63) * (op1_limb_12_col92))))) + (((op0_limb_13_col64) * (op1_limb_11_col91))))) + (((op0_limb_14_col65) * (op1_limb_10_col90))))) + (((op0_limb_15_col66) * (op1_limb_9_col89))))) + (((op0_limb_16_col67) * (op1_limb_8_col88))))) + (((op0_limb_17_col68) * (op1_limb_7_col87))))) + (((op0_limb_18_col69) * (op1_limb_6_col86))))) + (((op0_limb_19_col70) * (op1_limb_5_col85))))) + (((op0_limb_20_col71) * (op1_limb_4_col84))))) + (((op0_limb_21_col72) * (op1_limb_3_col83))))) + (((op0_limb_22_col73) * (op1_limb_2_col82))))) + (((op0_limb_23_col74) * (op1_limb_1_col81))))) + (((op0_limb_24_col75) * (op1_limb_0_col80)))); -let conv_tmp_57455_87 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_25_col162))) + (((op0_limb_0_col51) * (op1_limb_25_col105))))) + (((op0_limb_1_col52) * (op1_limb_24_col104))))) + (((op0_limb_2_col53) * (op1_limb_23_col103))))) + (((op0_limb_3_col54) * (op1_limb_22_col102))))) + (((op0_limb_4_col55) * (op1_limb_21_col101))))) + (((op0_limb_5_col56) * (op1_limb_20_col100))))) + (((op0_limb_6_col57) * (op1_limb_19_col99))))) + (((op0_limb_7_col58) * (op1_limb_18_col98))))) + (((op0_limb_8_col59) * (op1_limb_17_col97))))) + (((op0_limb_9_col60) * (op1_limb_16_col96))))) + (((op0_limb_10_col61) * (op1_limb_15_col95))))) + (((op0_limb_11_col62) * (op1_limb_14_col94))))) + (((op0_limb_12_col63) * (op1_limb_13_col93))))) + (((op0_limb_13_col64) * (op1_limb_12_col92))))) + (((op0_limb_14_col65) * (op1_limb_11_col91))))) + (((op0_limb_15_col66) * (op1_limb_10_col90))))) + (((op0_limb_16_col67) * (op1_limb_9_col89))))) + (((op0_limb_17_col68) * (op1_limb_8_col88))))) + (((op0_limb_18_col69) * (op1_limb_7_col87))))) + (((op0_limb_19_col70) * (op1_limb_6_col86))))) + (((op0_limb_20_col71) * (op1_limb_5_col85))))) + (((op0_limb_21_col72) * (op1_limb_4_col84))))) + (((op0_limb_22_col73) * (op1_limb_3_col83))))) + (((op0_limb_23_col74) * (op1_limb_2_col82))))) + (((op0_limb_24_col75) * (op1_limb_1_col81))))) + (((op0_limb_25_col76) * (op1_limb_0_col80)))); -let conv_tmp_57455_88 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_26_col163))) + (((op0_limb_0_col51) * (op1_limb_26_col106))))) + (((op0_limb_1_col52) * (op1_limb_25_col105))))) + (((op0_limb_2_col53) * (op1_limb_24_col104))))) + (((op0_limb_3_col54) * (op1_limb_23_col103))))) + (((op0_limb_4_col55) * (op1_limb_22_col102))))) + (((op0_limb_5_col56) * (op1_limb_21_col101))))) + (((op0_limb_6_col57) * (op1_limb_20_col100))))) + (((op0_limb_7_col58) * (op1_limb_19_col99))))) + (((op0_limb_8_col59) * (op1_limb_18_col98))))) + (((op0_limb_9_col60) * (op1_limb_17_col97))))) + (((op0_limb_10_col61) * (op1_limb_16_col96))))) + (((op0_limb_11_col62) * (op1_limb_15_col95))))) + (((op0_limb_12_col63) * (op1_limb_14_col94))))) + (((op0_limb_13_col64) * (op1_limb_13_col93))))) + (((op0_limb_14_col65) * (op1_limb_12_col92))))) + (((op0_limb_15_col66) * (op1_limb_11_col91))))) + (((op0_limb_16_col67) * (op1_limb_10_col90))))) + (((op0_limb_17_col68) * (op1_limb_9_col89))))) + (((op0_limb_18_col69) * (op1_limb_8_col88))))) + (((op0_limb_19_col70) * (op1_limb_7_col87))))) + (((op0_limb_20_col71) * (op1_limb_6_col86))))) + (((op0_limb_21_col72) * (op1_limb_5_col85))))) + (((op0_limb_22_col73) * (op1_limb_4_col84))))) + (((op0_limb_23_col74) * (op1_limb_3_col83))))) + (((op0_limb_24_col75) * (op1_limb_2_col82))))) + (((op0_limb_25_col76) * (op1_limb_1_col81))))) + (((op0_limb_26_col77) * (op1_limb_0_col80)))); -let conv_tmp_57455_89 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_27_col164))) + (((op0_limb_0_col51) * (op1_limb_27_col107))))) + (((op0_limb_1_col52) * (op1_limb_26_col106))))) + (((op0_limb_2_col53) * (op1_limb_25_col105))))) + (((op0_limb_3_col54) * (op1_limb_24_col104))))) + (((op0_limb_4_col55) * (op1_limb_23_col103))))) + (((op0_limb_5_col56) * (op1_limb_22_col102))))) + (((op0_limb_6_col57) * (op1_limb_21_col101))))) + (((op0_limb_7_col58) * (op1_limb_20_col100))))) + (((op0_limb_8_col59) * (op1_limb_19_col99))))) + (((op0_limb_9_col60) * (op1_limb_18_col98))))) + (((op0_limb_10_col61) * (op1_limb_17_col97))))) + (((op0_limb_11_col62) * (op1_limb_16_col96))))) + (((op0_limb_12_col63) * (op1_limb_15_col95))))) + (((op0_limb_13_col64) * (op1_limb_14_col94))))) + (((op0_limb_14_col65) * (op1_limb_13_col93))))) + (((op0_limb_15_col66) * (op1_limb_12_col92))))) + (((op0_limb_16_col67) * (op1_limb_11_col91))))) + (((op0_limb_17_col68) * (op1_limb_10_col90))))) + (((op0_limb_18_col69) * (op1_limb_9_col89))))) + (((op0_limb_19_col70) * (op1_limb_8_col88))))) + (((op0_limb_20_col71) * (op1_limb_7_col87))))) + (((op0_limb_21_col72) * (op1_limb_6_col86))))) + (((op0_limb_22_col73) * (op1_limb_5_col85))))) + (((op0_limb_23_col74) * (op1_limb_4_col84))))) + (((op0_limb_24_col75) * (op1_limb_3_col83))))) + (((op0_limb_25_col76) * (op1_limb_2_col82))))) + (((op0_limb_26_col77) * (op1_limb_1_col81))))) + (((op0_limb_27_col78) * (op1_limb_0_col80)))); -let conv_tmp_57455_90 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_1_col52) * (op1_limb_27_col107))))) + (((op0_limb_2_col53) * (op1_limb_26_col106))))) + (((op0_limb_3_col54) * (op1_limb_25_col105))))) + (((op0_limb_4_col55) * (op1_limb_24_col104))))) + (((op0_limb_5_col56) * (op1_limb_23_col103))))) + (((op0_limb_6_col57) * (op1_limb_22_col102))))) + (((op0_limb_7_col58) * (op1_limb_21_col101))))) + (((op0_limb_8_col59) * (op1_limb_20_col100))))) + (((op0_limb_9_col60) * (op1_limb_19_col99))))) + (((op0_limb_10_col61) * (op1_limb_18_col98))))) + (((op0_limb_11_col62) * (op1_limb_17_col97))))) + (((op0_limb_12_col63) * (op1_limb_16_col96))))) + (((op0_limb_13_col64) * (op1_limb_15_col95))))) + (((op0_limb_14_col65) * (op1_limb_14_col94))))) + (((op0_limb_15_col66) * (op1_limb_13_col93))))) + (((op0_limb_16_col67) * (op1_limb_12_col92))))) + (((op0_limb_17_col68) * (op1_limb_11_col91))))) + (((op0_limb_18_col69) * (op1_limb_10_col90))))) + (((op0_limb_19_col70) * (op1_limb_9_col89))))) + (((op0_limb_20_col71) * (op1_limb_8_col88))))) + (((op0_limb_21_col72) * (op1_limb_7_col87))))) + (((op0_limb_22_col73) * (op1_limb_6_col86))))) + (((op0_limb_23_col74) * (op1_limb_5_col85))))) + (((op0_limb_24_col75) * (op1_limb_4_col84))))) + (((op0_limb_25_col76) * (op1_limb_3_col83))))) + (((op0_limb_26_col77) * (op1_limb_2_col82))))) + (((op0_limb_27_col78) * (op1_limb_1_col81)))); -let conv_tmp_57455_91 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_2_col53) * (op1_limb_27_col107))))) + (((op0_limb_3_col54) * (op1_limb_26_col106))))) + (((op0_limb_4_col55) * (op1_limb_25_col105))))) + (((op0_limb_5_col56) * (op1_limb_24_col104))))) + (((op0_limb_6_col57) * (op1_limb_23_col103))))) + (((op0_limb_7_col58) * (op1_limb_22_col102))))) + (((op0_limb_8_col59) * (op1_limb_21_col101))))) + (((op0_limb_9_col60) * (op1_limb_20_col100))))) + (((op0_limb_10_col61) * (op1_limb_19_col99))))) + (((op0_limb_11_col62) * (op1_limb_18_col98))))) + (((op0_limb_12_col63) * (op1_limb_17_col97))))) + (((op0_limb_13_col64) * (op1_limb_16_col96))))) + (((op0_limb_14_col65) * (op1_limb_15_col95))))) + (((op0_limb_15_col66) * (op1_limb_14_col94))))) + (((op0_limb_16_col67) * (op1_limb_13_col93))))) + (((op0_limb_17_col68) * (op1_limb_12_col92))))) + (((op0_limb_18_col69) * (op1_limb_11_col91))))) + (((op0_limb_19_col70) * (op1_limb_10_col90))))) + (((op0_limb_20_col71) * (op1_limb_9_col89))))) + (((op0_limb_21_col72) * (op1_limb_8_col88))))) + (((op0_limb_22_col73) * (op1_limb_7_col87))))) + (((op0_limb_23_col74) * (op1_limb_6_col86))))) + (((op0_limb_24_col75) * (op1_limb_5_col85))))) + (((op0_limb_25_col76) * (op1_limb_4_col84))))) + (((op0_limb_26_col77) * (op1_limb_3_col83))))) + (((op0_limb_27_col78) * (op1_limb_2_col82)))); -let conv_tmp_57455_92 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_3_col54) * (op1_limb_27_col107))))) + (((op0_limb_4_col55) * (op1_limb_26_col106))))) + (((op0_limb_5_col56) * (op1_limb_25_col105))))) + (((op0_limb_6_col57) * (op1_limb_24_col104))))) + (((op0_limb_7_col58) * (op1_limb_23_col103))))) + (((op0_limb_8_col59) * (op1_limb_22_col102))))) + (((op0_limb_9_col60) * (op1_limb_21_col101))))) + (((op0_limb_10_col61) * (op1_limb_20_col100))))) + (((op0_limb_11_col62) * (op1_limb_19_col99))))) + (((op0_limb_12_col63) * (op1_limb_18_col98))))) + (((op0_limb_13_col64) * (op1_limb_17_col97))))) + (((op0_limb_14_col65) * (op1_limb_16_col96))))) + (((op0_limb_15_col66) * (op1_limb_15_col95))))) + (((op0_limb_16_col67) * (op1_limb_14_col94))))) + (((op0_limb_17_col68) * (op1_limb_13_col93))))) + (((op0_limb_18_col69) * (op1_limb_12_col92))))) + (((op0_limb_19_col70) * (op1_limb_11_col91))))) + (((op0_limb_20_col71) * (op1_limb_10_col90))))) + (((op0_limb_21_col72) * (op1_limb_9_col89))))) + (((op0_limb_22_col73) * (op1_limb_8_col88))))) + (((op0_limb_23_col74) * (op1_limb_7_col87))))) + (((op0_limb_24_col75) * (op1_limb_6_col86))))) + (((op0_limb_25_col76) * (op1_limb_5_col85))))) + (((op0_limb_26_col77) * (op1_limb_4_col84))))) + (((op0_limb_27_col78) * (op1_limb_3_col83)))); -let conv_tmp_57455_93 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_4_col55) * (op1_limb_27_col107))))) + (((op0_limb_5_col56) * (op1_limb_26_col106))))) + (((op0_limb_6_col57) * (op1_limb_25_col105))))) + (((op0_limb_7_col58) * (op1_limb_24_col104))))) + (((op0_limb_8_col59) * (op1_limb_23_col103))))) + (((op0_limb_9_col60) * (op1_limb_22_col102))))) + (((op0_limb_10_col61) * (op1_limb_21_col101))))) + (((op0_limb_11_col62) * (op1_limb_20_col100))))) + (((op0_limb_12_col63) * (op1_limb_19_col99))))) + (((op0_limb_13_col64) * (op1_limb_18_col98))))) + (((op0_limb_14_col65) * (op1_limb_17_col97))))) + (((op0_limb_15_col66) * (op1_limb_16_col96))))) + (((op0_limb_16_col67) * (op1_limb_15_col95))))) + (((op0_limb_17_col68) * (op1_limb_14_col94))))) + (((op0_limb_18_col69) * (op1_limb_13_col93))))) + (((op0_limb_19_col70) * (op1_limb_12_col92))))) + (((op0_limb_20_col71) * (op1_limb_11_col91))))) + (((op0_limb_21_col72) * (op1_limb_10_col90))))) + (((op0_limb_22_col73) * (op1_limb_9_col89))))) + (((op0_limb_23_col74) * (op1_limb_8_col88))))) + (((op0_limb_24_col75) * (op1_limb_7_col87))))) + (((op0_limb_25_col76) * (op1_limb_6_col86))))) + (((op0_limb_26_col77) * (op1_limb_5_col85))))) + (((op0_limb_27_col78) * (op1_limb_4_col84)))); -let conv_tmp_57455_94 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_5_col56) * (op1_limb_27_col107))))) + (((op0_limb_6_col57) * (op1_limb_26_col106))))) + (((op0_limb_7_col58) * (op1_limb_25_col105))))) + (((op0_limb_8_col59) * (op1_limb_24_col104))))) + (((op0_limb_9_col60) * (op1_limb_23_col103))))) + (((op0_limb_10_col61) * (op1_limb_22_col102))))) + (((op0_limb_11_col62) * (op1_limb_21_col101))))) + (((op0_limb_12_col63) * (op1_limb_20_col100))))) + (((op0_limb_13_col64) * (op1_limb_19_col99))))) + (((op0_limb_14_col65) * (op1_limb_18_col98))))) + (((op0_limb_15_col66) * (op1_limb_17_col97))))) + (((op0_limb_16_col67) * (op1_limb_16_col96))))) + (((op0_limb_17_col68) * (op1_limb_15_col95))))) + (((op0_limb_18_col69) * (op1_limb_14_col94))))) + (((op0_limb_19_col70) * (op1_limb_13_col93))))) + (((op0_limb_20_col71) * (op1_limb_12_col92))))) + (((op0_limb_21_col72) * (op1_limb_11_col91))))) + (((op0_limb_22_col73) * (op1_limb_10_col90))))) + (((op0_limb_23_col74) * (op1_limb_9_col89))))) + (((op0_limb_24_col75) * (op1_limb_8_col88))))) + (((op0_limb_25_col76) * (op1_limb_7_col87))))) + (((op0_limb_26_col77) * (op1_limb_6_col86))))) + (((op0_limb_27_col78) * (op1_limb_5_col85)))); -let conv_tmp_57455_95 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_6_col57) * (op1_limb_27_col107))))) + (((op0_limb_7_col58) * (op1_limb_26_col106))))) + (((op0_limb_8_col59) * (op1_limb_25_col105))))) + (((op0_limb_9_col60) * (op1_limb_24_col104))))) + (((op0_limb_10_col61) * (op1_limb_23_col103))))) + (((op0_limb_11_col62) * (op1_limb_22_col102))))) + (((op0_limb_12_col63) * (op1_limb_21_col101))))) + (((op0_limb_13_col64) * (op1_limb_20_col100))))) + (((op0_limb_14_col65) * (op1_limb_19_col99))))) + (((op0_limb_15_col66) * (op1_limb_18_col98))))) + (((op0_limb_16_col67) * (op1_limb_17_col97))))) + (((op0_limb_17_col68) * (op1_limb_16_col96))))) + (((op0_limb_18_col69) * (op1_limb_15_col95))))) + (((op0_limb_19_col70) * (op1_limb_14_col94))))) + (((op0_limb_20_col71) * (op1_limb_13_col93))))) + (((op0_limb_21_col72) * (op1_limb_12_col92))))) + (((op0_limb_22_col73) * (op1_limb_11_col91))))) + (((op0_limb_23_col74) * (op1_limb_10_col90))))) + (((op0_limb_24_col75) * (op1_limb_9_col89))))) + (((op0_limb_25_col76) * (op1_limb_8_col88))))) + (((op0_limb_26_col77) * (op1_limb_7_col87))))) + (((op0_limb_27_col78) * (op1_limb_6_col86)))); -let conv_tmp_57455_96 = ((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_7_col58) * (op1_limb_27_col107))))) + (((op0_limb_8_col59) * (op1_limb_26_col106))))) + (((op0_limb_9_col60) * (op1_limb_25_col105))))) + (((op0_limb_10_col61) * (op1_limb_24_col104))))) + (((op0_limb_11_col62) * (op1_limb_23_col103))))) + (((op0_limb_12_col63) * (op1_limb_22_col102))))) + (((op0_limb_13_col64) * (op1_limb_21_col101))))) + (((op0_limb_14_col65) * (op1_limb_20_col100))))) + (((op0_limb_15_col66) * (op1_limb_19_col99))))) + (((op0_limb_16_col67) * (op1_limb_18_col98))))) + (((op0_limb_17_col68) * (op1_limb_17_col97))))) + (((op0_limb_18_col69) * (op1_limb_16_col96))))) + (((op0_limb_19_col70) * (op1_limb_15_col95))))) + (((op0_limb_20_col71) * (op1_limb_14_col94))))) + (((op0_limb_21_col72) * (op1_limb_13_col93))))) + (((op0_limb_22_col73) * (op1_limb_12_col92))))) + (((op0_limb_23_col74) * (op1_limb_11_col91))))) + (((op0_limb_24_col75) * (op1_limb_10_col90))))) + (((op0_limb_25_col76) * (op1_limb_9_col89))))) + (((op0_limb_26_col77) * (op1_limb_8_col88))))) + (((op0_limb_27_col78) * (op1_limb_7_col87)))); -let conv_tmp_57455_97 = ((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_8_col59) * (op1_limb_27_col107))))) + (((op0_limb_9_col60) * (op1_limb_26_col106))))) + (((op0_limb_10_col61) * (op1_limb_25_col105))))) + (((op0_limb_11_col62) * (op1_limb_24_col104))))) + (((op0_limb_12_col63) * (op1_limb_23_col103))))) + (((op0_limb_13_col64) * (op1_limb_22_col102))))) + (((op0_limb_14_col65) * (op1_limb_21_col101))))) + (((op0_limb_15_col66) * (op1_limb_20_col100))))) + (((op0_limb_16_col67) * (op1_limb_19_col99))))) + (((op0_limb_17_col68) * (op1_limb_18_col98))))) + (((op0_limb_18_col69) * (op1_limb_17_col97))))) + (((op0_limb_19_col70) * (op1_limb_16_col96))))) + (((op0_limb_20_col71) * (op1_limb_15_col95))))) + (((op0_limb_21_col72) * (op1_limb_14_col94))))) + (((op0_limb_22_col73) * (op1_limb_13_col93))))) + (((op0_limb_23_col74) * (op1_limb_12_col92))))) + (((op0_limb_24_col75) * (op1_limb_11_col91))))) + (((op0_limb_25_col76) * (op1_limb_10_col90))))) + (((op0_limb_26_col77) * (op1_limb_9_col89))))) + (((op0_limb_27_col78) * (op1_limb_8_col88)))); -let conv_tmp_57455_98 = ((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_9_col60) * (op1_limb_27_col107))))) + (((op0_limb_10_col61) * (op1_limb_26_col106))))) + (((op0_limb_11_col62) * (op1_limb_25_col105))))) + (((op0_limb_12_col63) * (op1_limb_24_col104))))) + (((op0_limb_13_col64) * (op1_limb_23_col103))))) + (((op0_limb_14_col65) * (op1_limb_22_col102))))) + (((op0_limb_15_col66) * (op1_limb_21_col101))))) + (((op0_limb_16_col67) * (op1_limb_20_col100))))) + (((op0_limb_17_col68) * (op1_limb_19_col99))))) + (((op0_limb_18_col69) * (op1_limb_18_col98))))) + (((op0_limb_19_col70) * (op1_limb_17_col97))))) + (((op0_limb_20_col71) * (op1_limb_16_col96))))) + (((op0_limb_21_col72) * (op1_limb_15_col95))))) + (((op0_limb_22_col73) * (op1_limb_14_col94))))) + (((op0_limb_23_col74) * (op1_limb_13_col93))))) + (((op0_limb_24_col75) * (op1_limb_12_col92))))) + (((op0_limb_25_col76) * (op1_limb_11_col91))))) + (((op0_limb_26_col77) * (op1_limb_10_col90))))) + (((op0_limb_27_col78) * (op1_limb_9_col89)))); -let conv_tmp_57455_99 = ((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_10_col61) * (op1_limb_27_col107))))) + (((op0_limb_11_col62) * (op1_limb_26_col106))))) + (((op0_limb_12_col63) * (op1_limb_25_col105))))) + (((op0_limb_13_col64) * (op1_limb_24_col104))))) + (((op0_limb_14_col65) * (op1_limb_23_col103))))) + (((op0_limb_15_col66) * (op1_limb_22_col102))))) + (((op0_limb_16_col67) * (op1_limb_21_col101))))) + (((op0_limb_17_col68) * (op1_limb_20_col100))))) + (((op0_limb_18_col69) * (op1_limb_19_col99))))) + (((op0_limb_19_col70) * (op1_limb_18_col98))))) + (((op0_limb_20_col71) * (op1_limb_17_col97))))) + (((op0_limb_21_col72) * (op1_limb_16_col96))))) + (((op0_limb_22_col73) * (op1_limb_15_col95))))) + (((op0_limb_23_col74) * (op1_limb_14_col94))))) + (((op0_limb_24_col75) * (op1_limb_13_col93))))) + (((op0_limb_25_col76) * (op1_limb_12_col92))))) + (((op0_limb_26_col77) * (op1_limb_11_col91))))) + (((op0_limb_27_col78) * (op1_limb_10_col90)))); -let conv_tmp_57455_100 = ((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_11_col62) * (op1_limb_27_col107))))) + (((op0_limb_12_col63) * (op1_limb_26_col106))))) + (((op0_limb_13_col64) * (op1_limb_25_col105))))) + (((op0_limb_14_col65) * (op1_limb_24_col104))))) + (((op0_limb_15_col66) * (op1_limb_23_col103))))) + (((op0_limb_16_col67) * (op1_limb_22_col102))))) + (((op0_limb_17_col68) * (op1_limb_21_col101))))) + (((op0_limb_18_col69) * (op1_limb_20_col100))))) + (((op0_limb_19_col70) * (op1_limb_19_col99))))) + (((op0_limb_20_col71) * (op1_limb_18_col98))))) + (((op0_limb_21_col72) * (op1_limb_17_col97))))) + (((op0_limb_22_col73) * (op1_limb_16_col96))))) + (((op0_limb_23_col74) * (op1_limb_15_col95))))) + (((op0_limb_24_col75) * (op1_limb_14_col94))))) + (((op0_limb_25_col76) * (op1_limb_13_col93))))) + (((op0_limb_26_col77) * (op1_limb_12_col92))))) + (((op0_limb_27_col78) * (op1_limb_11_col91)))); -let conv_tmp_57455_101 = ((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_12_col63) * (op1_limb_27_col107))))) + (((op0_limb_13_col64) * (op1_limb_26_col106))))) + (((op0_limb_14_col65) * (op1_limb_25_col105))))) + (((op0_limb_15_col66) * (op1_limb_24_col104))))) + (((op0_limb_16_col67) * (op1_limb_23_col103))))) + (((op0_limb_17_col68) * (op1_limb_22_col102))))) + (((op0_limb_18_col69) * (op1_limb_21_col101))))) + (((op0_limb_19_col70) * (op1_limb_20_col100))))) + (((op0_limb_20_col71) * (op1_limb_19_col99))))) + (((op0_limb_21_col72) * (op1_limb_18_col98))))) + (((op0_limb_22_col73) * (op1_limb_17_col97))))) + (((op0_limb_23_col74) * (op1_limb_16_col96))))) + (((op0_limb_24_col75) * (op1_limb_15_col95))))) + (((op0_limb_25_col76) * (op1_limb_14_col94))))) + (((op0_limb_26_col77) * (op1_limb_13_col93))))) + (((op0_limb_27_col78) * (op1_limb_12_col92)))); -let conv_tmp_57455_102 = ((((((((((((((((((((((((((((((M31_0) + (((op0_limb_13_col64) * (op1_limb_27_col107))))) + (((op0_limb_14_col65) * (op1_limb_26_col106))))) + (((op0_limb_15_col66) * (op1_limb_25_col105))))) + (((op0_limb_16_col67) * (op1_limb_24_col104))))) + (((op0_limb_17_col68) * (op1_limb_23_col103))))) + (((op0_limb_18_col69) * (op1_limb_22_col102))))) + (((op0_limb_19_col70) * (op1_limb_21_col101))))) + (((op0_limb_20_col71) * (op1_limb_20_col100))))) + (((op0_limb_21_col72) * (op1_limb_19_col99))))) + (((op0_limb_22_col73) * (op1_limb_18_col98))))) + (((op0_limb_23_col74) * (op1_limb_17_col97))))) + (((op0_limb_24_col75) * (op1_limb_16_col96))))) + (((op0_limb_25_col76) * (op1_limb_15_col95))))) + (((op0_limb_26_col77) * (op1_limb_14_col94))))) + (((op0_limb_27_col78) * (op1_limb_13_col93)))); -let conv_tmp_57455_103 = ((((((((((((((((((((((((((((M31_0) + (((op0_limb_14_col65) * (op1_limb_27_col107))))) + (((op0_limb_15_col66) * (op1_limb_26_col106))))) + (((op0_limb_16_col67) * (op1_limb_25_col105))))) + (((op0_limb_17_col68) * (op1_limb_24_col104))))) + (((op0_limb_18_col69) * (op1_limb_23_col103))))) + (((op0_limb_19_col70) * (op1_limb_22_col102))))) + (((op0_limb_20_col71) * (op1_limb_21_col101))))) + (((op0_limb_21_col72) * (op1_limb_20_col100))))) + (((op0_limb_22_col73) * (op1_limb_19_col99))))) + (((op0_limb_23_col74) * (op1_limb_18_col98))))) + (((op0_limb_24_col75) * (op1_limb_17_col97))))) + (((op0_limb_25_col76) * (op1_limb_16_col96))))) + (((op0_limb_26_col77) * (op1_limb_15_col95))))) + (((op0_limb_27_col78) * (op1_limb_14_col94)))); -let conv_tmp_57455_104 = ((((((((((((((((((((((((((M31_0) + (((op0_limb_15_col66) * (op1_limb_27_col107))))) + (((op0_limb_16_col67) * (op1_limb_26_col106))))) + (((op0_limb_17_col68) * (op1_limb_25_col105))))) + (((op0_limb_18_col69) * (op1_limb_24_col104))))) + (((op0_limb_19_col70) * (op1_limb_23_col103))))) + (((op0_limb_20_col71) * (op1_limb_22_col102))))) + (((op0_limb_21_col72) * (op1_limb_21_col101))))) + (((op0_limb_22_col73) * (op1_limb_20_col100))))) + (((op0_limb_23_col74) * (op1_limb_19_col99))))) + (((op0_limb_24_col75) * (op1_limb_18_col98))))) + (((op0_limb_25_col76) * (op1_limb_17_col97))))) + (((op0_limb_26_col77) * (op1_limb_16_col96))))) + (((op0_limb_27_col78) * (op1_limb_15_col95)))); -let conv_tmp_57455_105 = ((((((((((((((((((((((((M31_0) + (((op0_limb_16_col67) * (op1_limb_27_col107))))) + (((op0_limb_17_col68) * (op1_limb_26_col106))))) + (((op0_limb_18_col69) * (op1_limb_25_col105))))) + (((op0_limb_19_col70) * (op1_limb_24_col104))))) + (((op0_limb_20_col71) * (op1_limb_23_col103))))) + (((op0_limb_21_col72) * (op1_limb_22_col102))))) + (((op0_limb_22_col73) * (op1_limb_21_col101))))) + (((op0_limb_23_col74) * (op1_limb_20_col100))))) + (((op0_limb_24_col75) * (op1_limb_19_col99))))) + (((op0_limb_25_col76) * (op1_limb_18_col98))))) + (((op0_limb_26_col77) * (op1_limb_17_col97))))) + (((op0_limb_27_col78) * (op1_limb_16_col96)))); -let conv_tmp_57455_106 = ((((((((((((((((((((((M31_0) + (((op0_limb_17_col68) * (op1_limb_27_col107))))) + (((op0_limb_18_col69) * (op1_limb_26_col106))))) + (((op0_limb_19_col70) * (op1_limb_25_col105))))) + (((op0_limb_20_col71) * (op1_limb_24_col104))))) + (((op0_limb_21_col72) * (op1_limb_23_col103))))) + (((op0_limb_22_col73) * (op1_limb_22_col102))))) + (((op0_limb_23_col74) * (op1_limb_21_col101))))) + (((op0_limb_24_col75) * (op1_limb_20_col100))))) + (((op0_limb_25_col76) * (op1_limb_19_col99))))) + (((op0_limb_26_col77) * (op1_limb_18_col98))))) + (((op0_limb_27_col78) * (op1_limb_17_col97)))); -let conv_tmp_57455_107 = ((((((((((((((((((((M31_0) + (((op0_limb_18_col69) * (op1_limb_27_col107))))) + (((op0_limb_19_col70) * (op1_limb_26_col106))))) + (((op0_limb_20_col71) * (op1_limb_25_col105))))) + (((op0_limb_21_col72) * (op1_limb_24_col104))))) + (((op0_limb_22_col73) * (op1_limb_23_col103))))) + (((op0_limb_23_col74) * (op1_limb_22_col102))))) + (((op0_limb_24_col75) * (op1_limb_21_col101))))) + (((op0_limb_25_col76) * (op1_limb_20_col100))))) + (((op0_limb_26_col77) * (op1_limb_19_col99))))) + (((op0_limb_27_col78) * (op1_limb_18_col98)))); -let conv_tmp_57455_108 = ((((((((((((((((((M31_0) + (((op0_limb_19_col70) * (op1_limb_27_col107))))) + (((op0_limb_20_col71) * (op1_limb_26_col106))))) + (((op0_limb_21_col72) * (op1_limb_25_col105))))) + (((op0_limb_22_col73) * (op1_limb_24_col104))))) + (((op0_limb_23_col74) * (op1_limb_23_col103))))) + (((op0_limb_24_col75) * (op1_limb_22_col102))))) + (((op0_limb_25_col76) * (op1_limb_21_col101))))) + (((op0_limb_26_col77) * (op1_limb_20_col100))))) + (((op0_limb_27_col78) * (op1_limb_19_col99)))); -let conv_tmp_57455_109 = ((((((((((((((((M31_0) + (((op0_limb_20_col71) * (op1_limb_27_col107))))) + (((op0_limb_21_col72) * (op1_limb_26_col106))))) + (((op0_limb_22_col73) * (op1_limb_25_col105))))) + (((op0_limb_23_col74) * (op1_limb_24_col104))))) + (((op0_limb_24_col75) * (op1_limb_23_col103))))) + (((op0_limb_25_col76) * (op1_limb_22_col102))))) + (((op0_limb_26_col77) * (op1_limb_21_col101))))) + (((op0_limb_27_col78) * (op1_limb_20_col100)))); -let conv_tmp_57455_110 = ((((((((((((((M31_0) + (((op0_limb_21_col72) * (op1_limb_27_col107))))) + (((op0_limb_22_col73) * (op1_limb_26_col106))))) + (((op0_limb_23_col74) * (op1_limb_25_col105))))) + (((op0_limb_24_col75) * (op1_limb_24_col104))))) + (((op0_limb_25_col76) * (op1_limb_23_col103))))) + (((op0_limb_26_col77) * (op1_limb_22_col102))))) + (((op0_limb_27_col78) * (op1_limb_21_col101)))); -let conv_tmp_57455_111 = ((((((((((((M31_0) + (((op0_limb_22_col73) * (op1_limb_27_col107))))) + (((op0_limb_23_col74) * (op1_limb_26_col106))))) + (((op0_limb_24_col75) * (op1_limb_25_col105))))) + (((op0_limb_25_col76) * (op1_limb_24_col104))))) + (((op0_limb_26_col77) * (op1_limb_23_col103))))) + (((op0_limb_27_col78) * (op1_limb_22_col102)))); -let conv_tmp_57455_112 = ((((((((((M31_0) + (((op0_limb_23_col74) * (op1_limb_27_col107))))) + (((op0_limb_24_col75) * (op1_limb_26_col106))))) + (((op0_limb_25_col76) * (op1_limb_25_col105))))) + (((op0_limb_26_col77) * (op1_limb_24_col104))))) + (((op0_limb_27_col78) * (op1_limb_23_col103)))); -let conv_tmp_57455_113 = ((((((((M31_0) + (((op0_limb_24_col75) * (op1_limb_27_col107))))) + (((op0_limb_25_col76) * (op1_limb_26_col106))))) + (((op0_limb_26_col77) * (op1_limb_25_col105))))) + (((op0_limb_27_col78) * (op1_limb_24_col104)))); -let conv_tmp_57455_114 = ((((((M31_0) + (((op0_limb_25_col76) * (op1_limb_27_col107))))) + (((op0_limb_26_col77) * (op1_limb_26_col106))))) + (((op0_limb_27_col78) * (op1_limb_25_col105)))); -let conv_tmp_57455_115 = ((((M31_0) + (((op0_limb_26_col77) * (op1_limb_27_col107))))) + (((op0_limb_27_col78) * (op1_limb_26_col106)))); -let conv_tmp_57455_116 = ((M31_0) + (((op0_limb_27_col78) * (op1_limb_27_col107)))); -let conv_mod_tmp_57455_117 = ((((((M31_0) + (((M31_32) * (conv_tmp_57455_62))))) - (((M31_4) * (conv_tmp_57455_83))))) + (((M31_8) * (conv_tmp_57455_111)))); -let conv_mod_tmp_57455_118 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_62))))) + (((M31_32) * (conv_tmp_57455_63))))) - (((M31_4) * (conv_tmp_57455_84))))) + (((M31_8) * (conv_tmp_57455_112)))); -let conv_mod_tmp_57455_119 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_63))))) + (((M31_32) * (conv_tmp_57455_64))))) - (((M31_4) * (conv_tmp_57455_85))))) + (((M31_8) * (conv_tmp_57455_113)))); -let conv_mod_tmp_57455_120 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_64))))) + (((M31_32) * (conv_tmp_57455_65))))) - (((M31_4) * (conv_tmp_57455_86))))) + (((M31_8) * (conv_tmp_57455_114)))); -let conv_mod_tmp_57455_121 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_65))))) + (((M31_32) * (conv_tmp_57455_66))))) - (((M31_4) * (conv_tmp_57455_87))))) + (((M31_8) * (conv_tmp_57455_115)))); -let conv_mod_tmp_57455_122 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_66))))) + (((M31_32) * (conv_tmp_57455_67))))) - (((M31_4) * (conv_tmp_57455_88))))) + (((M31_8) * (conv_tmp_57455_116)))); -let conv_mod_tmp_57455_123 = ((((((M31_0) + (((M31_1) * (conv_tmp_57455_67))))) + (((M31_32) * (conv_tmp_57455_68))))) - (((M31_4) * (conv_tmp_57455_89)))); -let conv_mod_tmp_57455_124 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_62))))) + (((M31_1) * (conv_tmp_57455_68))))) + (((M31_32) * (conv_tmp_57455_69))))) - (((M31_4) * (conv_tmp_57455_90)))); -let conv_mod_tmp_57455_125 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_63))))) + (((M31_1) * (conv_tmp_57455_69))))) + (((M31_32) * (conv_tmp_57455_70))))) - (((M31_4) * (conv_tmp_57455_91)))); -let conv_mod_tmp_57455_126 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_64))))) + (((M31_1) * (conv_tmp_57455_70))))) + (((M31_32) * (conv_tmp_57455_71))))) - (((M31_4) * (conv_tmp_57455_92)))); -let conv_mod_tmp_57455_127 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_65))))) + (((M31_1) * (conv_tmp_57455_71))))) + (((M31_32) * (conv_tmp_57455_72))))) - (((M31_4) * (conv_tmp_57455_93)))); -let conv_mod_tmp_57455_128 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_66))))) + (((M31_1) * (conv_tmp_57455_72))))) + (((M31_32) * (conv_tmp_57455_73))))) - (((M31_4) * (conv_tmp_57455_94)))); -let conv_mod_tmp_57455_129 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_67))))) + (((M31_1) * (conv_tmp_57455_73))))) + (((M31_32) * (conv_tmp_57455_74))))) - (((M31_4) * (conv_tmp_57455_95)))); -let conv_mod_tmp_57455_130 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_68))))) + (((M31_1) * (conv_tmp_57455_74))))) + (((M31_32) * (conv_tmp_57455_75))))) - (((M31_4) * (conv_tmp_57455_96)))); -let conv_mod_tmp_57455_131 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_69))))) + (((M31_1) * (conv_tmp_57455_75))))) + (((M31_32) * (conv_tmp_57455_76))))) - (((M31_4) * (conv_tmp_57455_97)))); -let conv_mod_tmp_57455_132 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_70))))) + (((M31_1) * (conv_tmp_57455_76))))) + (((M31_32) * (conv_tmp_57455_77))))) - (((M31_4) * (conv_tmp_57455_98)))); -let conv_mod_tmp_57455_133 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_71))))) + (((M31_1) * (conv_tmp_57455_77))))) + (((M31_32) * (conv_tmp_57455_78))))) - (((M31_4) * (conv_tmp_57455_99)))); -let conv_mod_tmp_57455_134 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_72))))) + (((M31_1) * (conv_tmp_57455_78))))) + (((M31_32) * (conv_tmp_57455_79))))) - (((M31_4) * (conv_tmp_57455_100)))); -let conv_mod_tmp_57455_135 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_73))))) + (((M31_1) * (conv_tmp_57455_79))))) + (((M31_32) * (conv_tmp_57455_80))))) - (((M31_4) * (conv_tmp_57455_101)))); -let conv_mod_tmp_57455_136 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_74))))) + (((M31_1) * (conv_tmp_57455_80))))) + (((M31_32) * (conv_tmp_57455_81))))) - (((M31_4) * (conv_tmp_57455_102)))); -let conv_mod_tmp_57455_137 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_75))))) + (((M31_1) * (conv_tmp_57455_81))))) + (((M31_32) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_103)))); -let conv_mod_tmp_57455_138 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_76))))) + (((M31_1) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_104))))) + (((M31_64) * (conv_tmp_57455_111)))); -let conv_mod_tmp_57455_139 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_77))))) - (((M31_4) * (conv_tmp_57455_105))))) + (((M31_2) * (conv_tmp_57455_111))))) + (((M31_64) * (conv_tmp_57455_112)))); -let conv_mod_tmp_57455_140 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_78))))) - (((M31_4) * (conv_tmp_57455_106))))) + (((M31_2) * (conv_tmp_57455_112))))) + (((M31_64) * (conv_tmp_57455_113)))); -let conv_mod_tmp_57455_141 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_79))))) - (((M31_4) * (conv_tmp_57455_107))))) + (((M31_2) * (conv_tmp_57455_113))))) + (((M31_64) * (conv_tmp_57455_114)))); -let conv_mod_tmp_57455_142 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_80))))) - (((M31_4) * (conv_tmp_57455_108))))) + (((M31_2) * (conv_tmp_57455_114))))) + (((M31_64) * (conv_tmp_57455_115)))); -let conv_mod_tmp_57455_143 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_81))))) - (((M31_4) * (conv_tmp_57455_109))))) + (((M31_2) * (conv_tmp_57455_115))))) + (((M31_64) * (conv_tmp_57455_116)))); -let conv_mod_tmp_57455_144 = ((((((M31_0) + (((M31_2) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_110))))) + (((M31_2) * (conv_tmp_57455_116)))); -let k_mod_2_18_biased_tmp_57455_145 = ((((((PackedUInt32::from_m31(((conv_mod_tmp_57455_117) + (M31_134217728)))) + (((((PackedUInt32::from_m31(((conv_mod_tmp_57455_118) + (M31_134217728)))) & (UInt32_511))) << (UInt32_9))))) + (UInt32_65536))) & (UInt32_262143)); -let k_col165 = ((k_mod_2_18_biased_tmp_57455_145.low().as_m31()) + (((((k_mod_2_18_biased_tmp_57455_145.high().as_m31()) - (M31_1))) * (M31_65536)))); - *row[165] = k_col165; -for (i, &input) in [((k_col165) + (M31_262144))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[0] = input; - } -*lookup_data.range_check_19_0 = [((k_col165) + (M31_262144))]; -let carry_0_col166 = ((((((conv_mod_tmp_57455_117) - (((M31_1) * (k_col165))))) + (M31_0))) * (M31_4194304)); - *row[166] = carry_0_col166; -for (i, &input) in [((carry_0_col166) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[1] = input; - } -*lookup_data.range_check_19_1 = [((carry_0_col166) + (M31_131072))]; -let carry_1_col167 = ((((conv_mod_tmp_57455_118) + (carry_0_col166))) * (M31_4194304)); - *row[167] = carry_1_col167; -for (i, &input) in [((carry_1_col167) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[2] = input; - } -*lookup_data.range_check_19_2 = [((carry_1_col167) + (M31_131072))]; -let carry_2_col168 = ((((conv_mod_tmp_57455_119) + (carry_1_col167))) * (M31_4194304)); - *row[168] = carry_2_col168; -for (i, &input) in [((carry_2_col168) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[3] = input; - } -*lookup_data.range_check_19_3 = [((carry_2_col168) + (M31_131072))]; -let carry_3_col169 = ((((conv_mod_tmp_57455_120) + (carry_2_col168))) * (M31_4194304)); - *row[169] = carry_3_col169; -for (i, &input) in [((carry_3_col169) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[4] = input; - } -*lookup_data.range_check_19_4 = [((carry_3_col169) + (M31_131072))]; -let carry_4_col170 = ((((conv_mod_tmp_57455_121) + (carry_3_col169))) * (M31_4194304)); - *row[170] = carry_4_col170; -for (i, &input) in [((carry_4_col170) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[5] = input; - } -*lookup_data.range_check_19_5 = [((carry_4_col170) + (M31_131072))]; -let carry_5_col171 = ((((conv_mod_tmp_57455_122) + (carry_4_col170))) * (M31_4194304)); - *row[171] = carry_5_col171; -for (i, &input) in [((carry_5_col171) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[6] = input; - } -*lookup_data.range_check_19_6 = [((carry_5_col171) + (M31_131072))]; -let carry_6_col172 = ((((conv_mod_tmp_57455_123) + (carry_5_col171))) * (M31_4194304)); - *row[172] = carry_6_col172; -for (i, &input) in [((carry_6_col172) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[7] = input; - } -*lookup_data.range_check_19_7 = [((carry_6_col172) + (M31_131072))]; -let carry_7_col173 = ((((conv_mod_tmp_57455_124) + (carry_6_col172))) * (M31_4194304)); - *row[173] = carry_7_col173; -for (i, &input) in [((carry_7_col173) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[8] = input; - } -*lookup_data.range_check_19_8 = [((carry_7_col173) + (M31_131072))]; -let carry_8_col174 = ((((conv_mod_tmp_57455_125) + (carry_7_col173))) * (M31_4194304)); - *row[174] = carry_8_col174; -for (i, &input) in [((carry_8_col174) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[9] = input; - } -*lookup_data.range_check_19_9 = [((carry_8_col174) + (M31_131072))]; -let carry_9_col175 = ((((conv_mod_tmp_57455_126) + (carry_8_col174))) * (M31_4194304)); - *row[175] = carry_9_col175; -for (i, &input) in [((carry_9_col175) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[10] = input; - } -*lookup_data.range_check_19_10 = [((carry_9_col175) + (M31_131072))]; -let carry_10_col176 = ((((conv_mod_tmp_57455_127) + (carry_9_col175))) * (M31_4194304)); - *row[176] = carry_10_col176; -for (i, &input) in [((carry_10_col176) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[11] = input; - } -*lookup_data.range_check_19_11 = [((carry_10_col176) + (M31_131072))]; -let carry_11_col177 = ((((conv_mod_tmp_57455_128) + (carry_10_col176))) * (M31_4194304)); - *row[177] = carry_11_col177; -for (i, &input) in [((carry_11_col177) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[12] = input; - } -*lookup_data.range_check_19_12 = [((carry_11_col177) + (M31_131072))]; -let carry_12_col178 = ((((conv_mod_tmp_57455_129) + (carry_11_col177))) * (M31_4194304)); - *row[178] = carry_12_col178; -for (i, &input) in [((carry_12_col178) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[13] = input; - } -*lookup_data.range_check_19_13 = [((carry_12_col178) + (M31_131072))]; -let carry_13_col179 = ((((conv_mod_tmp_57455_130) + (carry_12_col178))) * (M31_4194304)); - *row[179] = carry_13_col179; -for (i, &input) in [((carry_13_col179) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[14] = input; - } -*lookup_data.range_check_19_14 = [((carry_13_col179) + (M31_131072))]; -let carry_14_col180 = ((((conv_mod_tmp_57455_131) + (carry_13_col179))) * (M31_4194304)); - *row[180] = carry_14_col180; -for (i, &input) in [((carry_14_col180) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[15] = input; - } -*lookup_data.range_check_19_15 = [((carry_14_col180) + (M31_131072))]; -let carry_15_col181 = ((((conv_mod_tmp_57455_132) + (carry_14_col180))) * (M31_4194304)); - *row[181] = carry_15_col181; -for (i, &input) in [((carry_15_col181) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[16] = input; - } -*lookup_data.range_check_19_16 = [((carry_15_col181) + (M31_131072))]; -let carry_16_col182 = ((((conv_mod_tmp_57455_133) + (carry_15_col181))) * (M31_4194304)); - *row[182] = carry_16_col182; -for (i, &input) in [((carry_16_col182) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[17] = input; - } -*lookup_data.range_check_19_17 = [((carry_16_col182) + (M31_131072))]; -let carry_17_col183 = ((((conv_mod_tmp_57455_134) + (carry_16_col182))) * (M31_4194304)); - *row[183] = carry_17_col183; -for (i, &input) in [((carry_17_col183) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[18] = input; - } -*lookup_data.range_check_19_18 = [((carry_17_col183) + (M31_131072))]; -let carry_18_col184 = ((((conv_mod_tmp_57455_135) + (carry_17_col183))) * (M31_4194304)); - *row[184] = carry_18_col184; -for (i, &input) in [((carry_18_col184) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[19] = input; - } -*lookup_data.range_check_19_19 = [((carry_18_col184) + (M31_131072))]; -let carry_19_col185 = ((((conv_mod_tmp_57455_136) + (carry_18_col184))) * (M31_4194304)); - *row[185] = carry_19_col185; -for (i, &input) in [((carry_19_col185) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[20] = input; - } -*lookup_data.range_check_19_20 = [((carry_19_col185) + (M31_131072))]; -let carry_20_col186 = ((((conv_mod_tmp_57455_137) + (carry_19_col185))) * (M31_4194304)); - *row[186] = carry_20_col186; -for (i, &input) in [((carry_20_col186) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[21] = input; - } -*lookup_data.range_check_19_21 = [((carry_20_col186) + (M31_131072))]; -let carry_21_col187 = ((((((conv_mod_tmp_57455_138) - (((M31_136) * (k_col165))))) + (carry_20_col186))) * (M31_4194304)); - *row[187] = carry_21_col187; -for (i, &input) in [((carry_21_col187) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[22] = input; - } -*lookup_data.range_check_19_22 = [((carry_21_col187) + (M31_131072))]; -let carry_22_col188 = ((((conv_mod_tmp_57455_139) + (carry_21_col187))) * (M31_4194304)); - *row[188] = carry_22_col188; -for (i, &input) in [((carry_22_col188) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[23] = input; - } -*lookup_data.range_check_19_23 = [((carry_22_col188) + (M31_131072))]; -let carry_23_col189 = ((((conv_mod_tmp_57455_140) + (carry_22_col188))) * (M31_4194304)); - *row[189] = carry_23_col189; -for (i, &input) in [((carry_23_col189) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[24] = input; - } -*lookup_data.range_check_19_24 = [((carry_23_col189) + (M31_131072))]; -let carry_24_col190 = ((((conv_mod_tmp_57455_141) + (carry_23_col189))) * (M31_4194304)); - *row[190] = carry_24_col190; -for (i, &input) in [((carry_24_col190) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[25] = input; - } -*lookup_data.range_check_19_25 = [((carry_24_col190) + (M31_131072))]; -let carry_25_col191 = ((((conv_mod_tmp_57455_142) + (carry_24_col190))) * (M31_4194304)); - *row[191] = carry_25_col191; -for (i, &input) in [((carry_25_col191) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[26] = input; - } -*lookup_data.range_check_19_26 = [((carry_25_col191) + (M31_131072))]; -let carry_26_col192 = ((((conv_mod_tmp_57455_143) + (carry_25_col191))) * (M31_4194304)); - *row[192] = carry_26_col192; -for (i, &input) in [((carry_26_col192) + (M31_131072))].unpack().iter().enumerate() { - *sub_components_inputs[i] - .range_check_19_inputs[27] = input; - } -*lookup_data.range_check_19_27 = [((carry_26_col192) + (M31_131072))]; - - - - - - -let res_tmp_57455_146 = ((((((PackedFelt252::from_m31(res_op1_tmp_57455_22)) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])))) + (((PackedFelt252::from_m31(res_mul_col12)) * (mul_res_tmp_57455_61))))) + (((PackedFelt252::from_m31(res_add_col11)) * (add_res_tmp_57455_32)))); -let res_limb_0_col193 = res_tmp_57455_146.get_m31(0); - *row[193] = res_limb_0_col193; -let res_limb_1_col194 = res_tmp_57455_146.get_m31(1); - *row[194] = res_limb_1_col194; -let res_limb_2_col195 = res_tmp_57455_146.get_m31(2); - *row[195] = res_limb_2_col195; -let res_limb_3_col196 = res_tmp_57455_146.get_m31(3); - *row[196] = res_limb_3_col196; -let res_limb_4_col197 = res_tmp_57455_146.get_m31(4); - *row[197] = res_limb_4_col197; -let res_limb_5_col198 = res_tmp_57455_146.get_m31(5); - *row[198] = res_limb_5_col198; -let res_limb_6_col199 = res_tmp_57455_146.get_m31(6); - *row[199] = res_limb_6_col199; -let res_limb_7_col200 = res_tmp_57455_146.get_m31(7); - *row[200] = res_limb_7_col200; -let res_limb_8_col201 = res_tmp_57455_146.get_m31(8); - *row[201] = res_limb_8_col201; -let res_limb_9_col202 = res_tmp_57455_146.get_m31(9); - *row[202] = res_limb_9_col202; -let res_limb_10_col203 = res_tmp_57455_146.get_m31(10); - *row[203] = res_limb_10_col203; -let res_limb_11_col204 = res_tmp_57455_146.get_m31(11); - *row[204] = res_limb_11_col204; -let res_limb_12_col205 = res_tmp_57455_146.get_m31(12); - *row[205] = res_limb_12_col205; -let res_limb_13_col206 = res_tmp_57455_146.get_m31(13); - *row[206] = res_limb_13_col206; -let res_limb_14_col207 = res_tmp_57455_146.get_m31(14); - *row[207] = res_limb_14_col207; -let res_limb_15_col208 = res_tmp_57455_146.get_m31(15); - *row[208] = res_limb_15_col208; -let res_limb_16_col209 = res_tmp_57455_146.get_m31(16); - *row[209] = res_limb_16_col209; -let res_limb_17_col210 = res_tmp_57455_146.get_m31(17); - *row[210] = res_limb_17_col210; -let res_limb_18_col211 = res_tmp_57455_146.get_m31(18); - *row[211] = res_limb_18_col211; -let res_limb_19_col212 = res_tmp_57455_146.get_m31(19); - *row[212] = res_limb_19_col212; -let res_limb_20_col213 = res_tmp_57455_146.get_m31(20); - *row[213] = res_limb_20_col213; -let res_limb_21_col214 = res_tmp_57455_146.get_m31(21); - *row[214] = res_limb_21_col214; -let res_limb_22_col215 = res_tmp_57455_146.get_m31(22); - *row[215] = res_limb_22_col215; -let res_limb_23_col216 = res_tmp_57455_146.get_m31(23); - *row[216] = res_limb_23_col216; -let res_limb_24_col217 = res_tmp_57455_146.get_m31(24); - *row[217] = res_limb_24_col217; -let res_limb_25_col218 = res_tmp_57455_146.get_m31(25); - *row[218] = res_limb_25_col218; -let res_limb_26_col219 = res_tmp_57455_146.get_m31(26); - *row[219] = res_limb_26_col219; -let res_limb_27_col220 = res_tmp_57455_146.get_m31(27); + let conv_tmp_57455_62 = ((((M31_0) - (mul_res_limb_0_col137))) + (((op0_limb_0_col51) * (op1_limb_0_col80))));let conv_tmp_57455_63 = ((((((M31_0) - (mul_res_limb_1_col138))) + (((op0_limb_0_col51) * (op1_limb_1_col81))))) + (((op0_limb_1_col52) * (op1_limb_0_col80))));let conv_tmp_57455_64 = ((((((((M31_0) - (mul_res_limb_2_col139))) + (((op0_limb_0_col51) * (op1_limb_2_col82))))) + (((op0_limb_1_col52) * (op1_limb_1_col81))))) + (((op0_limb_2_col53) * (op1_limb_0_col80))));let conv_tmp_57455_65 = ((((((((((M31_0) - (mul_res_limb_3_col140))) + (((op0_limb_0_col51) * (op1_limb_3_col83))))) + (((op0_limb_1_col52) * (op1_limb_2_col82))))) + (((op0_limb_2_col53) * (op1_limb_1_col81))))) + (((op0_limb_3_col54) * (op1_limb_0_col80))));let conv_tmp_57455_66 = ((((((((((((M31_0) - (mul_res_limb_4_col141))) + (((op0_limb_0_col51) * (op1_limb_4_col84))))) + (((op0_limb_1_col52) * (op1_limb_3_col83))))) + (((op0_limb_2_col53) * (op1_limb_2_col82))))) + (((op0_limb_3_col54) * (op1_limb_1_col81))))) + (((op0_limb_4_col55) * (op1_limb_0_col80))));let conv_tmp_57455_67 = ((((((((((((((M31_0) - (mul_res_limb_5_col142))) + (((op0_limb_0_col51) * (op1_limb_5_col85))))) + (((op0_limb_1_col52) * (op1_limb_4_col84))))) + (((op0_limb_2_col53) * (op1_limb_3_col83))))) + (((op0_limb_3_col54) * (op1_limb_2_col82))))) + (((op0_limb_4_col55) * (op1_limb_1_col81))))) + (((op0_limb_5_col56) * (op1_limb_0_col80))));let conv_tmp_57455_68 = ((((((((((((((((M31_0) - (mul_res_limb_6_col143))) + (((op0_limb_0_col51) * (op1_limb_6_col86))))) + (((op0_limb_1_col52) * (op1_limb_5_col85))))) + (((op0_limb_2_col53) * (op1_limb_4_col84))))) + (((op0_limb_3_col54) * (op1_limb_3_col83))))) + (((op0_limb_4_col55) * (op1_limb_2_col82))))) + (((op0_limb_5_col56) * (op1_limb_1_col81))))) + (((op0_limb_6_col57) * (op1_limb_0_col80))));let conv_tmp_57455_69 = ((((((((((((((((((M31_0) - (mul_res_limb_7_col144))) + (((op0_limb_0_col51) * (op1_limb_7_col87))))) + (((op0_limb_1_col52) * (op1_limb_6_col86))))) + (((op0_limb_2_col53) * (op1_limb_5_col85))))) + (((op0_limb_3_col54) * (op1_limb_4_col84))))) + (((op0_limb_4_col55) * (op1_limb_3_col83))))) + (((op0_limb_5_col56) * (op1_limb_2_col82))))) + (((op0_limb_6_col57) * (op1_limb_1_col81))))) + (((op0_limb_7_col58) * (op1_limb_0_col80))));let conv_tmp_57455_70 = ((((((((((((((((((((M31_0) - (mul_res_limb_8_col145))) + (((op0_limb_0_col51) * (op1_limb_8_col88))))) + (((op0_limb_1_col52) * (op1_limb_7_col87))))) + (((op0_limb_2_col53) * (op1_limb_6_col86))))) + (((op0_limb_3_col54) * (op1_limb_5_col85))))) + (((op0_limb_4_col55) * (op1_limb_4_col84))))) + (((op0_limb_5_col56) * (op1_limb_3_col83))))) + (((op0_limb_6_col57) * (op1_limb_2_col82))))) + (((op0_limb_7_col58) * (op1_limb_1_col81))))) + (((op0_limb_8_col59) * (op1_limb_0_col80))));let conv_tmp_57455_71 = ((((((((((((((((((((((M31_0) - (mul_res_limb_9_col146))) + (((op0_limb_0_col51) * (op1_limb_9_col89))))) + (((op0_limb_1_col52) * (op1_limb_8_col88))))) + (((op0_limb_2_col53) * (op1_limb_7_col87))))) + (((op0_limb_3_col54) * (op1_limb_6_col86))))) + (((op0_limb_4_col55) * (op1_limb_5_col85))))) + (((op0_limb_5_col56) * (op1_limb_4_col84))))) + (((op0_limb_6_col57) * (op1_limb_3_col83))))) + (((op0_limb_7_col58) * (op1_limb_2_col82))))) + (((op0_limb_8_col59) * (op1_limb_1_col81))))) + (((op0_limb_9_col60) * (op1_limb_0_col80))));let conv_tmp_57455_72 = ((((((((((((((((((((((((M31_0) - (mul_res_limb_10_col147))) + (((op0_limb_0_col51) * (op1_limb_10_col90))))) + (((op0_limb_1_col52) * (op1_limb_9_col89))))) + (((op0_limb_2_col53) * (op1_limb_8_col88))))) + (((op0_limb_3_col54) * (op1_limb_7_col87))))) + (((op0_limb_4_col55) * (op1_limb_6_col86))))) + (((op0_limb_5_col56) * (op1_limb_5_col85))))) + (((op0_limb_6_col57) * (op1_limb_4_col84))))) + (((op0_limb_7_col58) * (op1_limb_3_col83))))) + (((op0_limb_8_col59) * (op1_limb_2_col82))))) + (((op0_limb_9_col60) * (op1_limb_1_col81))))) + (((op0_limb_10_col61) * (op1_limb_0_col80))));let conv_tmp_57455_73 = ((((((((((((((((((((((((((M31_0) - (mul_res_limb_11_col148))) + (((op0_limb_0_col51) * (op1_limb_11_col91))))) + (((op0_limb_1_col52) * (op1_limb_10_col90))))) + (((op0_limb_2_col53) * (op1_limb_9_col89))))) + (((op0_limb_3_col54) * (op1_limb_8_col88))))) + (((op0_limb_4_col55) * (op1_limb_7_col87))))) + (((op0_limb_5_col56) * (op1_limb_6_col86))))) + (((op0_limb_6_col57) * (op1_limb_5_col85))))) + (((op0_limb_7_col58) * (op1_limb_4_col84))))) + (((op0_limb_8_col59) * (op1_limb_3_col83))))) + (((op0_limb_9_col60) * (op1_limb_2_col82))))) + (((op0_limb_10_col61) * (op1_limb_1_col81))))) + (((op0_limb_11_col62) * (op1_limb_0_col80))));let conv_tmp_57455_74 = ((((((((((((((((((((((((((((M31_0) - (mul_res_limb_12_col149))) + (((op0_limb_0_col51) * (op1_limb_12_col92))))) + (((op0_limb_1_col52) * (op1_limb_11_col91))))) + (((op0_limb_2_col53) * (op1_limb_10_col90))))) + (((op0_limb_3_col54) * (op1_limb_9_col89))))) + (((op0_limb_4_col55) * (op1_limb_8_col88))))) + (((op0_limb_5_col56) * (op1_limb_7_col87))))) + (((op0_limb_6_col57) * (op1_limb_6_col86))))) + (((op0_limb_7_col58) * (op1_limb_5_col85))))) + (((op0_limb_8_col59) * (op1_limb_4_col84))))) + (((op0_limb_9_col60) * (op1_limb_3_col83))))) + (((op0_limb_10_col61) * (op1_limb_2_col82))))) + (((op0_limb_11_col62) * (op1_limb_1_col81))))) + (((op0_limb_12_col63) * (op1_limb_0_col80))));let conv_tmp_57455_75 = ((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_13_col150))) + (((op0_limb_0_col51) * (op1_limb_13_col93))))) + (((op0_limb_1_col52) * (op1_limb_12_col92))))) + (((op0_limb_2_col53) * (op1_limb_11_col91))))) + (((op0_limb_3_col54) * (op1_limb_10_col90))))) + (((op0_limb_4_col55) * (op1_limb_9_col89))))) + (((op0_limb_5_col56) * (op1_limb_8_col88))))) + (((op0_limb_6_col57) * (op1_limb_7_col87))))) + (((op0_limb_7_col58) * (op1_limb_6_col86))))) + (((op0_limb_8_col59) * (op1_limb_5_col85))))) + (((op0_limb_9_col60) * (op1_limb_4_col84))))) + (((op0_limb_10_col61) * (op1_limb_3_col83))))) + (((op0_limb_11_col62) * (op1_limb_2_col82))))) + (((op0_limb_12_col63) * (op1_limb_1_col81))))) + (((op0_limb_13_col64) * (op1_limb_0_col80))));let conv_tmp_57455_76 = ((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_14_col151))) + (((op0_limb_0_col51) * (op1_limb_14_col94))))) + (((op0_limb_1_col52) * (op1_limb_13_col93))))) + (((op0_limb_2_col53) * (op1_limb_12_col92))))) + (((op0_limb_3_col54) * (op1_limb_11_col91))))) + (((op0_limb_4_col55) * (op1_limb_10_col90))))) + (((op0_limb_5_col56) * (op1_limb_9_col89))))) + (((op0_limb_6_col57) * (op1_limb_8_col88))))) + (((op0_limb_7_col58) * (op1_limb_7_col87))))) + (((op0_limb_8_col59) * (op1_limb_6_col86))))) + (((op0_limb_9_col60) * (op1_limb_5_col85))))) + (((op0_limb_10_col61) * (op1_limb_4_col84))))) + (((op0_limb_11_col62) * (op1_limb_3_col83))))) + (((op0_limb_12_col63) * (op1_limb_2_col82))))) + (((op0_limb_13_col64) * (op1_limb_1_col81))))) + (((op0_limb_14_col65) * (op1_limb_0_col80))));let conv_tmp_57455_77 = ((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_15_col152))) + (((op0_limb_0_col51) * (op1_limb_15_col95))))) + (((op0_limb_1_col52) * (op1_limb_14_col94))))) + (((op0_limb_2_col53) * (op1_limb_13_col93))))) + (((op0_limb_3_col54) * (op1_limb_12_col92))))) + (((op0_limb_4_col55) * (op1_limb_11_col91))))) + (((op0_limb_5_col56) * (op1_limb_10_col90))))) + (((op0_limb_6_col57) * (op1_limb_9_col89))))) + (((op0_limb_7_col58) * (op1_limb_8_col88))))) + (((op0_limb_8_col59) * (op1_limb_7_col87))))) + (((op0_limb_9_col60) * (op1_limb_6_col86))))) + (((op0_limb_10_col61) * (op1_limb_5_col85))))) + (((op0_limb_11_col62) * (op1_limb_4_col84))))) + (((op0_limb_12_col63) * (op1_limb_3_col83))))) + (((op0_limb_13_col64) * (op1_limb_2_col82))))) + (((op0_limb_14_col65) * (op1_limb_1_col81))))) + (((op0_limb_15_col66) * (op1_limb_0_col80))));let conv_tmp_57455_78 = ((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_16_col153))) + (((op0_limb_0_col51) * (op1_limb_16_col96))))) + (((op0_limb_1_col52) * (op1_limb_15_col95))))) + (((op0_limb_2_col53) * (op1_limb_14_col94))))) + (((op0_limb_3_col54) * (op1_limb_13_col93))))) + (((op0_limb_4_col55) * (op1_limb_12_col92))))) + (((op0_limb_5_col56) * (op1_limb_11_col91))))) + (((op0_limb_6_col57) * (op1_limb_10_col90))))) + (((op0_limb_7_col58) * (op1_limb_9_col89))))) + (((op0_limb_8_col59) * (op1_limb_8_col88))))) + (((op0_limb_9_col60) * (op1_limb_7_col87))))) + (((op0_limb_10_col61) * (op1_limb_6_col86))))) + (((op0_limb_11_col62) * (op1_limb_5_col85))))) + (((op0_limb_12_col63) * (op1_limb_4_col84))))) + (((op0_limb_13_col64) * (op1_limb_3_col83))))) + (((op0_limb_14_col65) * (op1_limb_2_col82))))) + (((op0_limb_15_col66) * (op1_limb_1_col81))))) + (((op0_limb_16_col67) * (op1_limb_0_col80))));let conv_tmp_57455_79 = ((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_17_col154))) + (((op0_limb_0_col51) * (op1_limb_17_col97))))) + (((op0_limb_1_col52) * (op1_limb_16_col96))))) + (((op0_limb_2_col53) * (op1_limb_15_col95))))) + (((op0_limb_3_col54) * (op1_limb_14_col94))))) + (((op0_limb_4_col55) * (op1_limb_13_col93))))) + (((op0_limb_5_col56) * (op1_limb_12_col92))))) + (((op0_limb_6_col57) * (op1_limb_11_col91))))) + (((op0_limb_7_col58) * (op1_limb_10_col90))))) + (((op0_limb_8_col59) * (op1_limb_9_col89))))) + (((op0_limb_9_col60) * (op1_limb_8_col88))))) + (((op0_limb_10_col61) * (op1_limb_7_col87))))) + (((op0_limb_11_col62) * (op1_limb_6_col86))))) + (((op0_limb_12_col63) * (op1_limb_5_col85))))) + (((op0_limb_13_col64) * (op1_limb_4_col84))))) + (((op0_limb_14_col65) * (op1_limb_3_col83))))) + (((op0_limb_15_col66) * (op1_limb_2_col82))))) + (((op0_limb_16_col67) * (op1_limb_1_col81))))) + (((op0_limb_17_col68) * (op1_limb_0_col80))));let conv_tmp_57455_80 = ((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_18_col155))) + (((op0_limb_0_col51) * (op1_limb_18_col98))))) + (((op0_limb_1_col52) * (op1_limb_17_col97))))) + (((op0_limb_2_col53) * (op1_limb_16_col96))))) + (((op0_limb_3_col54) * (op1_limb_15_col95))))) + (((op0_limb_4_col55) * (op1_limb_14_col94))))) + (((op0_limb_5_col56) * (op1_limb_13_col93))))) + (((op0_limb_6_col57) * (op1_limb_12_col92))))) + (((op0_limb_7_col58) * (op1_limb_11_col91))))) + (((op0_limb_8_col59) * (op1_limb_10_col90))))) + (((op0_limb_9_col60) * (op1_limb_9_col89))))) + (((op0_limb_10_col61) * (op1_limb_8_col88))))) + (((op0_limb_11_col62) * (op1_limb_7_col87))))) + (((op0_limb_12_col63) * (op1_limb_6_col86))))) + (((op0_limb_13_col64) * (op1_limb_5_col85))))) + (((op0_limb_14_col65) * (op1_limb_4_col84))))) + (((op0_limb_15_col66) * (op1_limb_3_col83))))) + (((op0_limb_16_col67) * (op1_limb_2_col82))))) + (((op0_limb_17_col68) * (op1_limb_1_col81))))) + (((op0_limb_18_col69) * (op1_limb_0_col80))));let conv_tmp_57455_81 = ((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_19_col156))) + (((op0_limb_0_col51) * (op1_limb_19_col99))))) + (((op0_limb_1_col52) * (op1_limb_18_col98))))) + (((op0_limb_2_col53) * (op1_limb_17_col97))))) + (((op0_limb_3_col54) * (op1_limb_16_col96))))) + (((op0_limb_4_col55) * (op1_limb_15_col95))))) + (((op0_limb_5_col56) * (op1_limb_14_col94))))) + (((op0_limb_6_col57) * (op1_limb_13_col93))))) + (((op0_limb_7_col58) * (op1_limb_12_col92))))) + (((op0_limb_8_col59) * (op1_limb_11_col91))))) + (((op0_limb_9_col60) * (op1_limb_10_col90))))) + (((op0_limb_10_col61) * (op1_limb_9_col89))))) + (((op0_limb_11_col62) * (op1_limb_8_col88))))) + (((op0_limb_12_col63) * (op1_limb_7_col87))))) + (((op0_limb_13_col64) * (op1_limb_6_col86))))) + (((op0_limb_14_col65) * (op1_limb_5_col85))))) + (((op0_limb_15_col66) * (op1_limb_4_col84))))) + (((op0_limb_16_col67) * (op1_limb_3_col83))))) + (((op0_limb_17_col68) * (op1_limb_2_col82))))) + (((op0_limb_18_col69) * (op1_limb_1_col81))))) + (((op0_limb_19_col70) * (op1_limb_0_col80))));let conv_tmp_57455_82 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_20_col157))) + (((op0_limb_0_col51) * (op1_limb_20_col100))))) + (((op0_limb_1_col52) * (op1_limb_19_col99))))) + (((op0_limb_2_col53) * (op1_limb_18_col98))))) + (((op0_limb_3_col54) * (op1_limb_17_col97))))) + (((op0_limb_4_col55) * (op1_limb_16_col96))))) + (((op0_limb_5_col56) * (op1_limb_15_col95))))) + (((op0_limb_6_col57) * (op1_limb_14_col94))))) + (((op0_limb_7_col58) * (op1_limb_13_col93))))) + (((op0_limb_8_col59) * (op1_limb_12_col92))))) + (((op0_limb_9_col60) * (op1_limb_11_col91))))) + (((op0_limb_10_col61) * (op1_limb_10_col90))))) + (((op0_limb_11_col62) * (op1_limb_9_col89))))) + (((op0_limb_12_col63) * (op1_limb_8_col88))))) + (((op0_limb_13_col64) * (op1_limb_7_col87))))) + (((op0_limb_14_col65) * (op1_limb_6_col86))))) + (((op0_limb_15_col66) * (op1_limb_5_col85))))) + (((op0_limb_16_col67) * (op1_limb_4_col84))))) + (((op0_limb_17_col68) * (op1_limb_3_col83))))) + (((op0_limb_18_col69) * (op1_limb_2_col82))))) + (((op0_limb_19_col70) * (op1_limb_1_col81))))) + (((op0_limb_20_col71) * (op1_limb_0_col80))));let conv_tmp_57455_83 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_21_col158))) + (((op0_limb_0_col51) * (op1_limb_21_col101))))) + (((op0_limb_1_col52) * (op1_limb_20_col100))))) + (((op0_limb_2_col53) * (op1_limb_19_col99))))) + (((op0_limb_3_col54) * (op1_limb_18_col98))))) + (((op0_limb_4_col55) * (op1_limb_17_col97))))) + (((op0_limb_5_col56) * (op1_limb_16_col96))))) + (((op0_limb_6_col57) * (op1_limb_15_col95))))) + (((op0_limb_7_col58) * (op1_limb_14_col94))))) + (((op0_limb_8_col59) * (op1_limb_13_col93))))) + (((op0_limb_9_col60) * (op1_limb_12_col92))))) + (((op0_limb_10_col61) * (op1_limb_11_col91))))) + (((op0_limb_11_col62) * (op1_limb_10_col90))))) + (((op0_limb_12_col63) * (op1_limb_9_col89))))) + (((op0_limb_13_col64) * (op1_limb_8_col88))))) + (((op0_limb_14_col65) * (op1_limb_7_col87))))) + (((op0_limb_15_col66) * (op1_limb_6_col86))))) + (((op0_limb_16_col67) * (op1_limb_5_col85))))) + (((op0_limb_17_col68) * (op1_limb_4_col84))))) + (((op0_limb_18_col69) * (op1_limb_3_col83))))) + (((op0_limb_19_col70) * (op1_limb_2_col82))))) + (((op0_limb_20_col71) * (op1_limb_1_col81))))) + (((op0_limb_21_col72) * (op1_limb_0_col80))));let conv_tmp_57455_84 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_22_col159))) + (((op0_limb_0_col51) * (op1_limb_22_col102))))) + (((op0_limb_1_col52) * (op1_limb_21_col101))))) + (((op0_limb_2_col53) * (op1_limb_20_col100))))) + (((op0_limb_3_col54) * (op1_limb_19_col99))))) + (((op0_limb_4_col55) * (op1_limb_18_col98))))) + (((op0_limb_5_col56) * (op1_limb_17_col97))))) + (((op0_limb_6_col57) * (op1_limb_16_col96))))) + (((op0_limb_7_col58) * (op1_limb_15_col95))))) + (((op0_limb_8_col59) * (op1_limb_14_col94))))) + (((op0_limb_9_col60) * (op1_limb_13_col93))))) + (((op0_limb_10_col61) * (op1_limb_12_col92))))) + (((op0_limb_11_col62) * (op1_limb_11_col91))))) + (((op0_limb_12_col63) * (op1_limb_10_col90))))) + (((op0_limb_13_col64) * (op1_limb_9_col89))))) + (((op0_limb_14_col65) * (op1_limb_8_col88))))) + (((op0_limb_15_col66) * (op1_limb_7_col87))))) + (((op0_limb_16_col67) * (op1_limb_6_col86))))) + (((op0_limb_17_col68) * (op1_limb_5_col85))))) + (((op0_limb_18_col69) * (op1_limb_4_col84))))) + (((op0_limb_19_col70) * (op1_limb_3_col83))))) + (((op0_limb_20_col71) * (op1_limb_2_col82))))) + (((op0_limb_21_col72) * (op1_limb_1_col81))))) + (((op0_limb_22_col73) * (op1_limb_0_col80))));let conv_tmp_57455_85 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_23_col160))) + (((op0_limb_0_col51) * (op1_limb_23_col103))))) + (((op0_limb_1_col52) * (op1_limb_22_col102))))) + (((op0_limb_2_col53) * (op1_limb_21_col101))))) + (((op0_limb_3_col54) * (op1_limb_20_col100))))) + (((op0_limb_4_col55) * (op1_limb_19_col99))))) + (((op0_limb_5_col56) * (op1_limb_18_col98))))) + (((op0_limb_6_col57) * (op1_limb_17_col97))))) + (((op0_limb_7_col58) * (op1_limb_16_col96))))) + (((op0_limb_8_col59) * (op1_limb_15_col95))))) + (((op0_limb_9_col60) * (op1_limb_14_col94))))) + (((op0_limb_10_col61) * (op1_limb_13_col93))))) + (((op0_limb_11_col62) * (op1_limb_12_col92))))) + (((op0_limb_12_col63) * (op1_limb_11_col91))))) + (((op0_limb_13_col64) * (op1_limb_10_col90))))) + (((op0_limb_14_col65) * (op1_limb_9_col89))))) + (((op0_limb_15_col66) * (op1_limb_8_col88))))) + (((op0_limb_16_col67) * (op1_limb_7_col87))))) + (((op0_limb_17_col68) * (op1_limb_6_col86))))) + (((op0_limb_18_col69) * (op1_limb_5_col85))))) + (((op0_limb_19_col70) * (op1_limb_4_col84))))) + (((op0_limb_20_col71) * (op1_limb_3_col83))))) + (((op0_limb_21_col72) * (op1_limb_2_col82))))) + (((op0_limb_22_col73) * (op1_limb_1_col81))))) + (((op0_limb_23_col74) * (op1_limb_0_col80))));let conv_tmp_57455_86 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_24_col161))) + (((op0_limb_0_col51) * (op1_limb_24_col104))))) + (((op0_limb_1_col52) * (op1_limb_23_col103))))) + (((op0_limb_2_col53) * (op1_limb_22_col102))))) + (((op0_limb_3_col54) * (op1_limb_21_col101))))) + (((op0_limb_4_col55) * (op1_limb_20_col100))))) + (((op0_limb_5_col56) * (op1_limb_19_col99))))) + (((op0_limb_6_col57) * (op1_limb_18_col98))))) + (((op0_limb_7_col58) * (op1_limb_17_col97))))) + (((op0_limb_8_col59) * (op1_limb_16_col96))))) + (((op0_limb_9_col60) * (op1_limb_15_col95))))) + (((op0_limb_10_col61) * (op1_limb_14_col94))))) + (((op0_limb_11_col62) * (op1_limb_13_col93))))) + (((op0_limb_12_col63) * (op1_limb_12_col92))))) + (((op0_limb_13_col64) * (op1_limb_11_col91))))) + (((op0_limb_14_col65) * (op1_limb_10_col90))))) + (((op0_limb_15_col66) * (op1_limb_9_col89))))) + (((op0_limb_16_col67) * (op1_limb_8_col88))))) + (((op0_limb_17_col68) * (op1_limb_7_col87))))) + (((op0_limb_18_col69) * (op1_limb_6_col86))))) + (((op0_limb_19_col70) * (op1_limb_5_col85))))) + (((op0_limb_20_col71) * (op1_limb_4_col84))))) + (((op0_limb_21_col72) * (op1_limb_3_col83))))) + (((op0_limb_22_col73) * (op1_limb_2_col82))))) + (((op0_limb_23_col74) * (op1_limb_1_col81))))) + (((op0_limb_24_col75) * (op1_limb_0_col80))));let conv_tmp_57455_87 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_25_col162))) + (((op0_limb_0_col51) * (op1_limb_25_col105))))) + (((op0_limb_1_col52) * (op1_limb_24_col104))))) + (((op0_limb_2_col53) * (op1_limb_23_col103))))) + (((op0_limb_3_col54) * (op1_limb_22_col102))))) + (((op0_limb_4_col55) * (op1_limb_21_col101))))) + (((op0_limb_5_col56) * (op1_limb_20_col100))))) + (((op0_limb_6_col57) * (op1_limb_19_col99))))) + (((op0_limb_7_col58) * (op1_limb_18_col98))))) + (((op0_limb_8_col59) * (op1_limb_17_col97))))) + (((op0_limb_9_col60) * (op1_limb_16_col96))))) + (((op0_limb_10_col61) * (op1_limb_15_col95))))) + (((op0_limb_11_col62) * (op1_limb_14_col94))))) + (((op0_limb_12_col63) * (op1_limb_13_col93))))) + (((op0_limb_13_col64) * (op1_limb_12_col92))))) + (((op0_limb_14_col65) * (op1_limb_11_col91))))) + (((op0_limb_15_col66) * (op1_limb_10_col90))))) + (((op0_limb_16_col67) * (op1_limb_9_col89))))) + (((op0_limb_17_col68) * (op1_limb_8_col88))))) + (((op0_limb_18_col69) * (op1_limb_7_col87))))) + (((op0_limb_19_col70) * (op1_limb_6_col86))))) + (((op0_limb_20_col71) * (op1_limb_5_col85))))) + (((op0_limb_21_col72) * (op1_limb_4_col84))))) + (((op0_limb_22_col73) * (op1_limb_3_col83))))) + (((op0_limb_23_col74) * (op1_limb_2_col82))))) + (((op0_limb_24_col75) * (op1_limb_1_col81))))) + (((op0_limb_25_col76) * (op1_limb_0_col80))));let conv_tmp_57455_88 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_26_col163))) + (((op0_limb_0_col51) * (op1_limb_26_col106))))) + (((op0_limb_1_col52) * (op1_limb_25_col105))))) + (((op0_limb_2_col53) * (op1_limb_24_col104))))) + (((op0_limb_3_col54) * (op1_limb_23_col103))))) + (((op0_limb_4_col55) * (op1_limb_22_col102))))) + (((op0_limb_5_col56) * (op1_limb_21_col101))))) + (((op0_limb_6_col57) * (op1_limb_20_col100))))) + (((op0_limb_7_col58) * (op1_limb_19_col99))))) + (((op0_limb_8_col59) * (op1_limb_18_col98))))) + (((op0_limb_9_col60) * (op1_limb_17_col97))))) + (((op0_limb_10_col61) * (op1_limb_16_col96))))) + (((op0_limb_11_col62) * (op1_limb_15_col95))))) + (((op0_limb_12_col63) * (op1_limb_14_col94))))) + (((op0_limb_13_col64) * (op1_limb_13_col93))))) + (((op0_limb_14_col65) * (op1_limb_12_col92))))) + (((op0_limb_15_col66) * (op1_limb_11_col91))))) + (((op0_limb_16_col67) * (op1_limb_10_col90))))) + (((op0_limb_17_col68) * (op1_limb_9_col89))))) + (((op0_limb_18_col69) * (op1_limb_8_col88))))) + (((op0_limb_19_col70) * (op1_limb_7_col87))))) + (((op0_limb_20_col71) * (op1_limb_6_col86))))) + (((op0_limb_21_col72) * (op1_limb_5_col85))))) + (((op0_limb_22_col73) * (op1_limb_4_col84))))) + (((op0_limb_23_col74) * (op1_limb_3_col83))))) + (((op0_limb_24_col75) * (op1_limb_2_col82))))) + (((op0_limb_25_col76) * (op1_limb_1_col81))))) + (((op0_limb_26_col77) * (op1_limb_0_col80))));let conv_tmp_57455_89 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_27_col164))) + (((op0_limb_0_col51) * (op1_limb_27_col107))))) + (((op0_limb_1_col52) * (op1_limb_26_col106))))) + (((op0_limb_2_col53) * (op1_limb_25_col105))))) + (((op0_limb_3_col54) * (op1_limb_24_col104))))) + (((op0_limb_4_col55) * (op1_limb_23_col103))))) + (((op0_limb_5_col56) * (op1_limb_22_col102))))) + (((op0_limb_6_col57) * (op1_limb_21_col101))))) + (((op0_limb_7_col58) * (op1_limb_20_col100))))) + (((op0_limb_8_col59) * (op1_limb_19_col99))))) + (((op0_limb_9_col60) * (op1_limb_18_col98))))) + (((op0_limb_10_col61) * (op1_limb_17_col97))))) + (((op0_limb_11_col62) * (op1_limb_16_col96))))) + (((op0_limb_12_col63) * (op1_limb_15_col95))))) + (((op0_limb_13_col64) * (op1_limb_14_col94))))) + (((op0_limb_14_col65) * (op1_limb_13_col93))))) + (((op0_limb_15_col66) * (op1_limb_12_col92))))) + (((op0_limb_16_col67) * (op1_limb_11_col91))))) + (((op0_limb_17_col68) * (op1_limb_10_col90))))) + (((op0_limb_18_col69) * (op1_limb_9_col89))))) + (((op0_limb_19_col70) * (op1_limb_8_col88))))) + (((op0_limb_20_col71) * (op1_limb_7_col87))))) + (((op0_limb_21_col72) * (op1_limb_6_col86))))) + (((op0_limb_22_col73) * (op1_limb_5_col85))))) + (((op0_limb_23_col74) * (op1_limb_4_col84))))) + (((op0_limb_24_col75) * (op1_limb_3_col83))))) + (((op0_limb_25_col76) * (op1_limb_2_col82))))) + (((op0_limb_26_col77) * (op1_limb_1_col81))))) + (((op0_limb_27_col78) * (op1_limb_0_col80))));let conv_tmp_57455_90 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_1_col52) * (op1_limb_27_col107))))) + (((op0_limb_2_col53) * (op1_limb_26_col106))))) + (((op0_limb_3_col54) * (op1_limb_25_col105))))) + (((op0_limb_4_col55) * (op1_limb_24_col104))))) + (((op0_limb_5_col56) * (op1_limb_23_col103))))) + (((op0_limb_6_col57) * (op1_limb_22_col102))))) + (((op0_limb_7_col58) * (op1_limb_21_col101))))) + (((op0_limb_8_col59) * (op1_limb_20_col100))))) + (((op0_limb_9_col60) * (op1_limb_19_col99))))) + (((op0_limb_10_col61) * (op1_limb_18_col98))))) + (((op0_limb_11_col62) * (op1_limb_17_col97))))) + (((op0_limb_12_col63) * (op1_limb_16_col96))))) + (((op0_limb_13_col64) * (op1_limb_15_col95))))) + (((op0_limb_14_col65) * (op1_limb_14_col94))))) + (((op0_limb_15_col66) * (op1_limb_13_col93))))) + (((op0_limb_16_col67) * (op1_limb_12_col92))))) + (((op0_limb_17_col68) * (op1_limb_11_col91))))) + (((op0_limb_18_col69) * (op1_limb_10_col90))))) + (((op0_limb_19_col70) * (op1_limb_9_col89))))) + (((op0_limb_20_col71) * (op1_limb_8_col88))))) + (((op0_limb_21_col72) * (op1_limb_7_col87))))) + (((op0_limb_22_col73) * (op1_limb_6_col86))))) + (((op0_limb_23_col74) * (op1_limb_5_col85))))) + (((op0_limb_24_col75) * (op1_limb_4_col84))))) + (((op0_limb_25_col76) * (op1_limb_3_col83))))) + (((op0_limb_26_col77) * (op1_limb_2_col82))))) + (((op0_limb_27_col78) * (op1_limb_1_col81))));let conv_tmp_57455_91 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_2_col53) * (op1_limb_27_col107))))) + (((op0_limb_3_col54) * (op1_limb_26_col106))))) + (((op0_limb_4_col55) * (op1_limb_25_col105))))) + (((op0_limb_5_col56) * (op1_limb_24_col104))))) + (((op0_limb_6_col57) * (op1_limb_23_col103))))) + (((op0_limb_7_col58) * (op1_limb_22_col102))))) + (((op0_limb_8_col59) * (op1_limb_21_col101))))) + (((op0_limb_9_col60) * (op1_limb_20_col100))))) + (((op0_limb_10_col61) * (op1_limb_19_col99))))) + (((op0_limb_11_col62) * (op1_limb_18_col98))))) + (((op0_limb_12_col63) * (op1_limb_17_col97))))) + (((op0_limb_13_col64) * (op1_limb_16_col96))))) + (((op0_limb_14_col65) * (op1_limb_15_col95))))) + (((op0_limb_15_col66) * (op1_limb_14_col94))))) + (((op0_limb_16_col67) * (op1_limb_13_col93))))) + (((op0_limb_17_col68) * (op1_limb_12_col92))))) + (((op0_limb_18_col69) * (op1_limb_11_col91))))) + (((op0_limb_19_col70) * (op1_limb_10_col90))))) + (((op0_limb_20_col71) * (op1_limb_9_col89))))) + (((op0_limb_21_col72) * (op1_limb_8_col88))))) + (((op0_limb_22_col73) * (op1_limb_7_col87))))) + (((op0_limb_23_col74) * (op1_limb_6_col86))))) + (((op0_limb_24_col75) * (op1_limb_5_col85))))) + (((op0_limb_25_col76) * (op1_limb_4_col84))))) + (((op0_limb_26_col77) * (op1_limb_3_col83))))) + (((op0_limb_27_col78) * (op1_limb_2_col82))));let conv_tmp_57455_92 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_3_col54) * (op1_limb_27_col107))))) + (((op0_limb_4_col55) * (op1_limb_26_col106))))) + (((op0_limb_5_col56) * (op1_limb_25_col105))))) + (((op0_limb_6_col57) * (op1_limb_24_col104))))) + (((op0_limb_7_col58) * (op1_limb_23_col103))))) + (((op0_limb_8_col59) * (op1_limb_22_col102))))) + (((op0_limb_9_col60) * (op1_limb_21_col101))))) + (((op0_limb_10_col61) * (op1_limb_20_col100))))) + (((op0_limb_11_col62) * (op1_limb_19_col99))))) + (((op0_limb_12_col63) * (op1_limb_18_col98))))) + (((op0_limb_13_col64) * (op1_limb_17_col97))))) + (((op0_limb_14_col65) * (op1_limb_16_col96))))) + (((op0_limb_15_col66) * (op1_limb_15_col95))))) + (((op0_limb_16_col67) * (op1_limb_14_col94))))) + (((op0_limb_17_col68) * (op1_limb_13_col93))))) + (((op0_limb_18_col69) * (op1_limb_12_col92))))) + (((op0_limb_19_col70) * (op1_limb_11_col91))))) + (((op0_limb_20_col71) * (op1_limb_10_col90))))) + (((op0_limb_21_col72) * (op1_limb_9_col89))))) + (((op0_limb_22_col73) * (op1_limb_8_col88))))) + (((op0_limb_23_col74) * (op1_limb_7_col87))))) + (((op0_limb_24_col75) * (op1_limb_6_col86))))) + (((op0_limb_25_col76) * (op1_limb_5_col85))))) + (((op0_limb_26_col77) * (op1_limb_4_col84))))) + (((op0_limb_27_col78) * (op1_limb_3_col83))));let conv_tmp_57455_93 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_4_col55) * (op1_limb_27_col107))))) + (((op0_limb_5_col56) * (op1_limb_26_col106))))) + (((op0_limb_6_col57) * (op1_limb_25_col105))))) + (((op0_limb_7_col58) * (op1_limb_24_col104))))) + (((op0_limb_8_col59) * (op1_limb_23_col103))))) + (((op0_limb_9_col60) * (op1_limb_22_col102))))) + (((op0_limb_10_col61) * (op1_limb_21_col101))))) + (((op0_limb_11_col62) * (op1_limb_20_col100))))) + (((op0_limb_12_col63) * (op1_limb_19_col99))))) + (((op0_limb_13_col64) * (op1_limb_18_col98))))) + (((op0_limb_14_col65) * (op1_limb_17_col97))))) + (((op0_limb_15_col66) * (op1_limb_16_col96))))) + (((op0_limb_16_col67) * (op1_limb_15_col95))))) + (((op0_limb_17_col68) * (op1_limb_14_col94))))) + (((op0_limb_18_col69) * (op1_limb_13_col93))))) + (((op0_limb_19_col70) * (op1_limb_12_col92))))) + (((op0_limb_20_col71) * (op1_limb_11_col91))))) + (((op0_limb_21_col72) * (op1_limb_10_col90))))) + (((op0_limb_22_col73) * (op1_limb_9_col89))))) + (((op0_limb_23_col74) * (op1_limb_8_col88))))) + (((op0_limb_24_col75) * (op1_limb_7_col87))))) + (((op0_limb_25_col76) * (op1_limb_6_col86))))) + (((op0_limb_26_col77) * (op1_limb_5_col85))))) + (((op0_limb_27_col78) * (op1_limb_4_col84))));let conv_tmp_57455_94 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_5_col56) * (op1_limb_27_col107))))) + (((op0_limb_6_col57) * (op1_limb_26_col106))))) + (((op0_limb_7_col58) * (op1_limb_25_col105))))) + (((op0_limb_8_col59) * (op1_limb_24_col104))))) + (((op0_limb_9_col60) * (op1_limb_23_col103))))) + (((op0_limb_10_col61) * (op1_limb_22_col102))))) + (((op0_limb_11_col62) * (op1_limb_21_col101))))) + (((op0_limb_12_col63) * (op1_limb_20_col100))))) + (((op0_limb_13_col64) * (op1_limb_19_col99))))) + (((op0_limb_14_col65) * (op1_limb_18_col98))))) + (((op0_limb_15_col66) * (op1_limb_17_col97))))) + (((op0_limb_16_col67) * (op1_limb_16_col96))))) + (((op0_limb_17_col68) * (op1_limb_15_col95))))) + (((op0_limb_18_col69) * (op1_limb_14_col94))))) + (((op0_limb_19_col70) * (op1_limb_13_col93))))) + (((op0_limb_20_col71) * (op1_limb_12_col92))))) + (((op0_limb_21_col72) * (op1_limb_11_col91))))) + (((op0_limb_22_col73) * (op1_limb_10_col90))))) + (((op0_limb_23_col74) * (op1_limb_9_col89))))) + (((op0_limb_24_col75) * (op1_limb_8_col88))))) + (((op0_limb_25_col76) * (op1_limb_7_col87))))) + (((op0_limb_26_col77) * (op1_limb_6_col86))))) + (((op0_limb_27_col78) * (op1_limb_5_col85))));let conv_tmp_57455_95 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_6_col57) * (op1_limb_27_col107))))) + (((op0_limb_7_col58) * (op1_limb_26_col106))))) + (((op0_limb_8_col59) * (op1_limb_25_col105))))) + (((op0_limb_9_col60) * (op1_limb_24_col104))))) + (((op0_limb_10_col61) * (op1_limb_23_col103))))) + (((op0_limb_11_col62) * (op1_limb_22_col102))))) + (((op0_limb_12_col63) * (op1_limb_21_col101))))) + (((op0_limb_13_col64) * (op1_limb_20_col100))))) + (((op0_limb_14_col65) * (op1_limb_19_col99))))) + (((op0_limb_15_col66) * (op1_limb_18_col98))))) + (((op0_limb_16_col67) * (op1_limb_17_col97))))) + (((op0_limb_17_col68) * (op1_limb_16_col96))))) + (((op0_limb_18_col69) * (op1_limb_15_col95))))) + (((op0_limb_19_col70) * (op1_limb_14_col94))))) + (((op0_limb_20_col71) * (op1_limb_13_col93))))) + (((op0_limb_21_col72) * (op1_limb_12_col92))))) + (((op0_limb_22_col73) * (op1_limb_11_col91))))) + (((op0_limb_23_col74) * (op1_limb_10_col90))))) + (((op0_limb_24_col75) * (op1_limb_9_col89))))) + (((op0_limb_25_col76) * (op1_limb_8_col88))))) + (((op0_limb_26_col77) * (op1_limb_7_col87))))) + (((op0_limb_27_col78) * (op1_limb_6_col86))));let conv_tmp_57455_96 = ((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_7_col58) * (op1_limb_27_col107))))) + (((op0_limb_8_col59) * (op1_limb_26_col106))))) + (((op0_limb_9_col60) * (op1_limb_25_col105))))) + (((op0_limb_10_col61) * (op1_limb_24_col104))))) + (((op0_limb_11_col62) * (op1_limb_23_col103))))) + (((op0_limb_12_col63) * (op1_limb_22_col102))))) + (((op0_limb_13_col64) * (op1_limb_21_col101))))) + (((op0_limb_14_col65) * (op1_limb_20_col100))))) + (((op0_limb_15_col66) * (op1_limb_19_col99))))) + (((op0_limb_16_col67) * (op1_limb_18_col98))))) + (((op0_limb_17_col68) * (op1_limb_17_col97))))) + (((op0_limb_18_col69) * (op1_limb_16_col96))))) + (((op0_limb_19_col70) * (op1_limb_15_col95))))) + (((op0_limb_20_col71) * (op1_limb_14_col94))))) + (((op0_limb_21_col72) * (op1_limb_13_col93))))) + (((op0_limb_22_col73) * (op1_limb_12_col92))))) + (((op0_limb_23_col74) * (op1_limb_11_col91))))) + (((op0_limb_24_col75) * (op1_limb_10_col90))))) + (((op0_limb_25_col76) * (op1_limb_9_col89))))) + (((op0_limb_26_col77) * (op1_limb_8_col88))))) + (((op0_limb_27_col78) * (op1_limb_7_col87))));let conv_tmp_57455_97 = ((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_8_col59) * (op1_limb_27_col107))))) + (((op0_limb_9_col60) * (op1_limb_26_col106))))) + (((op0_limb_10_col61) * (op1_limb_25_col105))))) + (((op0_limb_11_col62) * (op1_limb_24_col104))))) + (((op0_limb_12_col63) * (op1_limb_23_col103))))) + (((op0_limb_13_col64) * (op1_limb_22_col102))))) + (((op0_limb_14_col65) * (op1_limb_21_col101))))) + (((op0_limb_15_col66) * (op1_limb_20_col100))))) + (((op0_limb_16_col67) * (op1_limb_19_col99))))) + (((op0_limb_17_col68) * (op1_limb_18_col98))))) + (((op0_limb_18_col69) * (op1_limb_17_col97))))) + (((op0_limb_19_col70) * (op1_limb_16_col96))))) + (((op0_limb_20_col71) * (op1_limb_15_col95))))) + (((op0_limb_21_col72) * (op1_limb_14_col94))))) + (((op0_limb_22_col73) * (op1_limb_13_col93))))) + (((op0_limb_23_col74) * (op1_limb_12_col92))))) + (((op0_limb_24_col75) * (op1_limb_11_col91))))) + (((op0_limb_25_col76) * (op1_limb_10_col90))))) + (((op0_limb_26_col77) * (op1_limb_9_col89))))) + (((op0_limb_27_col78) * (op1_limb_8_col88))));let conv_tmp_57455_98 = ((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_9_col60) * (op1_limb_27_col107))))) + (((op0_limb_10_col61) * (op1_limb_26_col106))))) + (((op0_limb_11_col62) * (op1_limb_25_col105))))) + (((op0_limb_12_col63) * (op1_limb_24_col104))))) + (((op0_limb_13_col64) * (op1_limb_23_col103))))) + (((op0_limb_14_col65) * (op1_limb_22_col102))))) + (((op0_limb_15_col66) * (op1_limb_21_col101))))) + (((op0_limb_16_col67) * (op1_limb_20_col100))))) + (((op0_limb_17_col68) * (op1_limb_19_col99))))) + (((op0_limb_18_col69) * (op1_limb_18_col98))))) + (((op0_limb_19_col70) * (op1_limb_17_col97))))) + (((op0_limb_20_col71) * (op1_limb_16_col96))))) + (((op0_limb_21_col72) * (op1_limb_15_col95))))) + (((op0_limb_22_col73) * (op1_limb_14_col94))))) + (((op0_limb_23_col74) * (op1_limb_13_col93))))) + (((op0_limb_24_col75) * (op1_limb_12_col92))))) + (((op0_limb_25_col76) * (op1_limb_11_col91))))) + (((op0_limb_26_col77) * (op1_limb_10_col90))))) + (((op0_limb_27_col78) * (op1_limb_9_col89))));let conv_tmp_57455_99 = ((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_10_col61) * (op1_limb_27_col107))))) + (((op0_limb_11_col62) * (op1_limb_26_col106))))) + (((op0_limb_12_col63) * (op1_limb_25_col105))))) + (((op0_limb_13_col64) * (op1_limb_24_col104))))) + (((op0_limb_14_col65) * (op1_limb_23_col103))))) + (((op0_limb_15_col66) * (op1_limb_22_col102))))) + (((op0_limb_16_col67) * (op1_limb_21_col101))))) + (((op0_limb_17_col68) * (op1_limb_20_col100))))) + (((op0_limb_18_col69) * (op1_limb_19_col99))))) + (((op0_limb_19_col70) * (op1_limb_18_col98))))) + (((op0_limb_20_col71) * (op1_limb_17_col97))))) + (((op0_limb_21_col72) * (op1_limb_16_col96))))) + (((op0_limb_22_col73) * (op1_limb_15_col95))))) + (((op0_limb_23_col74) * (op1_limb_14_col94))))) + (((op0_limb_24_col75) * (op1_limb_13_col93))))) + (((op0_limb_25_col76) * (op1_limb_12_col92))))) + (((op0_limb_26_col77) * (op1_limb_11_col91))))) + (((op0_limb_27_col78) * (op1_limb_10_col90))));let conv_tmp_57455_100 = ((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_11_col62) * (op1_limb_27_col107))))) + (((op0_limb_12_col63) * (op1_limb_26_col106))))) + (((op0_limb_13_col64) * (op1_limb_25_col105))))) + (((op0_limb_14_col65) * (op1_limb_24_col104))))) + (((op0_limb_15_col66) * (op1_limb_23_col103))))) + (((op0_limb_16_col67) * (op1_limb_22_col102))))) + (((op0_limb_17_col68) * (op1_limb_21_col101))))) + (((op0_limb_18_col69) * (op1_limb_20_col100))))) + (((op0_limb_19_col70) * (op1_limb_19_col99))))) + (((op0_limb_20_col71) * (op1_limb_18_col98))))) + (((op0_limb_21_col72) * (op1_limb_17_col97))))) + (((op0_limb_22_col73) * (op1_limb_16_col96))))) + (((op0_limb_23_col74) * (op1_limb_15_col95))))) + (((op0_limb_24_col75) * (op1_limb_14_col94))))) + (((op0_limb_25_col76) * (op1_limb_13_col93))))) + (((op0_limb_26_col77) * (op1_limb_12_col92))))) + (((op0_limb_27_col78) * (op1_limb_11_col91))));let conv_tmp_57455_101 = ((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_12_col63) * (op1_limb_27_col107))))) + (((op0_limb_13_col64) * (op1_limb_26_col106))))) + (((op0_limb_14_col65) * (op1_limb_25_col105))))) + (((op0_limb_15_col66) * (op1_limb_24_col104))))) + (((op0_limb_16_col67) * (op1_limb_23_col103))))) + (((op0_limb_17_col68) * (op1_limb_22_col102))))) + (((op0_limb_18_col69) * (op1_limb_21_col101))))) + (((op0_limb_19_col70) * (op1_limb_20_col100))))) + (((op0_limb_20_col71) * (op1_limb_19_col99))))) + (((op0_limb_21_col72) * (op1_limb_18_col98))))) + (((op0_limb_22_col73) * (op1_limb_17_col97))))) + (((op0_limb_23_col74) * (op1_limb_16_col96))))) + (((op0_limb_24_col75) * (op1_limb_15_col95))))) + (((op0_limb_25_col76) * (op1_limb_14_col94))))) + (((op0_limb_26_col77) * (op1_limb_13_col93))))) + (((op0_limb_27_col78) * (op1_limb_12_col92))));let conv_tmp_57455_102 = ((((((((((((((((((((((((((((((M31_0) + (((op0_limb_13_col64) * (op1_limb_27_col107))))) + (((op0_limb_14_col65) * (op1_limb_26_col106))))) + (((op0_limb_15_col66) * (op1_limb_25_col105))))) + (((op0_limb_16_col67) * (op1_limb_24_col104))))) + (((op0_limb_17_col68) * (op1_limb_23_col103))))) + (((op0_limb_18_col69) * (op1_limb_22_col102))))) + (((op0_limb_19_col70) * (op1_limb_21_col101))))) + (((op0_limb_20_col71) * (op1_limb_20_col100))))) + (((op0_limb_21_col72) * (op1_limb_19_col99))))) + (((op0_limb_22_col73) * (op1_limb_18_col98))))) + (((op0_limb_23_col74) * (op1_limb_17_col97))))) + (((op0_limb_24_col75) * (op1_limb_16_col96))))) + (((op0_limb_25_col76) * (op1_limb_15_col95))))) + (((op0_limb_26_col77) * (op1_limb_14_col94))))) + (((op0_limb_27_col78) * (op1_limb_13_col93))));let conv_tmp_57455_103 = ((((((((((((((((((((((((((((M31_0) + (((op0_limb_14_col65) * (op1_limb_27_col107))))) + (((op0_limb_15_col66) * (op1_limb_26_col106))))) + (((op0_limb_16_col67) * (op1_limb_25_col105))))) + (((op0_limb_17_col68) * (op1_limb_24_col104))))) + (((op0_limb_18_col69) * (op1_limb_23_col103))))) + (((op0_limb_19_col70) * (op1_limb_22_col102))))) + (((op0_limb_20_col71) * (op1_limb_21_col101))))) + (((op0_limb_21_col72) * (op1_limb_20_col100))))) + (((op0_limb_22_col73) * (op1_limb_19_col99))))) + (((op0_limb_23_col74) * (op1_limb_18_col98))))) + (((op0_limb_24_col75) * (op1_limb_17_col97))))) + (((op0_limb_25_col76) * (op1_limb_16_col96))))) + (((op0_limb_26_col77) * (op1_limb_15_col95))))) + (((op0_limb_27_col78) * (op1_limb_14_col94))));let conv_tmp_57455_104 = ((((((((((((((((((((((((((M31_0) + (((op0_limb_15_col66) * (op1_limb_27_col107))))) + (((op0_limb_16_col67) * (op1_limb_26_col106))))) + (((op0_limb_17_col68) * (op1_limb_25_col105))))) + (((op0_limb_18_col69) * (op1_limb_24_col104))))) + (((op0_limb_19_col70) * (op1_limb_23_col103))))) + (((op0_limb_20_col71) * (op1_limb_22_col102))))) + (((op0_limb_21_col72) * (op1_limb_21_col101))))) + (((op0_limb_22_col73) * (op1_limb_20_col100))))) + (((op0_limb_23_col74) * (op1_limb_19_col99))))) + (((op0_limb_24_col75) * (op1_limb_18_col98))))) + (((op0_limb_25_col76) * (op1_limb_17_col97))))) + (((op0_limb_26_col77) * (op1_limb_16_col96))))) + (((op0_limb_27_col78) * (op1_limb_15_col95))));let conv_tmp_57455_105 = ((((((((((((((((((((((((M31_0) + (((op0_limb_16_col67) * (op1_limb_27_col107))))) + (((op0_limb_17_col68) * (op1_limb_26_col106))))) + (((op0_limb_18_col69) * (op1_limb_25_col105))))) + (((op0_limb_19_col70) * (op1_limb_24_col104))))) + (((op0_limb_20_col71) * (op1_limb_23_col103))))) + (((op0_limb_21_col72) * (op1_limb_22_col102))))) + (((op0_limb_22_col73) * (op1_limb_21_col101))))) + (((op0_limb_23_col74) * (op1_limb_20_col100))))) + (((op0_limb_24_col75) * (op1_limb_19_col99))))) + (((op0_limb_25_col76) * (op1_limb_18_col98))))) + (((op0_limb_26_col77) * (op1_limb_17_col97))))) + (((op0_limb_27_col78) * (op1_limb_16_col96))));let conv_tmp_57455_106 = ((((((((((((((((((((((M31_0) + (((op0_limb_17_col68) * (op1_limb_27_col107))))) + (((op0_limb_18_col69) * (op1_limb_26_col106))))) + (((op0_limb_19_col70) * (op1_limb_25_col105))))) + (((op0_limb_20_col71) * (op1_limb_24_col104))))) + (((op0_limb_21_col72) * (op1_limb_23_col103))))) + (((op0_limb_22_col73) * (op1_limb_22_col102))))) + (((op0_limb_23_col74) * (op1_limb_21_col101))))) + (((op0_limb_24_col75) * (op1_limb_20_col100))))) + (((op0_limb_25_col76) * (op1_limb_19_col99))))) + (((op0_limb_26_col77) * (op1_limb_18_col98))))) + (((op0_limb_27_col78) * (op1_limb_17_col97))));let conv_tmp_57455_107 = ((((((((((((((((((((M31_0) + (((op0_limb_18_col69) * (op1_limb_27_col107))))) + (((op0_limb_19_col70) * (op1_limb_26_col106))))) + (((op0_limb_20_col71) * (op1_limb_25_col105))))) + (((op0_limb_21_col72) * (op1_limb_24_col104))))) + (((op0_limb_22_col73) * (op1_limb_23_col103))))) + (((op0_limb_23_col74) * (op1_limb_22_col102))))) + (((op0_limb_24_col75) * (op1_limb_21_col101))))) + (((op0_limb_25_col76) * (op1_limb_20_col100))))) + (((op0_limb_26_col77) * (op1_limb_19_col99))))) + (((op0_limb_27_col78) * (op1_limb_18_col98))));let conv_tmp_57455_108 = ((((((((((((((((((M31_0) + (((op0_limb_19_col70) * (op1_limb_27_col107))))) + (((op0_limb_20_col71) * (op1_limb_26_col106))))) + (((op0_limb_21_col72) * (op1_limb_25_col105))))) + (((op0_limb_22_col73) * (op1_limb_24_col104))))) + (((op0_limb_23_col74) * (op1_limb_23_col103))))) + (((op0_limb_24_col75) * (op1_limb_22_col102))))) + (((op0_limb_25_col76) * (op1_limb_21_col101))))) + (((op0_limb_26_col77) * (op1_limb_20_col100))))) + (((op0_limb_27_col78) * (op1_limb_19_col99))));let conv_tmp_57455_109 = ((((((((((((((((M31_0) + (((op0_limb_20_col71) * (op1_limb_27_col107))))) + (((op0_limb_21_col72) * (op1_limb_26_col106))))) + (((op0_limb_22_col73) * (op1_limb_25_col105))))) + (((op0_limb_23_col74) * (op1_limb_24_col104))))) + (((op0_limb_24_col75) * (op1_limb_23_col103))))) + (((op0_limb_25_col76) * (op1_limb_22_col102))))) + (((op0_limb_26_col77) * (op1_limb_21_col101))))) + (((op0_limb_27_col78) * (op1_limb_20_col100))));let conv_tmp_57455_110 = ((((((((((((((M31_0) + (((op0_limb_21_col72) * (op1_limb_27_col107))))) + (((op0_limb_22_col73) * (op1_limb_26_col106))))) + (((op0_limb_23_col74) * (op1_limb_25_col105))))) + (((op0_limb_24_col75) * (op1_limb_24_col104))))) + (((op0_limb_25_col76) * (op1_limb_23_col103))))) + (((op0_limb_26_col77) * (op1_limb_22_col102))))) + (((op0_limb_27_col78) * (op1_limb_21_col101))));let conv_tmp_57455_111 = ((((((((((((M31_0) + (((op0_limb_22_col73) * (op1_limb_27_col107))))) + (((op0_limb_23_col74) * (op1_limb_26_col106))))) + (((op0_limb_24_col75) * (op1_limb_25_col105))))) + (((op0_limb_25_col76) * (op1_limb_24_col104))))) + (((op0_limb_26_col77) * (op1_limb_23_col103))))) + (((op0_limb_27_col78) * (op1_limb_22_col102))));let conv_tmp_57455_112 = ((((((((((M31_0) + (((op0_limb_23_col74) * (op1_limb_27_col107))))) + (((op0_limb_24_col75) * (op1_limb_26_col106))))) + (((op0_limb_25_col76) * (op1_limb_25_col105))))) + (((op0_limb_26_col77) * (op1_limb_24_col104))))) + (((op0_limb_27_col78) * (op1_limb_23_col103))));let conv_tmp_57455_113 = ((((((((M31_0) + (((op0_limb_24_col75) * (op1_limb_27_col107))))) + (((op0_limb_25_col76) * (op1_limb_26_col106))))) + (((op0_limb_26_col77) * (op1_limb_25_col105))))) + (((op0_limb_27_col78) * (op1_limb_24_col104))));let conv_tmp_57455_114 = ((((((M31_0) + (((op0_limb_25_col76) * (op1_limb_27_col107))))) + (((op0_limb_26_col77) * (op1_limb_26_col106))))) + (((op0_limb_27_col78) * (op1_limb_25_col105))));let conv_tmp_57455_115 = ((((M31_0) + (((op0_limb_26_col77) * (op1_limb_27_col107))))) + (((op0_limb_27_col78) * (op1_limb_26_col106))));let conv_tmp_57455_116 = ((M31_0) + (((op0_limb_27_col78) * (op1_limb_27_col107))));let conv_mod_tmp_57455_117 = ((((((M31_0) + (((M31_32) * (conv_tmp_57455_62))))) - (((M31_4) * (conv_tmp_57455_83))))) + (((M31_8) * (conv_tmp_57455_111))));let conv_mod_tmp_57455_118 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_62))))) + (((M31_32) * (conv_tmp_57455_63))))) - (((M31_4) * (conv_tmp_57455_84))))) + (((M31_8) * (conv_tmp_57455_112))));let conv_mod_tmp_57455_119 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_63))))) + (((M31_32) * (conv_tmp_57455_64))))) - (((M31_4) * (conv_tmp_57455_85))))) + (((M31_8) * (conv_tmp_57455_113))));let conv_mod_tmp_57455_120 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_64))))) + (((M31_32) * (conv_tmp_57455_65))))) - (((M31_4) * (conv_tmp_57455_86))))) + (((M31_8) * (conv_tmp_57455_114))));let conv_mod_tmp_57455_121 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_65))))) + (((M31_32) * (conv_tmp_57455_66))))) - (((M31_4) * (conv_tmp_57455_87))))) + (((M31_8) * (conv_tmp_57455_115))));let conv_mod_tmp_57455_122 = ((((((((M31_0) + (((M31_1) * (conv_tmp_57455_66))))) + (((M31_32) * (conv_tmp_57455_67))))) - (((M31_4) * (conv_tmp_57455_88))))) + (((M31_8) * (conv_tmp_57455_116))));let conv_mod_tmp_57455_123 = ((((((M31_0) + (((M31_1) * (conv_tmp_57455_67))))) + (((M31_32) * (conv_tmp_57455_68))))) - (((M31_4) * (conv_tmp_57455_89))));let conv_mod_tmp_57455_124 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_62))))) + (((M31_1) * (conv_tmp_57455_68))))) + (((M31_32) * (conv_tmp_57455_69))))) - (((M31_4) * (conv_tmp_57455_90))));let conv_mod_tmp_57455_125 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_63))))) + (((M31_1) * (conv_tmp_57455_69))))) + (((M31_32) * (conv_tmp_57455_70))))) - (((M31_4) * (conv_tmp_57455_91))));let conv_mod_tmp_57455_126 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_64))))) + (((M31_1) * (conv_tmp_57455_70))))) + (((M31_32) * (conv_tmp_57455_71))))) - (((M31_4) * (conv_tmp_57455_92))));let conv_mod_tmp_57455_127 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_65))))) + (((M31_1) * (conv_tmp_57455_71))))) + (((M31_32) * (conv_tmp_57455_72))))) - (((M31_4) * (conv_tmp_57455_93))));let conv_mod_tmp_57455_128 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_66))))) + (((M31_1) * (conv_tmp_57455_72))))) + (((M31_32) * (conv_tmp_57455_73))))) - (((M31_4) * (conv_tmp_57455_94))));let conv_mod_tmp_57455_129 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_67))))) + (((M31_1) * (conv_tmp_57455_73))))) + (((M31_32) * (conv_tmp_57455_74))))) - (((M31_4) * (conv_tmp_57455_95))));let conv_mod_tmp_57455_130 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_68))))) + (((M31_1) * (conv_tmp_57455_74))))) + (((M31_32) * (conv_tmp_57455_75))))) - (((M31_4) * (conv_tmp_57455_96))));let conv_mod_tmp_57455_131 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_69))))) + (((M31_1) * (conv_tmp_57455_75))))) + (((M31_32) * (conv_tmp_57455_76))))) - (((M31_4) * (conv_tmp_57455_97))));let conv_mod_tmp_57455_132 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_70))))) + (((M31_1) * (conv_tmp_57455_76))))) + (((M31_32) * (conv_tmp_57455_77))))) - (((M31_4) * (conv_tmp_57455_98))));let conv_mod_tmp_57455_133 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_71))))) + (((M31_1) * (conv_tmp_57455_77))))) + (((M31_32) * (conv_tmp_57455_78))))) - (((M31_4) * (conv_tmp_57455_99))));let conv_mod_tmp_57455_134 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_72))))) + (((M31_1) * (conv_tmp_57455_78))))) + (((M31_32) * (conv_tmp_57455_79))))) - (((M31_4) * (conv_tmp_57455_100))));let conv_mod_tmp_57455_135 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_73))))) + (((M31_1) * (conv_tmp_57455_79))))) + (((M31_32) * (conv_tmp_57455_80))))) - (((M31_4) * (conv_tmp_57455_101))));let conv_mod_tmp_57455_136 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_74))))) + (((M31_1) * (conv_tmp_57455_80))))) + (((M31_32) * (conv_tmp_57455_81))))) - (((M31_4) * (conv_tmp_57455_102))));let conv_mod_tmp_57455_137 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_75))))) + (((M31_1) * (conv_tmp_57455_81))))) + (((M31_32) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_103))));let conv_mod_tmp_57455_138 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_76))))) + (((M31_1) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_104))))) + (((M31_64) * (conv_tmp_57455_111))));let conv_mod_tmp_57455_139 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_77))))) - (((M31_4) * (conv_tmp_57455_105))))) + (((M31_2) * (conv_tmp_57455_111))))) + (((M31_64) * (conv_tmp_57455_112))));let conv_mod_tmp_57455_140 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_78))))) - (((M31_4) * (conv_tmp_57455_106))))) + (((M31_2) * (conv_tmp_57455_112))))) + (((M31_64) * (conv_tmp_57455_113))));let conv_mod_tmp_57455_141 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_79))))) - (((M31_4) * (conv_tmp_57455_107))))) + (((M31_2) * (conv_tmp_57455_113))))) + (((M31_64) * (conv_tmp_57455_114))));let conv_mod_tmp_57455_142 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_80))))) - (((M31_4) * (conv_tmp_57455_108))))) + (((M31_2) * (conv_tmp_57455_114))))) + (((M31_64) * (conv_tmp_57455_115))));let conv_mod_tmp_57455_143 = ((((((((M31_0) + (((M31_2) * (conv_tmp_57455_81))))) - (((M31_4) * (conv_tmp_57455_109))))) + (((M31_2) * (conv_tmp_57455_115))))) + (((M31_64) * (conv_tmp_57455_116))));let conv_mod_tmp_57455_144 = ((((((M31_0) + (((M31_2) * (conv_tmp_57455_82))))) - (((M31_4) * (conv_tmp_57455_110))))) + (((M31_2) * (conv_tmp_57455_116))));let k_mod_2_18_biased_tmp_57455_145 = ((((((PackedUInt32::from_m31(((conv_mod_tmp_57455_117) + (M31_134217728)))) + (((((PackedUInt32::from_m31(((conv_mod_tmp_57455_118) + (M31_134217728)))) & (UInt32_511))) << (UInt32_9))))) + (UInt32_65536))) & (UInt32_262143));let k_col165 = ((k_mod_2_18_biased_tmp_57455_145.low().as_m31()) + (((((k_mod_2_18_biased_tmp_57455_145.high().as_m31()) - (M31_1))) * (M31_65536)))); + *row[165] = k_col165;let range_check_19_inputs_0 = + [((k_col165) + (M31_262144))].unpack(); + *lookup_data.range_check_19_0 = [((k_col165) + (M31_262144))];let carry_0_col166 = ((((((conv_mod_tmp_57455_117) - (((M31_1) * (k_col165))))) + (M31_0))) * (M31_4194304)); + *row[166] = carry_0_col166;let range_check_19_inputs_1 = + [((carry_0_col166) + (M31_131072))].unpack(); + *lookup_data.range_check_19_1 = [((carry_0_col166) + (M31_131072))];let carry_1_col167 = ((((conv_mod_tmp_57455_118) + (carry_0_col166))) * (M31_4194304)); + *row[167] = carry_1_col167;let range_check_19_inputs_2 = + [((carry_1_col167) + (M31_131072))].unpack(); + *lookup_data.range_check_19_2 = [((carry_1_col167) + (M31_131072))];let carry_2_col168 = ((((conv_mod_tmp_57455_119) + (carry_1_col167))) * (M31_4194304)); + *row[168] = carry_2_col168;let range_check_19_inputs_3 = + [((carry_2_col168) + (M31_131072))].unpack(); + *lookup_data.range_check_19_3 = [((carry_2_col168) + (M31_131072))];let carry_3_col169 = ((((conv_mod_tmp_57455_120) + (carry_2_col168))) * (M31_4194304)); + *row[169] = carry_3_col169;let range_check_19_inputs_4 = + [((carry_3_col169) + (M31_131072))].unpack(); + *lookup_data.range_check_19_4 = [((carry_3_col169) + (M31_131072))];let carry_4_col170 = ((((conv_mod_tmp_57455_121) + (carry_3_col169))) * (M31_4194304)); + *row[170] = carry_4_col170;let range_check_19_inputs_5 = + [((carry_4_col170) + (M31_131072))].unpack(); + *lookup_data.range_check_19_5 = [((carry_4_col170) + (M31_131072))];let carry_5_col171 = ((((conv_mod_tmp_57455_122) + (carry_4_col170))) * (M31_4194304)); + *row[171] = carry_5_col171;let range_check_19_inputs_6 = + [((carry_5_col171) + (M31_131072))].unpack(); + *lookup_data.range_check_19_6 = [((carry_5_col171) + (M31_131072))];let carry_6_col172 = ((((conv_mod_tmp_57455_123) + (carry_5_col171))) * (M31_4194304)); + *row[172] = carry_6_col172;let range_check_19_inputs_7 = + [((carry_6_col172) + (M31_131072))].unpack(); + *lookup_data.range_check_19_7 = [((carry_6_col172) + (M31_131072))];let carry_7_col173 = ((((conv_mod_tmp_57455_124) + (carry_6_col172))) * (M31_4194304)); + *row[173] = carry_7_col173;let range_check_19_inputs_8 = + [((carry_7_col173) + (M31_131072))].unpack(); + *lookup_data.range_check_19_8 = [((carry_7_col173) + (M31_131072))];let carry_8_col174 = ((((conv_mod_tmp_57455_125) + (carry_7_col173))) * (M31_4194304)); + *row[174] = carry_8_col174;let range_check_19_inputs_9 = + [((carry_8_col174) + (M31_131072))].unpack(); + *lookup_data.range_check_19_9 = [((carry_8_col174) + (M31_131072))];let carry_9_col175 = ((((conv_mod_tmp_57455_126) + (carry_8_col174))) * (M31_4194304)); + *row[175] = carry_9_col175;let range_check_19_inputs_10 = + [((carry_9_col175) + (M31_131072))].unpack(); + *lookup_data.range_check_19_10 = [((carry_9_col175) + (M31_131072))];let carry_10_col176 = ((((conv_mod_tmp_57455_127) + (carry_9_col175))) * (M31_4194304)); + *row[176] = carry_10_col176;let range_check_19_inputs_11 = + [((carry_10_col176) + (M31_131072))].unpack(); + *lookup_data.range_check_19_11 = [((carry_10_col176) + (M31_131072))];let carry_11_col177 = ((((conv_mod_tmp_57455_128) + (carry_10_col176))) * (M31_4194304)); + *row[177] = carry_11_col177;let range_check_19_inputs_12 = + [((carry_11_col177) + (M31_131072))].unpack(); + *lookup_data.range_check_19_12 = [((carry_11_col177) + (M31_131072))];let carry_12_col178 = ((((conv_mod_tmp_57455_129) + (carry_11_col177))) * (M31_4194304)); + *row[178] = carry_12_col178;let range_check_19_inputs_13 = + [((carry_12_col178) + (M31_131072))].unpack(); + *lookup_data.range_check_19_13 = [((carry_12_col178) + (M31_131072))];let carry_13_col179 = ((((conv_mod_tmp_57455_130) + (carry_12_col178))) * (M31_4194304)); + *row[179] = carry_13_col179;let range_check_19_inputs_14 = + [((carry_13_col179) + (M31_131072))].unpack(); + *lookup_data.range_check_19_14 = [((carry_13_col179) + (M31_131072))];let carry_14_col180 = ((((conv_mod_tmp_57455_131) + (carry_13_col179))) * (M31_4194304)); + *row[180] = carry_14_col180;let range_check_19_inputs_15 = + [((carry_14_col180) + (M31_131072))].unpack(); + *lookup_data.range_check_19_15 = [((carry_14_col180) + (M31_131072))];let carry_15_col181 = ((((conv_mod_tmp_57455_132) + (carry_14_col180))) * (M31_4194304)); + *row[181] = carry_15_col181;let range_check_19_inputs_16 = + [((carry_15_col181) + (M31_131072))].unpack(); + *lookup_data.range_check_19_16 = [((carry_15_col181) + (M31_131072))];let carry_16_col182 = ((((conv_mod_tmp_57455_133) + (carry_15_col181))) * (M31_4194304)); + *row[182] = carry_16_col182;let range_check_19_inputs_17 = + [((carry_16_col182) + (M31_131072))].unpack(); + *lookup_data.range_check_19_17 = [((carry_16_col182) + (M31_131072))];let carry_17_col183 = ((((conv_mod_tmp_57455_134) + (carry_16_col182))) * (M31_4194304)); + *row[183] = carry_17_col183;let range_check_19_inputs_18 = + [((carry_17_col183) + (M31_131072))].unpack(); + *lookup_data.range_check_19_18 = [((carry_17_col183) + (M31_131072))];let carry_18_col184 = ((((conv_mod_tmp_57455_135) + (carry_17_col183))) * (M31_4194304)); + *row[184] = carry_18_col184;let range_check_19_inputs_19 = + [((carry_18_col184) + (M31_131072))].unpack(); + *lookup_data.range_check_19_19 = [((carry_18_col184) + (M31_131072))];let carry_19_col185 = ((((conv_mod_tmp_57455_136) + (carry_18_col184))) * (M31_4194304)); + *row[185] = carry_19_col185;let range_check_19_inputs_20 = + [((carry_19_col185) + (M31_131072))].unpack(); + *lookup_data.range_check_19_20 = [((carry_19_col185) + (M31_131072))];let carry_20_col186 = ((((conv_mod_tmp_57455_137) + (carry_19_col185))) * (M31_4194304)); + *row[186] = carry_20_col186;let range_check_19_inputs_21 = + [((carry_20_col186) + (M31_131072))].unpack(); + *lookup_data.range_check_19_21 = [((carry_20_col186) + (M31_131072))];let carry_21_col187 = ((((((conv_mod_tmp_57455_138) - (((M31_136) * (k_col165))))) + (carry_20_col186))) * (M31_4194304)); + *row[187] = carry_21_col187;let range_check_19_inputs_22 = + [((carry_21_col187) + (M31_131072))].unpack(); + *lookup_data.range_check_19_22 = [((carry_21_col187) + (M31_131072))];let carry_22_col188 = ((((conv_mod_tmp_57455_139) + (carry_21_col187))) * (M31_4194304)); + *row[188] = carry_22_col188;let range_check_19_inputs_23 = + [((carry_22_col188) + (M31_131072))].unpack(); + *lookup_data.range_check_19_23 = [((carry_22_col188) + (M31_131072))];let carry_23_col189 = ((((conv_mod_tmp_57455_140) + (carry_22_col188))) * (M31_4194304)); + *row[189] = carry_23_col189;let range_check_19_inputs_24 = + [((carry_23_col189) + (M31_131072))].unpack(); + *lookup_data.range_check_19_24 = [((carry_23_col189) + (M31_131072))];let carry_24_col190 = ((((conv_mod_tmp_57455_141) + (carry_23_col189))) * (M31_4194304)); + *row[190] = carry_24_col190;let range_check_19_inputs_25 = + [((carry_24_col190) + (M31_131072))].unpack(); + *lookup_data.range_check_19_25 = [((carry_24_col190) + (M31_131072))];let carry_25_col191 = ((((conv_mod_tmp_57455_142) + (carry_24_col190))) * (M31_4194304)); + *row[191] = carry_25_col191;let range_check_19_inputs_26 = + [((carry_25_col191) + (M31_131072))].unpack(); + *lookup_data.range_check_19_26 = [((carry_25_col191) + (M31_131072))];let carry_26_col192 = ((((conv_mod_tmp_57455_143) + (carry_25_col191))) * (M31_4194304)); + *row[192] = carry_26_col192;let range_check_19_inputs_27 = + [((carry_26_col192) + (M31_131072))].unpack(); + *lookup_data.range_check_19_27 = [((carry_26_col192) + (M31_131072))]; + + let res_tmp_57455_146 = ((((((PackedFelt252::from_m31(res_op1_tmp_57455_22)) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])))) + (((PackedFelt252::from_m31(res_mul_col12)) * (mul_res_tmp_57455_61))))) + (((PackedFelt252::from_m31(res_add_col11)) * (add_res_tmp_57455_32))));let res_limb_0_col193 = res_tmp_57455_146.get_m31(0); + *row[193] = res_limb_0_col193;let res_limb_1_col194 = res_tmp_57455_146.get_m31(1); + *row[194] = res_limb_1_col194;let res_limb_2_col195 = res_tmp_57455_146.get_m31(2); + *row[195] = res_limb_2_col195;let res_limb_3_col196 = res_tmp_57455_146.get_m31(3); + *row[196] = res_limb_3_col196;let res_limb_4_col197 = res_tmp_57455_146.get_m31(4); + *row[197] = res_limb_4_col197;let res_limb_5_col198 = res_tmp_57455_146.get_m31(5); + *row[198] = res_limb_5_col198;let res_limb_6_col199 = res_tmp_57455_146.get_m31(6); + *row[199] = res_limb_6_col199;let res_limb_7_col200 = res_tmp_57455_146.get_m31(7); + *row[200] = res_limb_7_col200;let res_limb_8_col201 = res_tmp_57455_146.get_m31(8); + *row[201] = res_limb_8_col201;let res_limb_9_col202 = res_tmp_57455_146.get_m31(9); + *row[202] = res_limb_9_col202;let res_limb_10_col203 = res_tmp_57455_146.get_m31(10); + *row[203] = res_limb_10_col203;let res_limb_11_col204 = res_tmp_57455_146.get_m31(11); + *row[204] = res_limb_11_col204;let res_limb_12_col205 = res_tmp_57455_146.get_m31(12); + *row[205] = res_limb_12_col205;let res_limb_13_col206 = res_tmp_57455_146.get_m31(13); + *row[206] = res_limb_13_col206;let res_limb_14_col207 = res_tmp_57455_146.get_m31(14); + *row[207] = res_limb_14_col207;let res_limb_15_col208 = res_tmp_57455_146.get_m31(15); + *row[208] = res_limb_15_col208;let res_limb_16_col209 = res_tmp_57455_146.get_m31(16); + *row[209] = res_limb_16_col209;let res_limb_17_col210 = res_tmp_57455_146.get_m31(17); + *row[210] = res_limb_17_col210;let res_limb_18_col211 = res_tmp_57455_146.get_m31(18); + *row[211] = res_limb_18_col211;let res_limb_19_col212 = res_tmp_57455_146.get_m31(19); + *row[212] = res_limb_19_col212;let res_limb_20_col213 = res_tmp_57455_146.get_m31(20); + *row[213] = res_limb_20_col213;let res_limb_21_col214 = res_tmp_57455_146.get_m31(21); + *row[214] = res_limb_21_col214;let res_limb_22_col215 = res_tmp_57455_146.get_m31(22); + *row[215] = res_limb_22_col215;let res_limb_23_col216 = res_tmp_57455_146.get_m31(23); + *row[216] = res_limb_23_col216;let res_limb_24_col217 = res_tmp_57455_146.get_m31(24); + *row[217] = res_limb_24_col217;let res_limb_25_col218 = res_tmp_57455_146.get_m31(25); + *row[218] = res_limb_25_col218;let res_limb_26_col219 = res_tmp_57455_146.get_m31(26); + *row[219] = res_limb_26_col219;let res_limb_27_col220 = res_tmp_57455_146.get_m31(27); *row[220] = res_limb_27_col220; - - - - //Update Registers. - - - //Cond Felt 252 As Rel Imm. - - - //Cond Decode Small Sign. - -let msb_tmp_57455_148 = res_limb_27_col220.eq(M31_256); -let msb_col221 = msb_tmp_57455_148.as_m31(); - *row[221] = msb_col221; -let mid_limbs_set_tmp_57455_149 = res_limb_20_col213.eq(M31_511); -let mid_limbs_set_col222 = mid_limbs_set_tmp_57455_149.as_m31(); + let msb_tmp_57455_148 = res_limb_27_col220.eq(M31_256);let msb_col221 = msb_tmp_57455_148.as_m31(); + *row[221] = msb_col221;let mid_limbs_set_tmp_57455_149 = res_limb_20_col213.eq(M31_511);let mid_limbs_set_col222 = mid_limbs_set_tmp_57455_149.as_m31(); *row[222] = mid_limbs_set_col222; - - - - - -let diff_from_p_tmp_57455_150 = ((dst_limb_0_col22) - (M31_1)); -let diff_from_p_tmp_57455_151 = ((dst_limb_21_col43) - (M31_136)); -let diff_from_p_tmp_57455_152 = ((dst_limb_27_col49) - (M31_256)); -let dst_sum_squares_inv_col223 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((diff_from_p_tmp_57455_150) * (diff_from_p_tmp_57455_150))))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (((diff_from_p_tmp_57455_151) * (diff_from_p_tmp_57455_151))))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (((diff_from_p_tmp_57455_152) * (diff_from_p_tmp_57455_152)))).inverse(); - *row[223] = dst_sum_squares_inv_col223; -let dst_is_zero_tmp_57455_153 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)).eq(M31_0); -let dst_sum_inv_col224 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49))) + (dst_is_zero_tmp_57455_153.as_m31())).inverse(); - *row[224] = dst_sum_inv_col224; -let op1_as_rel_imm_cond_col225 = ((pc_update_jnz_col15) * (((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)))); + let diff_from_p_tmp_57455_150 = ((dst_limb_0_col22) - (M31_1));let diff_from_p_tmp_57455_151 = ((dst_limb_21_col43) - (M31_136));let diff_from_p_tmp_57455_152 = ((dst_limb_27_col49) - (M31_256));let dst_sum_squares_inv_col223 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((diff_from_p_tmp_57455_150) * (diff_from_p_tmp_57455_150))))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (((diff_from_p_tmp_57455_151) * (diff_from_p_tmp_57455_151))))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (((diff_from_p_tmp_57455_152) * (diff_from_p_tmp_57455_152)))).inverse(); + *row[223] = dst_sum_squares_inv_col223;let dst_is_zero_tmp_57455_153 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)).eq(M31_0);let dst_sum_inv_col224 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49))) + (dst_is_zero_tmp_57455_153.as_m31())).inverse(); + *row[224] = dst_sum_inv_col224;let op1_as_rel_imm_cond_col225 = ((pc_update_jnz_col15) * (((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)))); *row[225] = op1_as_rel_imm_cond_col225; - //Cond Felt 252 As Rel Imm. - - - //Cond Decode Small Sign. - -let msb_tmp_57455_154 = op1_limb_27_col107.eq(M31_256); -let msb_col226 = msb_tmp_57455_154.as_m31(); - *row[226] = msb_col226; -let mid_limbs_set_tmp_57455_155 = op1_limb_20_col100.eq(M31_511); -let mid_limbs_set_col227 = mid_limbs_set_tmp_57455_155.as_m31(); + let msb_tmp_57455_154 = op1_limb_27_col107.eq(M31_256);let msb_col226 = msb_tmp_57455_154.as_m31(); + *row[226] = msb_col226;let mid_limbs_set_tmp_57455_155 = op1_limb_20_col100.eq(M31_511);let mid_limbs_set_col227 = mid_limbs_set_tmp_57455_155.as_m31(); *row[227] = mid_limbs_set_col227; - - - - - -let next_pc_jnz_col228 = ((((dst_is_zero_tmp_57455_153.as_m31()) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((((M31_1) - (dst_is_zero_tmp_57455_153.as_m31()))) * (((input_pc_col0) + (((((((((op1_limb_0_col80) + (((op1_limb_1_col81) * (M31_512))))) + (((op1_limb_2_col82) * (M31_262144))))) - (msb_col226))) - (((M31_134217728) * (mid_limbs_set_col227)))))))))); + let next_pc_jnz_col228 = ((((dst_is_zero_tmp_57455_153.as_m31()) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((((M31_1) - (dst_is_zero_tmp_57455_153.as_m31()))) * (((input_pc_col0) + (((((((((op1_limb_0_col80) + (((op1_limb_1_col81) * (M31_512))))) + (((op1_limb_2_col82) * (M31_262144))))) - (msb_col226))) - (((M31_134217728) * (mid_limbs_set_col227)))))))))); *row[228] = next_pc_jnz_col228; - - -*lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; -*lookup_data.opcodes_1 = [((((((((pc_update_regular_tmp_57455_23) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((pc_update_jump_col13) * (((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))))))) + (((pc_update_jump_rel_col14) * (((input_pc_col0) + (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))))) + (((pc_update_jnz_col15) * (next_pc_jnz_col228)))), ((((((input_ap_col1) + (((ap_update_add_col16) * (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))) + (((ap_update_add_1_col17) * (M31_1))))) + (((opcode_call_col18) * (M31_2)))), ((((((fp_update_regular_tmp_57455_25) * (input_fp_col2))) + (((opcode_ret_col19) * (((((dst_limb_0_col22) + (((dst_limb_1_col23) * (M31_512))))) + (((dst_limb_2_col24) * (M31_262144))))))))) + (((opcode_call_col18) * (((input_ap_col1) + (M31_2))))))]; - + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2];*lookup_data.opcodes_1 = [((((((((pc_update_regular_tmp_57455_23) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((pc_update_jump_col13) * (((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))))))) + (((pc_update_jump_rel_col14) * (((input_pc_col0) + (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))))) + (((pc_update_jnz_col15) * (next_pc_jnz_col228)))), ((((((input_ap_col1) + (((ap_update_add_col16) * (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))) + (((ap_update_add_1_col17) * (M31_1))))) + (((opcode_call_col18) * (M31_2)))), ((((((fp_update_regular_tmp_57455_25) * (input_fp_col2))) + (((opcode_ret_col19) * (((((dst_limb_0_col22) + (((dst_limb_1_col23) * (M31_512))))) + (((dst_limb_2_col24) * (M31_262144))))))))) + (((opcode_call_col18) * (((input_ap_col1) + (M31_2))))))]; + + // Add sub-components inputs. +#[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input( + &verify_instruction_inputs_0[i] + );memory_address_to_id_state.add_input( + &memory_address_to_id_inputs_0[i] + );memory_id_to_big_state.add_input( + &memory_id_to_big_inputs_0[i] + );memory_address_to_id_state.add_input( + &memory_address_to_id_inputs_1[i] + );memory_id_to_big_state.add_input( + &memory_id_to_big_inputs_1[i] + );memory_address_to_id_state.add_input( + &memory_address_to_id_inputs_2[i] + );memory_id_to_big_state.add_input( + &memory_id_to_big_inputs_2[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_0[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_1[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_2[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_3[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_4[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_5[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_6[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_7[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_8[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_9[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_10[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_11[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_12[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_13[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_14[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_15[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_16[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_17[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_18[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_19[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_20[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_21[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_22[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_23[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_24[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_25[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_26[i] + );range_check_9_9_state.add_input( + &range_check_9_9_inputs_27[i] + );range_check_19_state.add_input( + &range_check_19_inputs_0[i] + );range_check_19_state.add_input( + &range_check_19_inputs_1[i] + );range_check_19_state.add_input( + &range_check_19_inputs_2[i] + );range_check_19_state.add_input( + &range_check_19_inputs_3[i] + );range_check_19_state.add_input( + &range_check_19_inputs_4[i] + );range_check_19_state.add_input( + &range_check_19_inputs_5[i] + );range_check_19_state.add_input( + &range_check_19_inputs_6[i] + );range_check_19_state.add_input( + &range_check_19_inputs_7[i] + );range_check_19_state.add_input( + &range_check_19_inputs_8[i] + );range_check_19_state.add_input( + &range_check_19_inputs_9[i] + );range_check_19_state.add_input( + &range_check_19_inputs_10[i] + );range_check_19_state.add_input( + &range_check_19_inputs_11[i] + );range_check_19_state.add_input( + &range_check_19_inputs_12[i] + );range_check_19_state.add_input( + &range_check_19_inputs_13[i] + );range_check_19_state.add_input( + &range_check_19_inputs_14[i] + );range_check_19_state.add_input( + &range_check_19_inputs_15[i] + );range_check_19_state.add_input( + &range_check_19_inputs_16[i] + );range_check_19_state.add_input( + &range_check_19_inputs_17[i] + );range_check_19_state.add_input( + &range_check_19_inputs_18[i] + );range_check_19_state.add_input( + &range_check_19_inputs_19[i] + );range_check_19_state.add_input( + &range_check_19_inputs_20[i] + );range_check_19_state.add_input( + &range_check_19_inputs_21[i] + );range_check_19_state.add_input( + &range_check_19_inputs_22[i] + );range_check_19_state.add_input( + &range_check_19_inputs_23[i] + );range_check_19_state.add_input( + &range_check_19_inputs_24[i] + );range_check_19_state.add_input( + &range_check_19_inputs_25[i] + );range_check_19_state.add_input( + &range_check_19_inputs_26[i] + );range_check_19_state.add_input( + &range_check_19_inputs_27[i] + ); + } + } }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized,IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode/prover.rs index 7a2bb009..c5adf3ed 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -163,73 +128,41 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), jnz_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_e1597_0 = jnz_opcode_input; - let input_pc_col0 = input_tmp_e1597_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_e1597_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_e1597_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), jnz_opcode_input), lookup_data)| { + let input_tmp_e1597_0 = jnz_opcode_input; + let input_pc_col0 = input_tmp_e1597_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_e1597_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_e1597_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_e1597_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_e1597_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e1597_1); - let offset0_tmp_e1597_3 = - ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(0))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_e1597_2.get_m31(1), - )) & (UInt16_127)) - << (UInt16_9))); - let offset0_col3 = offset0_tmp_e1597_3.as_m31(); - *row[3] = offset0_col3; - let ap_update_add_1_tmp_e1597_4 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_e1597_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col4 = ap_update_add_1_tmp_e1597_4.as_m31(); - *row[4] = ap_update_add_1_col4; - for (i, &input) in ( - input_pc_col0, - [offset0_col3, M31_32767, M31_32769], - [ - M31_0, - M31_1, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - ap_update_add_1_col4, - M31_0, - M31_0, - M31_0, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - offset0_col3, - M31_32767, - M31_32769, + let memory_address_to_id_value_tmp_e1597_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_e1597_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e1597_1); + let offset0_tmp_e1597_3 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_e1597_3.as_m31(); + *row[3] = offset0_col3; + let ap_update_add_1_tmp_e1597_4 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_e1597_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col4 = ap_update_add_1_tmp_e1597_4.as_m31(); + *row[4] = ap_update_add_1_col4; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [offset0_col3, M31_32767, M31_32769], + [ M31_0, M31_1, M31_1, @@ -245,128 +178,157 @@ fn write_trace_simd( M31_0, M31_0, M31_0, - ]; + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + offset0_col3, + M31_32767, + M31_32769, + M31_0, + M31_1, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + ap_update_add_1_col4, + M31_0, + M31_0, + M31_0, + ]; + + // Read Positive Num Bits 252. + + let memory_address_to_id_value_tmp_e1597_5 = memory_address_to_id_state + .deduce_output(((input_ap_col1) + ((offset0_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_e1597_6 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e1597_5); + let dst_id_col5 = memory_address_to_id_value_tmp_e1597_5; + *row[5] = dst_id_col5; + let memory_address_to_id_inputs_0 = + ((input_ap_col1) + ((offset0_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((input_ap_col1) + ((offset0_col3) - (M31_32768))), + dst_id_col5, + ]; + let dst_limb_0_col6 = memory_id_to_big_value_tmp_e1597_6.get_m31(0); + *row[6] = dst_limb_0_col6; + let dst_limb_1_col7 = memory_id_to_big_value_tmp_e1597_6.get_m31(1); + *row[7] = dst_limb_1_col7; + let dst_limb_2_col8 = memory_id_to_big_value_tmp_e1597_6.get_m31(2); + *row[8] = dst_limb_2_col8; + let dst_limb_3_col9 = memory_id_to_big_value_tmp_e1597_6.get_m31(3); + *row[9] = dst_limb_3_col9; + let dst_limb_4_col10 = memory_id_to_big_value_tmp_e1597_6.get_m31(4); + *row[10] = dst_limb_4_col10; + let dst_limb_5_col11 = memory_id_to_big_value_tmp_e1597_6.get_m31(5); + *row[11] = dst_limb_5_col11; + let dst_limb_6_col12 = memory_id_to_big_value_tmp_e1597_6.get_m31(6); + *row[12] = dst_limb_6_col12; + let dst_limb_7_col13 = memory_id_to_big_value_tmp_e1597_6.get_m31(7); + *row[13] = dst_limb_7_col13; + let dst_limb_8_col14 = memory_id_to_big_value_tmp_e1597_6.get_m31(8); + *row[14] = dst_limb_8_col14; + let dst_limb_9_col15 = memory_id_to_big_value_tmp_e1597_6.get_m31(9); + *row[15] = dst_limb_9_col15; + let dst_limb_10_col16 = memory_id_to_big_value_tmp_e1597_6.get_m31(10); + *row[16] = dst_limb_10_col16; + let dst_limb_11_col17 = memory_id_to_big_value_tmp_e1597_6.get_m31(11); + *row[17] = dst_limb_11_col17; + let dst_limb_12_col18 = memory_id_to_big_value_tmp_e1597_6.get_m31(12); + *row[18] = dst_limb_12_col18; + let dst_limb_13_col19 = memory_id_to_big_value_tmp_e1597_6.get_m31(13); + *row[19] = dst_limb_13_col19; + let dst_limb_14_col20 = memory_id_to_big_value_tmp_e1597_6.get_m31(14); + *row[20] = dst_limb_14_col20; + let dst_limb_15_col21 = memory_id_to_big_value_tmp_e1597_6.get_m31(15); + *row[21] = dst_limb_15_col21; + let dst_limb_16_col22 = memory_id_to_big_value_tmp_e1597_6.get_m31(16); + *row[22] = dst_limb_16_col22; + let dst_limb_17_col23 = memory_id_to_big_value_tmp_e1597_6.get_m31(17); + *row[23] = dst_limb_17_col23; + let dst_limb_18_col24 = memory_id_to_big_value_tmp_e1597_6.get_m31(18); + *row[24] = dst_limb_18_col24; + let dst_limb_19_col25 = memory_id_to_big_value_tmp_e1597_6.get_m31(19); + *row[25] = dst_limb_19_col25; + let dst_limb_20_col26 = memory_id_to_big_value_tmp_e1597_6.get_m31(20); + *row[26] = dst_limb_20_col26; + let dst_limb_21_col27 = memory_id_to_big_value_tmp_e1597_6.get_m31(21); + *row[27] = dst_limb_21_col27; + let dst_limb_22_col28 = memory_id_to_big_value_tmp_e1597_6.get_m31(22); + *row[28] = dst_limb_22_col28; + let dst_limb_23_col29 = memory_id_to_big_value_tmp_e1597_6.get_m31(23); + *row[29] = dst_limb_23_col29; + let dst_limb_24_col30 = memory_id_to_big_value_tmp_e1597_6.get_m31(24); + *row[30] = dst_limb_24_col30; + let dst_limb_25_col31 = memory_id_to_big_value_tmp_e1597_6.get_m31(25); + *row[31] = dst_limb_25_col31; + let dst_limb_26_col32 = memory_id_to_big_value_tmp_e1597_6.get_m31(26); + *row[32] = dst_limb_26_col32; + let dst_limb_27_col33 = memory_id_to_big_value_tmp_e1597_6.get_m31(27); + *row[33] = dst_limb_27_col33; + let memory_id_to_big_inputs_0 = dst_id_col5.unpack(); + *lookup_data.memory_id_to_big_0 = [ + dst_id_col5, + dst_limb_0_col6, + dst_limb_1_col7, + dst_limb_2_col8, + dst_limb_3_col9, + dst_limb_4_col10, + dst_limb_5_col11, + dst_limb_6_col12, + dst_limb_7_col13, + dst_limb_8_col14, + dst_limb_9_col15, + dst_limb_10_col16, + dst_limb_11_col17, + dst_limb_12_col18, + dst_limb_13_col19, + dst_limb_14_col20, + dst_limb_15_col21, + dst_limb_16_col22, + dst_limb_17_col23, + dst_limb_18_col24, + dst_limb_19_col25, + dst_limb_20_col26, + dst_limb_21_col27, + dst_limb_22_col28, + dst_limb_23_col29, + dst_limb_24_col30, + dst_limb_25_col31, + dst_limb_26_col32, + dst_limb_27_col33, + ]; - // Read Positive Num Bits 252. + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_2)), + ((input_ap_col1) + (ap_update_add_1_col4)), + input_fp_col2, + ]; - let memory_address_to_id_value_tmp_e1597_5 = memory_address_to_id_state - .deduce_output(((input_ap_col1) + ((offset0_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_e1597_6 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e1597_5); - let dst_id_col5 = memory_address_to_id_value_tmp_e1597_5; - *row[5] = dst_id_col5; - for (i, &input) in ((input_ap_col1) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); } - *lookup_data.memory_address_to_id_0 = [ - ((input_ap_col1) + ((offset0_col3) - (M31_32768))), - dst_id_col5, - ]; - let dst_limb_0_col6 = memory_id_to_big_value_tmp_e1597_6.get_m31(0); - *row[6] = dst_limb_0_col6; - let dst_limb_1_col7 = memory_id_to_big_value_tmp_e1597_6.get_m31(1); - *row[7] = dst_limb_1_col7; - let dst_limb_2_col8 = memory_id_to_big_value_tmp_e1597_6.get_m31(2); - *row[8] = dst_limb_2_col8; - let dst_limb_3_col9 = memory_id_to_big_value_tmp_e1597_6.get_m31(3); - *row[9] = dst_limb_3_col9; - let dst_limb_4_col10 = memory_id_to_big_value_tmp_e1597_6.get_m31(4); - *row[10] = dst_limb_4_col10; - let dst_limb_5_col11 = memory_id_to_big_value_tmp_e1597_6.get_m31(5); - *row[11] = dst_limb_5_col11; - let dst_limb_6_col12 = memory_id_to_big_value_tmp_e1597_6.get_m31(6); - *row[12] = dst_limb_6_col12; - let dst_limb_7_col13 = memory_id_to_big_value_tmp_e1597_6.get_m31(7); - *row[13] = dst_limb_7_col13; - let dst_limb_8_col14 = memory_id_to_big_value_tmp_e1597_6.get_m31(8); - *row[14] = dst_limb_8_col14; - let dst_limb_9_col15 = memory_id_to_big_value_tmp_e1597_6.get_m31(9); - *row[15] = dst_limb_9_col15; - let dst_limb_10_col16 = memory_id_to_big_value_tmp_e1597_6.get_m31(10); - *row[16] = dst_limb_10_col16; - let dst_limb_11_col17 = memory_id_to_big_value_tmp_e1597_6.get_m31(11); - *row[17] = dst_limb_11_col17; - let dst_limb_12_col18 = memory_id_to_big_value_tmp_e1597_6.get_m31(12); - *row[18] = dst_limb_12_col18; - let dst_limb_13_col19 = memory_id_to_big_value_tmp_e1597_6.get_m31(13); - *row[19] = dst_limb_13_col19; - let dst_limb_14_col20 = memory_id_to_big_value_tmp_e1597_6.get_m31(14); - *row[20] = dst_limb_14_col20; - let dst_limb_15_col21 = memory_id_to_big_value_tmp_e1597_6.get_m31(15); - *row[21] = dst_limb_15_col21; - let dst_limb_16_col22 = memory_id_to_big_value_tmp_e1597_6.get_m31(16); - *row[22] = dst_limb_16_col22; - let dst_limb_17_col23 = memory_id_to_big_value_tmp_e1597_6.get_m31(17); - *row[23] = dst_limb_17_col23; - let dst_limb_18_col24 = memory_id_to_big_value_tmp_e1597_6.get_m31(18); - *row[24] = dst_limb_18_col24; - let dst_limb_19_col25 = memory_id_to_big_value_tmp_e1597_6.get_m31(19); - *row[25] = dst_limb_19_col25; - let dst_limb_20_col26 = memory_id_to_big_value_tmp_e1597_6.get_m31(20); - *row[26] = dst_limb_20_col26; - let dst_limb_21_col27 = memory_id_to_big_value_tmp_e1597_6.get_m31(21); - *row[27] = dst_limb_21_col27; - let dst_limb_22_col28 = memory_id_to_big_value_tmp_e1597_6.get_m31(22); - *row[28] = dst_limb_22_col28; - let dst_limb_23_col29 = memory_id_to_big_value_tmp_e1597_6.get_m31(23); - *row[29] = dst_limb_23_col29; - let dst_limb_24_col30 = memory_id_to_big_value_tmp_e1597_6.get_m31(24); - *row[30] = dst_limb_24_col30; - let dst_limb_25_col31 = memory_id_to_big_value_tmp_e1597_6.get_m31(25); - *row[31] = dst_limb_25_col31; - let dst_limb_26_col32 = memory_id_to_big_value_tmp_e1597_6.get_m31(26); - *row[32] = dst_limb_26_col32; - let dst_limb_27_col33 = memory_id_to_big_value_tmp_e1597_6.get_m31(27); - *row[33] = dst_limb_27_col33; - for (i, &input) in dst_id_col5.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - dst_id_col5, - dst_limb_0_col6, - dst_limb_1_col7, - dst_limb_2_col8, - dst_limb_3_col9, - dst_limb_4_col10, - dst_limb_5_col11, - dst_limb_6_col12, - dst_limb_7_col13, - dst_limb_8_col14, - dst_limb_9_col15, - dst_limb_10_col16, - dst_limb_11_col17, - dst_limb_12_col18, - dst_limb_13_col19, - dst_limb_14_col20, - dst_limb_15_col21, - dst_limb_16_col22, - dst_limb_17_col23, - dst_limb_18_col24, - dst_limb_19_col25, - dst_limb_20_col26, - dst_limb_21_col27, - dst_limb_22_col28, - dst_limb_23_col29, - dst_limb_24_col30, - dst_limb_25_col31, - dst_limb_26_col32, - dst_limb_27_col33, - ]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_2)), - ((input_ap_col1) + (ap_update_add_1_col4)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_dst_base_fp/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_dst_base_fp/prover.rs index bf7d51ee..1f3e1251 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_dst_base_fp/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_dst_base_fp/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -163,12 +128,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), jnz_opcode_dst_base_fp_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), jnz_opcode_dst_base_fp_input), lookup_data)| { let input_tmp_4ef17_0 = jnz_opcode_dst_base_fp_input; let input_pc_col0 = input_tmp_4ef17_0.pc; *row[0] = input_pc_col0; @@ -201,7 +162,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col4 = ap_update_add_1_tmp_4ef17_4.as_m31(); *row[4] = ap_update_add_1_col4; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, M31_32767, M31_32769], [ @@ -222,12 +183,7 @@ fn write_trace_simd( M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -258,13 +214,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_4ef17_5); let dst_id_col5 = memory_address_to_id_value_tmp_4ef17_5; *row[5] = dst_id_col5; - for (i, &input) in ((input_fp_col2) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((input_fp_col2) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((input_fp_col2) + ((offset0_col3) - (M31_32768))), dst_id_col5, @@ -325,9 +276,7 @@ fn write_trace_simd( *row[32] = dst_limb_26_col32; let dst_limb_27_col33 = memory_id_to_big_value_tmp_4ef17_6.get_m31(27); *row[33] = dst_limb_27_col33; - for (i, &input) in dst_id_col5.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = dst_id_col5.unpack(); *lookup_data.memory_id_to_big_0 = [ dst_id_col5, dst_limb_0_col6, @@ -366,10 +315,24 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col4)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken/prover.rs index 02f9b20d..ed937ee0 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub memory_id_to_big_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -168,12 +133,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), jnz_opcode_taken_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), jnz_opcode_taken_input), lookup_data)| { let input_tmp_65b05_0 = jnz_opcode_taken_input; let input_pc_col0 = input_tmp_65b05_0.pc; *row[0] = input_pc_col0; @@ -206,7 +167,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col4 = ap_update_add_1_tmp_65b05_4.as_m31(); *row[4] = ap_update_add_1_col4; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, M31_32767, M31_32769], [ @@ -227,12 +188,7 @@ fn write_trace_simd( M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -263,13 +219,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_65b05_5); let dst_id_col5 = memory_address_to_id_value_tmp_65b05_5; *row[5] = dst_id_col5; - for (i, &input) in ((input_ap_col1) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((input_ap_col1) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((input_ap_col1) + ((offset0_col3) - (M31_32768))), dst_id_col5, @@ -330,9 +281,7 @@ fn write_trace_simd( *row[32] = dst_limb_26_col32; let dst_limb_27_col33 = memory_id_to_big_value_tmp_65b05_6.get_m31(27); *row[33] = dst_limb_27_col33; - for (i, &input) in dst_id_col5.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = dst_id_col5.unpack(); *lookup_data.memory_id_to_big_0 = [ dst_id_col5, dst_limb_0_col6, @@ -440,9 +389,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_65b05_10); let next_pc_id_col36 = memory_address_to_id_value_tmp_65b05_10; *row[36] = next_pc_id_col36; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_1 = [((input_pc_col0) + (M31_1)), next_pc_id_col36]; @@ -462,9 +409,7 @@ fn write_trace_simd( *row[40] = next_pc_limb_1_col40; let next_pc_limb_2_col41 = memory_id_to_big_value_tmp_65b05_11.get_m31(2); *row[41] = next_pc_limb_2_col41; - for (i, &input) in next_pc_id_col36.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = next_pc_id_col36.unpack(); *lookup_data.memory_id_to_big_1 = [ next_pc_id_col36, next_pc_limb_0_col39, @@ -507,10 +452,26 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col4)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken_dst_base_fp/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken_dst_base_fp/prover.rs index 54103260..62b2b2c5 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken_dst_base_fp/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jnz_opcode_taken_dst_base_fp/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub memory_id_to_big_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -168,12 +133,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), jnz_opcode_taken_dst_base_fp_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), jnz_opcode_taken_dst_base_fp_input), lookup_data)| { let input_tmp_8b848_0 = jnz_opcode_taken_dst_base_fp_input; let input_pc_col0 = input_tmp_8b848_0.pc; *row[0] = input_pc_col0; @@ -206,7 +167,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col4 = ap_update_add_1_tmp_8b848_4.as_m31(); *row[4] = ap_update_add_1_col4; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [offset0_col3, M31_32767, M31_32769], [ @@ -227,12 +188,7 @@ fn write_trace_simd( M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, offset0_col3, @@ -263,13 +219,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_8b848_5); let dst_id_col5 = memory_address_to_id_value_tmp_8b848_5; *row[5] = dst_id_col5; - for (i, &input) in ((input_fp_col2) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((input_fp_col2) + ((offset0_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((input_fp_col2) + ((offset0_col3) - (M31_32768))), dst_id_col5, @@ -330,9 +281,7 @@ fn write_trace_simd( *row[32] = dst_limb_26_col32; let dst_limb_27_col33 = memory_id_to_big_value_tmp_8b848_6.get_m31(27); *row[33] = dst_limb_27_col33; - for (i, &input) in dst_id_col5.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = dst_id_col5.unpack(); *lookup_data.memory_id_to_big_0 = [ dst_id_col5, dst_limb_0_col6, @@ -440,9 +389,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_8b848_10); let next_pc_id_col36 = memory_address_to_id_value_tmp_8b848_10; *row[36] = next_pc_id_col36; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + let memory_address_to_id_inputs_1 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_1 = [((input_pc_col0) + (M31_1)), next_pc_id_col36]; @@ -462,9 +409,7 @@ fn write_trace_simd( *row[40] = next_pc_limb_1_col40; let next_pc_limb_2_col41 = memory_id_to_big_value_tmp_8b848_11.get_m31(2); *row[41] = next_pc_limb_2_col41; - for (i, &input) in next_pc_id_col36.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = next_pc_id_col36.unpack(); *lookup_data.memory_id_to_big_1 = [ next_pc_id_col36, next_pc_limb_0_col39, @@ -507,10 +452,26 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col4)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jump_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jump_opcode/prover.rs index 4df5fee1..64af5767 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jump_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jump_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -165,97 +130,62 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), jump_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_39ce3_0 = jump_opcode_input; - let input_pc_col0 = input_tmp_39ce3_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_39ce3_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_39ce3_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), jump_opcode_input), lookup_data)| { + let input_tmp_39ce3_0 = jump_opcode_input; + let input_pc_col0 = input_tmp_39ce3_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_39ce3_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_39ce3_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_39ce3_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_39ce3_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_39ce3_1); - let offset2_tmp_39ce3_3 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_39ce3_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_39ce3_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col3 = offset2_tmp_39ce3_3.as_m31(); - *row[3] = offset2_col3; - let op1_base_fp_tmp_39ce3_4 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_39ce3_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_3)) - & (UInt16_1)); - let op1_base_fp_col4 = op1_base_fp_tmp_39ce3_4.as_m31(); - *row[4] = op1_base_fp_col4; - let op1_base_ap_tmp_39ce3_5 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_39ce3_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_4)) - & (UInt16_1)); - let op1_base_ap_col5 = op1_base_ap_tmp_39ce3_5.as_m31(); - *row[5] = op1_base_ap_col5; - let ap_update_add_1_tmp_39ce3_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_39ce3_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col6 = ap_update_add_1_tmp_39ce3_6.as_m31(); - *row[6] = ap_update_add_1_col6; - for (i, &input) in ( - input_pc_col0, - [M31_32767, M31_32767, offset2_col3], - [ - M31_1, - M31_1, - M31_0, - op1_base_fp_col4, - op1_base_ap_col5, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - ap_update_add_1_col6, - M31_0, - M31_0, - M31_0, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32767, - M31_32767, - offset2_col3, + let memory_address_to_id_value_tmp_39ce3_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_39ce3_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_39ce3_1); + let offset2_tmp_39ce3_3 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col3 = offset2_tmp_39ce3_3.as_m31(); + *row[3] = offset2_col3; + let op1_base_fp_tmp_39ce3_4 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_3)) + & (UInt16_1)); + let op1_base_fp_col4 = op1_base_fp_tmp_39ce3_4.as_m31(); + *row[4] = op1_base_fp_col4; + let op1_base_ap_tmp_39ce3_5 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_4)) + & (UInt16_1)); + let op1_base_ap_col5 = op1_base_ap_tmp_39ce3_5.as_m31(); + *row[5] = op1_base_ap_col5; + let ap_update_add_1_tmp_39ce3_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_39ce3_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col6 = ap_update_add_1_tmp_39ce3_6.as_m31(); + *row[6] = ap_update_add_1_col6; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32767, M31_32767, offset2_col3], + [ M31_1, M31_1, M31_0, @@ -271,83 +201,112 @@ fn write_trace_simd( M31_0, M31_0, M31_0, - ]; + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32767, + M31_32767, + offset2_col3, + M31_1, + M31_1, + M31_0, + op1_base_fp_col4, + op1_base_ap_col5, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col6, + M31_0, + M31_0, + M31_0, + ]; + + let mem1_base_col7 = + (((op1_base_fp_col4) * (input_fp_col2)) + ((op1_base_ap_col5) * (input_ap_col1))); + *row[7] = mem1_base_col7; - let mem1_base_col7 = (((op1_base_fp_col4) * (input_fp_col2)) - + ((op1_base_ap_col5) * (input_ap_col1))); - *row[7] = mem1_base_col7; + // Read Positive Num Bits 27. - // Read Positive Num Bits 27. + let memory_address_to_id_value_tmp_39ce3_7 = memory_address_to_id_state + .deduce_output(((mem1_base_col7) + ((offset2_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_39ce3_8 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_39ce3_7); + let next_pc_id_col8 = memory_address_to_id_value_tmp_39ce3_7; + *row[8] = next_pc_id_col8; + let memory_address_to_id_inputs_0 = + ((mem1_base_col7) + ((offset2_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem1_base_col7) + ((offset2_col3) - (M31_32768))), + next_pc_id_col8, + ]; + let next_pc_limb_0_col9 = memory_id_to_big_value_tmp_39ce3_8.get_m31(0); + *row[9] = next_pc_limb_0_col9; + let next_pc_limb_1_col10 = memory_id_to_big_value_tmp_39ce3_8.get_m31(1); + *row[10] = next_pc_limb_1_col10; + let next_pc_limb_2_col11 = memory_id_to_big_value_tmp_39ce3_8.get_m31(2); + *row[11] = next_pc_limb_2_col11; + let memory_id_to_big_inputs_0 = next_pc_id_col8.unpack(); + *lookup_data.memory_id_to_big_0 = [ + next_pc_id_col8, + next_pc_limb_0_col9, + next_pc_limb_1_col10, + next_pc_limb_2_col11, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; - let memory_address_to_id_value_tmp_39ce3_7 = memory_address_to_id_state - .deduce_output(((mem1_base_col7) + ((offset2_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_39ce3_8 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_39ce3_7); - let next_pc_id_col8 = memory_address_to_id_value_tmp_39ce3_7; - *row[8] = next_pc_id_col8; - for (i, &input) in ((mem1_base_col7) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + (((next_pc_limb_0_col9) + ((next_pc_limb_1_col10) * (M31_512))) + + ((next_pc_limb_2_col11) * (M31_262144))), + ((input_ap_col1) + (ap_update_add_1_col6)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [ - ((mem1_base_col7) + ((offset2_col3) - (M31_32768))), - next_pc_id_col8, - ]; - let next_pc_limb_0_col9 = memory_id_to_big_value_tmp_39ce3_8.get_m31(0); - *row[9] = next_pc_limb_0_col9; - let next_pc_limb_1_col10 = memory_id_to_big_value_tmp_39ce3_8.get_m31(1); - *row[10] = next_pc_limb_1_col10; - let next_pc_limb_2_col11 = memory_id_to_big_value_tmp_39ce3_8.get_m31(2); - *row[11] = next_pc_limb_2_col11; - for (i, &input) in next_pc_id_col8.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); } - *lookup_data.memory_id_to_big_0 = [ - next_pc_id_col8, - next_pc_limb_0_col9, - next_pc_limb_1_col10, - next_pc_limb_2_col11, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - (((next_pc_limb_0_col9) + ((next_pc_limb_1_col10) * (M31_512))) - + ((next_pc_limb_2_col11) * (M31_262144))), - ((input_ap_col1) + (ap_update_add_1_col6)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_double_deref/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_double_deref/prover.rs index 927470ec..e2827a1c 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_double_deref/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_double_deref/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub memory_id_to_big_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -167,12 +132,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), jump_opcode_double_deref_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), jump_opcode_double_deref_input), lookup_data)| { let input_tmp_2757b_0 = jump_opcode_double_deref_input; let input_pc_col0 = input_tmp_2757b_0.pc; *row[0] = input_pc_col0; @@ -231,7 +192,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col6 = ap_update_add_1_tmp_2757b_6.as_m31(); *row[6] = ap_update_add_1_col6; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [M31_32767, offset1_col3, offset2_col4], [ @@ -252,12 +213,7 @@ fn write_trace_simd( M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, M31_32767, @@ -292,13 +248,8 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_2757b_7); let mem1_base_id_col8 = memory_address_to_id_value_tmp_2757b_7; *row[8] = mem1_base_id_col8; - for (i, &input) in ((mem0_base_col7) + ((offset1_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = + ((mem0_base_col7) + ((offset1_col3) - (M31_32768))).unpack(); *lookup_data.memory_address_to_id_0 = [ ((mem0_base_col7) + ((offset1_col3) - (M31_32768))), mem1_base_id_col8, @@ -309,9 +260,7 @@ fn write_trace_simd( *row[10] = mem1_base_limb_1_col10; let mem1_base_limb_2_col11 = memory_id_to_big_value_tmp_2757b_8.get_m31(2); *row[11] = mem1_base_limb_2_col11; - for (i, &input) in mem1_base_id_col8.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = mem1_base_id_col8.unpack(); *lookup_data.memory_id_to_big_0 = [ mem1_base_id_col8, mem1_base_limb_0_col9, @@ -356,16 +305,11 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_2757b_9); let next_pc_id_col12 = memory_address_to_id_value_tmp_2757b_9; *row[12] = next_pc_id_col12; - for (i, &input) in ((((mem1_base_limb_0_col9) + let memory_address_to_id_inputs_1 = ((((mem1_base_limb_0_col9) + ((mem1_base_limb_1_col10) * (M31_512))) + ((mem1_base_limb_2_col11) * (M31_262144))) + ((offset2_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } + .unpack(); *lookup_data.memory_address_to_id_1 = [ ((((mem1_base_limb_0_col9) + ((mem1_base_limb_1_col10) * (M31_512))) + ((mem1_base_limb_2_col11) * (M31_262144))) @@ -378,9 +322,7 @@ fn write_trace_simd( *row[14] = next_pc_limb_1_col14; let next_pc_limb_2_col15 = memory_id_to_big_value_tmp_2757b_10.get_m31(2); *row[15] = next_pc_limb_2_col15; - for (i, &input) in next_pc_id_col12.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } + let memory_id_to_big_inputs_1 = next_pc_id_col12.unpack(); *lookup_data.memory_id_to_big_1 = [ next_pc_id_col12, next_pc_limb_0_col13, @@ -420,10 +362,26 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col6)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel/prover.rs index 724a70a1..6e4844ec 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -169,100 +134,62 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |( - (((row_index, row), jump_opcode_rel_input), lookup_data), - mut sub_components_inputs, - )| { - let input_tmp_c32b8_0 = jump_opcode_rel_input; - let input_pc_col0 = input_tmp_c32b8_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_c32b8_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_c32b8_0.fp; - *row[2] = input_fp_col2; - - // Decode Instruction. - - let memory_address_to_id_value_tmp_c32b8_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_c32b8_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c32b8_1); - let offset2_tmp_c32b8_3 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c32b8_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c32b8_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col3 = offset2_tmp_c32b8_3.as_m31(); - *row[3] = offset2_col3; - let op1_base_fp_tmp_c32b8_4 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c32b8_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_3)) - & (UInt16_1)); - let op1_base_fp_col4 = op1_base_fp_tmp_c32b8_4.as_m31(); - *row[4] = op1_base_fp_col4; - let op1_base_ap_tmp_c32b8_5 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c32b8_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_4)) - & (UInt16_1)); - let op1_base_ap_col5 = op1_base_ap_tmp_c32b8_5.as_m31(); - *row[5] = op1_base_ap_col5; - let ap_update_add_1_tmp_c32b8_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_c32b8_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col6 = ap_update_add_1_tmp_c32b8_6.as_m31(); - *row[6] = ap_update_add_1_col6; - for (i, &input) in ( - input_pc_col0, - [M31_32767, M31_32767, offset2_col3], - [ - M31_1, - M31_1, - M31_0, - op1_base_fp_col4, - op1_base_ap_col5, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - ap_update_add_1_col6, - M31_0, - M31_0, - M31_0, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32767, - M31_32767, - offset2_col3, + .for_each(|(((row_index, row), jump_opcode_rel_input), lookup_data)| { + let input_tmp_c32b8_0 = jump_opcode_rel_input; + let input_pc_col0 = input_tmp_c32b8_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_c32b8_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_c32b8_0.fp; + *row[2] = input_fp_col2; + + // Decode Instruction. + + let memory_address_to_id_value_tmp_c32b8_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_c32b8_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c32b8_1); + let offset2_tmp_c32b8_3 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col3 = offset2_tmp_c32b8_3.as_m31(); + *row[3] = offset2_col3; + let op1_base_fp_tmp_c32b8_4 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_3)) + & (UInt16_1)); + let op1_base_fp_col4 = op1_base_fp_tmp_c32b8_4.as_m31(); + *row[4] = op1_base_fp_col4; + let op1_base_ap_tmp_c32b8_5 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_4)) + & (UInt16_1)); + let op1_base_ap_col5 = op1_base_ap_tmp_c32b8_5.as_m31(); + *row[5] = op1_base_ap_col5; + let ap_update_add_1_tmp_c32b8_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_c32b8_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col6 = ap_update_add_1_tmp_c32b8_6.as_m31(); + *row[6] = ap_update_add_1_col6; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32767, M31_32767, offset2_col3], + [ M31_1, M31_1, M31_0, @@ -278,97 +205,126 @@ fn write_trace_simd( M31_0, M31_0, M31_0, - ]; - - let mem1_base_col7 = (((op1_base_fp_col4) * (input_fp_col2)) - + ((op1_base_ap_col5) * (input_ap_col1))); - *row[7] = mem1_base_col7; - - // Read Small. - - let memory_address_to_id_value_tmp_c32b8_7 = memory_address_to_id_state - .deduce_output(((mem1_base_col7) + ((offset2_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_c32b8_8 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c32b8_7); - let next_pc_id_col8 = memory_address_to_id_value_tmp_c32b8_7; - *row[8] = next_pc_id_col8; - for (i, &input) in ((mem1_base_col7) + ((offset2_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32767, + M31_32767, + offset2_col3, + M31_1, + M31_1, + M31_0, + op1_base_fp_col4, + op1_base_ap_col5, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + ap_update_add_1_col6, + M31_0, + M31_0, + M31_0, + ]; + + let mem1_base_col7 = + (((op1_base_fp_col4) * (input_fp_col2)) + ((op1_base_ap_col5) * (input_ap_col1))); + *row[7] = mem1_base_col7; + + // Read Small. + + let memory_address_to_id_value_tmp_c32b8_7 = memory_address_to_id_state + .deduce_output(((mem1_base_col7) + ((offset2_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_c32b8_8 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_c32b8_7); + let next_pc_id_col8 = memory_address_to_id_value_tmp_c32b8_7; + *row[8] = next_pc_id_col8; + let memory_address_to_id_inputs_0 = + ((mem1_base_col7) + ((offset2_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem1_base_col7) + ((offset2_col3) - (M31_32768))), + next_pc_id_col8, + ]; + + // Cond Decode Small Sign. + + let msb_tmp_c32b8_9 = memory_id_to_big_value_tmp_c32b8_8.get_m31(27).eq(M31_256); + let msb_col9 = msb_tmp_c32b8_9.as_m31(); + *row[9] = msb_col9; + let mid_limbs_set_tmp_c32b8_10 = + memory_id_to_big_value_tmp_c32b8_8.get_m31(20).eq(M31_511); + let mid_limbs_set_col10 = mid_limbs_set_tmp_c32b8_10.as_m31(); + *row[10] = mid_limbs_set_col10; + + let next_pc_limb_0_col11 = memory_id_to_big_value_tmp_c32b8_8.get_m31(0); + *row[11] = next_pc_limb_0_col11; + let next_pc_limb_1_col12 = memory_id_to_big_value_tmp_c32b8_8.get_m31(1); + *row[12] = next_pc_limb_1_col12; + let next_pc_limb_2_col13 = memory_id_to_big_value_tmp_c32b8_8.get_m31(2); + *row[13] = next_pc_limb_2_col13; + let memory_id_to_big_inputs_0 = next_pc_id_col8.unpack(); + *lookup_data.memory_id_to_big_0 = [ + next_pc_id_col8, + next_pc_limb_0_col11, + next_pc_limb_1_col12, + next_pc_limb_2_col13, + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + ((mid_limbs_set_col10) * (M31_511)), + (((M31_136) * (msb_col9)) - (mid_limbs_set_col10)), + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ((msb_col9) * (M31_256)), + ]; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + + (((((next_pc_limb_0_col11) + ((next_pc_limb_1_col12) * (M31_512))) + + ((next_pc_limb_2_col13) * (M31_262144))) + - (msb_col9)) + - ((M31_134217728) * (mid_limbs_set_col10)))), + ((input_ap_col1) + (ap_update_add_1_col6)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); } - *lookup_data.memory_address_to_id_0 = [ - ((mem1_base_col7) + ((offset2_col3) - (M31_32768))), - next_pc_id_col8, - ]; - - // Cond Decode Small Sign. - - let msb_tmp_c32b8_9 = memory_id_to_big_value_tmp_c32b8_8.get_m31(27).eq(M31_256); - let msb_col9 = msb_tmp_c32b8_9.as_m31(); - *row[9] = msb_col9; - let mid_limbs_set_tmp_c32b8_10 = - memory_id_to_big_value_tmp_c32b8_8.get_m31(20).eq(M31_511); - let mid_limbs_set_col10 = mid_limbs_set_tmp_c32b8_10.as_m31(); - *row[10] = mid_limbs_set_col10; - - let next_pc_limb_0_col11 = memory_id_to_big_value_tmp_c32b8_8.get_m31(0); - *row[11] = next_pc_limb_0_col11; - let next_pc_limb_1_col12 = memory_id_to_big_value_tmp_c32b8_8.get_m31(1); - *row[12] = next_pc_limb_1_col12; - let next_pc_limb_2_col13 = memory_id_to_big_value_tmp_c32b8_8.get_m31(2); - *row[13] = next_pc_limb_2_col13; - for (i, &input) in next_pc_id_col8.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - next_pc_id_col8, - next_pc_limb_0_col11, - next_pc_limb_1_col12, - next_pc_limb_2_col13, - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - ((mid_limbs_set_col10) * (M31_511)), - (((M31_136) * (msb_col9)) - (mid_limbs_set_col10)), - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ((msb_col9) * (M31_256)), - ]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) - + (((((next_pc_limb_0_col11) + ((next_pc_limb_1_col12) * (M31_512))) - + ((next_pc_limb_2_col13) * (M31_262144))) - - (msb_col9)) - - ((M31_134217728) * (mid_limbs_set_col10)))), - ((input_ap_col1) + (ap_update_add_1_col6)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel_imm/prover.rs index c5ee4f70..578d6e78 100644 --- a/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/jump_opcode_rel_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 1], - pub memory_id_to_big_inputs: [Vec; 1], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -165,12 +130,8 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) .for_each( - |( - (((row_index, row), jump_opcode_rel_imm_input), lookup_data), - mut sub_components_inputs, - )| { + |(((row_index, row), jump_opcode_rel_imm_input), lookup_data)| { let input_tmp_ff4f6_0 = jump_opcode_rel_imm_input; let input_pc_col0 = input_tmp_ff4f6_0.pc; *row[0] = input_pc_col0; @@ -195,7 +156,7 @@ fn write_trace_simd( & (UInt16_1)); let ap_update_add_1_col3 = ap_update_add_1_tmp_ff4f6_3.as_m31(); *row[3] = ap_update_add_1_col3; - for (i, &input) in ( + let verify_instruction_inputs_0 = ( input_pc_col0, [M31_32767, M31_32767, M31_32769], [ @@ -216,12 +177,7 @@ fn write_trace_simd( M31_0, ], ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } + .unpack(); *lookup_data.verify_instruction_0 = [ input_pc_col0, M31_32767, @@ -252,9 +208,7 @@ fn write_trace_simd( memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_ff4f6_4); let next_pc_id_col4 = memory_address_to_id_value_tmp_ff4f6_4; *row[4] = next_pc_id_col4; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } + let memory_address_to_id_inputs_0 = ((input_pc_col0) + (M31_1)).unpack(); *lookup_data.memory_address_to_id_0 = [((input_pc_col0) + (M31_1)), next_pc_id_col4]; @@ -274,9 +228,7 @@ fn write_trace_simd( *row[8] = next_pc_limb_1_col8; let next_pc_limb_2_col9 = memory_id_to_big_value_tmp_ff4f6_5.get_m31(2); *row[9] = next_pc_limb_2_col9; - for (i, &input) in next_pc_id_col4.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } + let memory_id_to_big_inputs_0 = next_pc_id_col4.unpack(); *lookup_data.memory_id_to_big_0 = [ next_pc_id_col4, next_pc_limb_0_col7, @@ -319,10 +271,24 @@ fn write_trace_simd( ((input_ap_col1) + (ap_update_add_1_col3)), input_fp_col2, ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + } + } }, ); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode/prover.rs index 649b2fbe..c63020cf 100644 --- a/stwo_cairo_prover/crates/prover/src/components/mul_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -72,41 +73,15 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + range_check_19_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .range_check_19_inputs - .iter() - .for_each(|inputs| { - range_check_19_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -117,18 +92,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub range_check_19_inputs: [Vec; 28], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -140,18 +103,15 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + range_check_19_state: &range_check_19::ClaimGenerator, + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -192,137 +152,97 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), mul_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_42314_0 = mul_opcode_input; - let input_pc_col0 = input_tmp_42314_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_42314_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_42314_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), mul_opcode_input), lookup_data)| { + let input_tmp_42314_0 = mul_opcode_input; + let input_pc_col0 = input_tmp_42314_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_42314_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_42314_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_42314_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_42314_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_1); - let offset0_tmp_42314_3 = - ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(0))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(1), - )) & (UInt16_127)) - << (UInt16_9))); - let offset0_col3 = offset0_tmp_42314_3.as_m31(); - *row[3] = offset0_col3; - let offset1_tmp_42314_4 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(1))) - >> (UInt16_7)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(2), - )) << (UInt16_2))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(3), - )) & (UInt16_31)) - << (UInt16_11))); - let offset1_col4 = offset1_tmp_42314_4.as_m31(); - *row[4] = offset1_col4; - let offset2_tmp_42314_5 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(3))) - >> (UInt16_5)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(4), - )) << (UInt16_4))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(5), - )) & (UInt16_7)) - << (UInt16_13))); - let offset2_col5 = offset2_tmp_42314_5.as_m31(); - *row[5] = offset2_col5; - let dst_base_fp_tmp_42314_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_0)) - & (UInt16_1)); - let dst_base_fp_col6 = dst_base_fp_tmp_42314_6.as_m31(); - *row[6] = dst_base_fp_col6; - let op0_base_fp_tmp_42314_7 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_1)) - & (UInt16_1)); - let op0_base_fp_col7 = op0_base_fp_tmp_42314_7.as_m31(); - *row[7] = op0_base_fp_col7; - let op1_base_fp_tmp_42314_8 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_3)) - & (UInt16_1)); - let op1_base_fp_col8 = op1_base_fp_tmp_42314_8.as_m31(); - *row[8] = op1_base_fp_col8; - let op1_base_ap_tmp_42314_9 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_4)) - & (UInt16_1)); - let op1_base_ap_col9 = op1_base_ap_tmp_42314_9.as_m31(); - *row[9] = op1_base_ap_col9; - let ap_update_add_1_tmp_42314_10 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_42314_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col10 = ap_update_add_1_tmp_42314_10.as_m31(); - *row[10] = ap_update_add_1_col10; - for (i, &input) in ( - input_pc_col0, - [offset0_col3, offset1_col4, offset2_col5], - [ - dst_base_fp_col6, - op0_base_fp_col7, - M31_0, - op1_base_fp_col8, - op1_base_ap_col9, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - ap_update_add_1_col10, - M31_0, - M31_0, - M31_1, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - offset0_col3, - offset1_col4, - offset2_col5, + let memory_address_to_id_value_tmp_42314_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_42314_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_1); + let offset0_tmp_42314_3 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_42314_3.as_m31(); + *row[3] = offset0_col3; + let offset1_tmp_42314_4 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_42314_4.as_m31(); + *row[4] = offset1_col4; + let offset2_tmp_42314_5 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col5 = offset2_tmp_42314_5.as_m31(); + *row[5] = offset2_col5; + let dst_base_fp_tmp_42314_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col6 = dst_base_fp_tmp_42314_6.as_m31(); + *row[6] = dst_base_fp_col6; + let op0_base_fp_tmp_42314_7 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col7 = op0_base_fp_tmp_42314_7.as_m31(); + *row[7] = op0_base_fp_col7; + let op1_base_fp_tmp_42314_8 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_3)) + & (UInt16_1)); + let op1_base_fp_col8 = op1_base_fp_tmp_42314_8.as_m31(); + *row[8] = op1_base_fp_col8; + let op1_base_ap_tmp_42314_9 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_4)) + & (UInt16_1)); + let op1_base_ap_col9 = op1_base_ap_tmp_42314_9.as_m31(); + *row[9] = op1_base_ap_col9; + let ap_update_add_1_tmp_42314_10 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_42314_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col10 = ap_update_add_1_tmp_42314_10.as_m31(); + *row[10] = ap_update_add_1_col10; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [offset0_col3, offset1_col4, offset2_col5], + [ dst_base_fp_col6, op0_base_fp_col7, M31_0, @@ -338,1627 +258,1487 @@ fn write_trace_simd( M31_0, M31_0, M31_1, - ]; + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + offset0_col3, + offset1_col4, + offset2_col5, + dst_base_fp_col6, + op0_base_fp_col7, + M31_0, + op1_base_fp_col8, + op1_base_ap_col9, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col10, + M31_0, + M31_0, + M31_1, + ]; - let mem_dst_base_col11 = (((dst_base_fp_col6) * (input_fp_col2)) - + (((M31_1) - (dst_base_fp_col6)) * (input_ap_col1))); - *row[11] = mem_dst_base_col11; - let mem0_base_col12 = (((op0_base_fp_col7) * (input_fp_col2)) - + (((M31_1) - (op0_base_fp_col7)) * (input_ap_col1))); - *row[12] = mem0_base_col12; - let mem1_base_col13 = (((op1_base_fp_col8) * (input_fp_col2)) - + ((op1_base_ap_col9) * (input_ap_col1))); - *row[13] = mem1_base_col13; + let mem_dst_base_col11 = (((dst_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col6)) * (input_ap_col1))); + *row[11] = mem_dst_base_col11; + let mem0_base_col12 = (((op0_base_fp_col7) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col7)) * (input_ap_col1))); + *row[12] = mem0_base_col12; + let mem1_base_col13 = + (((op1_base_fp_col8) * (input_fp_col2)) + ((op1_base_ap_col9) * (input_ap_col1))); + *row[13] = mem1_base_col13; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_42314_11 = memory_address_to_id_state - .deduce_output(((mem_dst_base_col11) + ((offset0_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_42314_12 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_11); - let dst_id_col14 = memory_address_to_id_value_tmp_42314_11; - *row[14] = dst_id_col14; - for (i, &input) in ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [ - ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))), - dst_id_col14, - ]; - let dst_limb_0_col15 = memory_id_to_big_value_tmp_42314_12.get_m31(0); - *row[15] = dst_limb_0_col15; - let dst_limb_1_col16 = memory_id_to_big_value_tmp_42314_12.get_m31(1); - *row[16] = dst_limb_1_col16; - let dst_limb_2_col17 = memory_id_to_big_value_tmp_42314_12.get_m31(2); - *row[17] = dst_limb_2_col17; - let dst_limb_3_col18 = memory_id_to_big_value_tmp_42314_12.get_m31(3); - *row[18] = dst_limb_3_col18; - let dst_limb_4_col19 = memory_id_to_big_value_tmp_42314_12.get_m31(4); - *row[19] = dst_limb_4_col19; - let dst_limb_5_col20 = memory_id_to_big_value_tmp_42314_12.get_m31(5); - *row[20] = dst_limb_5_col20; - let dst_limb_6_col21 = memory_id_to_big_value_tmp_42314_12.get_m31(6); - *row[21] = dst_limb_6_col21; - let dst_limb_7_col22 = memory_id_to_big_value_tmp_42314_12.get_m31(7); - *row[22] = dst_limb_7_col22; - let dst_limb_8_col23 = memory_id_to_big_value_tmp_42314_12.get_m31(8); - *row[23] = dst_limb_8_col23; - let dst_limb_9_col24 = memory_id_to_big_value_tmp_42314_12.get_m31(9); - *row[24] = dst_limb_9_col24; - let dst_limb_10_col25 = memory_id_to_big_value_tmp_42314_12.get_m31(10); - *row[25] = dst_limb_10_col25; - let dst_limb_11_col26 = memory_id_to_big_value_tmp_42314_12.get_m31(11); - *row[26] = dst_limb_11_col26; - let dst_limb_12_col27 = memory_id_to_big_value_tmp_42314_12.get_m31(12); - *row[27] = dst_limb_12_col27; - let dst_limb_13_col28 = memory_id_to_big_value_tmp_42314_12.get_m31(13); - *row[28] = dst_limb_13_col28; - let dst_limb_14_col29 = memory_id_to_big_value_tmp_42314_12.get_m31(14); - *row[29] = dst_limb_14_col29; - let dst_limb_15_col30 = memory_id_to_big_value_tmp_42314_12.get_m31(15); - *row[30] = dst_limb_15_col30; - let dst_limb_16_col31 = memory_id_to_big_value_tmp_42314_12.get_m31(16); - *row[31] = dst_limb_16_col31; - let dst_limb_17_col32 = memory_id_to_big_value_tmp_42314_12.get_m31(17); - *row[32] = dst_limb_17_col32; - let dst_limb_18_col33 = memory_id_to_big_value_tmp_42314_12.get_m31(18); - *row[33] = dst_limb_18_col33; - let dst_limb_19_col34 = memory_id_to_big_value_tmp_42314_12.get_m31(19); - *row[34] = dst_limb_19_col34; - let dst_limb_20_col35 = memory_id_to_big_value_tmp_42314_12.get_m31(20); - *row[35] = dst_limb_20_col35; - let dst_limb_21_col36 = memory_id_to_big_value_tmp_42314_12.get_m31(21); - *row[36] = dst_limb_21_col36; - let dst_limb_22_col37 = memory_id_to_big_value_tmp_42314_12.get_m31(22); - *row[37] = dst_limb_22_col37; - let dst_limb_23_col38 = memory_id_to_big_value_tmp_42314_12.get_m31(23); - *row[38] = dst_limb_23_col38; - let dst_limb_24_col39 = memory_id_to_big_value_tmp_42314_12.get_m31(24); - *row[39] = dst_limb_24_col39; - let dst_limb_25_col40 = memory_id_to_big_value_tmp_42314_12.get_m31(25); - *row[40] = dst_limb_25_col40; - let dst_limb_26_col41 = memory_id_to_big_value_tmp_42314_12.get_m31(26); - *row[41] = dst_limb_26_col41; - let dst_limb_27_col42 = memory_id_to_big_value_tmp_42314_12.get_m31(27); - *row[42] = dst_limb_27_col42; - for (i, &input) in dst_id_col14.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - dst_id_col14, - dst_limb_0_col15, - dst_limb_1_col16, - dst_limb_2_col17, - dst_limb_3_col18, - dst_limb_4_col19, - dst_limb_5_col20, - dst_limb_6_col21, - dst_limb_7_col22, - dst_limb_8_col23, - dst_limb_9_col24, - dst_limb_10_col25, - dst_limb_11_col26, - dst_limb_12_col27, - dst_limb_13_col28, - dst_limb_14_col29, - dst_limb_15_col30, - dst_limb_16_col31, - dst_limb_17_col32, - dst_limb_18_col33, - dst_limb_19_col34, - dst_limb_20_col35, - dst_limb_21_col36, - dst_limb_22_col37, - dst_limb_23_col38, - dst_limb_24_col39, - dst_limb_25_col40, - dst_limb_26_col41, - dst_limb_27_col42, - ]; + let memory_address_to_id_value_tmp_42314_11 = memory_address_to_id_state + .deduce_output(((mem_dst_base_col11) + ((offset0_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_42314_12 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_11); + let dst_id_col14 = memory_address_to_id_value_tmp_42314_11; + *row[14] = dst_id_col14; + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem_dst_base_col11) + ((offset0_col3) - (M31_32768))), + dst_id_col14, + ]; + let dst_limb_0_col15 = memory_id_to_big_value_tmp_42314_12.get_m31(0); + *row[15] = dst_limb_0_col15; + let dst_limb_1_col16 = memory_id_to_big_value_tmp_42314_12.get_m31(1); + *row[16] = dst_limb_1_col16; + let dst_limb_2_col17 = memory_id_to_big_value_tmp_42314_12.get_m31(2); + *row[17] = dst_limb_2_col17; + let dst_limb_3_col18 = memory_id_to_big_value_tmp_42314_12.get_m31(3); + *row[18] = dst_limb_3_col18; + let dst_limb_4_col19 = memory_id_to_big_value_tmp_42314_12.get_m31(4); + *row[19] = dst_limb_4_col19; + let dst_limb_5_col20 = memory_id_to_big_value_tmp_42314_12.get_m31(5); + *row[20] = dst_limb_5_col20; + let dst_limb_6_col21 = memory_id_to_big_value_tmp_42314_12.get_m31(6); + *row[21] = dst_limb_6_col21; + let dst_limb_7_col22 = memory_id_to_big_value_tmp_42314_12.get_m31(7); + *row[22] = dst_limb_7_col22; + let dst_limb_8_col23 = memory_id_to_big_value_tmp_42314_12.get_m31(8); + *row[23] = dst_limb_8_col23; + let dst_limb_9_col24 = memory_id_to_big_value_tmp_42314_12.get_m31(9); + *row[24] = dst_limb_9_col24; + let dst_limb_10_col25 = memory_id_to_big_value_tmp_42314_12.get_m31(10); + *row[25] = dst_limb_10_col25; + let dst_limb_11_col26 = memory_id_to_big_value_tmp_42314_12.get_m31(11); + *row[26] = dst_limb_11_col26; + let dst_limb_12_col27 = memory_id_to_big_value_tmp_42314_12.get_m31(12); + *row[27] = dst_limb_12_col27; + let dst_limb_13_col28 = memory_id_to_big_value_tmp_42314_12.get_m31(13); + *row[28] = dst_limb_13_col28; + let dst_limb_14_col29 = memory_id_to_big_value_tmp_42314_12.get_m31(14); + *row[29] = dst_limb_14_col29; + let dst_limb_15_col30 = memory_id_to_big_value_tmp_42314_12.get_m31(15); + *row[30] = dst_limb_15_col30; + let dst_limb_16_col31 = memory_id_to_big_value_tmp_42314_12.get_m31(16); + *row[31] = dst_limb_16_col31; + let dst_limb_17_col32 = memory_id_to_big_value_tmp_42314_12.get_m31(17); + *row[32] = dst_limb_17_col32; + let dst_limb_18_col33 = memory_id_to_big_value_tmp_42314_12.get_m31(18); + *row[33] = dst_limb_18_col33; + let dst_limb_19_col34 = memory_id_to_big_value_tmp_42314_12.get_m31(19); + *row[34] = dst_limb_19_col34; + let dst_limb_20_col35 = memory_id_to_big_value_tmp_42314_12.get_m31(20); + *row[35] = dst_limb_20_col35; + let dst_limb_21_col36 = memory_id_to_big_value_tmp_42314_12.get_m31(21); + *row[36] = dst_limb_21_col36; + let dst_limb_22_col37 = memory_id_to_big_value_tmp_42314_12.get_m31(22); + *row[37] = dst_limb_22_col37; + let dst_limb_23_col38 = memory_id_to_big_value_tmp_42314_12.get_m31(23); + *row[38] = dst_limb_23_col38; + let dst_limb_24_col39 = memory_id_to_big_value_tmp_42314_12.get_m31(24); + *row[39] = dst_limb_24_col39; + let dst_limb_25_col40 = memory_id_to_big_value_tmp_42314_12.get_m31(25); + *row[40] = dst_limb_25_col40; + let dst_limb_26_col41 = memory_id_to_big_value_tmp_42314_12.get_m31(26); + *row[41] = dst_limb_26_col41; + let dst_limb_27_col42 = memory_id_to_big_value_tmp_42314_12.get_m31(27); + *row[42] = dst_limb_27_col42; + let memory_id_to_big_inputs_0 = dst_id_col14.unpack(); + *lookup_data.memory_id_to_big_0 = [ + dst_id_col14, + dst_limb_0_col15, + dst_limb_1_col16, + dst_limb_2_col17, + dst_limb_3_col18, + dst_limb_4_col19, + dst_limb_5_col20, + dst_limb_6_col21, + dst_limb_7_col22, + dst_limb_8_col23, + dst_limb_9_col24, + dst_limb_10_col25, + dst_limb_11_col26, + dst_limb_12_col27, + dst_limb_13_col28, + dst_limb_14_col29, + dst_limb_15_col30, + dst_limb_16_col31, + dst_limb_17_col32, + dst_limb_18_col33, + dst_limb_19_col34, + dst_limb_20_col35, + dst_limb_21_col36, + dst_limb_22_col37, + dst_limb_23_col38, + dst_limb_24_col39, + dst_limb_25_col40, + dst_limb_26_col41, + dst_limb_27_col42, + ]; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_42314_13 = memory_address_to_id_state - .deduce_output(((mem0_base_col12) + ((offset1_col4) - (M31_32768)))); - let memory_id_to_big_value_tmp_42314_14 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_13); - let op0_id_col43 = memory_address_to_id_value_tmp_42314_13; - *row[43] = op0_id_col43; - for (i, &input) in ((mem0_base_col12) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = [ - ((mem0_base_col12) + ((offset1_col4) - (M31_32768))), - op0_id_col43, - ]; - let op0_limb_0_col44 = memory_id_to_big_value_tmp_42314_14.get_m31(0); - *row[44] = op0_limb_0_col44; - let op0_limb_1_col45 = memory_id_to_big_value_tmp_42314_14.get_m31(1); - *row[45] = op0_limb_1_col45; - let op0_limb_2_col46 = memory_id_to_big_value_tmp_42314_14.get_m31(2); - *row[46] = op0_limb_2_col46; - let op0_limb_3_col47 = memory_id_to_big_value_tmp_42314_14.get_m31(3); - *row[47] = op0_limb_3_col47; - let op0_limb_4_col48 = memory_id_to_big_value_tmp_42314_14.get_m31(4); - *row[48] = op0_limb_4_col48; - let op0_limb_5_col49 = memory_id_to_big_value_tmp_42314_14.get_m31(5); - *row[49] = op0_limb_5_col49; - let op0_limb_6_col50 = memory_id_to_big_value_tmp_42314_14.get_m31(6); - *row[50] = op0_limb_6_col50; - let op0_limb_7_col51 = memory_id_to_big_value_tmp_42314_14.get_m31(7); - *row[51] = op0_limb_7_col51; - let op0_limb_8_col52 = memory_id_to_big_value_tmp_42314_14.get_m31(8); - *row[52] = op0_limb_8_col52; - let op0_limb_9_col53 = memory_id_to_big_value_tmp_42314_14.get_m31(9); - *row[53] = op0_limb_9_col53; - let op0_limb_10_col54 = memory_id_to_big_value_tmp_42314_14.get_m31(10); - *row[54] = op0_limb_10_col54; - let op0_limb_11_col55 = memory_id_to_big_value_tmp_42314_14.get_m31(11); - *row[55] = op0_limb_11_col55; - let op0_limb_12_col56 = memory_id_to_big_value_tmp_42314_14.get_m31(12); - *row[56] = op0_limb_12_col56; - let op0_limb_13_col57 = memory_id_to_big_value_tmp_42314_14.get_m31(13); - *row[57] = op0_limb_13_col57; - let op0_limb_14_col58 = memory_id_to_big_value_tmp_42314_14.get_m31(14); - *row[58] = op0_limb_14_col58; - let op0_limb_15_col59 = memory_id_to_big_value_tmp_42314_14.get_m31(15); - *row[59] = op0_limb_15_col59; - let op0_limb_16_col60 = memory_id_to_big_value_tmp_42314_14.get_m31(16); - *row[60] = op0_limb_16_col60; - let op0_limb_17_col61 = memory_id_to_big_value_tmp_42314_14.get_m31(17); - *row[61] = op0_limb_17_col61; - let op0_limb_18_col62 = memory_id_to_big_value_tmp_42314_14.get_m31(18); - *row[62] = op0_limb_18_col62; - let op0_limb_19_col63 = memory_id_to_big_value_tmp_42314_14.get_m31(19); - *row[63] = op0_limb_19_col63; - let op0_limb_20_col64 = memory_id_to_big_value_tmp_42314_14.get_m31(20); - *row[64] = op0_limb_20_col64; - let op0_limb_21_col65 = memory_id_to_big_value_tmp_42314_14.get_m31(21); - *row[65] = op0_limb_21_col65; - let op0_limb_22_col66 = memory_id_to_big_value_tmp_42314_14.get_m31(22); - *row[66] = op0_limb_22_col66; - let op0_limb_23_col67 = memory_id_to_big_value_tmp_42314_14.get_m31(23); - *row[67] = op0_limb_23_col67; - let op0_limb_24_col68 = memory_id_to_big_value_tmp_42314_14.get_m31(24); - *row[68] = op0_limb_24_col68; - let op0_limb_25_col69 = memory_id_to_big_value_tmp_42314_14.get_m31(25); - *row[69] = op0_limb_25_col69; - let op0_limb_26_col70 = memory_id_to_big_value_tmp_42314_14.get_m31(26); - *row[70] = op0_limb_26_col70; - let op0_limb_27_col71 = memory_id_to_big_value_tmp_42314_14.get_m31(27); - *row[71] = op0_limb_27_col71; - for (i, &input) in op0_id_col43.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - op0_id_col43, - op0_limb_0_col44, - op0_limb_1_col45, - op0_limb_2_col46, - op0_limb_3_col47, - op0_limb_4_col48, - op0_limb_5_col49, - op0_limb_6_col50, - op0_limb_7_col51, - op0_limb_8_col52, - op0_limb_9_col53, - op0_limb_10_col54, - op0_limb_11_col55, - op0_limb_12_col56, - op0_limb_13_col57, - op0_limb_14_col58, - op0_limb_15_col59, - op0_limb_16_col60, - op0_limb_17_col61, - op0_limb_18_col62, - op0_limb_19_col63, - op0_limb_20_col64, - op0_limb_21_col65, - op0_limb_22_col66, - op0_limb_23_col67, - op0_limb_24_col68, - op0_limb_25_col69, - op0_limb_26_col70, - op0_limb_27_col71, - ]; + let memory_address_to_id_value_tmp_42314_13 = memory_address_to_id_state + .deduce_output(((mem0_base_col12) + ((offset1_col4) - (M31_32768)))); + let memory_id_to_big_value_tmp_42314_14 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_13); + let op0_id_col43 = memory_address_to_id_value_tmp_42314_13; + *row[43] = op0_id_col43; + let memory_address_to_id_inputs_1 = + ((mem0_base_col12) + ((offset1_col4) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_1 = [ + ((mem0_base_col12) + ((offset1_col4) - (M31_32768))), + op0_id_col43, + ]; + let op0_limb_0_col44 = memory_id_to_big_value_tmp_42314_14.get_m31(0); + *row[44] = op0_limb_0_col44; + let op0_limb_1_col45 = memory_id_to_big_value_tmp_42314_14.get_m31(1); + *row[45] = op0_limb_1_col45; + let op0_limb_2_col46 = memory_id_to_big_value_tmp_42314_14.get_m31(2); + *row[46] = op0_limb_2_col46; + let op0_limb_3_col47 = memory_id_to_big_value_tmp_42314_14.get_m31(3); + *row[47] = op0_limb_3_col47; + let op0_limb_4_col48 = memory_id_to_big_value_tmp_42314_14.get_m31(4); + *row[48] = op0_limb_4_col48; + let op0_limb_5_col49 = memory_id_to_big_value_tmp_42314_14.get_m31(5); + *row[49] = op0_limb_5_col49; + let op0_limb_6_col50 = memory_id_to_big_value_tmp_42314_14.get_m31(6); + *row[50] = op0_limb_6_col50; + let op0_limb_7_col51 = memory_id_to_big_value_tmp_42314_14.get_m31(7); + *row[51] = op0_limb_7_col51; + let op0_limb_8_col52 = memory_id_to_big_value_tmp_42314_14.get_m31(8); + *row[52] = op0_limb_8_col52; + let op0_limb_9_col53 = memory_id_to_big_value_tmp_42314_14.get_m31(9); + *row[53] = op0_limb_9_col53; + let op0_limb_10_col54 = memory_id_to_big_value_tmp_42314_14.get_m31(10); + *row[54] = op0_limb_10_col54; + let op0_limb_11_col55 = memory_id_to_big_value_tmp_42314_14.get_m31(11); + *row[55] = op0_limb_11_col55; + let op0_limb_12_col56 = memory_id_to_big_value_tmp_42314_14.get_m31(12); + *row[56] = op0_limb_12_col56; + let op0_limb_13_col57 = memory_id_to_big_value_tmp_42314_14.get_m31(13); + *row[57] = op0_limb_13_col57; + let op0_limb_14_col58 = memory_id_to_big_value_tmp_42314_14.get_m31(14); + *row[58] = op0_limb_14_col58; + let op0_limb_15_col59 = memory_id_to_big_value_tmp_42314_14.get_m31(15); + *row[59] = op0_limb_15_col59; + let op0_limb_16_col60 = memory_id_to_big_value_tmp_42314_14.get_m31(16); + *row[60] = op0_limb_16_col60; + let op0_limb_17_col61 = memory_id_to_big_value_tmp_42314_14.get_m31(17); + *row[61] = op0_limb_17_col61; + let op0_limb_18_col62 = memory_id_to_big_value_tmp_42314_14.get_m31(18); + *row[62] = op0_limb_18_col62; + let op0_limb_19_col63 = memory_id_to_big_value_tmp_42314_14.get_m31(19); + *row[63] = op0_limb_19_col63; + let op0_limb_20_col64 = memory_id_to_big_value_tmp_42314_14.get_m31(20); + *row[64] = op0_limb_20_col64; + let op0_limb_21_col65 = memory_id_to_big_value_tmp_42314_14.get_m31(21); + *row[65] = op0_limb_21_col65; + let op0_limb_22_col66 = memory_id_to_big_value_tmp_42314_14.get_m31(22); + *row[66] = op0_limb_22_col66; + let op0_limb_23_col67 = memory_id_to_big_value_tmp_42314_14.get_m31(23); + *row[67] = op0_limb_23_col67; + let op0_limb_24_col68 = memory_id_to_big_value_tmp_42314_14.get_m31(24); + *row[68] = op0_limb_24_col68; + let op0_limb_25_col69 = memory_id_to_big_value_tmp_42314_14.get_m31(25); + *row[69] = op0_limb_25_col69; + let op0_limb_26_col70 = memory_id_to_big_value_tmp_42314_14.get_m31(26); + *row[70] = op0_limb_26_col70; + let op0_limb_27_col71 = memory_id_to_big_value_tmp_42314_14.get_m31(27); + *row[71] = op0_limb_27_col71; + let memory_id_to_big_inputs_1 = op0_id_col43.unpack(); + *lookup_data.memory_id_to_big_1 = [ + op0_id_col43, + op0_limb_0_col44, + op0_limb_1_col45, + op0_limb_2_col46, + op0_limb_3_col47, + op0_limb_4_col48, + op0_limb_5_col49, + op0_limb_6_col50, + op0_limb_7_col51, + op0_limb_8_col52, + op0_limb_9_col53, + op0_limb_10_col54, + op0_limb_11_col55, + op0_limb_12_col56, + op0_limb_13_col57, + op0_limb_14_col58, + op0_limb_15_col59, + op0_limb_16_col60, + op0_limb_17_col61, + op0_limb_18_col62, + op0_limb_19_col63, + op0_limb_20_col64, + op0_limb_21_col65, + op0_limb_22_col66, + op0_limb_23_col67, + op0_limb_24_col68, + op0_limb_25_col69, + op0_limb_26_col70, + op0_limb_27_col71, + ]; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_42314_15 = memory_address_to_id_state - .deduce_output(((mem1_base_col13) + ((offset2_col5) - (M31_32768)))); - let memory_id_to_big_value_tmp_42314_16 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_15); - let op1_id_col72 = memory_address_to_id_value_tmp_42314_15; - *row[72] = op1_id_col72; - for (i, &input) in ((mem1_base_col13) + ((offset2_col5) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = [ - ((mem1_base_col13) + ((offset2_col5) - (M31_32768))), - op1_id_col72, - ]; - let op1_limb_0_col73 = memory_id_to_big_value_tmp_42314_16.get_m31(0); - *row[73] = op1_limb_0_col73; - let op1_limb_1_col74 = memory_id_to_big_value_tmp_42314_16.get_m31(1); - *row[74] = op1_limb_1_col74; - let op1_limb_2_col75 = memory_id_to_big_value_tmp_42314_16.get_m31(2); - *row[75] = op1_limb_2_col75; - let op1_limb_3_col76 = memory_id_to_big_value_tmp_42314_16.get_m31(3); - *row[76] = op1_limb_3_col76; - let op1_limb_4_col77 = memory_id_to_big_value_tmp_42314_16.get_m31(4); - *row[77] = op1_limb_4_col77; - let op1_limb_5_col78 = memory_id_to_big_value_tmp_42314_16.get_m31(5); - *row[78] = op1_limb_5_col78; - let op1_limb_6_col79 = memory_id_to_big_value_tmp_42314_16.get_m31(6); - *row[79] = op1_limb_6_col79; - let op1_limb_7_col80 = memory_id_to_big_value_tmp_42314_16.get_m31(7); - *row[80] = op1_limb_7_col80; - let op1_limb_8_col81 = memory_id_to_big_value_tmp_42314_16.get_m31(8); - *row[81] = op1_limb_8_col81; - let op1_limb_9_col82 = memory_id_to_big_value_tmp_42314_16.get_m31(9); - *row[82] = op1_limb_9_col82; - let op1_limb_10_col83 = memory_id_to_big_value_tmp_42314_16.get_m31(10); - *row[83] = op1_limb_10_col83; - let op1_limb_11_col84 = memory_id_to_big_value_tmp_42314_16.get_m31(11); - *row[84] = op1_limb_11_col84; - let op1_limb_12_col85 = memory_id_to_big_value_tmp_42314_16.get_m31(12); - *row[85] = op1_limb_12_col85; - let op1_limb_13_col86 = memory_id_to_big_value_tmp_42314_16.get_m31(13); - *row[86] = op1_limb_13_col86; - let op1_limb_14_col87 = memory_id_to_big_value_tmp_42314_16.get_m31(14); - *row[87] = op1_limb_14_col87; - let op1_limb_15_col88 = memory_id_to_big_value_tmp_42314_16.get_m31(15); - *row[88] = op1_limb_15_col88; - let op1_limb_16_col89 = memory_id_to_big_value_tmp_42314_16.get_m31(16); - *row[89] = op1_limb_16_col89; - let op1_limb_17_col90 = memory_id_to_big_value_tmp_42314_16.get_m31(17); - *row[90] = op1_limb_17_col90; - let op1_limb_18_col91 = memory_id_to_big_value_tmp_42314_16.get_m31(18); - *row[91] = op1_limb_18_col91; - let op1_limb_19_col92 = memory_id_to_big_value_tmp_42314_16.get_m31(19); - *row[92] = op1_limb_19_col92; - let op1_limb_20_col93 = memory_id_to_big_value_tmp_42314_16.get_m31(20); - *row[93] = op1_limb_20_col93; - let op1_limb_21_col94 = memory_id_to_big_value_tmp_42314_16.get_m31(21); - *row[94] = op1_limb_21_col94; - let op1_limb_22_col95 = memory_id_to_big_value_tmp_42314_16.get_m31(22); - *row[95] = op1_limb_22_col95; - let op1_limb_23_col96 = memory_id_to_big_value_tmp_42314_16.get_m31(23); - *row[96] = op1_limb_23_col96; - let op1_limb_24_col97 = memory_id_to_big_value_tmp_42314_16.get_m31(24); - *row[97] = op1_limb_24_col97; - let op1_limb_25_col98 = memory_id_to_big_value_tmp_42314_16.get_m31(25); - *row[98] = op1_limb_25_col98; - let op1_limb_26_col99 = memory_id_to_big_value_tmp_42314_16.get_m31(26); - *row[99] = op1_limb_26_col99; - let op1_limb_27_col100 = memory_id_to_big_value_tmp_42314_16.get_m31(27); - *row[100] = op1_limb_27_col100; - for (i, &input) in op1_id_col72.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - op1_id_col72, - op1_limb_0_col73, - op1_limb_1_col74, - op1_limb_2_col75, - op1_limb_3_col76, - op1_limb_4_col77, - op1_limb_5_col78, - op1_limb_6_col79, - op1_limb_7_col80, - op1_limb_8_col81, - op1_limb_9_col82, - op1_limb_10_col83, - op1_limb_11_col84, - op1_limb_12_col85, - op1_limb_13_col86, - op1_limb_14_col87, - op1_limb_15_col88, - op1_limb_16_col89, - op1_limb_17_col90, - op1_limb_18_col91, - op1_limb_19_col92, - op1_limb_20_col93, - op1_limb_21_col94, - op1_limb_22_col95, - op1_limb_23_col96, - op1_limb_24_col97, - op1_limb_25_col98, - op1_limb_26_col99, - op1_limb_27_col100, - ]; + let memory_address_to_id_value_tmp_42314_15 = memory_address_to_id_state + .deduce_output(((mem1_base_col13) + ((offset2_col5) - (M31_32768)))); + let memory_id_to_big_value_tmp_42314_16 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_42314_15); + let op1_id_col72 = memory_address_to_id_value_tmp_42314_15; + *row[72] = op1_id_col72; + let memory_address_to_id_inputs_2 = + ((mem1_base_col13) + ((offset2_col5) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_2 = [ + ((mem1_base_col13) + ((offset2_col5) - (M31_32768))), + op1_id_col72, + ]; + let op1_limb_0_col73 = memory_id_to_big_value_tmp_42314_16.get_m31(0); + *row[73] = op1_limb_0_col73; + let op1_limb_1_col74 = memory_id_to_big_value_tmp_42314_16.get_m31(1); + *row[74] = op1_limb_1_col74; + let op1_limb_2_col75 = memory_id_to_big_value_tmp_42314_16.get_m31(2); + *row[75] = op1_limb_2_col75; + let op1_limb_3_col76 = memory_id_to_big_value_tmp_42314_16.get_m31(3); + *row[76] = op1_limb_3_col76; + let op1_limb_4_col77 = memory_id_to_big_value_tmp_42314_16.get_m31(4); + *row[77] = op1_limb_4_col77; + let op1_limb_5_col78 = memory_id_to_big_value_tmp_42314_16.get_m31(5); + *row[78] = op1_limb_5_col78; + let op1_limb_6_col79 = memory_id_to_big_value_tmp_42314_16.get_m31(6); + *row[79] = op1_limb_6_col79; + let op1_limb_7_col80 = memory_id_to_big_value_tmp_42314_16.get_m31(7); + *row[80] = op1_limb_7_col80; + let op1_limb_8_col81 = memory_id_to_big_value_tmp_42314_16.get_m31(8); + *row[81] = op1_limb_8_col81; + let op1_limb_9_col82 = memory_id_to_big_value_tmp_42314_16.get_m31(9); + *row[82] = op1_limb_9_col82; + let op1_limb_10_col83 = memory_id_to_big_value_tmp_42314_16.get_m31(10); + *row[83] = op1_limb_10_col83; + let op1_limb_11_col84 = memory_id_to_big_value_tmp_42314_16.get_m31(11); + *row[84] = op1_limb_11_col84; + let op1_limb_12_col85 = memory_id_to_big_value_tmp_42314_16.get_m31(12); + *row[85] = op1_limb_12_col85; + let op1_limb_13_col86 = memory_id_to_big_value_tmp_42314_16.get_m31(13); + *row[86] = op1_limb_13_col86; + let op1_limb_14_col87 = memory_id_to_big_value_tmp_42314_16.get_m31(14); + *row[87] = op1_limb_14_col87; + let op1_limb_15_col88 = memory_id_to_big_value_tmp_42314_16.get_m31(15); + *row[88] = op1_limb_15_col88; + let op1_limb_16_col89 = memory_id_to_big_value_tmp_42314_16.get_m31(16); + *row[89] = op1_limb_16_col89; + let op1_limb_17_col90 = memory_id_to_big_value_tmp_42314_16.get_m31(17); + *row[90] = op1_limb_17_col90; + let op1_limb_18_col91 = memory_id_to_big_value_tmp_42314_16.get_m31(18); + *row[91] = op1_limb_18_col91; + let op1_limb_19_col92 = memory_id_to_big_value_tmp_42314_16.get_m31(19); + *row[92] = op1_limb_19_col92; + let op1_limb_20_col93 = memory_id_to_big_value_tmp_42314_16.get_m31(20); + *row[93] = op1_limb_20_col93; + let op1_limb_21_col94 = memory_id_to_big_value_tmp_42314_16.get_m31(21); + *row[94] = op1_limb_21_col94; + let op1_limb_22_col95 = memory_id_to_big_value_tmp_42314_16.get_m31(22); + *row[95] = op1_limb_22_col95; + let op1_limb_23_col96 = memory_id_to_big_value_tmp_42314_16.get_m31(23); + *row[96] = op1_limb_23_col96; + let op1_limb_24_col97 = memory_id_to_big_value_tmp_42314_16.get_m31(24); + *row[97] = op1_limb_24_col97; + let op1_limb_25_col98 = memory_id_to_big_value_tmp_42314_16.get_m31(25); + *row[98] = op1_limb_25_col98; + let op1_limb_26_col99 = memory_id_to_big_value_tmp_42314_16.get_m31(26); + *row[99] = op1_limb_26_col99; + let op1_limb_27_col100 = memory_id_to_big_value_tmp_42314_16.get_m31(27); + *row[100] = op1_limb_27_col100; + let memory_id_to_big_inputs_2 = op1_id_col72.unpack(); + *lookup_data.memory_id_to_big_2 = [ + op1_id_col72, + op1_limb_0_col73, + op1_limb_1_col74, + op1_limb_2_col75, + op1_limb_3_col76, + op1_limb_4_col77, + op1_limb_5_col78, + op1_limb_6_col79, + op1_limb_7_col80, + op1_limb_8_col81, + op1_limb_9_col82, + op1_limb_10_col83, + op1_limb_11_col84, + op1_limb_12_col85, + op1_limb_13_col86, + op1_limb_14_col87, + op1_limb_15_col88, + op1_limb_16_col89, + op1_limb_17_col90, + op1_limb_18_col91, + op1_limb_19_col92, + op1_limb_20_col93, + op1_limb_21_col94, + op1_limb_22_col95, + op1_limb_23_col96, + op1_limb_24_col97, + op1_limb_25_col98, + op1_limb_26_col99, + op1_limb_27_col100, + ]; - // Verify Mul 252. + // Verify Mul 252. - let conv_tmp_42314_17 = - (((M31_0) - (dst_limb_0_col15)) + ((op0_limb_0_col44) * (op1_limb_0_col73))); - let conv_tmp_42314_18 = ((((M31_0) - (dst_limb_1_col16)) - + ((op0_limb_0_col44) * (op1_limb_1_col74))) - + ((op0_limb_1_col45) * (op1_limb_0_col73))); - let conv_tmp_42314_19 = (((((M31_0) - (dst_limb_2_col17)) - + ((op0_limb_0_col44) * (op1_limb_2_col75))) - + ((op0_limb_1_col45) * (op1_limb_1_col74))) - + ((op0_limb_2_col46) * (op1_limb_0_col73))); - let conv_tmp_42314_20 = ((((((M31_0) - (dst_limb_3_col18)) - + ((op0_limb_0_col44) * (op1_limb_3_col76))) - + ((op0_limb_1_col45) * (op1_limb_2_col75))) - + ((op0_limb_2_col46) * (op1_limb_1_col74))) - + ((op0_limb_3_col47) * (op1_limb_0_col73))); - let conv_tmp_42314_21 = (((((((M31_0) - (dst_limb_4_col19)) - + ((op0_limb_0_col44) * (op1_limb_4_col77))) - + ((op0_limb_1_col45) * (op1_limb_3_col76))) - + ((op0_limb_2_col46) * (op1_limb_2_col75))) - + ((op0_limb_3_col47) * (op1_limb_1_col74))) - + ((op0_limb_4_col48) * (op1_limb_0_col73))); - let conv_tmp_42314_22 = ((((((((M31_0) - (dst_limb_5_col20)) - + ((op0_limb_0_col44) * (op1_limb_5_col78))) - + ((op0_limb_1_col45) * (op1_limb_4_col77))) - + ((op0_limb_2_col46) * (op1_limb_3_col76))) - + ((op0_limb_3_col47) * (op1_limb_2_col75))) - + ((op0_limb_4_col48) * (op1_limb_1_col74))) - + ((op0_limb_5_col49) * (op1_limb_0_col73))); - let conv_tmp_42314_23 = (((((((((M31_0) - (dst_limb_6_col21)) - + ((op0_limb_0_col44) * (op1_limb_6_col79))) - + ((op0_limb_1_col45) * (op1_limb_5_col78))) - + ((op0_limb_2_col46) * (op1_limb_4_col77))) - + ((op0_limb_3_col47) * (op1_limb_3_col76))) - + ((op0_limb_4_col48) * (op1_limb_2_col75))) - + ((op0_limb_5_col49) * (op1_limb_1_col74))) - + ((op0_limb_6_col50) * (op1_limb_0_col73))); - let conv_tmp_42314_24 = ((((((((((M31_0) - (dst_limb_7_col22)) - + ((op0_limb_0_col44) * (op1_limb_7_col80))) - + ((op0_limb_1_col45) * (op1_limb_6_col79))) - + ((op0_limb_2_col46) * (op1_limb_5_col78))) - + ((op0_limb_3_col47) * (op1_limb_4_col77))) - + ((op0_limb_4_col48) * (op1_limb_3_col76))) - + ((op0_limb_5_col49) * (op1_limb_2_col75))) - + ((op0_limb_6_col50) * (op1_limb_1_col74))) - + ((op0_limb_7_col51) * (op1_limb_0_col73))); - let conv_tmp_42314_25 = (((((((((((M31_0) - (dst_limb_8_col23)) - + ((op0_limb_0_col44) * (op1_limb_8_col81))) - + ((op0_limb_1_col45) * (op1_limb_7_col80))) - + ((op0_limb_2_col46) * (op1_limb_6_col79))) - + ((op0_limb_3_col47) * (op1_limb_5_col78))) - + ((op0_limb_4_col48) * (op1_limb_4_col77))) - + ((op0_limb_5_col49) * (op1_limb_3_col76))) - + ((op0_limb_6_col50) * (op1_limb_2_col75))) - + ((op0_limb_7_col51) * (op1_limb_1_col74))) - + ((op0_limb_8_col52) * (op1_limb_0_col73))); - let conv_tmp_42314_26 = ((((((((((((M31_0) - (dst_limb_9_col24)) - + ((op0_limb_0_col44) * (op1_limb_9_col82))) - + ((op0_limb_1_col45) * (op1_limb_8_col81))) - + ((op0_limb_2_col46) * (op1_limb_7_col80))) - + ((op0_limb_3_col47) * (op1_limb_6_col79))) - + ((op0_limb_4_col48) * (op1_limb_5_col78))) - + ((op0_limb_5_col49) * (op1_limb_4_col77))) - + ((op0_limb_6_col50) * (op1_limb_3_col76))) - + ((op0_limb_7_col51) * (op1_limb_2_col75))) - + ((op0_limb_8_col52) * (op1_limb_1_col74))) - + ((op0_limb_9_col53) * (op1_limb_0_col73))); - let conv_tmp_42314_27 = (((((((((((((M31_0) - (dst_limb_10_col25)) - + ((op0_limb_0_col44) * (op1_limb_10_col83))) - + ((op0_limb_1_col45) * (op1_limb_9_col82))) - + ((op0_limb_2_col46) * (op1_limb_8_col81))) - + ((op0_limb_3_col47) * (op1_limb_7_col80))) - + ((op0_limb_4_col48) * (op1_limb_6_col79))) - + ((op0_limb_5_col49) * (op1_limb_5_col78))) - + ((op0_limb_6_col50) * (op1_limb_4_col77))) - + ((op0_limb_7_col51) * (op1_limb_3_col76))) - + ((op0_limb_8_col52) * (op1_limb_2_col75))) - + ((op0_limb_9_col53) * (op1_limb_1_col74))) - + ((op0_limb_10_col54) * (op1_limb_0_col73))); - let conv_tmp_42314_28 = ((((((((((((((M31_0) - (dst_limb_11_col26)) - + ((op0_limb_0_col44) * (op1_limb_11_col84))) - + ((op0_limb_1_col45) * (op1_limb_10_col83))) - + ((op0_limb_2_col46) * (op1_limb_9_col82))) - + ((op0_limb_3_col47) * (op1_limb_8_col81))) - + ((op0_limb_4_col48) * (op1_limb_7_col80))) - + ((op0_limb_5_col49) * (op1_limb_6_col79))) - + ((op0_limb_6_col50) * (op1_limb_5_col78))) - + ((op0_limb_7_col51) * (op1_limb_4_col77))) - + ((op0_limb_8_col52) * (op1_limb_3_col76))) - + ((op0_limb_9_col53) * (op1_limb_2_col75))) - + ((op0_limb_10_col54) * (op1_limb_1_col74))) - + ((op0_limb_11_col55) * (op1_limb_0_col73))); - let conv_tmp_42314_29 = (((((((((((((((M31_0) - (dst_limb_12_col27)) - + ((op0_limb_0_col44) * (op1_limb_12_col85))) - + ((op0_limb_1_col45) * (op1_limb_11_col84))) - + ((op0_limb_2_col46) * (op1_limb_10_col83))) - + ((op0_limb_3_col47) * (op1_limb_9_col82))) - + ((op0_limb_4_col48) * (op1_limb_8_col81))) - + ((op0_limb_5_col49) * (op1_limb_7_col80))) - + ((op0_limb_6_col50) * (op1_limb_6_col79))) - + ((op0_limb_7_col51) * (op1_limb_5_col78))) - + ((op0_limb_8_col52) * (op1_limb_4_col77))) - + ((op0_limb_9_col53) * (op1_limb_3_col76))) - + ((op0_limb_10_col54) * (op1_limb_2_col75))) - + ((op0_limb_11_col55) * (op1_limb_1_col74))) - + ((op0_limb_12_col56) * (op1_limb_0_col73))); - let conv_tmp_42314_30 = ((((((((((((((((M31_0) - (dst_limb_13_col28)) - + ((op0_limb_0_col44) * (op1_limb_13_col86))) - + ((op0_limb_1_col45) * (op1_limb_12_col85))) - + ((op0_limb_2_col46) * (op1_limb_11_col84))) - + ((op0_limb_3_col47) * (op1_limb_10_col83))) - + ((op0_limb_4_col48) * (op1_limb_9_col82))) - + ((op0_limb_5_col49) * (op1_limb_8_col81))) - + ((op0_limb_6_col50) * (op1_limb_7_col80))) - + ((op0_limb_7_col51) * (op1_limb_6_col79))) - + ((op0_limb_8_col52) * (op1_limb_5_col78))) - + ((op0_limb_9_col53) * (op1_limb_4_col77))) - + ((op0_limb_10_col54) * (op1_limb_3_col76))) - + ((op0_limb_11_col55) * (op1_limb_2_col75))) - + ((op0_limb_12_col56) * (op1_limb_1_col74))) - + ((op0_limb_13_col57) * (op1_limb_0_col73))); - let conv_tmp_42314_31 = (((((((((((((((((M31_0) - - (dst_limb_14_col29)) - + ((op0_limb_0_col44) * (op1_limb_14_col87))) - + ((op0_limb_1_col45) * (op1_limb_13_col86))) - + ((op0_limb_2_col46) * (op1_limb_12_col85))) - + ((op0_limb_3_col47) * (op1_limb_11_col84))) - + ((op0_limb_4_col48) * (op1_limb_10_col83))) - + ((op0_limb_5_col49) * (op1_limb_9_col82))) - + ((op0_limb_6_col50) * (op1_limb_8_col81))) - + ((op0_limb_7_col51) * (op1_limb_7_col80))) - + ((op0_limb_8_col52) * (op1_limb_6_col79))) - + ((op0_limb_9_col53) * (op1_limb_5_col78))) - + ((op0_limb_10_col54) * (op1_limb_4_col77))) - + ((op0_limb_11_col55) * (op1_limb_3_col76))) - + ((op0_limb_12_col56) * (op1_limb_2_col75))) - + ((op0_limb_13_col57) * (op1_limb_1_col74))) - + ((op0_limb_14_col58) * (op1_limb_0_col73))); - let conv_tmp_42314_32 = ((((((((((((((((((M31_0) - - (dst_limb_15_col30)) - + ((op0_limb_0_col44) * (op1_limb_15_col88))) - + ((op0_limb_1_col45) * (op1_limb_14_col87))) - + ((op0_limb_2_col46) * (op1_limb_13_col86))) - + ((op0_limb_3_col47) * (op1_limb_12_col85))) - + ((op0_limb_4_col48) * (op1_limb_11_col84))) - + ((op0_limb_5_col49) * (op1_limb_10_col83))) - + ((op0_limb_6_col50) * (op1_limb_9_col82))) - + ((op0_limb_7_col51) * (op1_limb_8_col81))) - + ((op0_limb_8_col52) * (op1_limb_7_col80))) - + ((op0_limb_9_col53) * (op1_limb_6_col79))) - + ((op0_limb_10_col54) * (op1_limb_5_col78))) - + ((op0_limb_11_col55) * (op1_limb_4_col77))) - + ((op0_limb_12_col56) * (op1_limb_3_col76))) - + ((op0_limb_13_col57) * (op1_limb_2_col75))) - + ((op0_limb_14_col58) * (op1_limb_1_col74))) - + ((op0_limb_15_col59) * (op1_limb_0_col73))); - let conv_tmp_42314_33 = (((((((((((((((((((M31_0) - - (dst_limb_16_col31)) - + ((op0_limb_0_col44) * (op1_limb_16_col89))) - + ((op0_limb_1_col45) * (op1_limb_15_col88))) - + ((op0_limb_2_col46) * (op1_limb_14_col87))) - + ((op0_limb_3_col47) * (op1_limb_13_col86))) - + ((op0_limb_4_col48) * (op1_limb_12_col85))) - + ((op0_limb_5_col49) * (op1_limb_11_col84))) - + ((op0_limb_6_col50) * (op1_limb_10_col83))) - + ((op0_limb_7_col51) * (op1_limb_9_col82))) - + ((op0_limb_8_col52) * (op1_limb_8_col81))) - + ((op0_limb_9_col53) * (op1_limb_7_col80))) - + ((op0_limb_10_col54) * (op1_limb_6_col79))) - + ((op0_limb_11_col55) * (op1_limb_5_col78))) - + ((op0_limb_12_col56) * (op1_limb_4_col77))) - + ((op0_limb_13_col57) * (op1_limb_3_col76))) - + ((op0_limb_14_col58) * (op1_limb_2_col75))) - + ((op0_limb_15_col59) * (op1_limb_1_col74))) - + ((op0_limb_16_col60) * (op1_limb_0_col73))); - let conv_tmp_42314_34 = ((((((((((((((((((((M31_0) - - (dst_limb_17_col32)) - + ((op0_limb_0_col44) * (op1_limb_17_col90))) - + ((op0_limb_1_col45) * (op1_limb_16_col89))) - + ((op0_limb_2_col46) * (op1_limb_15_col88))) - + ((op0_limb_3_col47) * (op1_limb_14_col87))) - + ((op0_limb_4_col48) * (op1_limb_13_col86))) - + ((op0_limb_5_col49) * (op1_limb_12_col85))) - + ((op0_limb_6_col50) * (op1_limb_11_col84))) - + ((op0_limb_7_col51) * (op1_limb_10_col83))) - + ((op0_limb_8_col52) * (op1_limb_9_col82))) - + ((op0_limb_9_col53) * (op1_limb_8_col81))) - + ((op0_limb_10_col54) * (op1_limb_7_col80))) - + ((op0_limb_11_col55) * (op1_limb_6_col79))) - + ((op0_limb_12_col56) * (op1_limb_5_col78))) - + ((op0_limb_13_col57) * (op1_limb_4_col77))) - + ((op0_limb_14_col58) * (op1_limb_3_col76))) - + ((op0_limb_15_col59) * (op1_limb_2_col75))) - + ((op0_limb_16_col60) * (op1_limb_1_col74))) - + ((op0_limb_17_col61) * (op1_limb_0_col73))); - let conv_tmp_42314_35 = (((((((((((((((((((((M31_0) - - (dst_limb_18_col33)) - + ((op0_limb_0_col44) * (op1_limb_18_col91))) - + ((op0_limb_1_col45) * (op1_limb_17_col90))) - + ((op0_limb_2_col46) * (op1_limb_16_col89))) - + ((op0_limb_3_col47) * (op1_limb_15_col88))) - + ((op0_limb_4_col48) * (op1_limb_14_col87))) - + ((op0_limb_5_col49) * (op1_limb_13_col86))) - + ((op0_limb_6_col50) * (op1_limb_12_col85))) - + ((op0_limb_7_col51) * (op1_limb_11_col84))) - + ((op0_limb_8_col52) * (op1_limb_10_col83))) - + ((op0_limb_9_col53) * (op1_limb_9_col82))) - + ((op0_limb_10_col54) * (op1_limb_8_col81))) - + ((op0_limb_11_col55) * (op1_limb_7_col80))) - + ((op0_limb_12_col56) * (op1_limb_6_col79))) - + ((op0_limb_13_col57) * (op1_limb_5_col78))) - + ((op0_limb_14_col58) * (op1_limb_4_col77))) - + ((op0_limb_15_col59) * (op1_limb_3_col76))) - + ((op0_limb_16_col60) * (op1_limb_2_col75))) - + ((op0_limb_17_col61) * (op1_limb_1_col74))) - + ((op0_limb_18_col62) * (op1_limb_0_col73))); - let conv_tmp_42314_36 = ((((((((((((((((((((((M31_0) - - (dst_limb_19_col34)) - + ((op0_limb_0_col44) * (op1_limb_19_col92))) - + ((op0_limb_1_col45) * (op1_limb_18_col91))) - + ((op0_limb_2_col46) * (op1_limb_17_col90))) - + ((op0_limb_3_col47) * (op1_limb_16_col89))) - + ((op0_limb_4_col48) * (op1_limb_15_col88))) - + ((op0_limb_5_col49) * (op1_limb_14_col87))) - + ((op0_limb_6_col50) * (op1_limb_13_col86))) - + ((op0_limb_7_col51) * (op1_limb_12_col85))) - + ((op0_limb_8_col52) * (op1_limb_11_col84))) - + ((op0_limb_9_col53) * (op1_limb_10_col83))) - + ((op0_limb_10_col54) * (op1_limb_9_col82))) - + ((op0_limb_11_col55) * (op1_limb_8_col81))) - + ((op0_limb_12_col56) * (op1_limb_7_col80))) - + ((op0_limb_13_col57) * (op1_limb_6_col79))) - + ((op0_limb_14_col58) * (op1_limb_5_col78))) - + ((op0_limb_15_col59) * (op1_limb_4_col77))) - + ((op0_limb_16_col60) * (op1_limb_3_col76))) - + ((op0_limb_17_col61) * (op1_limb_2_col75))) - + ((op0_limb_18_col62) * (op1_limb_1_col74))) - + ((op0_limb_19_col63) * (op1_limb_0_col73))); - let conv_tmp_42314_37 = (((((((((((((((((((((((M31_0) - - (dst_limb_20_col35)) - + ((op0_limb_0_col44) * (op1_limb_20_col93))) - + ((op0_limb_1_col45) * (op1_limb_19_col92))) - + ((op0_limb_2_col46) * (op1_limb_18_col91))) - + ((op0_limb_3_col47) * (op1_limb_17_col90))) - + ((op0_limb_4_col48) * (op1_limb_16_col89))) - + ((op0_limb_5_col49) * (op1_limb_15_col88))) - + ((op0_limb_6_col50) * (op1_limb_14_col87))) - + ((op0_limb_7_col51) * (op1_limb_13_col86))) - + ((op0_limb_8_col52) * (op1_limb_12_col85))) - + ((op0_limb_9_col53) * (op1_limb_11_col84))) - + ((op0_limb_10_col54) * (op1_limb_10_col83))) - + ((op0_limb_11_col55) * (op1_limb_9_col82))) - + ((op0_limb_12_col56) * (op1_limb_8_col81))) - + ((op0_limb_13_col57) * (op1_limb_7_col80))) - + ((op0_limb_14_col58) * (op1_limb_6_col79))) - + ((op0_limb_15_col59) * (op1_limb_5_col78))) - + ((op0_limb_16_col60) * (op1_limb_4_col77))) - + ((op0_limb_17_col61) * (op1_limb_3_col76))) - + ((op0_limb_18_col62) * (op1_limb_2_col75))) - + ((op0_limb_19_col63) * (op1_limb_1_col74))) - + ((op0_limb_20_col64) * (op1_limb_0_col73))); - let conv_tmp_42314_38 = ((((((((((((((((((((((((M31_0) - - (dst_limb_21_col36)) - + ((op0_limb_0_col44) * (op1_limb_21_col94))) - + ((op0_limb_1_col45) * (op1_limb_20_col93))) - + ((op0_limb_2_col46) * (op1_limb_19_col92))) - + ((op0_limb_3_col47) * (op1_limb_18_col91))) - + ((op0_limb_4_col48) * (op1_limb_17_col90))) - + ((op0_limb_5_col49) * (op1_limb_16_col89))) - + ((op0_limb_6_col50) * (op1_limb_15_col88))) - + ((op0_limb_7_col51) * (op1_limb_14_col87))) - + ((op0_limb_8_col52) * (op1_limb_13_col86))) - + ((op0_limb_9_col53) * (op1_limb_12_col85))) - + ((op0_limb_10_col54) * (op1_limb_11_col84))) - + ((op0_limb_11_col55) * (op1_limb_10_col83))) - + ((op0_limb_12_col56) * (op1_limb_9_col82))) - + ((op0_limb_13_col57) * (op1_limb_8_col81))) - + ((op0_limb_14_col58) * (op1_limb_7_col80))) - + ((op0_limb_15_col59) * (op1_limb_6_col79))) - + ((op0_limb_16_col60) * (op1_limb_5_col78))) - + ((op0_limb_17_col61) * (op1_limb_4_col77))) - + ((op0_limb_18_col62) * (op1_limb_3_col76))) - + ((op0_limb_19_col63) * (op1_limb_2_col75))) - + ((op0_limb_20_col64) * (op1_limb_1_col74))) - + ((op0_limb_21_col65) * (op1_limb_0_col73))); - let conv_tmp_42314_39 = (((((((((((((((((((((((((M31_0) - - (dst_limb_22_col37)) - + ((op0_limb_0_col44) * (op1_limb_22_col95))) - + ((op0_limb_1_col45) * (op1_limb_21_col94))) - + ((op0_limb_2_col46) * (op1_limb_20_col93))) - + ((op0_limb_3_col47) * (op1_limb_19_col92))) - + ((op0_limb_4_col48) * (op1_limb_18_col91))) - + ((op0_limb_5_col49) * (op1_limb_17_col90))) - + ((op0_limb_6_col50) * (op1_limb_16_col89))) - + ((op0_limb_7_col51) * (op1_limb_15_col88))) - + ((op0_limb_8_col52) * (op1_limb_14_col87))) - + ((op0_limb_9_col53) * (op1_limb_13_col86))) - + ((op0_limb_10_col54) * (op1_limb_12_col85))) - + ((op0_limb_11_col55) * (op1_limb_11_col84))) - + ((op0_limb_12_col56) * (op1_limb_10_col83))) - + ((op0_limb_13_col57) * (op1_limb_9_col82))) - + ((op0_limb_14_col58) * (op1_limb_8_col81))) - + ((op0_limb_15_col59) * (op1_limb_7_col80))) - + ((op0_limb_16_col60) * (op1_limb_6_col79))) - + ((op0_limb_17_col61) * (op1_limb_5_col78))) - + ((op0_limb_18_col62) * (op1_limb_4_col77))) - + ((op0_limb_19_col63) * (op1_limb_3_col76))) - + ((op0_limb_20_col64) * (op1_limb_2_col75))) - + ((op0_limb_21_col65) * (op1_limb_1_col74))) - + ((op0_limb_22_col66) * (op1_limb_0_col73))); - let conv_tmp_42314_40 = ((((((((((((((((((((((((((M31_0) - - (dst_limb_23_col38)) - + ((op0_limb_0_col44) * (op1_limb_23_col96))) - + ((op0_limb_1_col45) * (op1_limb_22_col95))) - + ((op0_limb_2_col46) * (op1_limb_21_col94))) - + ((op0_limb_3_col47) * (op1_limb_20_col93))) - + ((op0_limb_4_col48) * (op1_limb_19_col92))) - + ((op0_limb_5_col49) * (op1_limb_18_col91))) - + ((op0_limb_6_col50) * (op1_limb_17_col90))) - + ((op0_limb_7_col51) * (op1_limb_16_col89))) - + ((op0_limb_8_col52) * (op1_limb_15_col88))) - + ((op0_limb_9_col53) * (op1_limb_14_col87))) - + ((op0_limb_10_col54) * (op1_limb_13_col86))) - + ((op0_limb_11_col55) * (op1_limb_12_col85))) - + ((op0_limb_12_col56) * (op1_limb_11_col84))) - + ((op0_limb_13_col57) * (op1_limb_10_col83))) - + ((op0_limb_14_col58) * (op1_limb_9_col82))) - + ((op0_limb_15_col59) * (op1_limb_8_col81))) - + ((op0_limb_16_col60) * (op1_limb_7_col80))) - + ((op0_limb_17_col61) * (op1_limb_6_col79))) - + ((op0_limb_18_col62) * (op1_limb_5_col78))) - + ((op0_limb_19_col63) * (op1_limb_4_col77))) - + ((op0_limb_20_col64) * (op1_limb_3_col76))) - + ((op0_limb_21_col65) * (op1_limb_2_col75))) - + ((op0_limb_22_col66) * (op1_limb_1_col74))) - + ((op0_limb_23_col67) * (op1_limb_0_col73))); - let conv_tmp_42314_41 = (((((((((((((((((((((((((((M31_0) - - (dst_limb_24_col39)) - + ((op0_limb_0_col44) * (op1_limb_24_col97))) - + ((op0_limb_1_col45) * (op1_limb_23_col96))) - + ((op0_limb_2_col46) * (op1_limb_22_col95))) - + ((op0_limb_3_col47) * (op1_limb_21_col94))) - + ((op0_limb_4_col48) * (op1_limb_20_col93))) - + ((op0_limb_5_col49) * (op1_limb_19_col92))) - + ((op0_limb_6_col50) * (op1_limb_18_col91))) - + ((op0_limb_7_col51) * (op1_limb_17_col90))) - + ((op0_limb_8_col52) * (op1_limb_16_col89))) - + ((op0_limb_9_col53) * (op1_limb_15_col88))) - + ((op0_limb_10_col54) * (op1_limb_14_col87))) - + ((op0_limb_11_col55) * (op1_limb_13_col86))) - + ((op0_limb_12_col56) * (op1_limb_12_col85))) - + ((op0_limb_13_col57) * (op1_limb_11_col84))) - + ((op0_limb_14_col58) * (op1_limb_10_col83))) - + ((op0_limb_15_col59) * (op1_limb_9_col82))) - + ((op0_limb_16_col60) * (op1_limb_8_col81))) - + ((op0_limb_17_col61) * (op1_limb_7_col80))) - + ((op0_limb_18_col62) * (op1_limb_6_col79))) - + ((op0_limb_19_col63) * (op1_limb_5_col78))) - + ((op0_limb_20_col64) * (op1_limb_4_col77))) - + ((op0_limb_21_col65) * (op1_limb_3_col76))) - + ((op0_limb_22_col66) * (op1_limb_2_col75))) - + ((op0_limb_23_col67) * (op1_limb_1_col74))) - + ((op0_limb_24_col68) * (op1_limb_0_col73))); - let conv_tmp_42314_42 = ((((((((((((((((((((((((((((M31_0) - - (dst_limb_25_col40)) - + ((op0_limb_0_col44) * (op1_limb_25_col98))) - + ((op0_limb_1_col45) * (op1_limb_24_col97))) - + ((op0_limb_2_col46) * (op1_limb_23_col96))) - + ((op0_limb_3_col47) * (op1_limb_22_col95))) - + ((op0_limb_4_col48) * (op1_limb_21_col94))) - + ((op0_limb_5_col49) * (op1_limb_20_col93))) - + ((op0_limb_6_col50) * (op1_limb_19_col92))) - + ((op0_limb_7_col51) * (op1_limb_18_col91))) - + ((op0_limb_8_col52) * (op1_limb_17_col90))) - + ((op0_limb_9_col53) * (op1_limb_16_col89))) - + ((op0_limb_10_col54) * (op1_limb_15_col88))) - + ((op0_limb_11_col55) * (op1_limb_14_col87))) - + ((op0_limb_12_col56) * (op1_limb_13_col86))) - + ((op0_limb_13_col57) * (op1_limb_12_col85))) - + ((op0_limb_14_col58) * (op1_limb_11_col84))) - + ((op0_limb_15_col59) * (op1_limb_10_col83))) - + ((op0_limb_16_col60) * (op1_limb_9_col82))) - + ((op0_limb_17_col61) * (op1_limb_8_col81))) - + ((op0_limb_18_col62) * (op1_limb_7_col80))) - + ((op0_limb_19_col63) * (op1_limb_6_col79))) - + ((op0_limb_20_col64) * (op1_limb_5_col78))) - + ((op0_limb_21_col65) * (op1_limb_4_col77))) - + ((op0_limb_22_col66) * (op1_limb_3_col76))) - + ((op0_limb_23_col67) * (op1_limb_2_col75))) - + ((op0_limb_24_col68) * (op1_limb_1_col74))) - + ((op0_limb_25_col69) * (op1_limb_0_col73))); - let conv_tmp_42314_43 = (((((((((((((((((((((((((((((M31_0) - - (dst_limb_26_col41)) - + ((op0_limb_0_col44) * (op1_limb_26_col99))) - + ((op0_limb_1_col45) * (op1_limb_25_col98))) - + ((op0_limb_2_col46) * (op1_limb_24_col97))) - + ((op0_limb_3_col47) * (op1_limb_23_col96))) - + ((op0_limb_4_col48) * (op1_limb_22_col95))) - + ((op0_limb_5_col49) * (op1_limb_21_col94))) - + ((op0_limb_6_col50) * (op1_limb_20_col93))) - + ((op0_limb_7_col51) * (op1_limb_19_col92))) - + ((op0_limb_8_col52) * (op1_limb_18_col91))) - + ((op0_limb_9_col53) * (op1_limb_17_col90))) - + ((op0_limb_10_col54) * (op1_limb_16_col89))) - + ((op0_limb_11_col55) * (op1_limb_15_col88))) - + ((op0_limb_12_col56) * (op1_limb_14_col87))) - + ((op0_limb_13_col57) * (op1_limb_13_col86))) - + ((op0_limb_14_col58) * (op1_limb_12_col85))) - + ((op0_limb_15_col59) * (op1_limb_11_col84))) - + ((op0_limb_16_col60) * (op1_limb_10_col83))) - + ((op0_limb_17_col61) * (op1_limb_9_col82))) - + ((op0_limb_18_col62) * (op1_limb_8_col81))) - + ((op0_limb_19_col63) * (op1_limb_7_col80))) - + ((op0_limb_20_col64) * (op1_limb_6_col79))) - + ((op0_limb_21_col65) * (op1_limb_5_col78))) - + ((op0_limb_22_col66) * (op1_limb_4_col77))) - + ((op0_limb_23_col67) * (op1_limb_3_col76))) - + ((op0_limb_24_col68) * (op1_limb_2_col75))) - + ((op0_limb_25_col69) * (op1_limb_1_col74))) - + ((op0_limb_26_col70) * (op1_limb_0_col73))); - let conv_tmp_42314_44 = ((((((((((((((((((((((((((((((M31_0) - - (dst_limb_27_col42)) - + ((op0_limb_0_col44) * (op1_limb_27_col100))) - + ((op0_limb_1_col45) * (op1_limb_26_col99))) - + ((op0_limb_2_col46) * (op1_limb_25_col98))) - + ((op0_limb_3_col47) * (op1_limb_24_col97))) - + ((op0_limb_4_col48) * (op1_limb_23_col96))) - + ((op0_limb_5_col49) * (op1_limb_22_col95))) - + ((op0_limb_6_col50) * (op1_limb_21_col94))) - + ((op0_limb_7_col51) * (op1_limb_20_col93))) - + ((op0_limb_8_col52) * (op1_limb_19_col92))) - + ((op0_limb_9_col53) * (op1_limb_18_col91))) - + ((op0_limb_10_col54) * (op1_limb_17_col90))) - + ((op0_limb_11_col55) * (op1_limb_16_col89))) - + ((op0_limb_12_col56) * (op1_limb_15_col88))) - + ((op0_limb_13_col57) * (op1_limb_14_col87))) - + ((op0_limb_14_col58) * (op1_limb_13_col86))) - + ((op0_limb_15_col59) * (op1_limb_12_col85))) - + ((op0_limb_16_col60) * (op1_limb_11_col84))) - + ((op0_limb_17_col61) * (op1_limb_10_col83))) - + ((op0_limb_18_col62) * (op1_limb_9_col82))) - + ((op0_limb_19_col63) * (op1_limb_8_col81))) - + ((op0_limb_20_col64) * (op1_limb_7_col80))) - + ((op0_limb_21_col65) * (op1_limb_6_col79))) - + ((op0_limb_22_col66) * (op1_limb_5_col78))) - + ((op0_limb_23_col67) * (op1_limb_4_col77))) - + ((op0_limb_24_col68) * (op1_limb_3_col76))) - + ((op0_limb_25_col69) * (op1_limb_2_col75))) - + ((op0_limb_26_col70) * (op1_limb_1_col74))) - + ((op0_limb_27_col71) * (op1_limb_0_col73))); - let conv_tmp_42314_45 = ((((((((((((((((((((((((((((M31_0) - + ((op0_limb_1_col45) * (op1_limb_27_col100))) - + ((op0_limb_2_col46) * (op1_limb_26_col99))) - + ((op0_limb_3_col47) * (op1_limb_25_col98))) - + ((op0_limb_4_col48) * (op1_limb_24_col97))) - + ((op0_limb_5_col49) * (op1_limb_23_col96))) - + ((op0_limb_6_col50) * (op1_limb_22_col95))) - + ((op0_limb_7_col51) * (op1_limb_21_col94))) - + ((op0_limb_8_col52) * (op1_limb_20_col93))) - + ((op0_limb_9_col53) * (op1_limb_19_col92))) - + ((op0_limb_10_col54) * (op1_limb_18_col91))) - + ((op0_limb_11_col55) * (op1_limb_17_col90))) - + ((op0_limb_12_col56) * (op1_limb_16_col89))) - + ((op0_limb_13_col57) * (op1_limb_15_col88))) - + ((op0_limb_14_col58) * (op1_limb_14_col87))) - + ((op0_limb_15_col59) * (op1_limb_13_col86))) - + ((op0_limb_16_col60) * (op1_limb_12_col85))) - + ((op0_limb_17_col61) * (op1_limb_11_col84))) - + ((op0_limb_18_col62) * (op1_limb_10_col83))) - + ((op0_limb_19_col63) * (op1_limb_9_col82))) - + ((op0_limb_20_col64) * (op1_limb_8_col81))) - + ((op0_limb_21_col65) * (op1_limb_7_col80))) - + ((op0_limb_22_col66) * (op1_limb_6_col79))) - + ((op0_limb_23_col67) * (op1_limb_5_col78))) - + ((op0_limb_24_col68) * (op1_limb_4_col77))) - + ((op0_limb_25_col69) * (op1_limb_3_col76))) - + ((op0_limb_26_col70) * (op1_limb_2_col75))) - + ((op0_limb_27_col71) * (op1_limb_1_col74))); - let conv_tmp_42314_46 = (((((((((((((((((((((((((((M31_0) - + ((op0_limb_2_col46) * (op1_limb_27_col100))) - + ((op0_limb_3_col47) * (op1_limb_26_col99))) - + ((op0_limb_4_col48) * (op1_limb_25_col98))) - + ((op0_limb_5_col49) * (op1_limb_24_col97))) - + ((op0_limb_6_col50) * (op1_limb_23_col96))) - + ((op0_limb_7_col51) * (op1_limb_22_col95))) - + ((op0_limb_8_col52) * (op1_limb_21_col94))) - + ((op0_limb_9_col53) * (op1_limb_20_col93))) - + ((op0_limb_10_col54) * (op1_limb_19_col92))) - + ((op0_limb_11_col55) * (op1_limb_18_col91))) - + ((op0_limb_12_col56) * (op1_limb_17_col90))) - + ((op0_limb_13_col57) * (op1_limb_16_col89))) - + ((op0_limb_14_col58) * (op1_limb_15_col88))) - + ((op0_limb_15_col59) * (op1_limb_14_col87))) - + ((op0_limb_16_col60) * (op1_limb_13_col86))) - + ((op0_limb_17_col61) * (op1_limb_12_col85))) - + ((op0_limb_18_col62) * (op1_limb_11_col84))) - + ((op0_limb_19_col63) * (op1_limb_10_col83))) - + ((op0_limb_20_col64) * (op1_limb_9_col82))) - + ((op0_limb_21_col65) * (op1_limb_8_col81))) - + ((op0_limb_22_col66) * (op1_limb_7_col80))) - + ((op0_limb_23_col67) * (op1_limb_6_col79))) - + ((op0_limb_24_col68) * (op1_limb_5_col78))) - + ((op0_limb_25_col69) * (op1_limb_4_col77))) - + ((op0_limb_26_col70) * (op1_limb_3_col76))) - + ((op0_limb_27_col71) * (op1_limb_2_col75))); - let conv_tmp_42314_47 = ((((((((((((((((((((((((((M31_0) - + ((op0_limb_3_col47) * (op1_limb_27_col100))) - + ((op0_limb_4_col48) * (op1_limb_26_col99))) - + ((op0_limb_5_col49) * (op1_limb_25_col98))) - + ((op0_limb_6_col50) * (op1_limb_24_col97))) - + ((op0_limb_7_col51) * (op1_limb_23_col96))) - + ((op0_limb_8_col52) * (op1_limb_22_col95))) - + ((op0_limb_9_col53) * (op1_limb_21_col94))) - + ((op0_limb_10_col54) * (op1_limb_20_col93))) - + ((op0_limb_11_col55) * (op1_limb_19_col92))) - + ((op0_limb_12_col56) * (op1_limb_18_col91))) - + ((op0_limb_13_col57) * (op1_limb_17_col90))) - + ((op0_limb_14_col58) * (op1_limb_16_col89))) - + ((op0_limb_15_col59) * (op1_limb_15_col88))) - + ((op0_limb_16_col60) * (op1_limb_14_col87))) - + ((op0_limb_17_col61) * (op1_limb_13_col86))) - + ((op0_limb_18_col62) * (op1_limb_12_col85))) - + ((op0_limb_19_col63) * (op1_limb_11_col84))) - + ((op0_limb_20_col64) * (op1_limb_10_col83))) - + ((op0_limb_21_col65) * (op1_limb_9_col82))) - + ((op0_limb_22_col66) * (op1_limb_8_col81))) - + ((op0_limb_23_col67) * (op1_limb_7_col80))) - + ((op0_limb_24_col68) * (op1_limb_6_col79))) - + ((op0_limb_25_col69) * (op1_limb_5_col78))) - + ((op0_limb_26_col70) * (op1_limb_4_col77))) - + ((op0_limb_27_col71) * (op1_limb_3_col76))); - let conv_tmp_42314_48 = (((((((((((((((((((((((((M31_0) - + ((op0_limb_4_col48) * (op1_limb_27_col100))) - + ((op0_limb_5_col49) * (op1_limb_26_col99))) - + ((op0_limb_6_col50) * (op1_limb_25_col98))) - + ((op0_limb_7_col51) * (op1_limb_24_col97))) - + ((op0_limb_8_col52) * (op1_limb_23_col96))) - + ((op0_limb_9_col53) * (op1_limb_22_col95))) - + ((op0_limb_10_col54) * (op1_limb_21_col94))) - + ((op0_limb_11_col55) * (op1_limb_20_col93))) - + ((op0_limb_12_col56) * (op1_limb_19_col92))) - + ((op0_limb_13_col57) * (op1_limb_18_col91))) - + ((op0_limb_14_col58) * (op1_limb_17_col90))) - + ((op0_limb_15_col59) * (op1_limb_16_col89))) - + ((op0_limb_16_col60) * (op1_limb_15_col88))) - + ((op0_limb_17_col61) * (op1_limb_14_col87))) - + ((op0_limb_18_col62) * (op1_limb_13_col86))) - + ((op0_limb_19_col63) * (op1_limb_12_col85))) - + ((op0_limb_20_col64) * (op1_limb_11_col84))) - + ((op0_limb_21_col65) * (op1_limb_10_col83))) - + ((op0_limb_22_col66) * (op1_limb_9_col82))) - + ((op0_limb_23_col67) * (op1_limb_8_col81))) - + ((op0_limb_24_col68) * (op1_limb_7_col80))) - + ((op0_limb_25_col69) * (op1_limb_6_col79))) - + ((op0_limb_26_col70) * (op1_limb_5_col78))) - + ((op0_limb_27_col71) * (op1_limb_4_col77))); - let conv_tmp_42314_49 = ((((((((((((((((((((((((M31_0) - + ((op0_limb_5_col49) * (op1_limb_27_col100))) - + ((op0_limb_6_col50) * (op1_limb_26_col99))) - + ((op0_limb_7_col51) * (op1_limb_25_col98))) - + ((op0_limb_8_col52) * (op1_limb_24_col97))) - + ((op0_limb_9_col53) * (op1_limb_23_col96))) - + ((op0_limb_10_col54) * (op1_limb_22_col95))) - + ((op0_limb_11_col55) * (op1_limb_21_col94))) - + ((op0_limb_12_col56) * (op1_limb_20_col93))) - + ((op0_limb_13_col57) * (op1_limb_19_col92))) - + ((op0_limb_14_col58) * (op1_limb_18_col91))) - + ((op0_limb_15_col59) * (op1_limb_17_col90))) - + ((op0_limb_16_col60) * (op1_limb_16_col89))) - + ((op0_limb_17_col61) * (op1_limb_15_col88))) - + ((op0_limb_18_col62) * (op1_limb_14_col87))) - + ((op0_limb_19_col63) * (op1_limb_13_col86))) - + ((op0_limb_20_col64) * (op1_limb_12_col85))) - + ((op0_limb_21_col65) * (op1_limb_11_col84))) - + ((op0_limb_22_col66) * (op1_limb_10_col83))) - + ((op0_limb_23_col67) * (op1_limb_9_col82))) - + ((op0_limb_24_col68) * (op1_limb_8_col81))) - + ((op0_limb_25_col69) * (op1_limb_7_col80))) - + ((op0_limb_26_col70) * (op1_limb_6_col79))) - + ((op0_limb_27_col71) * (op1_limb_5_col78))); - let conv_tmp_42314_50 = (((((((((((((((((((((((M31_0) - + ((op0_limb_6_col50) * (op1_limb_27_col100))) - + ((op0_limb_7_col51) * (op1_limb_26_col99))) - + ((op0_limb_8_col52) * (op1_limb_25_col98))) - + ((op0_limb_9_col53) * (op1_limb_24_col97))) - + ((op0_limb_10_col54) * (op1_limb_23_col96))) - + ((op0_limb_11_col55) * (op1_limb_22_col95))) - + ((op0_limb_12_col56) * (op1_limb_21_col94))) - + ((op0_limb_13_col57) * (op1_limb_20_col93))) - + ((op0_limb_14_col58) * (op1_limb_19_col92))) - + ((op0_limb_15_col59) * (op1_limb_18_col91))) - + ((op0_limb_16_col60) * (op1_limb_17_col90))) - + ((op0_limb_17_col61) * (op1_limb_16_col89))) - + ((op0_limb_18_col62) * (op1_limb_15_col88))) - + ((op0_limb_19_col63) * (op1_limb_14_col87))) - + ((op0_limb_20_col64) * (op1_limb_13_col86))) - + ((op0_limb_21_col65) * (op1_limb_12_col85))) - + ((op0_limb_22_col66) * (op1_limb_11_col84))) - + ((op0_limb_23_col67) * (op1_limb_10_col83))) - + ((op0_limb_24_col68) * (op1_limb_9_col82))) - + ((op0_limb_25_col69) * (op1_limb_8_col81))) - + ((op0_limb_26_col70) * (op1_limb_7_col80))) - + ((op0_limb_27_col71) * (op1_limb_6_col79))); - let conv_tmp_42314_51 = ((((((((((((((((((((((M31_0) - + ((op0_limb_7_col51) * (op1_limb_27_col100))) - + ((op0_limb_8_col52) * (op1_limb_26_col99))) - + ((op0_limb_9_col53) * (op1_limb_25_col98))) - + ((op0_limb_10_col54) * (op1_limb_24_col97))) - + ((op0_limb_11_col55) * (op1_limb_23_col96))) - + ((op0_limb_12_col56) * (op1_limb_22_col95))) - + ((op0_limb_13_col57) * (op1_limb_21_col94))) - + ((op0_limb_14_col58) * (op1_limb_20_col93))) - + ((op0_limb_15_col59) * (op1_limb_19_col92))) - + ((op0_limb_16_col60) * (op1_limb_18_col91))) - + ((op0_limb_17_col61) * (op1_limb_17_col90))) - + ((op0_limb_18_col62) * (op1_limb_16_col89))) - + ((op0_limb_19_col63) * (op1_limb_15_col88))) - + ((op0_limb_20_col64) * (op1_limb_14_col87))) - + ((op0_limb_21_col65) * (op1_limb_13_col86))) - + ((op0_limb_22_col66) * (op1_limb_12_col85))) - + ((op0_limb_23_col67) * (op1_limb_11_col84))) - + ((op0_limb_24_col68) * (op1_limb_10_col83))) - + ((op0_limb_25_col69) * (op1_limb_9_col82))) - + ((op0_limb_26_col70) * (op1_limb_8_col81))) - + ((op0_limb_27_col71) * (op1_limb_7_col80))); - let conv_tmp_42314_52 = (((((((((((((((((((((M31_0) - + ((op0_limb_8_col52) * (op1_limb_27_col100))) - + ((op0_limb_9_col53) * (op1_limb_26_col99))) - + ((op0_limb_10_col54) * (op1_limb_25_col98))) - + ((op0_limb_11_col55) * (op1_limb_24_col97))) - + ((op0_limb_12_col56) * (op1_limb_23_col96))) - + ((op0_limb_13_col57) * (op1_limb_22_col95))) - + ((op0_limb_14_col58) * (op1_limb_21_col94))) - + ((op0_limb_15_col59) * (op1_limb_20_col93))) - + ((op0_limb_16_col60) * (op1_limb_19_col92))) - + ((op0_limb_17_col61) * (op1_limb_18_col91))) - + ((op0_limb_18_col62) * (op1_limb_17_col90))) - + ((op0_limb_19_col63) * (op1_limb_16_col89))) - + ((op0_limb_20_col64) * (op1_limb_15_col88))) - + ((op0_limb_21_col65) * (op1_limb_14_col87))) - + ((op0_limb_22_col66) * (op1_limb_13_col86))) - + ((op0_limb_23_col67) * (op1_limb_12_col85))) - + ((op0_limb_24_col68) * (op1_limb_11_col84))) - + ((op0_limb_25_col69) * (op1_limb_10_col83))) - + ((op0_limb_26_col70) * (op1_limb_9_col82))) - + ((op0_limb_27_col71) * (op1_limb_8_col81))); - let conv_tmp_42314_53 = ((((((((((((((((((((M31_0) - + ((op0_limb_9_col53) * (op1_limb_27_col100))) - + ((op0_limb_10_col54) * (op1_limb_26_col99))) - + ((op0_limb_11_col55) * (op1_limb_25_col98))) - + ((op0_limb_12_col56) * (op1_limb_24_col97))) - + ((op0_limb_13_col57) * (op1_limb_23_col96))) - + ((op0_limb_14_col58) * (op1_limb_22_col95))) - + ((op0_limb_15_col59) * (op1_limb_21_col94))) - + ((op0_limb_16_col60) * (op1_limb_20_col93))) - + ((op0_limb_17_col61) * (op1_limb_19_col92))) - + ((op0_limb_18_col62) * (op1_limb_18_col91))) - + ((op0_limb_19_col63) * (op1_limb_17_col90))) - + ((op0_limb_20_col64) * (op1_limb_16_col89))) - + ((op0_limb_21_col65) * (op1_limb_15_col88))) - + ((op0_limb_22_col66) * (op1_limb_14_col87))) - + ((op0_limb_23_col67) * (op1_limb_13_col86))) - + ((op0_limb_24_col68) * (op1_limb_12_col85))) - + ((op0_limb_25_col69) * (op1_limb_11_col84))) - + ((op0_limb_26_col70) * (op1_limb_10_col83))) - + ((op0_limb_27_col71) * (op1_limb_9_col82))); - let conv_tmp_42314_54 = (((((((((((((((((((M31_0) - + ((op0_limb_10_col54) * (op1_limb_27_col100))) - + ((op0_limb_11_col55) * (op1_limb_26_col99))) - + ((op0_limb_12_col56) * (op1_limb_25_col98))) - + ((op0_limb_13_col57) * (op1_limb_24_col97))) - + ((op0_limb_14_col58) * (op1_limb_23_col96))) - + ((op0_limb_15_col59) * (op1_limb_22_col95))) - + ((op0_limb_16_col60) * (op1_limb_21_col94))) - + ((op0_limb_17_col61) * (op1_limb_20_col93))) - + ((op0_limb_18_col62) * (op1_limb_19_col92))) - + ((op0_limb_19_col63) * (op1_limb_18_col91))) - + ((op0_limb_20_col64) * (op1_limb_17_col90))) - + ((op0_limb_21_col65) * (op1_limb_16_col89))) - + ((op0_limb_22_col66) * (op1_limb_15_col88))) - + ((op0_limb_23_col67) * (op1_limb_14_col87))) - + ((op0_limb_24_col68) * (op1_limb_13_col86))) - + ((op0_limb_25_col69) * (op1_limb_12_col85))) - + ((op0_limb_26_col70) * (op1_limb_11_col84))) - + ((op0_limb_27_col71) * (op1_limb_10_col83))); - let conv_tmp_42314_55 = ((((((((((((((((((M31_0) - + ((op0_limb_11_col55) * (op1_limb_27_col100))) - + ((op0_limb_12_col56) * (op1_limb_26_col99))) - + ((op0_limb_13_col57) * (op1_limb_25_col98))) - + ((op0_limb_14_col58) * (op1_limb_24_col97))) - + ((op0_limb_15_col59) * (op1_limb_23_col96))) - + ((op0_limb_16_col60) * (op1_limb_22_col95))) - + ((op0_limb_17_col61) * (op1_limb_21_col94))) - + ((op0_limb_18_col62) * (op1_limb_20_col93))) - + ((op0_limb_19_col63) * (op1_limb_19_col92))) - + ((op0_limb_20_col64) * (op1_limb_18_col91))) - + ((op0_limb_21_col65) * (op1_limb_17_col90))) - + ((op0_limb_22_col66) * (op1_limb_16_col89))) - + ((op0_limb_23_col67) * (op1_limb_15_col88))) - + ((op0_limb_24_col68) * (op1_limb_14_col87))) - + ((op0_limb_25_col69) * (op1_limb_13_col86))) - + ((op0_limb_26_col70) * (op1_limb_12_col85))) - + ((op0_limb_27_col71) * (op1_limb_11_col84))); - let conv_tmp_42314_56 = (((((((((((((((((M31_0) - + ((op0_limb_12_col56) * (op1_limb_27_col100))) - + ((op0_limb_13_col57) * (op1_limb_26_col99))) - + ((op0_limb_14_col58) * (op1_limb_25_col98))) - + ((op0_limb_15_col59) * (op1_limb_24_col97))) - + ((op0_limb_16_col60) * (op1_limb_23_col96))) - + ((op0_limb_17_col61) * (op1_limb_22_col95))) - + ((op0_limb_18_col62) * (op1_limb_21_col94))) - + ((op0_limb_19_col63) * (op1_limb_20_col93))) - + ((op0_limb_20_col64) * (op1_limb_19_col92))) - + ((op0_limb_21_col65) * (op1_limb_18_col91))) - + ((op0_limb_22_col66) * (op1_limb_17_col90))) - + ((op0_limb_23_col67) * (op1_limb_16_col89))) - + ((op0_limb_24_col68) * (op1_limb_15_col88))) - + ((op0_limb_25_col69) * (op1_limb_14_col87))) - + ((op0_limb_26_col70) * (op1_limb_13_col86))) - + ((op0_limb_27_col71) * (op1_limb_12_col85))); - let conv_tmp_42314_57 = ((((((((((((((((M31_0) - + ((op0_limb_13_col57) * (op1_limb_27_col100))) - + ((op0_limb_14_col58) * (op1_limb_26_col99))) - + ((op0_limb_15_col59) * (op1_limb_25_col98))) - + ((op0_limb_16_col60) * (op1_limb_24_col97))) - + ((op0_limb_17_col61) * (op1_limb_23_col96))) - + ((op0_limb_18_col62) * (op1_limb_22_col95))) - + ((op0_limb_19_col63) * (op1_limb_21_col94))) - + ((op0_limb_20_col64) * (op1_limb_20_col93))) - + ((op0_limb_21_col65) * (op1_limb_19_col92))) - + ((op0_limb_22_col66) * (op1_limb_18_col91))) - + ((op0_limb_23_col67) * (op1_limb_17_col90))) - + ((op0_limb_24_col68) * (op1_limb_16_col89))) - + ((op0_limb_25_col69) * (op1_limb_15_col88))) - + ((op0_limb_26_col70) * (op1_limb_14_col87))) - + ((op0_limb_27_col71) * (op1_limb_13_col86))); - let conv_tmp_42314_58 = (((((((((((((((M31_0) - + ((op0_limb_14_col58) * (op1_limb_27_col100))) - + ((op0_limb_15_col59) * (op1_limb_26_col99))) - + ((op0_limb_16_col60) * (op1_limb_25_col98))) - + ((op0_limb_17_col61) * (op1_limb_24_col97))) - + ((op0_limb_18_col62) * (op1_limb_23_col96))) - + ((op0_limb_19_col63) * (op1_limb_22_col95))) - + ((op0_limb_20_col64) * (op1_limb_21_col94))) - + ((op0_limb_21_col65) * (op1_limb_20_col93))) - + ((op0_limb_22_col66) * (op1_limb_19_col92))) - + ((op0_limb_23_col67) * (op1_limb_18_col91))) - + ((op0_limb_24_col68) * (op1_limb_17_col90))) - + ((op0_limb_25_col69) * (op1_limb_16_col89))) - + ((op0_limb_26_col70) * (op1_limb_15_col88))) - + ((op0_limb_27_col71) * (op1_limb_14_col87))); - let conv_tmp_42314_59 = ((((((((((((((M31_0) - + ((op0_limb_15_col59) * (op1_limb_27_col100))) - + ((op0_limb_16_col60) * (op1_limb_26_col99))) - + ((op0_limb_17_col61) * (op1_limb_25_col98))) - + ((op0_limb_18_col62) * (op1_limb_24_col97))) - + ((op0_limb_19_col63) * (op1_limb_23_col96))) - + ((op0_limb_20_col64) * (op1_limb_22_col95))) - + ((op0_limb_21_col65) * (op1_limb_21_col94))) - + ((op0_limb_22_col66) * (op1_limb_20_col93))) - + ((op0_limb_23_col67) * (op1_limb_19_col92))) - + ((op0_limb_24_col68) * (op1_limb_18_col91))) - + ((op0_limb_25_col69) * (op1_limb_17_col90))) - + ((op0_limb_26_col70) * (op1_limb_16_col89))) - + ((op0_limb_27_col71) * (op1_limb_15_col88))); - let conv_tmp_42314_60 = (((((((((((((M31_0) - + ((op0_limb_16_col60) * (op1_limb_27_col100))) - + ((op0_limb_17_col61) * (op1_limb_26_col99))) - + ((op0_limb_18_col62) * (op1_limb_25_col98))) - + ((op0_limb_19_col63) * (op1_limb_24_col97))) - + ((op0_limb_20_col64) * (op1_limb_23_col96))) - + ((op0_limb_21_col65) * (op1_limb_22_col95))) - + ((op0_limb_22_col66) * (op1_limb_21_col94))) - + ((op0_limb_23_col67) * (op1_limb_20_col93))) - + ((op0_limb_24_col68) * (op1_limb_19_col92))) - + ((op0_limb_25_col69) * (op1_limb_18_col91))) - + ((op0_limb_26_col70) * (op1_limb_17_col90))) - + ((op0_limb_27_col71) * (op1_limb_16_col89))); - let conv_tmp_42314_61 = ((((((((((((M31_0) - + ((op0_limb_17_col61) * (op1_limb_27_col100))) - + ((op0_limb_18_col62) * (op1_limb_26_col99))) - + ((op0_limb_19_col63) * (op1_limb_25_col98))) - + ((op0_limb_20_col64) * (op1_limb_24_col97))) - + ((op0_limb_21_col65) * (op1_limb_23_col96))) - + ((op0_limb_22_col66) * (op1_limb_22_col95))) - + ((op0_limb_23_col67) * (op1_limb_21_col94))) - + ((op0_limb_24_col68) * (op1_limb_20_col93))) - + ((op0_limb_25_col69) * (op1_limb_19_col92))) - + ((op0_limb_26_col70) * (op1_limb_18_col91))) - + ((op0_limb_27_col71) * (op1_limb_17_col90))); - let conv_tmp_42314_62 = (((((((((((M31_0) - + ((op0_limb_18_col62) * (op1_limb_27_col100))) - + ((op0_limb_19_col63) * (op1_limb_26_col99))) - + ((op0_limb_20_col64) * (op1_limb_25_col98))) - + ((op0_limb_21_col65) * (op1_limb_24_col97))) - + ((op0_limb_22_col66) * (op1_limb_23_col96))) - + ((op0_limb_23_col67) * (op1_limb_22_col95))) - + ((op0_limb_24_col68) * (op1_limb_21_col94))) - + ((op0_limb_25_col69) * (op1_limb_20_col93))) - + ((op0_limb_26_col70) * (op1_limb_19_col92))) - + ((op0_limb_27_col71) * (op1_limb_18_col91))); - let conv_tmp_42314_63 = ((((((((((M31_0) - + ((op0_limb_19_col63) * (op1_limb_27_col100))) - + ((op0_limb_20_col64) * (op1_limb_26_col99))) - + ((op0_limb_21_col65) * (op1_limb_25_col98))) - + ((op0_limb_22_col66) * (op1_limb_24_col97))) - + ((op0_limb_23_col67) * (op1_limb_23_col96))) - + ((op0_limb_24_col68) * (op1_limb_22_col95))) - + ((op0_limb_25_col69) * (op1_limb_21_col94))) - + ((op0_limb_26_col70) * (op1_limb_20_col93))) - + ((op0_limb_27_col71) * (op1_limb_19_col92))); - let conv_tmp_42314_64 = (((((((((M31_0) - + ((op0_limb_20_col64) * (op1_limb_27_col100))) - + ((op0_limb_21_col65) * (op1_limb_26_col99))) - + ((op0_limb_22_col66) * (op1_limb_25_col98))) - + ((op0_limb_23_col67) * (op1_limb_24_col97))) - + ((op0_limb_24_col68) * (op1_limb_23_col96))) - + ((op0_limb_25_col69) * (op1_limb_22_col95))) - + ((op0_limb_26_col70) * (op1_limb_21_col94))) - + ((op0_limb_27_col71) * (op1_limb_20_col93))); - let conv_tmp_42314_65 = ((((((((M31_0) - + ((op0_limb_21_col65) * (op1_limb_27_col100))) - + ((op0_limb_22_col66) * (op1_limb_26_col99))) - + ((op0_limb_23_col67) * (op1_limb_25_col98))) - + ((op0_limb_24_col68) * (op1_limb_24_col97))) - + ((op0_limb_25_col69) * (op1_limb_23_col96))) - + ((op0_limb_26_col70) * (op1_limb_22_col95))) - + ((op0_limb_27_col71) * (op1_limb_21_col94))); - let conv_tmp_42314_66 = (((((((M31_0) - + ((op0_limb_22_col66) * (op1_limb_27_col100))) - + ((op0_limb_23_col67) * (op1_limb_26_col99))) - + ((op0_limb_24_col68) * (op1_limb_25_col98))) - + ((op0_limb_25_col69) * (op1_limb_24_col97))) - + ((op0_limb_26_col70) * (op1_limb_23_col96))) - + ((op0_limb_27_col71) * (op1_limb_22_col95))); - let conv_tmp_42314_67 = ((((((M31_0) - + ((op0_limb_23_col67) * (op1_limb_27_col100))) - + ((op0_limb_24_col68) * (op1_limb_26_col99))) - + ((op0_limb_25_col69) * (op1_limb_25_col98))) - + ((op0_limb_26_col70) * (op1_limb_24_col97))) - + ((op0_limb_27_col71) * (op1_limb_23_col96))); - let conv_tmp_42314_68 = (((((M31_0) - + ((op0_limb_24_col68) * (op1_limb_27_col100))) - + ((op0_limb_25_col69) * (op1_limb_26_col99))) - + ((op0_limb_26_col70) * (op1_limb_25_col98))) - + ((op0_limb_27_col71) * (op1_limb_24_col97))); - let conv_tmp_42314_69 = ((((M31_0) - + ((op0_limb_25_col69) * (op1_limb_27_col100))) - + ((op0_limb_26_col70) * (op1_limb_26_col99))) - + ((op0_limb_27_col71) * (op1_limb_25_col98))); - let conv_tmp_42314_70 = (((M31_0) + ((op0_limb_26_col70) * (op1_limb_27_col100))) - + ((op0_limb_27_col71) * (op1_limb_26_col99))); - let conv_tmp_42314_71 = ((M31_0) + ((op0_limb_27_col71) * (op1_limb_27_col100))); - let conv_mod_tmp_42314_72 = ((((M31_0) + ((M31_32) * (conv_tmp_42314_17))) - - ((M31_4) * (conv_tmp_42314_38))) - + ((M31_8) * (conv_tmp_42314_66))); - let conv_mod_tmp_42314_73 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_17))) - + ((M31_32) * (conv_tmp_42314_18))) - - ((M31_4) * (conv_tmp_42314_39))) - + ((M31_8) * (conv_tmp_42314_67))); - let conv_mod_tmp_42314_74 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_18))) - + ((M31_32) * (conv_tmp_42314_19))) - - ((M31_4) * (conv_tmp_42314_40))) - + ((M31_8) * (conv_tmp_42314_68))); - let conv_mod_tmp_42314_75 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_19))) - + ((M31_32) * (conv_tmp_42314_20))) - - ((M31_4) * (conv_tmp_42314_41))) - + ((M31_8) * (conv_tmp_42314_69))); - let conv_mod_tmp_42314_76 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_20))) - + ((M31_32) * (conv_tmp_42314_21))) - - ((M31_4) * (conv_tmp_42314_42))) - + ((M31_8) * (conv_tmp_42314_70))); - let conv_mod_tmp_42314_77 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_21))) - + ((M31_32) * (conv_tmp_42314_22))) - - ((M31_4) * (conv_tmp_42314_43))) - + ((M31_8) * (conv_tmp_42314_71))); - let conv_mod_tmp_42314_78 = ((((M31_0) + ((M31_1) * (conv_tmp_42314_22))) - + ((M31_32) * (conv_tmp_42314_23))) - - ((M31_4) * (conv_tmp_42314_44))); - let conv_mod_tmp_42314_79 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_17))) - + ((M31_1) * (conv_tmp_42314_23))) - + ((M31_32) * (conv_tmp_42314_24))) - - ((M31_4) * (conv_tmp_42314_45))); - let conv_mod_tmp_42314_80 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_18))) - + ((M31_1) * (conv_tmp_42314_24))) - + ((M31_32) * (conv_tmp_42314_25))) - - ((M31_4) * (conv_tmp_42314_46))); - let conv_mod_tmp_42314_81 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_19))) - + ((M31_1) * (conv_tmp_42314_25))) - + ((M31_32) * (conv_tmp_42314_26))) - - ((M31_4) * (conv_tmp_42314_47))); - let conv_mod_tmp_42314_82 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_20))) - + ((M31_1) * (conv_tmp_42314_26))) - + ((M31_32) * (conv_tmp_42314_27))) - - ((M31_4) * (conv_tmp_42314_48))); - let conv_mod_tmp_42314_83 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_21))) - + ((M31_1) * (conv_tmp_42314_27))) - + ((M31_32) * (conv_tmp_42314_28))) - - ((M31_4) * (conv_tmp_42314_49))); - let conv_mod_tmp_42314_84 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_22))) - + ((M31_1) * (conv_tmp_42314_28))) - + ((M31_32) * (conv_tmp_42314_29))) - - ((M31_4) * (conv_tmp_42314_50))); - let conv_mod_tmp_42314_85 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_23))) - + ((M31_1) * (conv_tmp_42314_29))) - + ((M31_32) * (conv_tmp_42314_30))) - - ((M31_4) * (conv_tmp_42314_51))); - let conv_mod_tmp_42314_86 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_24))) - + ((M31_1) * (conv_tmp_42314_30))) - + ((M31_32) * (conv_tmp_42314_31))) - - ((M31_4) * (conv_tmp_42314_52))); - let conv_mod_tmp_42314_87 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_25))) - + ((M31_1) * (conv_tmp_42314_31))) - + ((M31_32) * (conv_tmp_42314_32))) - - ((M31_4) * (conv_tmp_42314_53))); - let conv_mod_tmp_42314_88 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_26))) - + ((M31_1) * (conv_tmp_42314_32))) - + ((M31_32) * (conv_tmp_42314_33))) - - ((M31_4) * (conv_tmp_42314_54))); - let conv_mod_tmp_42314_89 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_27))) - + ((M31_1) * (conv_tmp_42314_33))) - + ((M31_32) * (conv_tmp_42314_34))) - - ((M31_4) * (conv_tmp_42314_55))); - let conv_mod_tmp_42314_90 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_28))) - + ((M31_1) * (conv_tmp_42314_34))) - + ((M31_32) * (conv_tmp_42314_35))) - - ((M31_4) * (conv_tmp_42314_56))); - let conv_mod_tmp_42314_91 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_29))) - + ((M31_1) * (conv_tmp_42314_35))) - + ((M31_32) * (conv_tmp_42314_36))) - - ((M31_4) * (conv_tmp_42314_57))); - let conv_mod_tmp_42314_92 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_30))) - + ((M31_1) * (conv_tmp_42314_36))) - + ((M31_32) * (conv_tmp_42314_37))) - - ((M31_4) * (conv_tmp_42314_58))); - let conv_mod_tmp_42314_93 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_31))) - + ((M31_1) * (conv_tmp_42314_37))) - - ((M31_4) * (conv_tmp_42314_59))) - + ((M31_64) * (conv_tmp_42314_66))); - let conv_mod_tmp_42314_94 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_32))) - - ((M31_4) * (conv_tmp_42314_60))) - + ((M31_2) * (conv_tmp_42314_66))) - + ((M31_64) * (conv_tmp_42314_67))); - let conv_mod_tmp_42314_95 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_33))) - - ((M31_4) * (conv_tmp_42314_61))) - + ((M31_2) * (conv_tmp_42314_67))) - + ((M31_64) * (conv_tmp_42314_68))); - let conv_mod_tmp_42314_96 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_34))) - - ((M31_4) * (conv_tmp_42314_62))) - + ((M31_2) * (conv_tmp_42314_68))) - + ((M31_64) * (conv_tmp_42314_69))); - let conv_mod_tmp_42314_97 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_35))) - - ((M31_4) * (conv_tmp_42314_63))) - + ((M31_2) * (conv_tmp_42314_69))) - + ((M31_64) * (conv_tmp_42314_70))); - let conv_mod_tmp_42314_98 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_36))) - - ((M31_4) * (conv_tmp_42314_64))) - + ((M31_2) * (conv_tmp_42314_70))) - + ((M31_64) * (conv_tmp_42314_71))); - let conv_mod_tmp_42314_99 = ((((M31_0) + ((M31_2) * (conv_tmp_42314_37))) - - ((M31_4) * (conv_tmp_42314_65))) - + ((M31_2) * (conv_tmp_42314_71))); - let k_mod_2_18_biased_tmp_42314_100 = - ((((PackedUInt32::from_m31(((conv_mod_tmp_42314_72) + (M31_134217728)))) - + (((PackedUInt32::from_m31( - ((conv_mod_tmp_42314_73) + (M31_134217728)), - )) & (UInt32_511)) - << (UInt32_9))) - + (UInt32_65536)) - & (UInt32_262143)); - let k_col101 = ((k_mod_2_18_biased_tmp_42314_100.low().as_m31()) - + (((k_mod_2_18_biased_tmp_42314_100.high().as_m31()) - (M31_1)) - * (M31_65536))); - *row[101] = k_col101; - for (i, &input) in [((k_col101) + (M31_262144))].unpack().iter().enumerate() { - *sub_components_inputs[i].range_check_19_inputs[0] = input; - } - *lookup_data.range_check_19_0 = [((k_col101) + (M31_262144))]; - let carry_0_col102 = ((((conv_mod_tmp_42314_72) - ((M31_1) * (k_col101))) - + (M31_0)) - * (M31_4194304)); - *row[102] = carry_0_col102; - for (i, &input) in [((carry_0_col102) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[1] = input; - } - *lookup_data.range_check_19_1 = [((carry_0_col102) + (M31_131072))]; - let carry_1_col103 = (((conv_mod_tmp_42314_73) + (carry_0_col102)) * (M31_4194304)); - *row[103] = carry_1_col103; - for (i, &input) in [((carry_1_col103) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[2] = input; - } - *lookup_data.range_check_19_2 = [((carry_1_col103) + (M31_131072))]; - let carry_2_col104 = (((conv_mod_tmp_42314_74) + (carry_1_col103)) * (M31_4194304)); - *row[104] = carry_2_col104; - for (i, &input) in [((carry_2_col104) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[3] = input; - } - *lookup_data.range_check_19_3 = [((carry_2_col104) + (M31_131072))]; - let carry_3_col105 = (((conv_mod_tmp_42314_75) + (carry_2_col104)) * (M31_4194304)); - *row[105] = carry_3_col105; - for (i, &input) in [((carry_3_col105) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[4] = input; - } - *lookup_data.range_check_19_4 = [((carry_3_col105) + (M31_131072))]; - let carry_4_col106 = (((conv_mod_tmp_42314_76) + (carry_3_col105)) * (M31_4194304)); - *row[106] = carry_4_col106; - for (i, &input) in [((carry_4_col106) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[5] = input; - } - *lookup_data.range_check_19_5 = [((carry_4_col106) + (M31_131072))]; - let carry_5_col107 = (((conv_mod_tmp_42314_77) + (carry_4_col106)) * (M31_4194304)); - *row[107] = carry_5_col107; - for (i, &input) in [((carry_5_col107) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[6] = input; - } - *lookup_data.range_check_19_6 = [((carry_5_col107) + (M31_131072))]; - let carry_6_col108 = (((conv_mod_tmp_42314_78) + (carry_5_col107)) * (M31_4194304)); - *row[108] = carry_6_col108; - for (i, &input) in [((carry_6_col108) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[7] = input; - } - *lookup_data.range_check_19_7 = [((carry_6_col108) + (M31_131072))]; - let carry_7_col109 = (((conv_mod_tmp_42314_79) + (carry_6_col108)) * (M31_4194304)); - *row[109] = carry_7_col109; - for (i, &input) in [((carry_7_col109) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[8] = input; - } - *lookup_data.range_check_19_8 = [((carry_7_col109) + (M31_131072))]; - let carry_8_col110 = (((conv_mod_tmp_42314_80) + (carry_7_col109)) * (M31_4194304)); - *row[110] = carry_8_col110; - for (i, &input) in [((carry_8_col110) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[9] = input; - } - *lookup_data.range_check_19_9 = [((carry_8_col110) + (M31_131072))]; - let carry_9_col111 = (((conv_mod_tmp_42314_81) + (carry_8_col110)) * (M31_4194304)); - *row[111] = carry_9_col111; - for (i, &input) in [((carry_9_col111) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[10] = input; - } - *lookup_data.range_check_19_10 = [((carry_9_col111) + (M31_131072))]; - let carry_10_col112 = - (((conv_mod_tmp_42314_82) + (carry_9_col111)) * (M31_4194304)); - *row[112] = carry_10_col112; - for (i, &input) in [((carry_10_col112) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[11] = input; - } - *lookup_data.range_check_19_11 = [((carry_10_col112) + (M31_131072))]; - let carry_11_col113 = - (((conv_mod_tmp_42314_83) + (carry_10_col112)) * (M31_4194304)); - *row[113] = carry_11_col113; - for (i, &input) in [((carry_11_col113) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[12] = input; - } - *lookup_data.range_check_19_12 = [((carry_11_col113) + (M31_131072))]; - let carry_12_col114 = - (((conv_mod_tmp_42314_84) + (carry_11_col113)) * (M31_4194304)); - *row[114] = carry_12_col114; - for (i, &input) in [((carry_12_col114) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[13] = input; - } - *lookup_data.range_check_19_13 = [((carry_12_col114) + (M31_131072))]; - let carry_13_col115 = - (((conv_mod_tmp_42314_85) + (carry_12_col114)) * (M31_4194304)); - *row[115] = carry_13_col115; - for (i, &input) in [((carry_13_col115) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[14] = input; - } - *lookup_data.range_check_19_14 = [((carry_13_col115) + (M31_131072))]; - let carry_14_col116 = - (((conv_mod_tmp_42314_86) + (carry_13_col115)) * (M31_4194304)); - *row[116] = carry_14_col116; - for (i, &input) in [((carry_14_col116) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[15] = input; - } - *lookup_data.range_check_19_15 = [((carry_14_col116) + (M31_131072))]; - let carry_15_col117 = - (((conv_mod_tmp_42314_87) + (carry_14_col116)) * (M31_4194304)); - *row[117] = carry_15_col117; - for (i, &input) in [((carry_15_col117) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[16] = input; - } - *lookup_data.range_check_19_16 = [((carry_15_col117) + (M31_131072))]; - let carry_16_col118 = - (((conv_mod_tmp_42314_88) + (carry_15_col117)) * (M31_4194304)); - *row[118] = carry_16_col118; - for (i, &input) in [((carry_16_col118) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[17] = input; - } - *lookup_data.range_check_19_17 = [((carry_16_col118) + (M31_131072))]; - let carry_17_col119 = - (((conv_mod_tmp_42314_89) + (carry_16_col118)) * (M31_4194304)); - *row[119] = carry_17_col119; - for (i, &input) in [((carry_17_col119) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[18] = input; - } - *lookup_data.range_check_19_18 = [((carry_17_col119) + (M31_131072))]; - let carry_18_col120 = - (((conv_mod_tmp_42314_90) + (carry_17_col119)) * (M31_4194304)); - *row[120] = carry_18_col120; - for (i, &input) in [((carry_18_col120) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[19] = input; - } - *lookup_data.range_check_19_19 = [((carry_18_col120) + (M31_131072))]; - let carry_19_col121 = - (((conv_mod_tmp_42314_91) + (carry_18_col120)) * (M31_4194304)); - *row[121] = carry_19_col121; - for (i, &input) in [((carry_19_col121) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[20] = input; - } - *lookup_data.range_check_19_20 = [((carry_19_col121) + (M31_131072))]; - let carry_20_col122 = - (((conv_mod_tmp_42314_92) + (carry_19_col121)) * (M31_4194304)); - *row[122] = carry_20_col122; - for (i, &input) in [((carry_20_col122) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[21] = input; - } - *lookup_data.range_check_19_21 = [((carry_20_col122) + (M31_131072))]; - let carry_21_col123 = ((((conv_mod_tmp_42314_93) - ((M31_136) * (k_col101))) - + (carry_20_col122)) - * (M31_4194304)); - *row[123] = carry_21_col123; - for (i, &input) in [((carry_21_col123) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[22] = input; - } - *lookup_data.range_check_19_22 = [((carry_21_col123) + (M31_131072))]; - let carry_22_col124 = - (((conv_mod_tmp_42314_94) + (carry_21_col123)) * (M31_4194304)); - *row[124] = carry_22_col124; - for (i, &input) in [((carry_22_col124) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[23] = input; - } - *lookup_data.range_check_19_23 = [((carry_22_col124) + (M31_131072))]; - let carry_23_col125 = - (((conv_mod_tmp_42314_95) + (carry_22_col124)) * (M31_4194304)); - *row[125] = carry_23_col125; - for (i, &input) in [((carry_23_col125) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[24] = input; - } - *lookup_data.range_check_19_24 = [((carry_23_col125) + (M31_131072))]; - let carry_24_col126 = - (((conv_mod_tmp_42314_96) + (carry_23_col125)) * (M31_4194304)); - *row[126] = carry_24_col126; - for (i, &input) in [((carry_24_col126) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[25] = input; - } - *lookup_data.range_check_19_25 = [((carry_24_col126) + (M31_131072))]; - let carry_25_col127 = - (((conv_mod_tmp_42314_97) + (carry_24_col126)) * (M31_4194304)); - *row[127] = carry_25_col127; - for (i, &input) in [((carry_25_col127) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[26] = input; - } - *lookup_data.range_check_19_26 = [((carry_25_col127) + (M31_131072))]; - let carry_26_col128 = - (((conv_mod_tmp_42314_98) + (carry_25_col127)) * (M31_4194304)); - *row[128] = carry_26_col128; - for (i, &input) in [((carry_26_col128) + (M31_131072))] - .unpack() - .iter() - .enumerate() + let conv_tmp_42314_17 = + (((M31_0) - (dst_limb_0_col15)) + ((op0_limb_0_col44) * (op1_limb_0_col73))); + let conv_tmp_42314_18 = ((((M31_0) - (dst_limb_1_col16)) + + ((op0_limb_0_col44) * (op1_limb_1_col74))) + + ((op0_limb_1_col45) * (op1_limb_0_col73))); + let conv_tmp_42314_19 = (((((M31_0) - (dst_limb_2_col17)) + + ((op0_limb_0_col44) * (op1_limb_2_col75))) + + ((op0_limb_1_col45) * (op1_limb_1_col74))) + + ((op0_limb_2_col46) * (op1_limb_0_col73))); + let conv_tmp_42314_20 = ((((((M31_0) - (dst_limb_3_col18)) + + ((op0_limb_0_col44) * (op1_limb_3_col76))) + + ((op0_limb_1_col45) * (op1_limb_2_col75))) + + ((op0_limb_2_col46) * (op1_limb_1_col74))) + + ((op0_limb_3_col47) * (op1_limb_0_col73))); + let conv_tmp_42314_21 = (((((((M31_0) - (dst_limb_4_col19)) + + ((op0_limb_0_col44) * (op1_limb_4_col77))) + + ((op0_limb_1_col45) * (op1_limb_3_col76))) + + ((op0_limb_2_col46) * (op1_limb_2_col75))) + + ((op0_limb_3_col47) * (op1_limb_1_col74))) + + ((op0_limb_4_col48) * (op1_limb_0_col73))); + let conv_tmp_42314_22 = ((((((((M31_0) - (dst_limb_5_col20)) + + ((op0_limb_0_col44) * (op1_limb_5_col78))) + + ((op0_limb_1_col45) * (op1_limb_4_col77))) + + ((op0_limb_2_col46) * (op1_limb_3_col76))) + + ((op0_limb_3_col47) * (op1_limb_2_col75))) + + ((op0_limb_4_col48) * (op1_limb_1_col74))) + + ((op0_limb_5_col49) * (op1_limb_0_col73))); + let conv_tmp_42314_23 = (((((((((M31_0) - (dst_limb_6_col21)) + + ((op0_limb_0_col44) * (op1_limb_6_col79))) + + ((op0_limb_1_col45) * (op1_limb_5_col78))) + + ((op0_limb_2_col46) * (op1_limb_4_col77))) + + ((op0_limb_3_col47) * (op1_limb_3_col76))) + + ((op0_limb_4_col48) * (op1_limb_2_col75))) + + ((op0_limb_5_col49) * (op1_limb_1_col74))) + + ((op0_limb_6_col50) * (op1_limb_0_col73))); + let conv_tmp_42314_24 = ((((((((((M31_0) - (dst_limb_7_col22)) + + ((op0_limb_0_col44) * (op1_limb_7_col80))) + + ((op0_limb_1_col45) * (op1_limb_6_col79))) + + ((op0_limb_2_col46) * (op1_limb_5_col78))) + + ((op0_limb_3_col47) * (op1_limb_4_col77))) + + ((op0_limb_4_col48) * (op1_limb_3_col76))) + + ((op0_limb_5_col49) * (op1_limb_2_col75))) + + ((op0_limb_6_col50) * (op1_limb_1_col74))) + + ((op0_limb_7_col51) * (op1_limb_0_col73))); + let conv_tmp_42314_25 = (((((((((((M31_0) - (dst_limb_8_col23)) + + ((op0_limb_0_col44) * (op1_limb_8_col81))) + + ((op0_limb_1_col45) * (op1_limb_7_col80))) + + ((op0_limb_2_col46) * (op1_limb_6_col79))) + + ((op0_limb_3_col47) * (op1_limb_5_col78))) + + ((op0_limb_4_col48) * (op1_limb_4_col77))) + + ((op0_limb_5_col49) * (op1_limb_3_col76))) + + ((op0_limb_6_col50) * (op1_limb_2_col75))) + + ((op0_limb_7_col51) * (op1_limb_1_col74))) + + ((op0_limb_8_col52) * (op1_limb_0_col73))); + let conv_tmp_42314_26 = ((((((((((((M31_0) - (dst_limb_9_col24)) + + ((op0_limb_0_col44) * (op1_limb_9_col82))) + + ((op0_limb_1_col45) * (op1_limb_8_col81))) + + ((op0_limb_2_col46) * (op1_limb_7_col80))) + + ((op0_limb_3_col47) * (op1_limb_6_col79))) + + ((op0_limb_4_col48) * (op1_limb_5_col78))) + + ((op0_limb_5_col49) * (op1_limb_4_col77))) + + ((op0_limb_6_col50) * (op1_limb_3_col76))) + + ((op0_limb_7_col51) * (op1_limb_2_col75))) + + ((op0_limb_8_col52) * (op1_limb_1_col74))) + + ((op0_limb_9_col53) * (op1_limb_0_col73))); + let conv_tmp_42314_27 = (((((((((((((M31_0) - (dst_limb_10_col25)) + + ((op0_limb_0_col44) * (op1_limb_10_col83))) + + ((op0_limb_1_col45) * (op1_limb_9_col82))) + + ((op0_limb_2_col46) * (op1_limb_8_col81))) + + ((op0_limb_3_col47) * (op1_limb_7_col80))) + + ((op0_limb_4_col48) * (op1_limb_6_col79))) + + ((op0_limb_5_col49) * (op1_limb_5_col78))) + + ((op0_limb_6_col50) * (op1_limb_4_col77))) + + ((op0_limb_7_col51) * (op1_limb_3_col76))) + + ((op0_limb_8_col52) * (op1_limb_2_col75))) + + ((op0_limb_9_col53) * (op1_limb_1_col74))) + + ((op0_limb_10_col54) * (op1_limb_0_col73))); + let conv_tmp_42314_28 = ((((((((((((((M31_0) - (dst_limb_11_col26)) + + ((op0_limb_0_col44) * (op1_limb_11_col84))) + + ((op0_limb_1_col45) * (op1_limb_10_col83))) + + ((op0_limb_2_col46) * (op1_limb_9_col82))) + + ((op0_limb_3_col47) * (op1_limb_8_col81))) + + ((op0_limb_4_col48) * (op1_limb_7_col80))) + + ((op0_limb_5_col49) * (op1_limb_6_col79))) + + ((op0_limb_6_col50) * (op1_limb_5_col78))) + + ((op0_limb_7_col51) * (op1_limb_4_col77))) + + ((op0_limb_8_col52) * (op1_limb_3_col76))) + + ((op0_limb_9_col53) * (op1_limb_2_col75))) + + ((op0_limb_10_col54) * (op1_limb_1_col74))) + + ((op0_limb_11_col55) * (op1_limb_0_col73))); + let conv_tmp_42314_29 = (((((((((((((((M31_0) - (dst_limb_12_col27)) + + ((op0_limb_0_col44) * (op1_limb_12_col85))) + + ((op0_limb_1_col45) * (op1_limb_11_col84))) + + ((op0_limb_2_col46) * (op1_limb_10_col83))) + + ((op0_limb_3_col47) * (op1_limb_9_col82))) + + ((op0_limb_4_col48) * (op1_limb_8_col81))) + + ((op0_limb_5_col49) * (op1_limb_7_col80))) + + ((op0_limb_6_col50) * (op1_limb_6_col79))) + + ((op0_limb_7_col51) * (op1_limb_5_col78))) + + ((op0_limb_8_col52) * (op1_limb_4_col77))) + + ((op0_limb_9_col53) * (op1_limb_3_col76))) + + ((op0_limb_10_col54) * (op1_limb_2_col75))) + + ((op0_limb_11_col55) * (op1_limb_1_col74))) + + ((op0_limb_12_col56) * (op1_limb_0_col73))); + let conv_tmp_42314_30 = ((((((((((((((((M31_0) - (dst_limb_13_col28)) + + ((op0_limb_0_col44) * (op1_limb_13_col86))) + + ((op0_limb_1_col45) * (op1_limb_12_col85))) + + ((op0_limb_2_col46) * (op1_limb_11_col84))) + + ((op0_limb_3_col47) * (op1_limb_10_col83))) + + ((op0_limb_4_col48) * (op1_limb_9_col82))) + + ((op0_limb_5_col49) * (op1_limb_8_col81))) + + ((op0_limb_6_col50) * (op1_limb_7_col80))) + + ((op0_limb_7_col51) * (op1_limb_6_col79))) + + ((op0_limb_8_col52) * (op1_limb_5_col78))) + + ((op0_limb_9_col53) * (op1_limb_4_col77))) + + ((op0_limb_10_col54) * (op1_limb_3_col76))) + + ((op0_limb_11_col55) * (op1_limb_2_col75))) + + ((op0_limb_12_col56) * (op1_limb_1_col74))) + + ((op0_limb_13_col57) * (op1_limb_0_col73))); + let conv_tmp_42314_31 = (((((((((((((((((M31_0) - (dst_limb_14_col29)) + + ((op0_limb_0_col44) * (op1_limb_14_col87))) + + ((op0_limb_1_col45) * (op1_limb_13_col86))) + + ((op0_limb_2_col46) * (op1_limb_12_col85))) + + ((op0_limb_3_col47) * (op1_limb_11_col84))) + + ((op0_limb_4_col48) * (op1_limb_10_col83))) + + ((op0_limb_5_col49) * (op1_limb_9_col82))) + + ((op0_limb_6_col50) * (op1_limb_8_col81))) + + ((op0_limb_7_col51) * (op1_limb_7_col80))) + + ((op0_limb_8_col52) * (op1_limb_6_col79))) + + ((op0_limb_9_col53) * (op1_limb_5_col78))) + + ((op0_limb_10_col54) * (op1_limb_4_col77))) + + ((op0_limb_11_col55) * (op1_limb_3_col76))) + + ((op0_limb_12_col56) * (op1_limb_2_col75))) + + ((op0_limb_13_col57) * (op1_limb_1_col74))) + + ((op0_limb_14_col58) * (op1_limb_0_col73))); + let conv_tmp_42314_32 = ((((((((((((((((((M31_0) - (dst_limb_15_col30)) + + ((op0_limb_0_col44) * (op1_limb_15_col88))) + + ((op0_limb_1_col45) * (op1_limb_14_col87))) + + ((op0_limb_2_col46) * (op1_limb_13_col86))) + + ((op0_limb_3_col47) * (op1_limb_12_col85))) + + ((op0_limb_4_col48) * (op1_limb_11_col84))) + + ((op0_limb_5_col49) * (op1_limb_10_col83))) + + ((op0_limb_6_col50) * (op1_limb_9_col82))) + + ((op0_limb_7_col51) * (op1_limb_8_col81))) + + ((op0_limb_8_col52) * (op1_limb_7_col80))) + + ((op0_limb_9_col53) * (op1_limb_6_col79))) + + ((op0_limb_10_col54) * (op1_limb_5_col78))) + + ((op0_limb_11_col55) * (op1_limb_4_col77))) + + ((op0_limb_12_col56) * (op1_limb_3_col76))) + + ((op0_limb_13_col57) * (op1_limb_2_col75))) + + ((op0_limb_14_col58) * (op1_limb_1_col74))) + + ((op0_limb_15_col59) * (op1_limb_0_col73))); + let conv_tmp_42314_33 = (((((((((((((((((((M31_0) + - (dst_limb_16_col31)) + + ((op0_limb_0_col44) * (op1_limb_16_col89))) + + ((op0_limb_1_col45) * (op1_limb_15_col88))) + + ((op0_limb_2_col46) * (op1_limb_14_col87))) + + ((op0_limb_3_col47) * (op1_limb_13_col86))) + + ((op0_limb_4_col48) * (op1_limb_12_col85))) + + ((op0_limb_5_col49) * (op1_limb_11_col84))) + + ((op0_limb_6_col50) * (op1_limb_10_col83))) + + ((op0_limb_7_col51) * (op1_limb_9_col82))) + + ((op0_limb_8_col52) * (op1_limb_8_col81))) + + ((op0_limb_9_col53) * (op1_limb_7_col80))) + + ((op0_limb_10_col54) * (op1_limb_6_col79))) + + ((op0_limb_11_col55) * (op1_limb_5_col78))) + + ((op0_limb_12_col56) * (op1_limb_4_col77))) + + ((op0_limb_13_col57) * (op1_limb_3_col76))) + + ((op0_limb_14_col58) * (op1_limb_2_col75))) + + ((op0_limb_15_col59) * (op1_limb_1_col74))) + + ((op0_limb_16_col60) * (op1_limb_0_col73))); + let conv_tmp_42314_34 = ((((((((((((((((((((M31_0) + - (dst_limb_17_col32)) + + ((op0_limb_0_col44) * (op1_limb_17_col90))) + + ((op0_limb_1_col45) * (op1_limb_16_col89))) + + ((op0_limb_2_col46) * (op1_limb_15_col88))) + + ((op0_limb_3_col47) * (op1_limb_14_col87))) + + ((op0_limb_4_col48) * (op1_limb_13_col86))) + + ((op0_limb_5_col49) * (op1_limb_12_col85))) + + ((op0_limb_6_col50) * (op1_limb_11_col84))) + + ((op0_limb_7_col51) * (op1_limb_10_col83))) + + ((op0_limb_8_col52) * (op1_limb_9_col82))) + + ((op0_limb_9_col53) * (op1_limb_8_col81))) + + ((op0_limb_10_col54) * (op1_limb_7_col80))) + + ((op0_limb_11_col55) * (op1_limb_6_col79))) + + ((op0_limb_12_col56) * (op1_limb_5_col78))) + + ((op0_limb_13_col57) * (op1_limb_4_col77))) + + ((op0_limb_14_col58) * (op1_limb_3_col76))) + + ((op0_limb_15_col59) * (op1_limb_2_col75))) + + ((op0_limb_16_col60) * (op1_limb_1_col74))) + + ((op0_limb_17_col61) * (op1_limb_0_col73))); + let conv_tmp_42314_35 = (((((((((((((((((((((M31_0) + - (dst_limb_18_col33)) + + ((op0_limb_0_col44) * (op1_limb_18_col91))) + + ((op0_limb_1_col45) * (op1_limb_17_col90))) + + ((op0_limb_2_col46) * (op1_limb_16_col89))) + + ((op0_limb_3_col47) * (op1_limb_15_col88))) + + ((op0_limb_4_col48) * (op1_limb_14_col87))) + + ((op0_limb_5_col49) * (op1_limb_13_col86))) + + ((op0_limb_6_col50) * (op1_limb_12_col85))) + + ((op0_limb_7_col51) * (op1_limb_11_col84))) + + ((op0_limb_8_col52) * (op1_limb_10_col83))) + + ((op0_limb_9_col53) * (op1_limb_9_col82))) + + ((op0_limb_10_col54) * (op1_limb_8_col81))) + + ((op0_limb_11_col55) * (op1_limb_7_col80))) + + ((op0_limb_12_col56) * (op1_limb_6_col79))) + + ((op0_limb_13_col57) * (op1_limb_5_col78))) + + ((op0_limb_14_col58) * (op1_limb_4_col77))) + + ((op0_limb_15_col59) * (op1_limb_3_col76))) + + ((op0_limb_16_col60) * (op1_limb_2_col75))) + + ((op0_limb_17_col61) * (op1_limb_1_col74))) + + ((op0_limb_18_col62) * (op1_limb_0_col73))); + let conv_tmp_42314_36 = ((((((((((((((((((((((M31_0) + - (dst_limb_19_col34)) + + ((op0_limb_0_col44) * (op1_limb_19_col92))) + + ((op0_limb_1_col45) * (op1_limb_18_col91))) + + ((op0_limb_2_col46) * (op1_limb_17_col90))) + + ((op0_limb_3_col47) * (op1_limb_16_col89))) + + ((op0_limb_4_col48) * (op1_limb_15_col88))) + + ((op0_limb_5_col49) * (op1_limb_14_col87))) + + ((op0_limb_6_col50) * (op1_limb_13_col86))) + + ((op0_limb_7_col51) * (op1_limb_12_col85))) + + ((op0_limb_8_col52) * (op1_limb_11_col84))) + + ((op0_limb_9_col53) * (op1_limb_10_col83))) + + ((op0_limb_10_col54) * (op1_limb_9_col82))) + + ((op0_limb_11_col55) * (op1_limb_8_col81))) + + ((op0_limb_12_col56) * (op1_limb_7_col80))) + + ((op0_limb_13_col57) * (op1_limb_6_col79))) + + ((op0_limb_14_col58) * (op1_limb_5_col78))) + + ((op0_limb_15_col59) * (op1_limb_4_col77))) + + ((op0_limb_16_col60) * (op1_limb_3_col76))) + + ((op0_limb_17_col61) * (op1_limb_2_col75))) + + ((op0_limb_18_col62) * (op1_limb_1_col74))) + + ((op0_limb_19_col63) * (op1_limb_0_col73))); + let conv_tmp_42314_37 = (((((((((((((((((((((((M31_0) + - (dst_limb_20_col35)) + + ((op0_limb_0_col44) * (op1_limb_20_col93))) + + ((op0_limb_1_col45) * (op1_limb_19_col92))) + + ((op0_limb_2_col46) * (op1_limb_18_col91))) + + ((op0_limb_3_col47) * (op1_limb_17_col90))) + + ((op0_limb_4_col48) * (op1_limb_16_col89))) + + ((op0_limb_5_col49) * (op1_limb_15_col88))) + + ((op0_limb_6_col50) * (op1_limb_14_col87))) + + ((op0_limb_7_col51) * (op1_limb_13_col86))) + + ((op0_limb_8_col52) * (op1_limb_12_col85))) + + ((op0_limb_9_col53) * (op1_limb_11_col84))) + + ((op0_limb_10_col54) * (op1_limb_10_col83))) + + ((op0_limb_11_col55) * (op1_limb_9_col82))) + + ((op0_limb_12_col56) * (op1_limb_8_col81))) + + ((op0_limb_13_col57) * (op1_limb_7_col80))) + + ((op0_limb_14_col58) * (op1_limb_6_col79))) + + ((op0_limb_15_col59) * (op1_limb_5_col78))) + + ((op0_limb_16_col60) * (op1_limb_4_col77))) + + ((op0_limb_17_col61) * (op1_limb_3_col76))) + + ((op0_limb_18_col62) * (op1_limb_2_col75))) + + ((op0_limb_19_col63) * (op1_limb_1_col74))) + + ((op0_limb_20_col64) * (op1_limb_0_col73))); + let conv_tmp_42314_38 = ((((((((((((((((((((((((M31_0) + - (dst_limb_21_col36)) + + ((op0_limb_0_col44) * (op1_limb_21_col94))) + + ((op0_limb_1_col45) * (op1_limb_20_col93))) + + ((op0_limb_2_col46) * (op1_limb_19_col92))) + + ((op0_limb_3_col47) * (op1_limb_18_col91))) + + ((op0_limb_4_col48) * (op1_limb_17_col90))) + + ((op0_limb_5_col49) * (op1_limb_16_col89))) + + ((op0_limb_6_col50) * (op1_limb_15_col88))) + + ((op0_limb_7_col51) * (op1_limb_14_col87))) + + ((op0_limb_8_col52) * (op1_limb_13_col86))) + + ((op0_limb_9_col53) * (op1_limb_12_col85))) + + ((op0_limb_10_col54) * (op1_limb_11_col84))) + + ((op0_limb_11_col55) * (op1_limb_10_col83))) + + ((op0_limb_12_col56) * (op1_limb_9_col82))) + + ((op0_limb_13_col57) * (op1_limb_8_col81))) + + ((op0_limb_14_col58) * (op1_limb_7_col80))) + + ((op0_limb_15_col59) * (op1_limb_6_col79))) + + ((op0_limb_16_col60) * (op1_limb_5_col78))) + + ((op0_limb_17_col61) * (op1_limb_4_col77))) + + ((op0_limb_18_col62) * (op1_limb_3_col76))) + + ((op0_limb_19_col63) * (op1_limb_2_col75))) + + ((op0_limb_20_col64) * (op1_limb_1_col74))) + + ((op0_limb_21_col65) * (op1_limb_0_col73))); + let conv_tmp_42314_39 = (((((((((((((((((((((((((M31_0) + - (dst_limb_22_col37)) + + ((op0_limb_0_col44) * (op1_limb_22_col95))) + + ((op0_limb_1_col45) * (op1_limb_21_col94))) + + ((op0_limb_2_col46) * (op1_limb_20_col93))) + + ((op0_limb_3_col47) * (op1_limb_19_col92))) + + ((op0_limb_4_col48) * (op1_limb_18_col91))) + + ((op0_limb_5_col49) * (op1_limb_17_col90))) + + ((op0_limb_6_col50) * (op1_limb_16_col89))) + + ((op0_limb_7_col51) * (op1_limb_15_col88))) + + ((op0_limb_8_col52) * (op1_limb_14_col87))) + + ((op0_limb_9_col53) * (op1_limb_13_col86))) + + ((op0_limb_10_col54) * (op1_limb_12_col85))) + + ((op0_limb_11_col55) * (op1_limb_11_col84))) + + ((op0_limb_12_col56) * (op1_limb_10_col83))) + + ((op0_limb_13_col57) * (op1_limb_9_col82))) + + ((op0_limb_14_col58) * (op1_limb_8_col81))) + + ((op0_limb_15_col59) * (op1_limb_7_col80))) + + ((op0_limb_16_col60) * (op1_limb_6_col79))) + + ((op0_limb_17_col61) * (op1_limb_5_col78))) + + ((op0_limb_18_col62) * (op1_limb_4_col77))) + + ((op0_limb_19_col63) * (op1_limb_3_col76))) + + ((op0_limb_20_col64) * (op1_limb_2_col75))) + + ((op0_limb_21_col65) * (op1_limb_1_col74))) + + ((op0_limb_22_col66) * (op1_limb_0_col73))); + let conv_tmp_42314_40 = ((((((((((((((((((((((((((M31_0) + - (dst_limb_23_col38)) + + ((op0_limb_0_col44) * (op1_limb_23_col96))) + + ((op0_limb_1_col45) * (op1_limb_22_col95))) + + ((op0_limb_2_col46) * (op1_limb_21_col94))) + + ((op0_limb_3_col47) * (op1_limb_20_col93))) + + ((op0_limb_4_col48) * (op1_limb_19_col92))) + + ((op0_limb_5_col49) * (op1_limb_18_col91))) + + ((op0_limb_6_col50) * (op1_limb_17_col90))) + + ((op0_limb_7_col51) * (op1_limb_16_col89))) + + ((op0_limb_8_col52) * (op1_limb_15_col88))) + + ((op0_limb_9_col53) * (op1_limb_14_col87))) + + ((op0_limb_10_col54) * (op1_limb_13_col86))) + + ((op0_limb_11_col55) * (op1_limb_12_col85))) + + ((op0_limb_12_col56) * (op1_limb_11_col84))) + + ((op0_limb_13_col57) * (op1_limb_10_col83))) + + ((op0_limb_14_col58) * (op1_limb_9_col82))) + + ((op0_limb_15_col59) * (op1_limb_8_col81))) + + ((op0_limb_16_col60) * (op1_limb_7_col80))) + + ((op0_limb_17_col61) * (op1_limb_6_col79))) + + ((op0_limb_18_col62) * (op1_limb_5_col78))) + + ((op0_limb_19_col63) * (op1_limb_4_col77))) + + ((op0_limb_20_col64) * (op1_limb_3_col76))) + + ((op0_limb_21_col65) * (op1_limb_2_col75))) + + ((op0_limb_22_col66) * (op1_limb_1_col74))) + + ((op0_limb_23_col67) * (op1_limb_0_col73))); + let conv_tmp_42314_41 = (((((((((((((((((((((((((((M31_0) + - (dst_limb_24_col39)) + + ((op0_limb_0_col44) * (op1_limb_24_col97))) + + ((op0_limb_1_col45) * (op1_limb_23_col96))) + + ((op0_limb_2_col46) * (op1_limb_22_col95))) + + ((op0_limb_3_col47) * (op1_limb_21_col94))) + + ((op0_limb_4_col48) * (op1_limb_20_col93))) + + ((op0_limb_5_col49) * (op1_limb_19_col92))) + + ((op0_limb_6_col50) * (op1_limb_18_col91))) + + ((op0_limb_7_col51) * (op1_limb_17_col90))) + + ((op0_limb_8_col52) * (op1_limb_16_col89))) + + ((op0_limb_9_col53) * (op1_limb_15_col88))) + + ((op0_limb_10_col54) * (op1_limb_14_col87))) + + ((op0_limb_11_col55) * (op1_limb_13_col86))) + + ((op0_limb_12_col56) * (op1_limb_12_col85))) + + ((op0_limb_13_col57) * (op1_limb_11_col84))) + + ((op0_limb_14_col58) * (op1_limb_10_col83))) + + ((op0_limb_15_col59) * (op1_limb_9_col82))) + + ((op0_limb_16_col60) * (op1_limb_8_col81))) + + ((op0_limb_17_col61) * (op1_limb_7_col80))) + + ((op0_limb_18_col62) * (op1_limb_6_col79))) + + ((op0_limb_19_col63) * (op1_limb_5_col78))) + + ((op0_limb_20_col64) * (op1_limb_4_col77))) + + ((op0_limb_21_col65) * (op1_limb_3_col76))) + + ((op0_limb_22_col66) * (op1_limb_2_col75))) + + ((op0_limb_23_col67) * (op1_limb_1_col74))) + + ((op0_limb_24_col68) * (op1_limb_0_col73))); + let conv_tmp_42314_42 = ((((((((((((((((((((((((((((M31_0) + - (dst_limb_25_col40)) + + ((op0_limb_0_col44) * (op1_limb_25_col98))) + + ((op0_limb_1_col45) * (op1_limb_24_col97))) + + ((op0_limb_2_col46) * (op1_limb_23_col96))) + + ((op0_limb_3_col47) * (op1_limb_22_col95))) + + ((op0_limb_4_col48) * (op1_limb_21_col94))) + + ((op0_limb_5_col49) * (op1_limb_20_col93))) + + ((op0_limb_6_col50) * (op1_limb_19_col92))) + + ((op0_limb_7_col51) * (op1_limb_18_col91))) + + ((op0_limb_8_col52) * (op1_limb_17_col90))) + + ((op0_limb_9_col53) * (op1_limb_16_col89))) + + ((op0_limb_10_col54) * (op1_limb_15_col88))) + + ((op0_limb_11_col55) * (op1_limb_14_col87))) + + ((op0_limb_12_col56) * (op1_limb_13_col86))) + + ((op0_limb_13_col57) * (op1_limb_12_col85))) + + ((op0_limb_14_col58) * (op1_limb_11_col84))) + + ((op0_limb_15_col59) * (op1_limb_10_col83))) + + ((op0_limb_16_col60) * (op1_limb_9_col82))) + + ((op0_limb_17_col61) * (op1_limb_8_col81))) + + ((op0_limb_18_col62) * (op1_limb_7_col80))) + + ((op0_limb_19_col63) * (op1_limb_6_col79))) + + ((op0_limb_20_col64) * (op1_limb_5_col78))) + + ((op0_limb_21_col65) * (op1_limb_4_col77))) + + ((op0_limb_22_col66) * (op1_limb_3_col76))) + + ((op0_limb_23_col67) * (op1_limb_2_col75))) + + ((op0_limb_24_col68) * (op1_limb_1_col74))) + + ((op0_limb_25_col69) * (op1_limb_0_col73))); + let conv_tmp_42314_43 = (((((((((((((((((((((((((((((M31_0) + - (dst_limb_26_col41)) + + ((op0_limb_0_col44) * (op1_limb_26_col99))) + + ((op0_limb_1_col45) * (op1_limb_25_col98))) + + ((op0_limb_2_col46) * (op1_limb_24_col97))) + + ((op0_limb_3_col47) * (op1_limb_23_col96))) + + ((op0_limb_4_col48) * (op1_limb_22_col95))) + + ((op0_limb_5_col49) * (op1_limb_21_col94))) + + ((op0_limb_6_col50) * (op1_limb_20_col93))) + + ((op0_limb_7_col51) * (op1_limb_19_col92))) + + ((op0_limb_8_col52) * (op1_limb_18_col91))) + + ((op0_limb_9_col53) * (op1_limb_17_col90))) + + ((op0_limb_10_col54) * (op1_limb_16_col89))) + + ((op0_limb_11_col55) * (op1_limb_15_col88))) + + ((op0_limb_12_col56) * (op1_limb_14_col87))) + + ((op0_limb_13_col57) * (op1_limb_13_col86))) + + ((op0_limb_14_col58) * (op1_limb_12_col85))) + + ((op0_limb_15_col59) * (op1_limb_11_col84))) + + ((op0_limb_16_col60) * (op1_limb_10_col83))) + + ((op0_limb_17_col61) * (op1_limb_9_col82))) + + ((op0_limb_18_col62) * (op1_limb_8_col81))) + + ((op0_limb_19_col63) * (op1_limb_7_col80))) + + ((op0_limb_20_col64) * (op1_limb_6_col79))) + + ((op0_limb_21_col65) * (op1_limb_5_col78))) + + ((op0_limb_22_col66) * (op1_limb_4_col77))) + + ((op0_limb_23_col67) * (op1_limb_3_col76))) + + ((op0_limb_24_col68) * (op1_limb_2_col75))) + + ((op0_limb_25_col69) * (op1_limb_1_col74))) + + ((op0_limb_26_col70) * (op1_limb_0_col73))); + let conv_tmp_42314_44 = ((((((((((((((((((((((((((((((M31_0) + - (dst_limb_27_col42)) + + ((op0_limb_0_col44) * (op1_limb_27_col100))) + + ((op0_limb_1_col45) * (op1_limb_26_col99))) + + ((op0_limb_2_col46) * (op1_limb_25_col98))) + + ((op0_limb_3_col47) * (op1_limb_24_col97))) + + ((op0_limb_4_col48) * (op1_limb_23_col96))) + + ((op0_limb_5_col49) * (op1_limb_22_col95))) + + ((op0_limb_6_col50) * (op1_limb_21_col94))) + + ((op0_limb_7_col51) * (op1_limb_20_col93))) + + ((op0_limb_8_col52) * (op1_limb_19_col92))) + + ((op0_limb_9_col53) * (op1_limb_18_col91))) + + ((op0_limb_10_col54) * (op1_limb_17_col90))) + + ((op0_limb_11_col55) * (op1_limb_16_col89))) + + ((op0_limb_12_col56) * (op1_limb_15_col88))) + + ((op0_limb_13_col57) * (op1_limb_14_col87))) + + ((op0_limb_14_col58) * (op1_limb_13_col86))) + + ((op0_limb_15_col59) * (op1_limb_12_col85))) + + ((op0_limb_16_col60) * (op1_limb_11_col84))) + + ((op0_limb_17_col61) * (op1_limb_10_col83))) + + ((op0_limb_18_col62) * (op1_limb_9_col82))) + + ((op0_limb_19_col63) * (op1_limb_8_col81))) + + ((op0_limb_20_col64) * (op1_limb_7_col80))) + + ((op0_limb_21_col65) * (op1_limb_6_col79))) + + ((op0_limb_22_col66) * (op1_limb_5_col78))) + + ((op0_limb_23_col67) * (op1_limb_4_col77))) + + ((op0_limb_24_col68) * (op1_limb_3_col76))) + + ((op0_limb_25_col69) * (op1_limb_2_col75))) + + ((op0_limb_26_col70) * (op1_limb_1_col74))) + + ((op0_limb_27_col71) * (op1_limb_0_col73))); + let conv_tmp_42314_45 = ((((((((((((((((((((((((((((M31_0) + + ((op0_limb_1_col45) * (op1_limb_27_col100))) + + ((op0_limb_2_col46) * (op1_limb_26_col99))) + + ((op0_limb_3_col47) * (op1_limb_25_col98))) + + ((op0_limb_4_col48) * (op1_limb_24_col97))) + + ((op0_limb_5_col49) * (op1_limb_23_col96))) + + ((op0_limb_6_col50) * (op1_limb_22_col95))) + + ((op0_limb_7_col51) * (op1_limb_21_col94))) + + ((op0_limb_8_col52) * (op1_limb_20_col93))) + + ((op0_limb_9_col53) * (op1_limb_19_col92))) + + ((op0_limb_10_col54) * (op1_limb_18_col91))) + + ((op0_limb_11_col55) * (op1_limb_17_col90))) + + ((op0_limb_12_col56) * (op1_limb_16_col89))) + + ((op0_limb_13_col57) * (op1_limb_15_col88))) + + ((op0_limb_14_col58) * (op1_limb_14_col87))) + + ((op0_limb_15_col59) * (op1_limb_13_col86))) + + ((op0_limb_16_col60) * (op1_limb_12_col85))) + + ((op0_limb_17_col61) * (op1_limb_11_col84))) + + ((op0_limb_18_col62) * (op1_limb_10_col83))) + + ((op0_limb_19_col63) * (op1_limb_9_col82))) + + ((op0_limb_20_col64) * (op1_limb_8_col81))) + + ((op0_limb_21_col65) * (op1_limb_7_col80))) + + ((op0_limb_22_col66) * (op1_limb_6_col79))) + + ((op0_limb_23_col67) * (op1_limb_5_col78))) + + ((op0_limb_24_col68) * (op1_limb_4_col77))) + + ((op0_limb_25_col69) * (op1_limb_3_col76))) + + ((op0_limb_26_col70) * (op1_limb_2_col75))) + + ((op0_limb_27_col71) * (op1_limb_1_col74))); + let conv_tmp_42314_46 = (((((((((((((((((((((((((((M31_0) + + ((op0_limb_2_col46) * (op1_limb_27_col100))) + + ((op0_limb_3_col47) * (op1_limb_26_col99))) + + ((op0_limb_4_col48) * (op1_limb_25_col98))) + + ((op0_limb_5_col49) * (op1_limb_24_col97))) + + ((op0_limb_6_col50) * (op1_limb_23_col96))) + + ((op0_limb_7_col51) * (op1_limb_22_col95))) + + ((op0_limb_8_col52) * (op1_limb_21_col94))) + + ((op0_limb_9_col53) * (op1_limb_20_col93))) + + ((op0_limb_10_col54) * (op1_limb_19_col92))) + + ((op0_limb_11_col55) * (op1_limb_18_col91))) + + ((op0_limb_12_col56) * (op1_limb_17_col90))) + + ((op0_limb_13_col57) * (op1_limb_16_col89))) + + ((op0_limb_14_col58) * (op1_limb_15_col88))) + + ((op0_limb_15_col59) * (op1_limb_14_col87))) + + ((op0_limb_16_col60) * (op1_limb_13_col86))) + + ((op0_limb_17_col61) * (op1_limb_12_col85))) + + ((op0_limb_18_col62) * (op1_limb_11_col84))) + + ((op0_limb_19_col63) * (op1_limb_10_col83))) + + ((op0_limb_20_col64) * (op1_limb_9_col82))) + + ((op0_limb_21_col65) * (op1_limb_8_col81))) + + ((op0_limb_22_col66) * (op1_limb_7_col80))) + + ((op0_limb_23_col67) * (op1_limb_6_col79))) + + ((op0_limb_24_col68) * (op1_limb_5_col78))) + + ((op0_limb_25_col69) * (op1_limb_4_col77))) + + ((op0_limb_26_col70) * (op1_limb_3_col76))) + + ((op0_limb_27_col71) * (op1_limb_2_col75))); + let conv_tmp_42314_47 = ((((((((((((((((((((((((((M31_0) + + ((op0_limb_3_col47) * (op1_limb_27_col100))) + + ((op0_limb_4_col48) * (op1_limb_26_col99))) + + ((op0_limb_5_col49) * (op1_limb_25_col98))) + + ((op0_limb_6_col50) * (op1_limb_24_col97))) + + ((op0_limb_7_col51) * (op1_limb_23_col96))) + + ((op0_limb_8_col52) * (op1_limb_22_col95))) + + ((op0_limb_9_col53) * (op1_limb_21_col94))) + + ((op0_limb_10_col54) * (op1_limb_20_col93))) + + ((op0_limb_11_col55) * (op1_limb_19_col92))) + + ((op0_limb_12_col56) * (op1_limb_18_col91))) + + ((op0_limb_13_col57) * (op1_limb_17_col90))) + + ((op0_limb_14_col58) * (op1_limb_16_col89))) + + ((op0_limb_15_col59) * (op1_limb_15_col88))) + + ((op0_limb_16_col60) * (op1_limb_14_col87))) + + ((op0_limb_17_col61) * (op1_limb_13_col86))) + + ((op0_limb_18_col62) * (op1_limb_12_col85))) + + ((op0_limb_19_col63) * (op1_limb_11_col84))) + + ((op0_limb_20_col64) * (op1_limb_10_col83))) + + ((op0_limb_21_col65) * (op1_limb_9_col82))) + + ((op0_limb_22_col66) * (op1_limb_8_col81))) + + ((op0_limb_23_col67) * (op1_limb_7_col80))) + + ((op0_limb_24_col68) * (op1_limb_6_col79))) + + ((op0_limb_25_col69) * (op1_limb_5_col78))) + + ((op0_limb_26_col70) * (op1_limb_4_col77))) + + ((op0_limb_27_col71) * (op1_limb_3_col76))); + let conv_tmp_42314_48 = (((((((((((((((((((((((((M31_0) + + ((op0_limb_4_col48) * (op1_limb_27_col100))) + + ((op0_limb_5_col49) * (op1_limb_26_col99))) + + ((op0_limb_6_col50) * (op1_limb_25_col98))) + + ((op0_limb_7_col51) * (op1_limb_24_col97))) + + ((op0_limb_8_col52) * (op1_limb_23_col96))) + + ((op0_limb_9_col53) * (op1_limb_22_col95))) + + ((op0_limb_10_col54) * (op1_limb_21_col94))) + + ((op0_limb_11_col55) * (op1_limb_20_col93))) + + ((op0_limb_12_col56) * (op1_limb_19_col92))) + + ((op0_limb_13_col57) * (op1_limb_18_col91))) + + ((op0_limb_14_col58) * (op1_limb_17_col90))) + + ((op0_limb_15_col59) * (op1_limb_16_col89))) + + ((op0_limb_16_col60) * (op1_limb_15_col88))) + + ((op0_limb_17_col61) * (op1_limb_14_col87))) + + ((op0_limb_18_col62) * (op1_limb_13_col86))) + + ((op0_limb_19_col63) * (op1_limb_12_col85))) + + ((op0_limb_20_col64) * (op1_limb_11_col84))) + + ((op0_limb_21_col65) * (op1_limb_10_col83))) + + ((op0_limb_22_col66) * (op1_limb_9_col82))) + + ((op0_limb_23_col67) * (op1_limb_8_col81))) + + ((op0_limb_24_col68) * (op1_limb_7_col80))) + + ((op0_limb_25_col69) * (op1_limb_6_col79))) + + ((op0_limb_26_col70) * (op1_limb_5_col78))) + + ((op0_limb_27_col71) * (op1_limb_4_col77))); + let conv_tmp_42314_49 = ((((((((((((((((((((((((M31_0) + + ((op0_limb_5_col49) * (op1_limb_27_col100))) + + ((op0_limb_6_col50) * (op1_limb_26_col99))) + + ((op0_limb_7_col51) * (op1_limb_25_col98))) + + ((op0_limb_8_col52) * (op1_limb_24_col97))) + + ((op0_limb_9_col53) * (op1_limb_23_col96))) + + ((op0_limb_10_col54) * (op1_limb_22_col95))) + + ((op0_limb_11_col55) * (op1_limb_21_col94))) + + ((op0_limb_12_col56) * (op1_limb_20_col93))) + + ((op0_limb_13_col57) * (op1_limb_19_col92))) + + ((op0_limb_14_col58) * (op1_limb_18_col91))) + + ((op0_limb_15_col59) * (op1_limb_17_col90))) + + ((op0_limb_16_col60) * (op1_limb_16_col89))) + + ((op0_limb_17_col61) * (op1_limb_15_col88))) + + ((op0_limb_18_col62) * (op1_limb_14_col87))) + + ((op0_limb_19_col63) * (op1_limb_13_col86))) + + ((op0_limb_20_col64) * (op1_limb_12_col85))) + + ((op0_limb_21_col65) * (op1_limb_11_col84))) + + ((op0_limb_22_col66) * (op1_limb_10_col83))) + + ((op0_limb_23_col67) * (op1_limb_9_col82))) + + ((op0_limb_24_col68) * (op1_limb_8_col81))) + + ((op0_limb_25_col69) * (op1_limb_7_col80))) + + ((op0_limb_26_col70) * (op1_limb_6_col79))) + + ((op0_limb_27_col71) * (op1_limb_5_col78))); + let conv_tmp_42314_50 = (((((((((((((((((((((((M31_0) + + ((op0_limb_6_col50) * (op1_limb_27_col100))) + + ((op0_limb_7_col51) * (op1_limb_26_col99))) + + ((op0_limb_8_col52) * (op1_limb_25_col98))) + + ((op0_limb_9_col53) * (op1_limb_24_col97))) + + ((op0_limb_10_col54) * (op1_limb_23_col96))) + + ((op0_limb_11_col55) * (op1_limb_22_col95))) + + ((op0_limb_12_col56) * (op1_limb_21_col94))) + + ((op0_limb_13_col57) * (op1_limb_20_col93))) + + ((op0_limb_14_col58) * (op1_limb_19_col92))) + + ((op0_limb_15_col59) * (op1_limb_18_col91))) + + ((op0_limb_16_col60) * (op1_limb_17_col90))) + + ((op0_limb_17_col61) * (op1_limb_16_col89))) + + ((op0_limb_18_col62) * (op1_limb_15_col88))) + + ((op0_limb_19_col63) * (op1_limb_14_col87))) + + ((op0_limb_20_col64) * (op1_limb_13_col86))) + + ((op0_limb_21_col65) * (op1_limb_12_col85))) + + ((op0_limb_22_col66) * (op1_limb_11_col84))) + + ((op0_limb_23_col67) * (op1_limb_10_col83))) + + ((op0_limb_24_col68) * (op1_limb_9_col82))) + + ((op0_limb_25_col69) * (op1_limb_8_col81))) + + ((op0_limb_26_col70) * (op1_limb_7_col80))) + + ((op0_limb_27_col71) * (op1_limb_6_col79))); + let conv_tmp_42314_51 = ((((((((((((((((((((((M31_0) + + ((op0_limb_7_col51) * (op1_limb_27_col100))) + + ((op0_limb_8_col52) * (op1_limb_26_col99))) + + ((op0_limb_9_col53) * (op1_limb_25_col98))) + + ((op0_limb_10_col54) * (op1_limb_24_col97))) + + ((op0_limb_11_col55) * (op1_limb_23_col96))) + + ((op0_limb_12_col56) * (op1_limb_22_col95))) + + ((op0_limb_13_col57) * (op1_limb_21_col94))) + + ((op0_limb_14_col58) * (op1_limb_20_col93))) + + ((op0_limb_15_col59) * (op1_limb_19_col92))) + + ((op0_limb_16_col60) * (op1_limb_18_col91))) + + ((op0_limb_17_col61) * (op1_limb_17_col90))) + + ((op0_limb_18_col62) * (op1_limb_16_col89))) + + ((op0_limb_19_col63) * (op1_limb_15_col88))) + + ((op0_limb_20_col64) * (op1_limb_14_col87))) + + ((op0_limb_21_col65) * (op1_limb_13_col86))) + + ((op0_limb_22_col66) * (op1_limb_12_col85))) + + ((op0_limb_23_col67) * (op1_limb_11_col84))) + + ((op0_limb_24_col68) * (op1_limb_10_col83))) + + ((op0_limb_25_col69) * (op1_limb_9_col82))) + + ((op0_limb_26_col70) * (op1_limb_8_col81))) + + ((op0_limb_27_col71) * (op1_limb_7_col80))); + let conv_tmp_42314_52 = (((((((((((((((((((((M31_0) + + ((op0_limb_8_col52) * (op1_limb_27_col100))) + + ((op0_limb_9_col53) * (op1_limb_26_col99))) + + ((op0_limb_10_col54) * (op1_limb_25_col98))) + + ((op0_limb_11_col55) * (op1_limb_24_col97))) + + ((op0_limb_12_col56) * (op1_limb_23_col96))) + + ((op0_limb_13_col57) * (op1_limb_22_col95))) + + ((op0_limb_14_col58) * (op1_limb_21_col94))) + + ((op0_limb_15_col59) * (op1_limb_20_col93))) + + ((op0_limb_16_col60) * (op1_limb_19_col92))) + + ((op0_limb_17_col61) * (op1_limb_18_col91))) + + ((op0_limb_18_col62) * (op1_limb_17_col90))) + + ((op0_limb_19_col63) * (op1_limb_16_col89))) + + ((op0_limb_20_col64) * (op1_limb_15_col88))) + + ((op0_limb_21_col65) * (op1_limb_14_col87))) + + ((op0_limb_22_col66) * (op1_limb_13_col86))) + + ((op0_limb_23_col67) * (op1_limb_12_col85))) + + ((op0_limb_24_col68) * (op1_limb_11_col84))) + + ((op0_limb_25_col69) * (op1_limb_10_col83))) + + ((op0_limb_26_col70) * (op1_limb_9_col82))) + + ((op0_limb_27_col71) * (op1_limb_8_col81))); + let conv_tmp_42314_53 = ((((((((((((((((((((M31_0) + + ((op0_limb_9_col53) * (op1_limb_27_col100))) + + ((op0_limb_10_col54) * (op1_limb_26_col99))) + + ((op0_limb_11_col55) * (op1_limb_25_col98))) + + ((op0_limb_12_col56) * (op1_limb_24_col97))) + + ((op0_limb_13_col57) * (op1_limb_23_col96))) + + ((op0_limb_14_col58) * (op1_limb_22_col95))) + + ((op0_limb_15_col59) * (op1_limb_21_col94))) + + ((op0_limb_16_col60) * (op1_limb_20_col93))) + + ((op0_limb_17_col61) * (op1_limb_19_col92))) + + ((op0_limb_18_col62) * (op1_limb_18_col91))) + + ((op0_limb_19_col63) * (op1_limb_17_col90))) + + ((op0_limb_20_col64) * (op1_limb_16_col89))) + + ((op0_limb_21_col65) * (op1_limb_15_col88))) + + ((op0_limb_22_col66) * (op1_limb_14_col87))) + + ((op0_limb_23_col67) * (op1_limb_13_col86))) + + ((op0_limb_24_col68) * (op1_limb_12_col85))) + + ((op0_limb_25_col69) * (op1_limb_11_col84))) + + ((op0_limb_26_col70) * (op1_limb_10_col83))) + + ((op0_limb_27_col71) * (op1_limb_9_col82))); + let conv_tmp_42314_54 = (((((((((((((((((((M31_0) + + ((op0_limb_10_col54) * (op1_limb_27_col100))) + + ((op0_limb_11_col55) * (op1_limb_26_col99))) + + ((op0_limb_12_col56) * (op1_limb_25_col98))) + + ((op0_limb_13_col57) * (op1_limb_24_col97))) + + ((op0_limb_14_col58) * (op1_limb_23_col96))) + + ((op0_limb_15_col59) * (op1_limb_22_col95))) + + ((op0_limb_16_col60) * (op1_limb_21_col94))) + + ((op0_limb_17_col61) * (op1_limb_20_col93))) + + ((op0_limb_18_col62) * (op1_limb_19_col92))) + + ((op0_limb_19_col63) * (op1_limb_18_col91))) + + ((op0_limb_20_col64) * (op1_limb_17_col90))) + + ((op0_limb_21_col65) * (op1_limb_16_col89))) + + ((op0_limb_22_col66) * (op1_limb_15_col88))) + + ((op0_limb_23_col67) * (op1_limb_14_col87))) + + ((op0_limb_24_col68) * (op1_limb_13_col86))) + + ((op0_limb_25_col69) * (op1_limb_12_col85))) + + ((op0_limb_26_col70) * (op1_limb_11_col84))) + + ((op0_limb_27_col71) * (op1_limb_10_col83))); + let conv_tmp_42314_55 = ((((((((((((((((((M31_0) + + ((op0_limb_11_col55) * (op1_limb_27_col100))) + + ((op0_limb_12_col56) * (op1_limb_26_col99))) + + ((op0_limb_13_col57) * (op1_limb_25_col98))) + + ((op0_limb_14_col58) * (op1_limb_24_col97))) + + ((op0_limb_15_col59) * (op1_limb_23_col96))) + + ((op0_limb_16_col60) * (op1_limb_22_col95))) + + ((op0_limb_17_col61) * (op1_limb_21_col94))) + + ((op0_limb_18_col62) * (op1_limb_20_col93))) + + ((op0_limb_19_col63) * (op1_limb_19_col92))) + + ((op0_limb_20_col64) * (op1_limb_18_col91))) + + ((op0_limb_21_col65) * (op1_limb_17_col90))) + + ((op0_limb_22_col66) * (op1_limb_16_col89))) + + ((op0_limb_23_col67) * (op1_limb_15_col88))) + + ((op0_limb_24_col68) * (op1_limb_14_col87))) + + ((op0_limb_25_col69) * (op1_limb_13_col86))) + + ((op0_limb_26_col70) * (op1_limb_12_col85))) + + ((op0_limb_27_col71) * (op1_limb_11_col84))); + let conv_tmp_42314_56 = (((((((((((((((((M31_0) + + ((op0_limb_12_col56) * (op1_limb_27_col100))) + + ((op0_limb_13_col57) * (op1_limb_26_col99))) + + ((op0_limb_14_col58) * (op1_limb_25_col98))) + + ((op0_limb_15_col59) * (op1_limb_24_col97))) + + ((op0_limb_16_col60) * (op1_limb_23_col96))) + + ((op0_limb_17_col61) * (op1_limb_22_col95))) + + ((op0_limb_18_col62) * (op1_limb_21_col94))) + + ((op0_limb_19_col63) * (op1_limb_20_col93))) + + ((op0_limb_20_col64) * (op1_limb_19_col92))) + + ((op0_limb_21_col65) * (op1_limb_18_col91))) + + ((op0_limb_22_col66) * (op1_limb_17_col90))) + + ((op0_limb_23_col67) * (op1_limb_16_col89))) + + ((op0_limb_24_col68) * (op1_limb_15_col88))) + + ((op0_limb_25_col69) * (op1_limb_14_col87))) + + ((op0_limb_26_col70) * (op1_limb_13_col86))) + + ((op0_limb_27_col71) * (op1_limb_12_col85))); + let conv_tmp_42314_57 = ((((((((((((((((M31_0) + + ((op0_limb_13_col57) * (op1_limb_27_col100))) + + ((op0_limb_14_col58) * (op1_limb_26_col99))) + + ((op0_limb_15_col59) * (op1_limb_25_col98))) + + ((op0_limb_16_col60) * (op1_limb_24_col97))) + + ((op0_limb_17_col61) * (op1_limb_23_col96))) + + ((op0_limb_18_col62) * (op1_limb_22_col95))) + + ((op0_limb_19_col63) * (op1_limb_21_col94))) + + ((op0_limb_20_col64) * (op1_limb_20_col93))) + + ((op0_limb_21_col65) * (op1_limb_19_col92))) + + ((op0_limb_22_col66) * (op1_limb_18_col91))) + + ((op0_limb_23_col67) * (op1_limb_17_col90))) + + ((op0_limb_24_col68) * (op1_limb_16_col89))) + + ((op0_limb_25_col69) * (op1_limb_15_col88))) + + ((op0_limb_26_col70) * (op1_limb_14_col87))) + + ((op0_limb_27_col71) * (op1_limb_13_col86))); + let conv_tmp_42314_58 = (((((((((((((((M31_0) + + ((op0_limb_14_col58) * (op1_limb_27_col100))) + + ((op0_limb_15_col59) * (op1_limb_26_col99))) + + ((op0_limb_16_col60) * (op1_limb_25_col98))) + + ((op0_limb_17_col61) * (op1_limb_24_col97))) + + ((op0_limb_18_col62) * (op1_limb_23_col96))) + + ((op0_limb_19_col63) * (op1_limb_22_col95))) + + ((op0_limb_20_col64) * (op1_limb_21_col94))) + + ((op0_limb_21_col65) * (op1_limb_20_col93))) + + ((op0_limb_22_col66) * (op1_limb_19_col92))) + + ((op0_limb_23_col67) * (op1_limb_18_col91))) + + ((op0_limb_24_col68) * (op1_limb_17_col90))) + + ((op0_limb_25_col69) * (op1_limb_16_col89))) + + ((op0_limb_26_col70) * (op1_limb_15_col88))) + + ((op0_limb_27_col71) * (op1_limb_14_col87))); + let conv_tmp_42314_59 = ((((((((((((((M31_0) + + ((op0_limb_15_col59) * (op1_limb_27_col100))) + + ((op0_limb_16_col60) * (op1_limb_26_col99))) + + ((op0_limb_17_col61) * (op1_limb_25_col98))) + + ((op0_limb_18_col62) * (op1_limb_24_col97))) + + ((op0_limb_19_col63) * (op1_limb_23_col96))) + + ((op0_limb_20_col64) * (op1_limb_22_col95))) + + ((op0_limb_21_col65) * (op1_limb_21_col94))) + + ((op0_limb_22_col66) * (op1_limb_20_col93))) + + ((op0_limb_23_col67) * (op1_limb_19_col92))) + + ((op0_limb_24_col68) * (op1_limb_18_col91))) + + ((op0_limb_25_col69) * (op1_limb_17_col90))) + + ((op0_limb_26_col70) * (op1_limb_16_col89))) + + ((op0_limb_27_col71) * (op1_limb_15_col88))); + let conv_tmp_42314_60 = (((((((((((((M31_0) + + ((op0_limb_16_col60) * (op1_limb_27_col100))) + + ((op0_limb_17_col61) * (op1_limb_26_col99))) + + ((op0_limb_18_col62) * (op1_limb_25_col98))) + + ((op0_limb_19_col63) * (op1_limb_24_col97))) + + ((op0_limb_20_col64) * (op1_limb_23_col96))) + + ((op0_limb_21_col65) * (op1_limb_22_col95))) + + ((op0_limb_22_col66) * (op1_limb_21_col94))) + + ((op0_limb_23_col67) * (op1_limb_20_col93))) + + ((op0_limb_24_col68) * (op1_limb_19_col92))) + + ((op0_limb_25_col69) * (op1_limb_18_col91))) + + ((op0_limb_26_col70) * (op1_limb_17_col90))) + + ((op0_limb_27_col71) * (op1_limb_16_col89))); + let conv_tmp_42314_61 = ((((((((((((M31_0) + + ((op0_limb_17_col61) * (op1_limb_27_col100))) + + ((op0_limb_18_col62) * (op1_limb_26_col99))) + + ((op0_limb_19_col63) * (op1_limb_25_col98))) + + ((op0_limb_20_col64) * (op1_limb_24_col97))) + + ((op0_limb_21_col65) * (op1_limb_23_col96))) + + ((op0_limb_22_col66) * (op1_limb_22_col95))) + + ((op0_limb_23_col67) * (op1_limb_21_col94))) + + ((op0_limb_24_col68) * (op1_limb_20_col93))) + + ((op0_limb_25_col69) * (op1_limb_19_col92))) + + ((op0_limb_26_col70) * (op1_limb_18_col91))) + + ((op0_limb_27_col71) * (op1_limb_17_col90))); + let conv_tmp_42314_62 = (((((((((((M31_0) + + ((op0_limb_18_col62) * (op1_limb_27_col100))) + + ((op0_limb_19_col63) * (op1_limb_26_col99))) + + ((op0_limb_20_col64) * (op1_limb_25_col98))) + + ((op0_limb_21_col65) * (op1_limb_24_col97))) + + ((op0_limb_22_col66) * (op1_limb_23_col96))) + + ((op0_limb_23_col67) * (op1_limb_22_col95))) + + ((op0_limb_24_col68) * (op1_limb_21_col94))) + + ((op0_limb_25_col69) * (op1_limb_20_col93))) + + ((op0_limb_26_col70) * (op1_limb_19_col92))) + + ((op0_limb_27_col71) * (op1_limb_18_col91))); + let conv_tmp_42314_63 = ((((((((((M31_0) + + ((op0_limb_19_col63) * (op1_limb_27_col100))) + + ((op0_limb_20_col64) * (op1_limb_26_col99))) + + ((op0_limb_21_col65) * (op1_limb_25_col98))) + + ((op0_limb_22_col66) * (op1_limb_24_col97))) + + ((op0_limb_23_col67) * (op1_limb_23_col96))) + + ((op0_limb_24_col68) * (op1_limb_22_col95))) + + ((op0_limb_25_col69) * (op1_limb_21_col94))) + + ((op0_limb_26_col70) * (op1_limb_20_col93))) + + ((op0_limb_27_col71) * (op1_limb_19_col92))); + let conv_tmp_42314_64 = (((((((((M31_0) + + ((op0_limb_20_col64) * (op1_limb_27_col100))) + + ((op0_limb_21_col65) * (op1_limb_26_col99))) + + ((op0_limb_22_col66) * (op1_limb_25_col98))) + + ((op0_limb_23_col67) * (op1_limb_24_col97))) + + ((op0_limb_24_col68) * (op1_limb_23_col96))) + + ((op0_limb_25_col69) * (op1_limb_22_col95))) + + ((op0_limb_26_col70) * (op1_limb_21_col94))) + + ((op0_limb_27_col71) * (op1_limb_20_col93))); + let conv_tmp_42314_65 = ((((((((M31_0) + + ((op0_limb_21_col65) * (op1_limb_27_col100))) + + ((op0_limb_22_col66) * (op1_limb_26_col99))) + + ((op0_limb_23_col67) * (op1_limb_25_col98))) + + ((op0_limb_24_col68) * (op1_limb_24_col97))) + + ((op0_limb_25_col69) * (op1_limb_23_col96))) + + ((op0_limb_26_col70) * (op1_limb_22_col95))) + + ((op0_limb_27_col71) * (op1_limb_21_col94))); + let conv_tmp_42314_66 = (((((((M31_0) + + ((op0_limb_22_col66) * (op1_limb_27_col100))) + + ((op0_limb_23_col67) * (op1_limb_26_col99))) + + ((op0_limb_24_col68) * (op1_limb_25_col98))) + + ((op0_limb_25_col69) * (op1_limb_24_col97))) + + ((op0_limb_26_col70) * (op1_limb_23_col96))) + + ((op0_limb_27_col71) * (op1_limb_22_col95))); + let conv_tmp_42314_67 = ((((((M31_0) + + ((op0_limb_23_col67) * (op1_limb_27_col100))) + + ((op0_limb_24_col68) * (op1_limb_26_col99))) + + ((op0_limb_25_col69) * (op1_limb_25_col98))) + + ((op0_limb_26_col70) * (op1_limb_24_col97))) + + ((op0_limb_27_col71) * (op1_limb_23_col96))); + let conv_tmp_42314_68 = (((((M31_0) + ((op0_limb_24_col68) * (op1_limb_27_col100))) + + ((op0_limb_25_col69) * (op1_limb_26_col99))) + + ((op0_limb_26_col70) * (op1_limb_25_col98))) + + ((op0_limb_27_col71) * (op1_limb_24_col97))); + let conv_tmp_42314_69 = ((((M31_0) + ((op0_limb_25_col69) * (op1_limb_27_col100))) + + ((op0_limb_26_col70) * (op1_limb_26_col99))) + + ((op0_limb_27_col71) * (op1_limb_25_col98))); + let conv_tmp_42314_70 = (((M31_0) + ((op0_limb_26_col70) * (op1_limb_27_col100))) + + ((op0_limb_27_col71) * (op1_limb_26_col99))); + let conv_tmp_42314_71 = ((M31_0) + ((op0_limb_27_col71) * (op1_limb_27_col100))); + let conv_mod_tmp_42314_72 = ((((M31_0) + ((M31_32) * (conv_tmp_42314_17))) + - ((M31_4) * (conv_tmp_42314_38))) + + ((M31_8) * (conv_tmp_42314_66))); + let conv_mod_tmp_42314_73 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_17))) + + ((M31_32) * (conv_tmp_42314_18))) + - ((M31_4) * (conv_tmp_42314_39))) + + ((M31_8) * (conv_tmp_42314_67))); + let conv_mod_tmp_42314_74 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_18))) + + ((M31_32) * (conv_tmp_42314_19))) + - ((M31_4) * (conv_tmp_42314_40))) + + ((M31_8) * (conv_tmp_42314_68))); + let conv_mod_tmp_42314_75 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_19))) + + ((M31_32) * (conv_tmp_42314_20))) + - ((M31_4) * (conv_tmp_42314_41))) + + ((M31_8) * (conv_tmp_42314_69))); + let conv_mod_tmp_42314_76 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_20))) + + ((M31_32) * (conv_tmp_42314_21))) + - ((M31_4) * (conv_tmp_42314_42))) + + ((M31_8) * (conv_tmp_42314_70))); + let conv_mod_tmp_42314_77 = (((((M31_0) + ((M31_1) * (conv_tmp_42314_21))) + + ((M31_32) * (conv_tmp_42314_22))) + - ((M31_4) * (conv_tmp_42314_43))) + + ((M31_8) * (conv_tmp_42314_71))); + let conv_mod_tmp_42314_78 = ((((M31_0) + ((M31_1) * (conv_tmp_42314_22))) + + ((M31_32) * (conv_tmp_42314_23))) + - ((M31_4) * (conv_tmp_42314_44))); + let conv_mod_tmp_42314_79 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_17))) + + ((M31_1) * (conv_tmp_42314_23))) + + ((M31_32) * (conv_tmp_42314_24))) + - ((M31_4) * (conv_tmp_42314_45))); + let conv_mod_tmp_42314_80 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_18))) + + ((M31_1) * (conv_tmp_42314_24))) + + ((M31_32) * (conv_tmp_42314_25))) + - ((M31_4) * (conv_tmp_42314_46))); + let conv_mod_tmp_42314_81 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_19))) + + ((M31_1) * (conv_tmp_42314_25))) + + ((M31_32) * (conv_tmp_42314_26))) + - ((M31_4) * (conv_tmp_42314_47))); + let conv_mod_tmp_42314_82 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_20))) + + ((M31_1) * (conv_tmp_42314_26))) + + ((M31_32) * (conv_tmp_42314_27))) + - ((M31_4) * (conv_tmp_42314_48))); + let conv_mod_tmp_42314_83 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_21))) + + ((M31_1) * (conv_tmp_42314_27))) + + ((M31_32) * (conv_tmp_42314_28))) + - ((M31_4) * (conv_tmp_42314_49))); + let conv_mod_tmp_42314_84 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_22))) + + ((M31_1) * (conv_tmp_42314_28))) + + ((M31_32) * (conv_tmp_42314_29))) + - ((M31_4) * (conv_tmp_42314_50))); + let conv_mod_tmp_42314_85 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_23))) + + ((M31_1) * (conv_tmp_42314_29))) + + ((M31_32) * (conv_tmp_42314_30))) + - ((M31_4) * (conv_tmp_42314_51))); + let conv_mod_tmp_42314_86 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_24))) + + ((M31_1) * (conv_tmp_42314_30))) + + ((M31_32) * (conv_tmp_42314_31))) + - ((M31_4) * (conv_tmp_42314_52))); + let conv_mod_tmp_42314_87 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_25))) + + ((M31_1) * (conv_tmp_42314_31))) + + ((M31_32) * (conv_tmp_42314_32))) + - ((M31_4) * (conv_tmp_42314_53))); + let conv_mod_tmp_42314_88 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_26))) + + ((M31_1) * (conv_tmp_42314_32))) + + ((M31_32) * (conv_tmp_42314_33))) + - ((M31_4) * (conv_tmp_42314_54))); + let conv_mod_tmp_42314_89 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_27))) + + ((M31_1) * (conv_tmp_42314_33))) + + ((M31_32) * (conv_tmp_42314_34))) + - ((M31_4) * (conv_tmp_42314_55))); + let conv_mod_tmp_42314_90 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_28))) + + ((M31_1) * (conv_tmp_42314_34))) + + ((M31_32) * (conv_tmp_42314_35))) + - ((M31_4) * (conv_tmp_42314_56))); + let conv_mod_tmp_42314_91 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_29))) + + ((M31_1) * (conv_tmp_42314_35))) + + ((M31_32) * (conv_tmp_42314_36))) + - ((M31_4) * (conv_tmp_42314_57))); + let conv_mod_tmp_42314_92 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_30))) + + ((M31_1) * (conv_tmp_42314_36))) + + ((M31_32) * (conv_tmp_42314_37))) + - ((M31_4) * (conv_tmp_42314_58))); + let conv_mod_tmp_42314_93 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_31))) + + ((M31_1) * (conv_tmp_42314_37))) + - ((M31_4) * (conv_tmp_42314_59))) + + ((M31_64) * (conv_tmp_42314_66))); + let conv_mod_tmp_42314_94 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_32))) + - ((M31_4) * (conv_tmp_42314_60))) + + ((M31_2) * (conv_tmp_42314_66))) + + ((M31_64) * (conv_tmp_42314_67))); + let conv_mod_tmp_42314_95 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_33))) + - ((M31_4) * (conv_tmp_42314_61))) + + ((M31_2) * (conv_tmp_42314_67))) + + ((M31_64) * (conv_tmp_42314_68))); + let conv_mod_tmp_42314_96 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_34))) + - ((M31_4) * (conv_tmp_42314_62))) + + ((M31_2) * (conv_tmp_42314_68))) + + ((M31_64) * (conv_tmp_42314_69))); + let conv_mod_tmp_42314_97 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_35))) + - ((M31_4) * (conv_tmp_42314_63))) + + ((M31_2) * (conv_tmp_42314_69))) + + ((M31_64) * (conv_tmp_42314_70))); + let conv_mod_tmp_42314_98 = (((((M31_0) + ((M31_2) * (conv_tmp_42314_36))) + - ((M31_4) * (conv_tmp_42314_64))) + + ((M31_2) * (conv_tmp_42314_70))) + + ((M31_64) * (conv_tmp_42314_71))); + let conv_mod_tmp_42314_99 = ((((M31_0) + ((M31_2) * (conv_tmp_42314_37))) + - ((M31_4) * (conv_tmp_42314_65))) + + ((M31_2) * (conv_tmp_42314_71))); + let k_mod_2_18_biased_tmp_42314_100 = + ((((PackedUInt32::from_m31(((conv_mod_tmp_42314_72) + (M31_134217728)))) + + (((PackedUInt32::from_m31(((conv_mod_tmp_42314_73) + (M31_134217728)))) + & (UInt32_511)) + << (UInt32_9))) + + (UInt32_65536)) + & (UInt32_262143)); + let k_col101 = ((k_mod_2_18_biased_tmp_42314_100.low().as_m31()) + + (((k_mod_2_18_biased_tmp_42314_100.high().as_m31()) - (M31_1)) * (M31_65536))); + *row[101] = k_col101; + let range_check_19_inputs_0 = [((k_col101) + (M31_262144))].unpack(); + *lookup_data.range_check_19_0 = [((k_col101) + (M31_262144))]; + let carry_0_col102 = + ((((conv_mod_tmp_42314_72) - ((M31_1) * (k_col101))) + (M31_0)) * (M31_4194304)); + *row[102] = carry_0_col102; + let range_check_19_inputs_1 = [((carry_0_col102) + (M31_131072))].unpack(); + *lookup_data.range_check_19_1 = [((carry_0_col102) + (M31_131072))]; + let carry_1_col103 = (((conv_mod_tmp_42314_73) + (carry_0_col102)) * (M31_4194304)); + *row[103] = carry_1_col103; + let range_check_19_inputs_2 = [((carry_1_col103) + (M31_131072))].unpack(); + *lookup_data.range_check_19_2 = [((carry_1_col103) + (M31_131072))]; + let carry_2_col104 = (((conv_mod_tmp_42314_74) + (carry_1_col103)) * (M31_4194304)); + *row[104] = carry_2_col104; + let range_check_19_inputs_3 = [((carry_2_col104) + (M31_131072))].unpack(); + *lookup_data.range_check_19_3 = [((carry_2_col104) + (M31_131072))]; + let carry_3_col105 = (((conv_mod_tmp_42314_75) + (carry_2_col104)) * (M31_4194304)); + *row[105] = carry_3_col105; + let range_check_19_inputs_4 = [((carry_3_col105) + (M31_131072))].unpack(); + *lookup_data.range_check_19_4 = [((carry_3_col105) + (M31_131072))]; + let carry_4_col106 = (((conv_mod_tmp_42314_76) + (carry_3_col105)) * (M31_4194304)); + *row[106] = carry_4_col106; + let range_check_19_inputs_5 = [((carry_4_col106) + (M31_131072))].unpack(); + *lookup_data.range_check_19_5 = [((carry_4_col106) + (M31_131072))]; + let carry_5_col107 = (((conv_mod_tmp_42314_77) + (carry_4_col106)) * (M31_4194304)); + *row[107] = carry_5_col107; + let range_check_19_inputs_6 = [((carry_5_col107) + (M31_131072))].unpack(); + *lookup_data.range_check_19_6 = [((carry_5_col107) + (M31_131072))]; + let carry_6_col108 = (((conv_mod_tmp_42314_78) + (carry_5_col107)) * (M31_4194304)); + *row[108] = carry_6_col108; + let range_check_19_inputs_7 = [((carry_6_col108) + (M31_131072))].unpack(); + *lookup_data.range_check_19_7 = [((carry_6_col108) + (M31_131072))]; + let carry_7_col109 = (((conv_mod_tmp_42314_79) + (carry_6_col108)) * (M31_4194304)); + *row[109] = carry_7_col109; + let range_check_19_inputs_8 = [((carry_7_col109) + (M31_131072))].unpack(); + *lookup_data.range_check_19_8 = [((carry_7_col109) + (M31_131072))]; + let carry_8_col110 = (((conv_mod_tmp_42314_80) + (carry_7_col109)) * (M31_4194304)); + *row[110] = carry_8_col110; + let range_check_19_inputs_9 = [((carry_8_col110) + (M31_131072))].unpack(); + *lookup_data.range_check_19_9 = [((carry_8_col110) + (M31_131072))]; + let carry_9_col111 = (((conv_mod_tmp_42314_81) + (carry_8_col110)) * (M31_4194304)); + *row[111] = carry_9_col111; + let range_check_19_inputs_10 = [((carry_9_col111) + (M31_131072))].unpack(); + *lookup_data.range_check_19_10 = [((carry_9_col111) + (M31_131072))]; + let carry_10_col112 = (((conv_mod_tmp_42314_82) + (carry_9_col111)) * (M31_4194304)); + *row[112] = carry_10_col112; + let range_check_19_inputs_11 = [((carry_10_col112) + (M31_131072))].unpack(); + *lookup_data.range_check_19_11 = [((carry_10_col112) + (M31_131072))]; + let carry_11_col113 = (((conv_mod_tmp_42314_83) + (carry_10_col112)) * (M31_4194304)); + *row[113] = carry_11_col113; + let range_check_19_inputs_12 = [((carry_11_col113) + (M31_131072))].unpack(); + *lookup_data.range_check_19_12 = [((carry_11_col113) + (M31_131072))]; + let carry_12_col114 = (((conv_mod_tmp_42314_84) + (carry_11_col113)) * (M31_4194304)); + *row[114] = carry_12_col114; + let range_check_19_inputs_13 = [((carry_12_col114) + (M31_131072))].unpack(); + *lookup_data.range_check_19_13 = [((carry_12_col114) + (M31_131072))]; + let carry_13_col115 = (((conv_mod_tmp_42314_85) + (carry_12_col114)) * (M31_4194304)); + *row[115] = carry_13_col115; + let range_check_19_inputs_14 = [((carry_13_col115) + (M31_131072))].unpack(); + *lookup_data.range_check_19_14 = [((carry_13_col115) + (M31_131072))]; + let carry_14_col116 = (((conv_mod_tmp_42314_86) + (carry_13_col115)) * (M31_4194304)); + *row[116] = carry_14_col116; + let range_check_19_inputs_15 = [((carry_14_col116) + (M31_131072))].unpack(); + *lookup_data.range_check_19_15 = [((carry_14_col116) + (M31_131072))]; + let carry_15_col117 = (((conv_mod_tmp_42314_87) + (carry_14_col116)) * (M31_4194304)); + *row[117] = carry_15_col117; + let range_check_19_inputs_16 = [((carry_15_col117) + (M31_131072))].unpack(); + *lookup_data.range_check_19_16 = [((carry_15_col117) + (M31_131072))]; + let carry_16_col118 = (((conv_mod_tmp_42314_88) + (carry_15_col117)) * (M31_4194304)); + *row[118] = carry_16_col118; + let range_check_19_inputs_17 = [((carry_16_col118) + (M31_131072))].unpack(); + *lookup_data.range_check_19_17 = [((carry_16_col118) + (M31_131072))]; + let carry_17_col119 = (((conv_mod_tmp_42314_89) + (carry_16_col118)) * (M31_4194304)); + *row[119] = carry_17_col119; + let range_check_19_inputs_18 = [((carry_17_col119) + (M31_131072))].unpack(); + *lookup_data.range_check_19_18 = [((carry_17_col119) + (M31_131072))]; + let carry_18_col120 = (((conv_mod_tmp_42314_90) + (carry_17_col119)) * (M31_4194304)); + *row[120] = carry_18_col120; + let range_check_19_inputs_19 = [((carry_18_col120) + (M31_131072))].unpack(); + *lookup_data.range_check_19_19 = [((carry_18_col120) + (M31_131072))]; + let carry_19_col121 = (((conv_mod_tmp_42314_91) + (carry_18_col120)) * (M31_4194304)); + *row[121] = carry_19_col121; + let range_check_19_inputs_20 = [((carry_19_col121) + (M31_131072))].unpack(); + *lookup_data.range_check_19_20 = [((carry_19_col121) + (M31_131072))]; + let carry_20_col122 = (((conv_mod_tmp_42314_92) + (carry_19_col121)) * (M31_4194304)); + *row[122] = carry_20_col122; + let range_check_19_inputs_21 = [((carry_20_col122) + (M31_131072))].unpack(); + *lookup_data.range_check_19_21 = [((carry_20_col122) + (M31_131072))]; + let carry_21_col123 = ((((conv_mod_tmp_42314_93) - ((M31_136) * (k_col101))) + + (carry_20_col122)) + * (M31_4194304)); + *row[123] = carry_21_col123; + let range_check_19_inputs_22 = [((carry_21_col123) + (M31_131072))].unpack(); + *lookup_data.range_check_19_22 = [((carry_21_col123) + (M31_131072))]; + let carry_22_col124 = (((conv_mod_tmp_42314_94) + (carry_21_col123)) * (M31_4194304)); + *row[124] = carry_22_col124; + let range_check_19_inputs_23 = [((carry_22_col124) + (M31_131072))].unpack(); + *lookup_data.range_check_19_23 = [((carry_22_col124) + (M31_131072))]; + let carry_23_col125 = (((conv_mod_tmp_42314_95) + (carry_22_col124)) * (M31_4194304)); + *row[125] = carry_23_col125; + let range_check_19_inputs_24 = [((carry_23_col125) + (M31_131072))].unpack(); + *lookup_data.range_check_19_24 = [((carry_23_col125) + (M31_131072))]; + let carry_24_col126 = (((conv_mod_tmp_42314_96) + (carry_23_col125)) * (M31_4194304)); + *row[126] = carry_24_col126; + let range_check_19_inputs_25 = [((carry_24_col126) + (M31_131072))].unpack(); + *lookup_data.range_check_19_25 = [((carry_24_col126) + (M31_131072))]; + let carry_25_col127 = (((conv_mod_tmp_42314_97) + (carry_24_col126)) * (M31_4194304)); + *row[127] = carry_25_col127; + let range_check_19_inputs_26 = [((carry_25_col127) + (M31_131072))].unpack(); + *lookup_data.range_check_19_26 = [((carry_25_col127) + (M31_131072))]; + let carry_26_col128 = (((conv_mod_tmp_42314_98) + (carry_25_col127)) * (M31_4194304)); + *row[128] = carry_26_col128; + let range_check_19_inputs_27 = [((carry_26_col128) + (M31_131072))].unpack(); + *lookup_data.range_check_19_27 = [((carry_26_col128) + (M31_131072))]; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_1)), + ((input_ap_col1) + (ap_update_add_1_col10)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].range_check_19_inputs[27] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); + range_check_19_state.add_input(&range_check_19_inputs_0[i]); + range_check_19_state.add_input(&range_check_19_inputs_1[i]); + range_check_19_state.add_input(&range_check_19_inputs_2[i]); + range_check_19_state.add_input(&range_check_19_inputs_3[i]); + range_check_19_state.add_input(&range_check_19_inputs_4[i]); + range_check_19_state.add_input(&range_check_19_inputs_5[i]); + range_check_19_state.add_input(&range_check_19_inputs_6[i]); + range_check_19_state.add_input(&range_check_19_inputs_7[i]); + range_check_19_state.add_input(&range_check_19_inputs_8[i]); + range_check_19_state.add_input(&range_check_19_inputs_9[i]); + range_check_19_state.add_input(&range_check_19_inputs_10[i]); + range_check_19_state.add_input(&range_check_19_inputs_11[i]); + range_check_19_state.add_input(&range_check_19_inputs_12[i]); + range_check_19_state.add_input(&range_check_19_inputs_13[i]); + range_check_19_state.add_input(&range_check_19_inputs_14[i]); + range_check_19_state.add_input(&range_check_19_inputs_15[i]); + range_check_19_state.add_input(&range_check_19_inputs_16[i]); + range_check_19_state.add_input(&range_check_19_inputs_17[i]); + range_check_19_state.add_input(&range_check_19_inputs_18[i]); + range_check_19_state.add_input(&range_check_19_inputs_19[i]); + range_check_19_state.add_input(&range_check_19_inputs_20[i]); + range_check_19_state.add_input(&range_check_19_inputs_21[i]); + range_check_19_state.add_input(&range_check_19_inputs_22[i]); + range_check_19_state.add_input(&range_check_19_inputs_23[i]); + range_check_19_state.add_input(&range_check_19_inputs_24[i]); + range_check_19_state.add_input(&range_check_19_inputs_25[i]); + range_check_19_state.add_input(&range_check_19_inputs_26[i]); + range_check_19_state.add_input(&range_check_19_inputs_27[i]); } - *lookup_data.range_check_19_27 = [((carry_26_col128) + (M31_131072))]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_1)), - ((input_ap_col1) + (ap_update_add_1_col10)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_imm/prover.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_imm/prover.rs index 506b9fde..206de593 100644 --- a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_imm/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_imm/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -72,41 +73,15 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + range_check_19_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .range_check_19_inputs - .iter() - .for_each(|inputs| { - range_check_19_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -117,18 +92,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 3], - pub memory_id_to_big_inputs: [Vec; 3], - pub range_check_19_inputs: [Vec; 28], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -140,18 +103,15 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + range_check_19_state: &range_check_19::ClaimGenerator, + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -190,108 +150,69 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |( - (((row_index, row), mul_opcode_imm_input), lookup_data), - mut sub_components_inputs, - )| { - let input_tmp_48d52_0 = mul_opcode_imm_input; - let input_pc_col0 = input_tmp_48d52_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_48d52_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_48d52_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), mul_opcode_imm_input), lookup_data)| { + let input_tmp_48d52_0 = mul_opcode_imm_input; + let input_pc_col0 = input_tmp_48d52_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_48d52_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_48d52_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_48d52_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_48d52_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_1); - let offset0_tmp_48d52_3 = - ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(0))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(1), - )) & (UInt16_127)) - << (UInt16_9))); - let offset0_col3 = offset0_tmp_48d52_3.as_m31(); - *row[3] = offset0_col3; - let offset1_tmp_48d52_4 = - ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(1))) - >> (UInt16_7)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(2), - )) << (UInt16_2))) - + (((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(3), - )) & (UInt16_31)) - << (UInt16_11))); - let offset1_col4 = offset1_tmp_48d52_4.as_m31(); - *row[4] = offset1_col4; - let dst_base_fp_tmp_48d52_5 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_0)) - & (UInt16_1)); - let dst_base_fp_col5 = dst_base_fp_tmp_48d52_5.as_m31(); - *row[5] = dst_base_fp_col5; - let op0_base_fp_tmp_48d52_6 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_1)) - & (UInt16_1)); - let op0_base_fp_col6 = op0_base_fp_tmp_48d52_6.as_m31(); - *row[6] = op0_base_fp_col6; - let ap_update_add_1_tmp_48d52_7 = - (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) - >> (UInt16_3)) - + ((PackedUInt16::from_m31( - memory_id_to_big_value_tmp_48d52_2.get_m31(6), - )) << (UInt16_6))) - >> (UInt16_11)) - & (UInt16_1)); - let ap_update_add_1_col7 = ap_update_add_1_tmp_48d52_7.as_m31(); - *row[7] = ap_update_add_1_col7; - for (i, &input) in ( - input_pc_col0, - [offset0_col3, offset1_col4, M31_32769], - [ - dst_base_fp_col5, - op0_base_fp_col6, - M31_1, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - ap_update_add_1_col7, - M31_0, - M31_0, - M31_1, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - offset0_col3, - offset1_col4, - M31_32769, + let memory_address_to_id_value_tmp_48d52_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_48d52_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_1); + let offset0_tmp_48d52_3 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_48d52_3.as_m31(); + *row[3] = offset0_col3; + let offset1_tmp_48d52_4 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_48d52_4.as_m31(); + *row[4] = offset1_col4; + let dst_base_fp_tmp_48d52_5 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col5 = dst_base_fp_tmp_48d52_5.as_m31(); + *row[5] = dst_base_fp_col5; + let op0_base_fp_tmp_48d52_6 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col6 = op0_base_fp_tmp_48d52_6.as_m31(); + *row[6] = op0_base_fp_col6; + let ap_update_add_1_tmp_48d52_7 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_48d52_2.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col7 = ap_update_add_1_tmp_48d52_7.as_m31(); + *row[7] = ap_update_add_1_col7; + let verify_instruction_inputs_0 = ( + input_pc_col0, + [offset0_col3, offset1_col4, M31_32769], + [ dst_base_fp_col5, op0_base_fp_col6, M31_1, @@ -307,1614 +228,1479 @@ fn write_trace_simd( M31_0, M31_0, M31_1, - ]; + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + offset0_col3, + offset1_col4, + M31_32769, + dst_base_fp_col5, + op0_base_fp_col6, + M31_1, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col7, + M31_0, + M31_0, + M31_1, + ]; - let mem_dst_base_col8 = (((dst_base_fp_col5) * (input_fp_col2)) - + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))); - *row[8] = mem_dst_base_col8; - let mem0_base_col9 = (((op0_base_fp_col6) * (input_fp_col2)) - + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))); - *row[9] = mem0_base_col9; + let mem_dst_base_col8 = (((dst_base_fp_col5) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))); + *row[8] = mem_dst_base_col8; + let mem0_base_col9 = (((op0_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))); + *row[9] = mem0_base_col9; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_48d52_8 = memory_address_to_id_state - .deduce_output(((mem_dst_base_col8) + ((offset0_col3) - (M31_32768)))); - let memory_id_to_big_value_tmp_48d52_9 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_8); - let dst_id_col10 = memory_address_to_id_value_tmp_48d52_8; - *row[10] = dst_id_col10; - for (i, &input) in ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = [ - ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))), - dst_id_col10, - ]; - let dst_limb_0_col11 = memory_id_to_big_value_tmp_48d52_9.get_m31(0); - *row[11] = dst_limb_0_col11; - let dst_limb_1_col12 = memory_id_to_big_value_tmp_48d52_9.get_m31(1); - *row[12] = dst_limb_1_col12; - let dst_limb_2_col13 = memory_id_to_big_value_tmp_48d52_9.get_m31(2); - *row[13] = dst_limb_2_col13; - let dst_limb_3_col14 = memory_id_to_big_value_tmp_48d52_9.get_m31(3); - *row[14] = dst_limb_3_col14; - let dst_limb_4_col15 = memory_id_to_big_value_tmp_48d52_9.get_m31(4); - *row[15] = dst_limb_4_col15; - let dst_limb_5_col16 = memory_id_to_big_value_tmp_48d52_9.get_m31(5); - *row[16] = dst_limb_5_col16; - let dst_limb_6_col17 = memory_id_to_big_value_tmp_48d52_9.get_m31(6); - *row[17] = dst_limb_6_col17; - let dst_limb_7_col18 = memory_id_to_big_value_tmp_48d52_9.get_m31(7); - *row[18] = dst_limb_7_col18; - let dst_limb_8_col19 = memory_id_to_big_value_tmp_48d52_9.get_m31(8); - *row[19] = dst_limb_8_col19; - let dst_limb_9_col20 = memory_id_to_big_value_tmp_48d52_9.get_m31(9); - *row[20] = dst_limb_9_col20; - let dst_limb_10_col21 = memory_id_to_big_value_tmp_48d52_9.get_m31(10); - *row[21] = dst_limb_10_col21; - let dst_limb_11_col22 = memory_id_to_big_value_tmp_48d52_9.get_m31(11); - *row[22] = dst_limb_11_col22; - let dst_limb_12_col23 = memory_id_to_big_value_tmp_48d52_9.get_m31(12); - *row[23] = dst_limb_12_col23; - let dst_limb_13_col24 = memory_id_to_big_value_tmp_48d52_9.get_m31(13); - *row[24] = dst_limb_13_col24; - let dst_limb_14_col25 = memory_id_to_big_value_tmp_48d52_9.get_m31(14); - *row[25] = dst_limb_14_col25; - let dst_limb_15_col26 = memory_id_to_big_value_tmp_48d52_9.get_m31(15); - *row[26] = dst_limb_15_col26; - let dst_limb_16_col27 = memory_id_to_big_value_tmp_48d52_9.get_m31(16); - *row[27] = dst_limb_16_col27; - let dst_limb_17_col28 = memory_id_to_big_value_tmp_48d52_9.get_m31(17); - *row[28] = dst_limb_17_col28; - let dst_limb_18_col29 = memory_id_to_big_value_tmp_48d52_9.get_m31(18); - *row[29] = dst_limb_18_col29; - let dst_limb_19_col30 = memory_id_to_big_value_tmp_48d52_9.get_m31(19); - *row[30] = dst_limb_19_col30; - let dst_limb_20_col31 = memory_id_to_big_value_tmp_48d52_9.get_m31(20); - *row[31] = dst_limb_20_col31; - let dst_limb_21_col32 = memory_id_to_big_value_tmp_48d52_9.get_m31(21); - *row[32] = dst_limb_21_col32; - let dst_limb_22_col33 = memory_id_to_big_value_tmp_48d52_9.get_m31(22); - *row[33] = dst_limb_22_col33; - let dst_limb_23_col34 = memory_id_to_big_value_tmp_48d52_9.get_m31(23); - *row[34] = dst_limb_23_col34; - let dst_limb_24_col35 = memory_id_to_big_value_tmp_48d52_9.get_m31(24); - *row[35] = dst_limb_24_col35; - let dst_limb_25_col36 = memory_id_to_big_value_tmp_48d52_9.get_m31(25); - *row[36] = dst_limb_25_col36; - let dst_limb_26_col37 = memory_id_to_big_value_tmp_48d52_9.get_m31(26); - *row[37] = dst_limb_26_col37; - let dst_limb_27_col38 = memory_id_to_big_value_tmp_48d52_9.get_m31(27); - *row[38] = dst_limb_27_col38; - for (i, &input) in dst_id_col10.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - dst_id_col10, - dst_limb_0_col11, - dst_limb_1_col12, - dst_limb_2_col13, - dst_limb_3_col14, - dst_limb_4_col15, - dst_limb_5_col16, - dst_limb_6_col17, - dst_limb_7_col18, - dst_limb_8_col19, - dst_limb_9_col20, - dst_limb_10_col21, - dst_limb_11_col22, - dst_limb_12_col23, - dst_limb_13_col24, - dst_limb_14_col25, - dst_limb_15_col26, - dst_limb_16_col27, - dst_limb_17_col28, - dst_limb_18_col29, - dst_limb_19_col30, - dst_limb_20_col31, - dst_limb_21_col32, - dst_limb_22_col33, - dst_limb_23_col34, - dst_limb_24_col35, - dst_limb_25_col36, - dst_limb_26_col37, - dst_limb_27_col38, - ]; + let memory_address_to_id_value_tmp_48d52_8 = memory_address_to_id_state + .deduce_output(((mem_dst_base_col8) + ((offset0_col3) - (M31_32768)))); + let memory_id_to_big_value_tmp_48d52_9 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_8); + let dst_id_col10 = memory_address_to_id_value_tmp_48d52_8; + *row[10] = dst_id_col10; + let memory_address_to_id_inputs_0 = + ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_0 = [ + ((mem_dst_base_col8) + ((offset0_col3) - (M31_32768))), + dst_id_col10, + ]; + let dst_limb_0_col11 = memory_id_to_big_value_tmp_48d52_9.get_m31(0); + *row[11] = dst_limb_0_col11; + let dst_limb_1_col12 = memory_id_to_big_value_tmp_48d52_9.get_m31(1); + *row[12] = dst_limb_1_col12; + let dst_limb_2_col13 = memory_id_to_big_value_tmp_48d52_9.get_m31(2); + *row[13] = dst_limb_2_col13; + let dst_limb_3_col14 = memory_id_to_big_value_tmp_48d52_9.get_m31(3); + *row[14] = dst_limb_3_col14; + let dst_limb_4_col15 = memory_id_to_big_value_tmp_48d52_9.get_m31(4); + *row[15] = dst_limb_4_col15; + let dst_limb_5_col16 = memory_id_to_big_value_tmp_48d52_9.get_m31(5); + *row[16] = dst_limb_5_col16; + let dst_limb_6_col17 = memory_id_to_big_value_tmp_48d52_9.get_m31(6); + *row[17] = dst_limb_6_col17; + let dst_limb_7_col18 = memory_id_to_big_value_tmp_48d52_9.get_m31(7); + *row[18] = dst_limb_7_col18; + let dst_limb_8_col19 = memory_id_to_big_value_tmp_48d52_9.get_m31(8); + *row[19] = dst_limb_8_col19; + let dst_limb_9_col20 = memory_id_to_big_value_tmp_48d52_9.get_m31(9); + *row[20] = dst_limb_9_col20; + let dst_limb_10_col21 = memory_id_to_big_value_tmp_48d52_9.get_m31(10); + *row[21] = dst_limb_10_col21; + let dst_limb_11_col22 = memory_id_to_big_value_tmp_48d52_9.get_m31(11); + *row[22] = dst_limb_11_col22; + let dst_limb_12_col23 = memory_id_to_big_value_tmp_48d52_9.get_m31(12); + *row[23] = dst_limb_12_col23; + let dst_limb_13_col24 = memory_id_to_big_value_tmp_48d52_9.get_m31(13); + *row[24] = dst_limb_13_col24; + let dst_limb_14_col25 = memory_id_to_big_value_tmp_48d52_9.get_m31(14); + *row[25] = dst_limb_14_col25; + let dst_limb_15_col26 = memory_id_to_big_value_tmp_48d52_9.get_m31(15); + *row[26] = dst_limb_15_col26; + let dst_limb_16_col27 = memory_id_to_big_value_tmp_48d52_9.get_m31(16); + *row[27] = dst_limb_16_col27; + let dst_limb_17_col28 = memory_id_to_big_value_tmp_48d52_9.get_m31(17); + *row[28] = dst_limb_17_col28; + let dst_limb_18_col29 = memory_id_to_big_value_tmp_48d52_9.get_m31(18); + *row[29] = dst_limb_18_col29; + let dst_limb_19_col30 = memory_id_to_big_value_tmp_48d52_9.get_m31(19); + *row[30] = dst_limb_19_col30; + let dst_limb_20_col31 = memory_id_to_big_value_tmp_48d52_9.get_m31(20); + *row[31] = dst_limb_20_col31; + let dst_limb_21_col32 = memory_id_to_big_value_tmp_48d52_9.get_m31(21); + *row[32] = dst_limb_21_col32; + let dst_limb_22_col33 = memory_id_to_big_value_tmp_48d52_9.get_m31(22); + *row[33] = dst_limb_22_col33; + let dst_limb_23_col34 = memory_id_to_big_value_tmp_48d52_9.get_m31(23); + *row[34] = dst_limb_23_col34; + let dst_limb_24_col35 = memory_id_to_big_value_tmp_48d52_9.get_m31(24); + *row[35] = dst_limb_24_col35; + let dst_limb_25_col36 = memory_id_to_big_value_tmp_48d52_9.get_m31(25); + *row[36] = dst_limb_25_col36; + let dst_limb_26_col37 = memory_id_to_big_value_tmp_48d52_9.get_m31(26); + *row[37] = dst_limb_26_col37; + let dst_limb_27_col38 = memory_id_to_big_value_tmp_48d52_9.get_m31(27); + *row[38] = dst_limb_27_col38; + let memory_id_to_big_inputs_0 = dst_id_col10.unpack(); + *lookup_data.memory_id_to_big_0 = [ + dst_id_col10, + dst_limb_0_col11, + dst_limb_1_col12, + dst_limb_2_col13, + dst_limb_3_col14, + dst_limb_4_col15, + dst_limb_5_col16, + dst_limb_6_col17, + dst_limb_7_col18, + dst_limb_8_col19, + dst_limb_9_col20, + dst_limb_10_col21, + dst_limb_11_col22, + dst_limb_12_col23, + dst_limb_13_col24, + dst_limb_14_col25, + dst_limb_15_col26, + dst_limb_16_col27, + dst_limb_17_col28, + dst_limb_18_col29, + dst_limb_19_col30, + dst_limb_20_col31, + dst_limb_21_col32, + dst_limb_22_col33, + dst_limb_23_col34, + dst_limb_24_col35, + dst_limb_25_col36, + dst_limb_26_col37, + dst_limb_27_col38, + ]; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_48d52_10 = memory_address_to_id_state - .deduce_output(((mem0_base_col9) + ((offset1_col4) - (M31_32768)))); - let memory_id_to_big_value_tmp_48d52_11 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_10); - let op0_id_col39 = memory_address_to_id_value_tmp_48d52_10; - *row[39] = op0_id_col39; - for (i, &input) in ((mem0_base_col9) + ((offset1_col4) - (M31_32768))) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = [ - ((mem0_base_col9) + ((offset1_col4) - (M31_32768))), - op0_id_col39, - ]; - let op0_limb_0_col40 = memory_id_to_big_value_tmp_48d52_11.get_m31(0); - *row[40] = op0_limb_0_col40; - let op0_limb_1_col41 = memory_id_to_big_value_tmp_48d52_11.get_m31(1); - *row[41] = op0_limb_1_col41; - let op0_limb_2_col42 = memory_id_to_big_value_tmp_48d52_11.get_m31(2); - *row[42] = op0_limb_2_col42; - let op0_limb_3_col43 = memory_id_to_big_value_tmp_48d52_11.get_m31(3); - *row[43] = op0_limb_3_col43; - let op0_limb_4_col44 = memory_id_to_big_value_tmp_48d52_11.get_m31(4); - *row[44] = op0_limb_4_col44; - let op0_limb_5_col45 = memory_id_to_big_value_tmp_48d52_11.get_m31(5); - *row[45] = op0_limb_5_col45; - let op0_limb_6_col46 = memory_id_to_big_value_tmp_48d52_11.get_m31(6); - *row[46] = op0_limb_6_col46; - let op0_limb_7_col47 = memory_id_to_big_value_tmp_48d52_11.get_m31(7); - *row[47] = op0_limb_7_col47; - let op0_limb_8_col48 = memory_id_to_big_value_tmp_48d52_11.get_m31(8); - *row[48] = op0_limb_8_col48; - let op0_limb_9_col49 = memory_id_to_big_value_tmp_48d52_11.get_m31(9); - *row[49] = op0_limb_9_col49; - let op0_limb_10_col50 = memory_id_to_big_value_tmp_48d52_11.get_m31(10); - *row[50] = op0_limb_10_col50; - let op0_limb_11_col51 = memory_id_to_big_value_tmp_48d52_11.get_m31(11); - *row[51] = op0_limb_11_col51; - let op0_limb_12_col52 = memory_id_to_big_value_tmp_48d52_11.get_m31(12); - *row[52] = op0_limb_12_col52; - let op0_limb_13_col53 = memory_id_to_big_value_tmp_48d52_11.get_m31(13); - *row[53] = op0_limb_13_col53; - let op0_limb_14_col54 = memory_id_to_big_value_tmp_48d52_11.get_m31(14); - *row[54] = op0_limb_14_col54; - let op0_limb_15_col55 = memory_id_to_big_value_tmp_48d52_11.get_m31(15); - *row[55] = op0_limb_15_col55; - let op0_limb_16_col56 = memory_id_to_big_value_tmp_48d52_11.get_m31(16); - *row[56] = op0_limb_16_col56; - let op0_limb_17_col57 = memory_id_to_big_value_tmp_48d52_11.get_m31(17); - *row[57] = op0_limb_17_col57; - let op0_limb_18_col58 = memory_id_to_big_value_tmp_48d52_11.get_m31(18); - *row[58] = op0_limb_18_col58; - let op0_limb_19_col59 = memory_id_to_big_value_tmp_48d52_11.get_m31(19); - *row[59] = op0_limb_19_col59; - let op0_limb_20_col60 = memory_id_to_big_value_tmp_48d52_11.get_m31(20); - *row[60] = op0_limb_20_col60; - let op0_limb_21_col61 = memory_id_to_big_value_tmp_48d52_11.get_m31(21); - *row[61] = op0_limb_21_col61; - let op0_limb_22_col62 = memory_id_to_big_value_tmp_48d52_11.get_m31(22); - *row[62] = op0_limb_22_col62; - let op0_limb_23_col63 = memory_id_to_big_value_tmp_48d52_11.get_m31(23); - *row[63] = op0_limb_23_col63; - let op0_limb_24_col64 = memory_id_to_big_value_tmp_48d52_11.get_m31(24); - *row[64] = op0_limb_24_col64; - let op0_limb_25_col65 = memory_id_to_big_value_tmp_48d52_11.get_m31(25); - *row[65] = op0_limb_25_col65; - let op0_limb_26_col66 = memory_id_to_big_value_tmp_48d52_11.get_m31(26); - *row[66] = op0_limb_26_col66; - let op0_limb_27_col67 = memory_id_to_big_value_tmp_48d52_11.get_m31(27); - *row[67] = op0_limb_27_col67; - for (i, &input) in op0_id_col39.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - op0_id_col39, - op0_limb_0_col40, - op0_limb_1_col41, - op0_limb_2_col42, - op0_limb_3_col43, - op0_limb_4_col44, - op0_limb_5_col45, - op0_limb_6_col46, - op0_limb_7_col47, - op0_limb_8_col48, - op0_limb_9_col49, - op0_limb_10_col50, - op0_limb_11_col51, - op0_limb_12_col52, - op0_limb_13_col53, - op0_limb_14_col54, - op0_limb_15_col55, - op0_limb_16_col56, - op0_limb_17_col57, - op0_limb_18_col58, - op0_limb_19_col59, - op0_limb_20_col60, - op0_limb_21_col61, - op0_limb_22_col62, - op0_limb_23_col63, - op0_limb_24_col64, - op0_limb_25_col65, - op0_limb_26_col66, - op0_limb_27_col67, - ]; + let memory_address_to_id_value_tmp_48d52_10 = memory_address_to_id_state + .deduce_output(((mem0_base_col9) + ((offset1_col4) - (M31_32768)))); + let memory_id_to_big_value_tmp_48d52_11 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_10); + let op0_id_col39 = memory_address_to_id_value_tmp_48d52_10; + *row[39] = op0_id_col39; + let memory_address_to_id_inputs_1 = + ((mem0_base_col9) + ((offset1_col4) - (M31_32768))).unpack(); + *lookup_data.memory_address_to_id_1 = [ + ((mem0_base_col9) + ((offset1_col4) - (M31_32768))), + op0_id_col39, + ]; + let op0_limb_0_col40 = memory_id_to_big_value_tmp_48d52_11.get_m31(0); + *row[40] = op0_limb_0_col40; + let op0_limb_1_col41 = memory_id_to_big_value_tmp_48d52_11.get_m31(1); + *row[41] = op0_limb_1_col41; + let op0_limb_2_col42 = memory_id_to_big_value_tmp_48d52_11.get_m31(2); + *row[42] = op0_limb_2_col42; + let op0_limb_3_col43 = memory_id_to_big_value_tmp_48d52_11.get_m31(3); + *row[43] = op0_limb_3_col43; + let op0_limb_4_col44 = memory_id_to_big_value_tmp_48d52_11.get_m31(4); + *row[44] = op0_limb_4_col44; + let op0_limb_5_col45 = memory_id_to_big_value_tmp_48d52_11.get_m31(5); + *row[45] = op0_limb_5_col45; + let op0_limb_6_col46 = memory_id_to_big_value_tmp_48d52_11.get_m31(6); + *row[46] = op0_limb_6_col46; + let op0_limb_7_col47 = memory_id_to_big_value_tmp_48d52_11.get_m31(7); + *row[47] = op0_limb_7_col47; + let op0_limb_8_col48 = memory_id_to_big_value_tmp_48d52_11.get_m31(8); + *row[48] = op0_limb_8_col48; + let op0_limb_9_col49 = memory_id_to_big_value_tmp_48d52_11.get_m31(9); + *row[49] = op0_limb_9_col49; + let op0_limb_10_col50 = memory_id_to_big_value_tmp_48d52_11.get_m31(10); + *row[50] = op0_limb_10_col50; + let op0_limb_11_col51 = memory_id_to_big_value_tmp_48d52_11.get_m31(11); + *row[51] = op0_limb_11_col51; + let op0_limb_12_col52 = memory_id_to_big_value_tmp_48d52_11.get_m31(12); + *row[52] = op0_limb_12_col52; + let op0_limb_13_col53 = memory_id_to_big_value_tmp_48d52_11.get_m31(13); + *row[53] = op0_limb_13_col53; + let op0_limb_14_col54 = memory_id_to_big_value_tmp_48d52_11.get_m31(14); + *row[54] = op0_limb_14_col54; + let op0_limb_15_col55 = memory_id_to_big_value_tmp_48d52_11.get_m31(15); + *row[55] = op0_limb_15_col55; + let op0_limb_16_col56 = memory_id_to_big_value_tmp_48d52_11.get_m31(16); + *row[56] = op0_limb_16_col56; + let op0_limb_17_col57 = memory_id_to_big_value_tmp_48d52_11.get_m31(17); + *row[57] = op0_limb_17_col57; + let op0_limb_18_col58 = memory_id_to_big_value_tmp_48d52_11.get_m31(18); + *row[58] = op0_limb_18_col58; + let op0_limb_19_col59 = memory_id_to_big_value_tmp_48d52_11.get_m31(19); + *row[59] = op0_limb_19_col59; + let op0_limb_20_col60 = memory_id_to_big_value_tmp_48d52_11.get_m31(20); + *row[60] = op0_limb_20_col60; + let op0_limb_21_col61 = memory_id_to_big_value_tmp_48d52_11.get_m31(21); + *row[61] = op0_limb_21_col61; + let op0_limb_22_col62 = memory_id_to_big_value_tmp_48d52_11.get_m31(22); + *row[62] = op0_limb_22_col62; + let op0_limb_23_col63 = memory_id_to_big_value_tmp_48d52_11.get_m31(23); + *row[63] = op0_limb_23_col63; + let op0_limb_24_col64 = memory_id_to_big_value_tmp_48d52_11.get_m31(24); + *row[64] = op0_limb_24_col64; + let op0_limb_25_col65 = memory_id_to_big_value_tmp_48d52_11.get_m31(25); + *row[65] = op0_limb_25_col65; + let op0_limb_26_col66 = memory_id_to_big_value_tmp_48d52_11.get_m31(26); + *row[66] = op0_limb_26_col66; + let op0_limb_27_col67 = memory_id_to_big_value_tmp_48d52_11.get_m31(27); + *row[67] = op0_limb_27_col67; + let memory_id_to_big_inputs_1 = op0_id_col39.unpack(); + *lookup_data.memory_id_to_big_1 = [ + op0_id_col39, + op0_limb_0_col40, + op0_limb_1_col41, + op0_limb_2_col42, + op0_limb_3_col43, + op0_limb_4_col44, + op0_limb_5_col45, + op0_limb_6_col46, + op0_limb_7_col47, + op0_limb_8_col48, + op0_limb_9_col49, + op0_limb_10_col50, + op0_limb_11_col51, + op0_limb_12_col52, + op0_limb_13_col53, + op0_limb_14_col54, + op0_limb_15_col55, + op0_limb_16_col56, + op0_limb_17_col57, + op0_limb_18_col58, + op0_limb_19_col59, + op0_limb_20_col60, + op0_limb_21_col61, + op0_limb_22_col62, + op0_limb_23_col63, + op0_limb_24_col64, + op0_limb_25_col65, + op0_limb_26_col66, + op0_limb_27_col67, + ]; - // Read Positive Num Bits 252. + // Read Positive Num Bits 252. - let memory_address_to_id_value_tmp_48d52_12 = - memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); - let memory_id_to_big_value_tmp_48d52_13 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_12); - let op1_id_col68 = memory_address_to_id_value_tmp_48d52_12; - *row[68] = op1_id_col68; - for (i, &input) in ((input_pc_col0) + (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[2] = input; - } - *lookup_data.memory_address_to_id_2 = [((input_pc_col0) + (M31_1)), op1_id_col68]; - let op1_limb_0_col69 = memory_id_to_big_value_tmp_48d52_13.get_m31(0); - *row[69] = op1_limb_0_col69; - let op1_limb_1_col70 = memory_id_to_big_value_tmp_48d52_13.get_m31(1); - *row[70] = op1_limb_1_col70; - let op1_limb_2_col71 = memory_id_to_big_value_tmp_48d52_13.get_m31(2); - *row[71] = op1_limb_2_col71; - let op1_limb_3_col72 = memory_id_to_big_value_tmp_48d52_13.get_m31(3); - *row[72] = op1_limb_3_col72; - let op1_limb_4_col73 = memory_id_to_big_value_tmp_48d52_13.get_m31(4); - *row[73] = op1_limb_4_col73; - let op1_limb_5_col74 = memory_id_to_big_value_tmp_48d52_13.get_m31(5); - *row[74] = op1_limb_5_col74; - let op1_limb_6_col75 = memory_id_to_big_value_tmp_48d52_13.get_m31(6); - *row[75] = op1_limb_6_col75; - let op1_limb_7_col76 = memory_id_to_big_value_tmp_48d52_13.get_m31(7); - *row[76] = op1_limb_7_col76; - let op1_limb_8_col77 = memory_id_to_big_value_tmp_48d52_13.get_m31(8); - *row[77] = op1_limb_8_col77; - let op1_limb_9_col78 = memory_id_to_big_value_tmp_48d52_13.get_m31(9); - *row[78] = op1_limb_9_col78; - let op1_limb_10_col79 = memory_id_to_big_value_tmp_48d52_13.get_m31(10); - *row[79] = op1_limb_10_col79; - let op1_limb_11_col80 = memory_id_to_big_value_tmp_48d52_13.get_m31(11); - *row[80] = op1_limb_11_col80; - let op1_limb_12_col81 = memory_id_to_big_value_tmp_48d52_13.get_m31(12); - *row[81] = op1_limb_12_col81; - let op1_limb_13_col82 = memory_id_to_big_value_tmp_48d52_13.get_m31(13); - *row[82] = op1_limb_13_col82; - let op1_limb_14_col83 = memory_id_to_big_value_tmp_48d52_13.get_m31(14); - *row[83] = op1_limb_14_col83; - let op1_limb_15_col84 = memory_id_to_big_value_tmp_48d52_13.get_m31(15); - *row[84] = op1_limb_15_col84; - let op1_limb_16_col85 = memory_id_to_big_value_tmp_48d52_13.get_m31(16); - *row[85] = op1_limb_16_col85; - let op1_limb_17_col86 = memory_id_to_big_value_tmp_48d52_13.get_m31(17); - *row[86] = op1_limb_17_col86; - let op1_limb_18_col87 = memory_id_to_big_value_tmp_48d52_13.get_m31(18); - *row[87] = op1_limb_18_col87; - let op1_limb_19_col88 = memory_id_to_big_value_tmp_48d52_13.get_m31(19); - *row[88] = op1_limb_19_col88; - let op1_limb_20_col89 = memory_id_to_big_value_tmp_48d52_13.get_m31(20); - *row[89] = op1_limb_20_col89; - let op1_limb_21_col90 = memory_id_to_big_value_tmp_48d52_13.get_m31(21); - *row[90] = op1_limb_21_col90; - let op1_limb_22_col91 = memory_id_to_big_value_tmp_48d52_13.get_m31(22); - *row[91] = op1_limb_22_col91; - let op1_limb_23_col92 = memory_id_to_big_value_tmp_48d52_13.get_m31(23); - *row[92] = op1_limb_23_col92; - let op1_limb_24_col93 = memory_id_to_big_value_tmp_48d52_13.get_m31(24); - *row[93] = op1_limb_24_col93; - let op1_limb_25_col94 = memory_id_to_big_value_tmp_48d52_13.get_m31(25); - *row[94] = op1_limb_25_col94; - let op1_limb_26_col95 = memory_id_to_big_value_tmp_48d52_13.get_m31(26); - *row[95] = op1_limb_26_col95; - let op1_limb_27_col96 = memory_id_to_big_value_tmp_48d52_13.get_m31(27); - *row[96] = op1_limb_27_col96; - for (i, &input) in op1_id_col68.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[2] = input; - } - *lookup_data.memory_id_to_big_2 = [ - op1_id_col68, - op1_limb_0_col69, - op1_limb_1_col70, - op1_limb_2_col71, - op1_limb_3_col72, - op1_limb_4_col73, - op1_limb_5_col74, - op1_limb_6_col75, - op1_limb_7_col76, - op1_limb_8_col77, - op1_limb_9_col78, - op1_limb_10_col79, - op1_limb_11_col80, - op1_limb_12_col81, - op1_limb_13_col82, - op1_limb_14_col83, - op1_limb_15_col84, - op1_limb_16_col85, - op1_limb_17_col86, - op1_limb_18_col87, - op1_limb_19_col88, - op1_limb_20_col89, - op1_limb_21_col90, - op1_limb_22_col91, - op1_limb_23_col92, - op1_limb_24_col93, - op1_limb_25_col94, - op1_limb_26_col95, - op1_limb_27_col96, - ]; + let memory_address_to_id_value_tmp_48d52_12 = + memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); + let memory_id_to_big_value_tmp_48d52_13 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_48d52_12); + let op1_id_col68 = memory_address_to_id_value_tmp_48d52_12; + *row[68] = op1_id_col68; + let memory_address_to_id_inputs_2 = ((input_pc_col0) + (M31_1)).unpack(); + *lookup_data.memory_address_to_id_2 = [((input_pc_col0) + (M31_1)), op1_id_col68]; + let op1_limb_0_col69 = memory_id_to_big_value_tmp_48d52_13.get_m31(0); + *row[69] = op1_limb_0_col69; + let op1_limb_1_col70 = memory_id_to_big_value_tmp_48d52_13.get_m31(1); + *row[70] = op1_limb_1_col70; + let op1_limb_2_col71 = memory_id_to_big_value_tmp_48d52_13.get_m31(2); + *row[71] = op1_limb_2_col71; + let op1_limb_3_col72 = memory_id_to_big_value_tmp_48d52_13.get_m31(3); + *row[72] = op1_limb_3_col72; + let op1_limb_4_col73 = memory_id_to_big_value_tmp_48d52_13.get_m31(4); + *row[73] = op1_limb_4_col73; + let op1_limb_5_col74 = memory_id_to_big_value_tmp_48d52_13.get_m31(5); + *row[74] = op1_limb_5_col74; + let op1_limb_6_col75 = memory_id_to_big_value_tmp_48d52_13.get_m31(6); + *row[75] = op1_limb_6_col75; + let op1_limb_7_col76 = memory_id_to_big_value_tmp_48d52_13.get_m31(7); + *row[76] = op1_limb_7_col76; + let op1_limb_8_col77 = memory_id_to_big_value_tmp_48d52_13.get_m31(8); + *row[77] = op1_limb_8_col77; + let op1_limb_9_col78 = memory_id_to_big_value_tmp_48d52_13.get_m31(9); + *row[78] = op1_limb_9_col78; + let op1_limb_10_col79 = memory_id_to_big_value_tmp_48d52_13.get_m31(10); + *row[79] = op1_limb_10_col79; + let op1_limb_11_col80 = memory_id_to_big_value_tmp_48d52_13.get_m31(11); + *row[80] = op1_limb_11_col80; + let op1_limb_12_col81 = memory_id_to_big_value_tmp_48d52_13.get_m31(12); + *row[81] = op1_limb_12_col81; + let op1_limb_13_col82 = memory_id_to_big_value_tmp_48d52_13.get_m31(13); + *row[82] = op1_limb_13_col82; + let op1_limb_14_col83 = memory_id_to_big_value_tmp_48d52_13.get_m31(14); + *row[83] = op1_limb_14_col83; + let op1_limb_15_col84 = memory_id_to_big_value_tmp_48d52_13.get_m31(15); + *row[84] = op1_limb_15_col84; + let op1_limb_16_col85 = memory_id_to_big_value_tmp_48d52_13.get_m31(16); + *row[85] = op1_limb_16_col85; + let op1_limb_17_col86 = memory_id_to_big_value_tmp_48d52_13.get_m31(17); + *row[86] = op1_limb_17_col86; + let op1_limb_18_col87 = memory_id_to_big_value_tmp_48d52_13.get_m31(18); + *row[87] = op1_limb_18_col87; + let op1_limb_19_col88 = memory_id_to_big_value_tmp_48d52_13.get_m31(19); + *row[88] = op1_limb_19_col88; + let op1_limb_20_col89 = memory_id_to_big_value_tmp_48d52_13.get_m31(20); + *row[89] = op1_limb_20_col89; + let op1_limb_21_col90 = memory_id_to_big_value_tmp_48d52_13.get_m31(21); + *row[90] = op1_limb_21_col90; + let op1_limb_22_col91 = memory_id_to_big_value_tmp_48d52_13.get_m31(22); + *row[91] = op1_limb_22_col91; + let op1_limb_23_col92 = memory_id_to_big_value_tmp_48d52_13.get_m31(23); + *row[92] = op1_limb_23_col92; + let op1_limb_24_col93 = memory_id_to_big_value_tmp_48d52_13.get_m31(24); + *row[93] = op1_limb_24_col93; + let op1_limb_25_col94 = memory_id_to_big_value_tmp_48d52_13.get_m31(25); + *row[94] = op1_limb_25_col94; + let op1_limb_26_col95 = memory_id_to_big_value_tmp_48d52_13.get_m31(26); + *row[95] = op1_limb_26_col95; + let op1_limb_27_col96 = memory_id_to_big_value_tmp_48d52_13.get_m31(27); + *row[96] = op1_limb_27_col96; + let memory_id_to_big_inputs_2 = op1_id_col68.unpack(); + *lookup_data.memory_id_to_big_2 = [ + op1_id_col68, + op1_limb_0_col69, + op1_limb_1_col70, + op1_limb_2_col71, + op1_limb_3_col72, + op1_limb_4_col73, + op1_limb_5_col74, + op1_limb_6_col75, + op1_limb_7_col76, + op1_limb_8_col77, + op1_limb_9_col78, + op1_limb_10_col79, + op1_limb_11_col80, + op1_limb_12_col81, + op1_limb_13_col82, + op1_limb_14_col83, + op1_limb_15_col84, + op1_limb_16_col85, + op1_limb_17_col86, + op1_limb_18_col87, + op1_limb_19_col88, + op1_limb_20_col89, + op1_limb_21_col90, + op1_limb_22_col91, + op1_limb_23_col92, + op1_limb_24_col93, + op1_limb_25_col94, + op1_limb_26_col95, + op1_limb_27_col96, + ]; - // Verify Mul 252. + // Verify Mul 252. - let conv_tmp_48d52_14 = - (((M31_0) - (dst_limb_0_col11)) + ((op0_limb_0_col40) * (op1_limb_0_col69))); - let conv_tmp_48d52_15 = ((((M31_0) - (dst_limb_1_col12)) - + ((op0_limb_0_col40) * (op1_limb_1_col70))) - + ((op0_limb_1_col41) * (op1_limb_0_col69))); - let conv_tmp_48d52_16 = (((((M31_0) - (dst_limb_2_col13)) - + ((op0_limb_0_col40) * (op1_limb_2_col71))) - + ((op0_limb_1_col41) * (op1_limb_1_col70))) - + ((op0_limb_2_col42) * (op1_limb_0_col69))); - let conv_tmp_48d52_17 = ((((((M31_0) - (dst_limb_3_col14)) - + ((op0_limb_0_col40) * (op1_limb_3_col72))) - + ((op0_limb_1_col41) * (op1_limb_2_col71))) - + ((op0_limb_2_col42) * (op1_limb_1_col70))) - + ((op0_limb_3_col43) * (op1_limb_0_col69))); - let conv_tmp_48d52_18 = (((((((M31_0) - (dst_limb_4_col15)) - + ((op0_limb_0_col40) * (op1_limb_4_col73))) - + ((op0_limb_1_col41) * (op1_limb_3_col72))) - + ((op0_limb_2_col42) * (op1_limb_2_col71))) - + ((op0_limb_3_col43) * (op1_limb_1_col70))) - + ((op0_limb_4_col44) * (op1_limb_0_col69))); - let conv_tmp_48d52_19 = ((((((((M31_0) - (dst_limb_5_col16)) - + ((op0_limb_0_col40) * (op1_limb_5_col74))) - + ((op0_limb_1_col41) * (op1_limb_4_col73))) - + ((op0_limb_2_col42) * (op1_limb_3_col72))) - + ((op0_limb_3_col43) * (op1_limb_2_col71))) - + ((op0_limb_4_col44) * (op1_limb_1_col70))) - + ((op0_limb_5_col45) * (op1_limb_0_col69))); - let conv_tmp_48d52_20 = (((((((((M31_0) - (dst_limb_6_col17)) - + ((op0_limb_0_col40) * (op1_limb_6_col75))) - + ((op0_limb_1_col41) * (op1_limb_5_col74))) - + ((op0_limb_2_col42) * (op1_limb_4_col73))) - + ((op0_limb_3_col43) * (op1_limb_3_col72))) - + ((op0_limb_4_col44) * (op1_limb_2_col71))) - + ((op0_limb_5_col45) * (op1_limb_1_col70))) - + ((op0_limb_6_col46) * (op1_limb_0_col69))); - let conv_tmp_48d52_21 = ((((((((((M31_0) - (dst_limb_7_col18)) - + ((op0_limb_0_col40) * (op1_limb_7_col76))) - + ((op0_limb_1_col41) * (op1_limb_6_col75))) - + ((op0_limb_2_col42) * (op1_limb_5_col74))) - + ((op0_limb_3_col43) * (op1_limb_4_col73))) - + ((op0_limb_4_col44) * (op1_limb_3_col72))) - + ((op0_limb_5_col45) * (op1_limb_2_col71))) - + ((op0_limb_6_col46) * (op1_limb_1_col70))) - + ((op0_limb_7_col47) * (op1_limb_0_col69))); - let conv_tmp_48d52_22 = (((((((((((M31_0) - (dst_limb_8_col19)) - + ((op0_limb_0_col40) * (op1_limb_8_col77))) - + ((op0_limb_1_col41) * (op1_limb_7_col76))) - + ((op0_limb_2_col42) * (op1_limb_6_col75))) - + ((op0_limb_3_col43) * (op1_limb_5_col74))) - + ((op0_limb_4_col44) * (op1_limb_4_col73))) - + ((op0_limb_5_col45) * (op1_limb_3_col72))) - + ((op0_limb_6_col46) * (op1_limb_2_col71))) - + ((op0_limb_7_col47) * (op1_limb_1_col70))) - + ((op0_limb_8_col48) * (op1_limb_0_col69))); - let conv_tmp_48d52_23 = ((((((((((((M31_0) - (dst_limb_9_col20)) - + ((op0_limb_0_col40) * (op1_limb_9_col78))) - + ((op0_limb_1_col41) * (op1_limb_8_col77))) - + ((op0_limb_2_col42) * (op1_limb_7_col76))) - + ((op0_limb_3_col43) * (op1_limb_6_col75))) - + ((op0_limb_4_col44) * (op1_limb_5_col74))) - + ((op0_limb_5_col45) * (op1_limb_4_col73))) - + ((op0_limb_6_col46) * (op1_limb_3_col72))) - + ((op0_limb_7_col47) * (op1_limb_2_col71))) - + ((op0_limb_8_col48) * (op1_limb_1_col70))) - + ((op0_limb_9_col49) * (op1_limb_0_col69))); - let conv_tmp_48d52_24 = (((((((((((((M31_0) - (dst_limb_10_col21)) - + ((op0_limb_0_col40) * (op1_limb_10_col79))) - + ((op0_limb_1_col41) * (op1_limb_9_col78))) - + ((op0_limb_2_col42) * (op1_limb_8_col77))) - + ((op0_limb_3_col43) * (op1_limb_7_col76))) - + ((op0_limb_4_col44) * (op1_limb_6_col75))) - + ((op0_limb_5_col45) * (op1_limb_5_col74))) - + ((op0_limb_6_col46) * (op1_limb_4_col73))) - + ((op0_limb_7_col47) * (op1_limb_3_col72))) - + ((op0_limb_8_col48) * (op1_limb_2_col71))) - + ((op0_limb_9_col49) * (op1_limb_1_col70))) - + ((op0_limb_10_col50) * (op1_limb_0_col69))); - let conv_tmp_48d52_25 = ((((((((((((((M31_0) - (dst_limb_11_col22)) - + ((op0_limb_0_col40) * (op1_limb_11_col80))) - + ((op0_limb_1_col41) * (op1_limb_10_col79))) - + ((op0_limb_2_col42) * (op1_limb_9_col78))) - + ((op0_limb_3_col43) * (op1_limb_8_col77))) - + ((op0_limb_4_col44) * (op1_limb_7_col76))) - + ((op0_limb_5_col45) * (op1_limb_6_col75))) - + ((op0_limb_6_col46) * (op1_limb_5_col74))) - + ((op0_limb_7_col47) * (op1_limb_4_col73))) - + ((op0_limb_8_col48) * (op1_limb_3_col72))) - + ((op0_limb_9_col49) * (op1_limb_2_col71))) - + ((op0_limb_10_col50) * (op1_limb_1_col70))) - + ((op0_limb_11_col51) * (op1_limb_0_col69))); - let conv_tmp_48d52_26 = (((((((((((((((M31_0) - (dst_limb_12_col23)) - + ((op0_limb_0_col40) * (op1_limb_12_col81))) - + ((op0_limb_1_col41) * (op1_limb_11_col80))) - + ((op0_limb_2_col42) * (op1_limb_10_col79))) - + ((op0_limb_3_col43) * (op1_limb_9_col78))) - + ((op0_limb_4_col44) * (op1_limb_8_col77))) - + ((op0_limb_5_col45) * (op1_limb_7_col76))) - + ((op0_limb_6_col46) * (op1_limb_6_col75))) - + ((op0_limb_7_col47) * (op1_limb_5_col74))) - + ((op0_limb_8_col48) * (op1_limb_4_col73))) - + ((op0_limb_9_col49) * (op1_limb_3_col72))) - + ((op0_limb_10_col50) * (op1_limb_2_col71))) - + ((op0_limb_11_col51) * (op1_limb_1_col70))) - + ((op0_limb_12_col52) * (op1_limb_0_col69))); - let conv_tmp_48d52_27 = ((((((((((((((((M31_0) - (dst_limb_13_col24)) - + ((op0_limb_0_col40) * (op1_limb_13_col82))) - + ((op0_limb_1_col41) * (op1_limb_12_col81))) - + ((op0_limb_2_col42) * (op1_limb_11_col80))) - + ((op0_limb_3_col43) * (op1_limb_10_col79))) - + ((op0_limb_4_col44) * (op1_limb_9_col78))) - + ((op0_limb_5_col45) * (op1_limb_8_col77))) - + ((op0_limb_6_col46) * (op1_limb_7_col76))) - + ((op0_limb_7_col47) * (op1_limb_6_col75))) - + ((op0_limb_8_col48) * (op1_limb_5_col74))) - + ((op0_limb_9_col49) * (op1_limb_4_col73))) - + ((op0_limb_10_col50) * (op1_limb_3_col72))) - + ((op0_limb_11_col51) * (op1_limb_2_col71))) - + ((op0_limb_12_col52) * (op1_limb_1_col70))) - + ((op0_limb_13_col53) * (op1_limb_0_col69))); - let conv_tmp_48d52_28 = (((((((((((((((((M31_0) - - (dst_limb_14_col25)) - + ((op0_limb_0_col40) * (op1_limb_14_col83))) - + ((op0_limb_1_col41) * (op1_limb_13_col82))) - + ((op0_limb_2_col42) * (op1_limb_12_col81))) - + ((op0_limb_3_col43) * (op1_limb_11_col80))) - + ((op0_limb_4_col44) * (op1_limb_10_col79))) - + ((op0_limb_5_col45) * (op1_limb_9_col78))) - + ((op0_limb_6_col46) * (op1_limb_8_col77))) - + ((op0_limb_7_col47) * (op1_limb_7_col76))) - + ((op0_limb_8_col48) * (op1_limb_6_col75))) - + ((op0_limb_9_col49) * (op1_limb_5_col74))) - + ((op0_limb_10_col50) * (op1_limb_4_col73))) - + ((op0_limb_11_col51) * (op1_limb_3_col72))) - + ((op0_limb_12_col52) * (op1_limb_2_col71))) - + ((op0_limb_13_col53) * (op1_limb_1_col70))) - + ((op0_limb_14_col54) * (op1_limb_0_col69))); - let conv_tmp_48d52_29 = ((((((((((((((((((M31_0) - - (dst_limb_15_col26)) - + ((op0_limb_0_col40) * (op1_limb_15_col84))) - + ((op0_limb_1_col41) * (op1_limb_14_col83))) - + ((op0_limb_2_col42) * (op1_limb_13_col82))) - + ((op0_limb_3_col43) * (op1_limb_12_col81))) - + ((op0_limb_4_col44) * (op1_limb_11_col80))) - + ((op0_limb_5_col45) * (op1_limb_10_col79))) - + ((op0_limb_6_col46) * (op1_limb_9_col78))) - + ((op0_limb_7_col47) * (op1_limb_8_col77))) - + ((op0_limb_8_col48) * (op1_limb_7_col76))) - + ((op0_limb_9_col49) * (op1_limb_6_col75))) - + ((op0_limb_10_col50) * (op1_limb_5_col74))) - + ((op0_limb_11_col51) * (op1_limb_4_col73))) - + ((op0_limb_12_col52) * (op1_limb_3_col72))) - + ((op0_limb_13_col53) * (op1_limb_2_col71))) - + ((op0_limb_14_col54) * (op1_limb_1_col70))) - + ((op0_limb_15_col55) * (op1_limb_0_col69))); - let conv_tmp_48d52_30 = (((((((((((((((((((M31_0) - - (dst_limb_16_col27)) - + ((op0_limb_0_col40) * (op1_limb_16_col85))) - + ((op0_limb_1_col41) * (op1_limb_15_col84))) - + ((op0_limb_2_col42) * (op1_limb_14_col83))) - + ((op0_limb_3_col43) * (op1_limb_13_col82))) - + ((op0_limb_4_col44) * (op1_limb_12_col81))) - + ((op0_limb_5_col45) * (op1_limb_11_col80))) - + ((op0_limb_6_col46) * (op1_limb_10_col79))) - + ((op0_limb_7_col47) * (op1_limb_9_col78))) - + ((op0_limb_8_col48) * (op1_limb_8_col77))) - + ((op0_limb_9_col49) * (op1_limb_7_col76))) - + ((op0_limb_10_col50) * (op1_limb_6_col75))) - + ((op0_limb_11_col51) * (op1_limb_5_col74))) - + ((op0_limb_12_col52) * (op1_limb_4_col73))) - + ((op0_limb_13_col53) * (op1_limb_3_col72))) - + ((op0_limb_14_col54) * (op1_limb_2_col71))) - + ((op0_limb_15_col55) * (op1_limb_1_col70))) - + ((op0_limb_16_col56) * (op1_limb_0_col69))); - let conv_tmp_48d52_31 = ((((((((((((((((((((M31_0) - - (dst_limb_17_col28)) - + ((op0_limb_0_col40) * (op1_limb_17_col86))) - + ((op0_limb_1_col41) * (op1_limb_16_col85))) - + ((op0_limb_2_col42) * (op1_limb_15_col84))) - + ((op0_limb_3_col43) * (op1_limb_14_col83))) - + ((op0_limb_4_col44) * (op1_limb_13_col82))) - + ((op0_limb_5_col45) * (op1_limb_12_col81))) - + ((op0_limb_6_col46) * (op1_limb_11_col80))) - + ((op0_limb_7_col47) * (op1_limb_10_col79))) - + ((op0_limb_8_col48) * (op1_limb_9_col78))) - + ((op0_limb_9_col49) * (op1_limb_8_col77))) - + ((op0_limb_10_col50) * (op1_limb_7_col76))) - + ((op0_limb_11_col51) * (op1_limb_6_col75))) - + ((op0_limb_12_col52) * (op1_limb_5_col74))) - + ((op0_limb_13_col53) * (op1_limb_4_col73))) - + ((op0_limb_14_col54) * (op1_limb_3_col72))) - + ((op0_limb_15_col55) * (op1_limb_2_col71))) - + ((op0_limb_16_col56) * (op1_limb_1_col70))) - + ((op0_limb_17_col57) * (op1_limb_0_col69))); - let conv_tmp_48d52_32 = (((((((((((((((((((((M31_0) - - (dst_limb_18_col29)) - + ((op0_limb_0_col40) * (op1_limb_18_col87))) - + ((op0_limb_1_col41) * (op1_limb_17_col86))) - + ((op0_limb_2_col42) * (op1_limb_16_col85))) - + ((op0_limb_3_col43) * (op1_limb_15_col84))) - + ((op0_limb_4_col44) * (op1_limb_14_col83))) - + ((op0_limb_5_col45) * (op1_limb_13_col82))) - + ((op0_limb_6_col46) * (op1_limb_12_col81))) - + ((op0_limb_7_col47) * (op1_limb_11_col80))) - + ((op0_limb_8_col48) * (op1_limb_10_col79))) - + ((op0_limb_9_col49) * (op1_limb_9_col78))) - + ((op0_limb_10_col50) * (op1_limb_8_col77))) - + ((op0_limb_11_col51) * (op1_limb_7_col76))) - + ((op0_limb_12_col52) * (op1_limb_6_col75))) - + ((op0_limb_13_col53) * (op1_limb_5_col74))) - + ((op0_limb_14_col54) * (op1_limb_4_col73))) - + ((op0_limb_15_col55) * (op1_limb_3_col72))) - + ((op0_limb_16_col56) * (op1_limb_2_col71))) - + ((op0_limb_17_col57) * (op1_limb_1_col70))) - + ((op0_limb_18_col58) * (op1_limb_0_col69))); - let conv_tmp_48d52_33 = ((((((((((((((((((((((M31_0) - - (dst_limb_19_col30)) - + ((op0_limb_0_col40) * (op1_limb_19_col88))) - + ((op0_limb_1_col41) * (op1_limb_18_col87))) - + ((op0_limb_2_col42) * (op1_limb_17_col86))) - + ((op0_limb_3_col43) * (op1_limb_16_col85))) - + ((op0_limb_4_col44) * (op1_limb_15_col84))) - + ((op0_limb_5_col45) * (op1_limb_14_col83))) - + ((op0_limb_6_col46) * (op1_limb_13_col82))) - + ((op0_limb_7_col47) * (op1_limb_12_col81))) - + ((op0_limb_8_col48) * (op1_limb_11_col80))) - + ((op0_limb_9_col49) * (op1_limb_10_col79))) - + ((op0_limb_10_col50) * (op1_limb_9_col78))) - + ((op0_limb_11_col51) * (op1_limb_8_col77))) - + ((op0_limb_12_col52) * (op1_limb_7_col76))) - + ((op0_limb_13_col53) * (op1_limb_6_col75))) - + ((op0_limb_14_col54) * (op1_limb_5_col74))) - + ((op0_limb_15_col55) * (op1_limb_4_col73))) - + ((op0_limb_16_col56) * (op1_limb_3_col72))) - + ((op0_limb_17_col57) * (op1_limb_2_col71))) - + ((op0_limb_18_col58) * (op1_limb_1_col70))) - + ((op0_limb_19_col59) * (op1_limb_0_col69))); - let conv_tmp_48d52_34 = (((((((((((((((((((((((M31_0) - - (dst_limb_20_col31)) - + ((op0_limb_0_col40) * (op1_limb_20_col89))) - + ((op0_limb_1_col41) * (op1_limb_19_col88))) - + ((op0_limb_2_col42) * (op1_limb_18_col87))) - + ((op0_limb_3_col43) * (op1_limb_17_col86))) - + ((op0_limb_4_col44) * (op1_limb_16_col85))) - + ((op0_limb_5_col45) * (op1_limb_15_col84))) - + ((op0_limb_6_col46) * (op1_limb_14_col83))) - + ((op0_limb_7_col47) * (op1_limb_13_col82))) - + ((op0_limb_8_col48) * (op1_limb_12_col81))) - + ((op0_limb_9_col49) * (op1_limb_11_col80))) - + ((op0_limb_10_col50) * (op1_limb_10_col79))) - + ((op0_limb_11_col51) * (op1_limb_9_col78))) - + ((op0_limb_12_col52) * (op1_limb_8_col77))) - + ((op0_limb_13_col53) * (op1_limb_7_col76))) - + ((op0_limb_14_col54) * (op1_limb_6_col75))) - + ((op0_limb_15_col55) * (op1_limb_5_col74))) - + ((op0_limb_16_col56) * (op1_limb_4_col73))) - + ((op0_limb_17_col57) * (op1_limb_3_col72))) - + ((op0_limb_18_col58) * (op1_limb_2_col71))) - + ((op0_limb_19_col59) * (op1_limb_1_col70))) - + ((op0_limb_20_col60) * (op1_limb_0_col69))); - let conv_tmp_48d52_35 = ((((((((((((((((((((((((M31_0) - - (dst_limb_21_col32)) - + ((op0_limb_0_col40) * (op1_limb_21_col90))) - + ((op0_limb_1_col41) * (op1_limb_20_col89))) - + ((op0_limb_2_col42) * (op1_limb_19_col88))) - + ((op0_limb_3_col43) * (op1_limb_18_col87))) - + ((op0_limb_4_col44) * (op1_limb_17_col86))) - + ((op0_limb_5_col45) * (op1_limb_16_col85))) - + ((op0_limb_6_col46) * (op1_limb_15_col84))) - + ((op0_limb_7_col47) * (op1_limb_14_col83))) - + ((op0_limb_8_col48) * (op1_limb_13_col82))) - + ((op0_limb_9_col49) * (op1_limb_12_col81))) - + ((op0_limb_10_col50) * (op1_limb_11_col80))) - + ((op0_limb_11_col51) * (op1_limb_10_col79))) - + ((op0_limb_12_col52) * (op1_limb_9_col78))) - + ((op0_limb_13_col53) * (op1_limb_8_col77))) - + ((op0_limb_14_col54) * (op1_limb_7_col76))) - + ((op0_limb_15_col55) * (op1_limb_6_col75))) - + ((op0_limb_16_col56) * (op1_limb_5_col74))) - + ((op0_limb_17_col57) * (op1_limb_4_col73))) - + ((op0_limb_18_col58) * (op1_limb_3_col72))) - + ((op0_limb_19_col59) * (op1_limb_2_col71))) - + ((op0_limb_20_col60) * (op1_limb_1_col70))) - + ((op0_limb_21_col61) * (op1_limb_0_col69))); - let conv_tmp_48d52_36 = (((((((((((((((((((((((((M31_0) - - (dst_limb_22_col33)) - + ((op0_limb_0_col40) * (op1_limb_22_col91))) - + ((op0_limb_1_col41) * (op1_limb_21_col90))) - + ((op0_limb_2_col42) * (op1_limb_20_col89))) - + ((op0_limb_3_col43) * (op1_limb_19_col88))) - + ((op0_limb_4_col44) * (op1_limb_18_col87))) - + ((op0_limb_5_col45) * (op1_limb_17_col86))) - + ((op0_limb_6_col46) * (op1_limb_16_col85))) - + ((op0_limb_7_col47) * (op1_limb_15_col84))) - + ((op0_limb_8_col48) * (op1_limb_14_col83))) - + ((op0_limb_9_col49) * (op1_limb_13_col82))) - + ((op0_limb_10_col50) * (op1_limb_12_col81))) - + ((op0_limb_11_col51) * (op1_limb_11_col80))) - + ((op0_limb_12_col52) * (op1_limb_10_col79))) - + ((op0_limb_13_col53) * (op1_limb_9_col78))) - + ((op0_limb_14_col54) * (op1_limb_8_col77))) - + ((op0_limb_15_col55) * (op1_limb_7_col76))) - + ((op0_limb_16_col56) * (op1_limb_6_col75))) - + ((op0_limb_17_col57) * (op1_limb_5_col74))) - + ((op0_limb_18_col58) * (op1_limb_4_col73))) - + ((op0_limb_19_col59) * (op1_limb_3_col72))) - + ((op0_limb_20_col60) * (op1_limb_2_col71))) - + ((op0_limb_21_col61) * (op1_limb_1_col70))) - + ((op0_limb_22_col62) * (op1_limb_0_col69))); - let conv_tmp_48d52_37 = ((((((((((((((((((((((((((M31_0) - - (dst_limb_23_col34)) - + ((op0_limb_0_col40) * (op1_limb_23_col92))) - + ((op0_limb_1_col41) * (op1_limb_22_col91))) - + ((op0_limb_2_col42) * (op1_limb_21_col90))) - + ((op0_limb_3_col43) * (op1_limb_20_col89))) - + ((op0_limb_4_col44) * (op1_limb_19_col88))) - + ((op0_limb_5_col45) * (op1_limb_18_col87))) - + ((op0_limb_6_col46) * (op1_limb_17_col86))) - + ((op0_limb_7_col47) * (op1_limb_16_col85))) - + ((op0_limb_8_col48) * (op1_limb_15_col84))) - + ((op0_limb_9_col49) * (op1_limb_14_col83))) - + ((op0_limb_10_col50) * (op1_limb_13_col82))) - + ((op0_limb_11_col51) * (op1_limb_12_col81))) - + ((op0_limb_12_col52) * (op1_limb_11_col80))) - + ((op0_limb_13_col53) * (op1_limb_10_col79))) - + ((op0_limb_14_col54) * (op1_limb_9_col78))) - + ((op0_limb_15_col55) * (op1_limb_8_col77))) - + ((op0_limb_16_col56) * (op1_limb_7_col76))) - + ((op0_limb_17_col57) * (op1_limb_6_col75))) - + ((op0_limb_18_col58) * (op1_limb_5_col74))) - + ((op0_limb_19_col59) * (op1_limb_4_col73))) - + ((op0_limb_20_col60) * (op1_limb_3_col72))) - + ((op0_limb_21_col61) * (op1_limb_2_col71))) - + ((op0_limb_22_col62) * (op1_limb_1_col70))) - + ((op0_limb_23_col63) * (op1_limb_0_col69))); - let conv_tmp_48d52_38 = (((((((((((((((((((((((((((M31_0) - - (dst_limb_24_col35)) - + ((op0_limb_0_col40) * (op1_limb_24_col93))) - + ((op0_limb_1_col41) * (op1_limb_23_col92))) - + ((op0_limb_2_col42) * (op1_limb_22_col91))) - + ((op0_limb_3_col43) * (op1_limb_21_col90))) - + ((op0_limb_4_col44) * (op1_limb_20_col89))) - + ((op0_limb_5_col45) * (op1_limb_19_col88))) - + ((op0_limb_6_col46) * (op1_limb_18_col87))) - + ((op0_limb_7_col47) * (op1_limb_17_col86))) - + ((op0_limb_8_col48) * (op1_limb_16_col85))) - + ((op0_limb_9_col49) * (op1_limb_15_col84))) - + ((op0_limb_10_col50) * (op1_limb_14_col83))) - + ((op0_limb_11_col51) * (op1_limb_13_col82))) - + ((op0_limb_12_col52) * (op1_limb_12_col81))) - + ((op0_limb_13_col53) * (op1_limb_11_col80))) - + ((op0_limb_14_col54) * (op1_limb_10_col79))) - + ((op0_limb_15_col55) * (op1_limb_9_col78))) - + ((op0_limb_16_col56) * (op1_limb_8_col77))) - + ((op0_limb_17_col57) * (op1_limb_7_col76))) - + ((op0_limb_18_col58) * (op1_limb_6_col75))) - + ((op0_limb_19_col59) * (op1_limb_5_col74))) - + ((op0_limb_20_col60) * (op1_limb_4_col73))) - + ((op0_limb_21_col61) * (op1_limb_3_col72))) - + ((op0_limb_22_col62) * (op1_limb_2_col71))) - + ((op0_limb_23_col63) * (op1_limb_1_col70))) - + ((op0_limb_24_col64) * (op1_limb_0_col69))); - let conv_tmp_48d52_39 = ((((((((((((((((((((((((((((M31_0) - - (dst_limb_25_col36)) - + ((op0_limb_0_col40) * (op1_limb_25_col94))) - + ((op0_limb_1_col41) * (op1_limb_24_col93))) - + ((op0_limb_2_col42) * (op1_limb_23_col92))) - + ((op0_limb_3_col43) * (op1_limb_22_col91))) - + ((op0_limb_4_col44) * (op1_limb_21_col90))) - + ((op0_limb_5_col45) * (op1_limb_20_col89))) - + ((op0_limb_6_col46) * (op1_limb_19_col88))) - + ((op0_limb_7_col47) * (op1_limb_18_col87))) - + ((op0_limb_8_col48) * (op1_limb_17_col86))) - + ((op0_limb_9_col49) * (op1_limb_16_col85))) - + ((op0_limb_10_col50) * (op1_limb_15_col84))) - + ((op0_limb_11_col51) * (op1_limb_14_col83))) - + ((op0_limb_12_col52) * (op1_limb_13_col82))) - + ((op0_limb_13_col53) * (op1_limb_12_col81))) - + ((op0_limb_14_col54) * (op1_limb_11_col80))) - + ((op0_limb_15_col55) * (op1_limb_10_col79))) - + ((op0_limb_16_col56) * (op1_limb_9_col78))) - + ((op0_limb_17_col57) * (op1_limb_8_col77))) - + ((op0_limb_18_col58) * (op1_limb_7_col76))) - + ((op0_limb_19_col59) * (op1_limb_6_col75))) - + ((op0_limb_20_col60) * (op1_limb_5_col74))) - + ((op0_limb_21_col61) * (op1_limb_4_col73))) - + ((op0_limb_22_col62) * (op1_limb_3_col72))) - + ((op0_limb_23_col63) * (op1_limb_2_col71))) - + ((op0_limb_24_col64) * (op1_limb_1_col70))) - + ((op0_limb_25_col65) * (op1_limb_0_col69))); - let conv_tmp_48d52_40 = (((((((((((((((((((((((((((((M31_0) - - (dst_limb_26_col37)) - + ((op0_limb_0_col40) * (op1_limb_26_col95))) - + ((op0_limb_1_col41) * (op1_limb_25_col94))) - + ((op0_limb_2_col42) * (op1_limb_24_col93))) - + ((op0_limb_3_col43) * (op1_limb_23_col92))) - + ((op0_limb_4_col44) * (op1_limb_22_col91))) - + ((op0_limb_5_col45) * (op1_limb_21_col90))) - + ((op0_limb_6_col46) * (op1_limb_20_col89))) - + ((op0_limb_7_col47) * (op1_limb_19_col88))) - + ((op0_limb_8_col48) * (op1_limb_18_col87))) - + ((op0_limb_9_col49) * (op1_limb_17_col86))) - + ((op0_limb_10_col50) * (op1_limb_16_col85))) - + ((op0_limb_11_col51) * (op1_limb_15_col84))) - + ((op0_limb_12_col52) * (op1_limb_14_col83))) - + ((op0_limb_13_col53) * (op1_limb_13_col82))) - + ((op0_limb_14_col54) * (op1_limb_12_col81))) - + ((op0_limb_15_col55) * (op1_limb_11_col80))) - + ((op0_limb_16_col56) * (op1_limb_10_col79))) - + ((op0_limb_17_col57) * (op1_limb_9_col78))) - + ((op0_limb_18_col58) * (op1_limb_8_col77))) - + ((op0_limb_19_col59) * (op1_limb_7_col76))) - + ((op0_limb_20_col60) * (op1_limb_6_col75))) - + ((op0_limb_21_col61) * (op1_limb_5_col74))) - + ((op0_limb_22_col62) * (op1_limb_4_col73))) - + ((op0_limb_23_col63) * (op1_limb_3_col72))) - + ((op0_limb_24_col64) * (op1_limb_2_col71))) - + ((op0_limb_25_col65) * (op1_limb_1_col70))) - + ((op0_limb_26_col66) * (op1_limb_0_col69))); - let conv_tmp_48d52_41 = ((((((((((((((((((((((((((((((M31_0) - - (dst_limb_27_col38)) - + ((op0_limb_0_col40) * (op1_limb_27_col96))) - + ((op0_limb_1_col41) * (op1_limb_26_col95))) - + ((op0_limb_2_col42) * (op1_limb_25_col94))) - + ((op0_limb_3_col43) * (op1_limb_24_col93))) - + ((op0_limb_4_col44) * (op1_limb_23_col92))) - + ((op0_limb_5_col45) * (op1_limb_22_col91))) - + ((op0_limb_6_col46) * (op1_limb_21_col90))) - + ((op0_limb_7_col47) * (op1_limb_20_col89))) - + ((op0_limb_8_col48) * (op1_limb_19_col88))) - + ((op0_limb_9_col49) * (op1_limb_18_col87))) - + ((op0_limb_10_col50) * (op1_limb_17_col86))) - + ((op0_limb_11_col51) * (op1_limb_16_col85))) - + ((op0_limb_12_col52) * (op1_limb_15_col84))) - + ((op0_limb_13_col53) * (op1_limb_14_col83))) - + ((op0_limb_14_col54) * (op1_limb_13_col82))) - + ((op0_limb_15_col55) * (op1_limb_12_col81))) - + ((op0_limb_16_col56) * (op1_limb_11_col80))) - + ((op0_limb_17_col57) * (op1_limb_10_col79))) - + ((op0_limb_18_col58) * (op1_limb_9_col78))) - + ((op0_limb_19_col59) * (op1_limb_8_col77))) - + ((op0_limb_20_col60) * (op1_limb_7_col76))) - + ((op0_limb_21_col61) * (op1_limb_6_col75))) - + ((op0_limb_22_col62) * (op1_limb_5_col74))) - + ((op0_limb_23_col63) * (op1_limb_4_col73))) - + ((op0_limb_24_col64) * (op1_limb_3_col72))) - + ((op0_limb_25_col65) * (op1_limb_2_col71))) - + ((op0_limb_26_col66) * (op1_limb_1_col70))) - + ((op0_limb_27_col67) * (op1_limb_0_col69))); - let conv_tmp_48d52_42 = ((((((((((((((((((((((((((((M31_0) - + ((op0_limb_1_col41) * (op1_limb_27_col96))) - + ((op0_limb_2_col42) * (op1_limb_26_col95))) - + ((op0_limb_3_col43) * (op1_limb_25_col94))) - + ((op0_limb_4_col44) * (op1_limb_24_col93))) - + ((op0_limb_5_col45) * (op1_limb_23_col92))) - + ((op0_limb_6_col46) * (op1_limb_22_col91))) - + ((op0_limb_7_col47) * (op1_limb_21_col90))) - + ((op0_limb_8_col48) * (op1_limb_20_col89))) - + ((op0_limb_9_col49) * (op1_limb_19_col88))) - + ((op0_limb_10_col50) * (op1_limb_18_col87))) - + ((op0_limb_11_col51) * (op1_limb_17_col86))) - + ((op0_limb_12_col52) * (op1_limb_16_col85))) - + ((op0_limb_13_col53) * (op1_limb_15_col84))) - + ((op0_limb_14_col54) * (op1_limb_14_col83))) - + ((op0_limb_15_col55) * (op1_limb_13_col82))) - + ((op0_limb_16_col56) * (op1_limb_12_col81))) - + ((op0_limb_17_col57) * (op1_limb_11_col80))) - + ((op0_limb_18_col58) * (op1_limb_10_col79))) - + ((op0_limb_19_col59) * (op1_limb_9_col78))) - + ((op0_limb_20_col60) * (op1_limb_8_col77))) - + ((op0_limb_21_col61) * (op1_limb_7_col76))) - + ((op0_limb_22_col62) * (op1_limb_6_col75))) - + ((op0_limb_23_col63) * (op1_limb_5_col74))) - + ((op0_limb_24_col64) * (op1_limb_4_col73))) - + ((op0_limb_25_col65) * (op1_limb_3_col72))) - + ((op0_limb_26_col66) * (op1_limb_2_col71))) - + ((op0_limb_27_col67) * (op1_limb_1_col70))); - let conv_tmp_48d52_43 = (((((((((((((((((((((((((((M31_0) - + ((op0_limb_2_col42) * (op1_limb_27_col96))) - + ((op0_limb_3_col43) * (op1_limb_26_col95))) - + ((op0_limb_4_col44) * (op1_limb_25_col94))) - + ((op0_limb_5_col45) * (op1_limb_24_col93))) - + ((op0_limb_6_col46) * (op1_limb_23_col92))) - + ((op0_limb_7_col47) * (op1_limb_22_col91))) - + ((op0_limb_8_col48) * (op1_limb_21_col90))) - + ((op0_limb_9_col49) * (op1_limb_20_col89))) - + ((op0_limb_10_col50) * (op1_limb_19_col88))) - + ((op0_limb_11_col51) * (op1_limb_18_col87))) - + ((op0_limb_12_col52) * (op1_limb_17_col86))) - + ((op0_limb_13_col53) * (op1_limb_16_col85))) - + ((op0_limb_14_col54) * (op1_limb_15_col84))) - + ((op0_limb_15_col55) * (op1_limb_14_col83))) - + ((op0_limb_16_col56) * (op1_limb_13_col82))) - + ((op0_limb_17_col57) * (op1_limb_12_col81))) - + ((op0_limb_18_col58) * (op1_limb_11_col80))) - + ((op0_limb_19_col59) * (op1_limb_10_col79))) - + ((op0_limb_20_col60) * (op1_limb_9_col78))) - + ((op0_limb_21_col61) * (op1_limb_8_col77))) - + ((op0_limb_22_col62) * (op1_limb_7_col76))) - + ((op0_limb_23_col63) * (op1_limb_6_col75))) - + ((op0_limb_24_col64) * (op1_limb_5_col74))) - + ((op0_limb_25_col65) * (op1_limb_4_col73))) - + ((op0_limb_26_col66) * (op1_limb_3_col72))) - + ((op0_limb_27_col67) * (op1_limb_2_col71))); - let conv_tmp_48d52_44 = ((((((((((((((((((((((((((M31_0) - + ((op0_limb_3_col43) * (op1_limb_27_col96))) - + ((op0_limb_4_col44) * (op1_limb_26_col95))) - + ((op0_limb_5_col45) * (op1_limb_25_col94))) - + ((op0_limb_6_col46) * (op1_limb_24_col93))) - + ((op0_limb_7_col47) * (op1_limb_23_col92))) - + ((op0_limb_8_col48) * (op1_limb_22_col91))) - + ((op0_limb_9_col49) * (op1_limb_21_col90))) - + ((op0_limb_10_col50) * (op1_limb_20_col89))) - + ((op0_limb_11_col51) * (op1_limb_19_col88))) - + ((op0_limb_12_col52) * (op1_limb_18_col87))) - + ((op0_limb_13_col53) * (op1_limb_17_col86))) - + ((op0_limb_14_col54) * (op1_limb_16_col85))) - + ((op0_limb_15_col55) * (op1_limb_15_col84))) - + ((op0_limb_16_col56) * (op1_limb_14_col83))) - + ((op0_limb_17_col57) * (op1_limb_13_col82))) - + ((op0_limb_18_col58) * (op1_limb_12_col81))) - + ((op0_limb_19_col59) * (op1_limb_11_col80))) - + ((op0_limb_20_col60) * (op1_limb_10_col79))) - + ((op0_limb_21_col61) * (op1_limb_9_col78))) - + ((op0_limb_22_col62) * (op1_limb_8_col77))) - + ((op0_limb_23_col63) * (op1_limb_7_col76))) - + ((op0_limb_24_col64) * (op1_limb_6_col75))) - + ((op0_limb_25_col65) * (op1_limb_5_col74))) - + ((op0_limb_26_col66) * (op1_limb_4_col73))) - + ((op0_limb_27_col67) * (op1_limb_3_col72))); - let conv_tmp_48d52_45 = (((((((((((((((((((((((((M31_0) - + ((op0_limb_4_col44) * (op1_limb_27_col96))) - + ((op0_limb_5_col45) * (op1_limb_26_col95))) - + ((op0_limb_6_col46) * (op1_limb_25_col94))) - + ((op0_limb_7_col47) * (op1_limb_24_col93))) - + ((op0_limb_8_col48) * (op1_limb_23_col92))) - + ((op0_limb_9_col49) * (op1_limb_22_col91))) - + ((op0_limb_10_col50) * (op1_limb_21_col90))) - + ((op0_limb_11_col51) * (op1_limb_20_col89))) - + ((op0_limb_12_col52) * (op1_limb_19_col88))) - + ((op0_limb_13_col53) * (op1_limb_18_col87))) - + ((op0_limb_14_col54) * (op1_limb_17_col86))) - + ((op0_limb_15_col55) * (op1_limb_16_col85))) - + ((op0_limb_16_col56) * (op1_limb_15_col84))) - + ((op0_limb_17_col57) * (op1_limb_14_col83))) - + ((op0_limb_18_col58) * (op1_limb_13_col82))) - + ((op0_limb_19_col59) * (op1_limb_12_col81))) - + ((op0_limb_20_col60) * (op1_limb_11_col80))) - + ((op0_limb_21_col61) * (op1_limb_10_col79))) - + ((op0_limb_22_col62) * (op1_limb_9_col78))) - + ((op0_limb_23_col63) * (op1_limb_8_col77))) - + ((op0_limb_24_col64) * (op1_limb_7_col76))) - + ((op0_limb_25_col65) * (op1_limb_6_col75))) - + ((op0_limb_26_col66) * (op1_limb_5_col74))) - + ((op0_limb_27_col67) * (op1_limb_4_col73))); - let conv_tmp_48d52_46 = ((((((((((((((((((((((((M31_0) - + ((op0_limb_5_col45) * (op1_limb_27_col96))) - + ((op0_limb_6_col46) * (op1_limb_26_col95))) - + ((op0_limb_7_col47) * (op1_limb_25_col94))) - + ((op0_limb_8_col48) * (op1_limb_24_col93))) - + ((op0_limb_9_col49) * (op1_limb_23_col92))) - + ((op0_limb_10_col50) * (op1_limb_22_col91))) - + ((op0_limb_11_col51) * (op1_limb_21_col90))) - + ((op0_limb_12_col52) * (op1_limb_20_col89))) - + ((op0_limb_13_col53) * (op1_limb_19_col88))) - + ((op0_limb_14_col54) * (op1_limb_18_col87))) - + ((op0_limb_15_col55) * (op1_limb_17_col86))) - + ((op0_limb_16_col56) * (op1_limb_16_col85))) - + ((op0_limb_17_col57) * (op1_limb_15_col84))) - + ((op0_limb_18_col58) * (op1_limb_14_col83))) - + ((op0_limb_19_col59) * (op1_limb_13_col82))) - + ((op0_limb_20_col60) * (op1_limb_12_col81))) - + ((op0_limb_21_col61) * (op1_limb_11_col80))) - + ((op0_limb_22_col62) * (op1_limb_10_col79))) - + ((op0_limb_23_col63) * (op1_limb_9_col78))) - + ((op0_limb_24_col64) * (op1_limb_8_col77))) - + ((op0_limb_25_col65) * (op1_limb_7_col76))) - + ((op0_limb_26_col66) * (op1_limb_6_col75))) - + ((op0_limb_27_col67) * (op1_limb_5_col74))); - let conv_tmp_48d52_47 = (((((((((((((((((((((((M31_0) - + ((op0_limb_6_col46) * (op1_limb_27_col96))) - + ((op0_limb_7_col47) * (op1_limb_26_col95))) - + ((op0_limb_8_col48) * (op1_limb_25_col94))) - + ((op0_limb_9_col49) * (op1_limb_24_col93))) - + ((op0_limb_10_col50) * (op1_limb_23_col92))) - + ((op0_limb_11_col51) * (op1_limb_22_col91))) - + ((op0_limb_12_col52) * (op1_limb_21_col90))) - + ((op0_limb_13_col53) * (op1_limb_20_col89))) - + ((op0_limb_14_col54) * (op1_limb_19_col88))) - + ((op0_limb_15_col55) * (op1_limb_18_col87))) - + ((op0_limb_16_col56) * (op1_limb_17_col86))) - + ((op0_limb_17_col57) * (op1_limb_16_col85))) - + ((op0_limb_18_col58) * (op1_limb_15_col84))) - + ((op0_limb_19_col59) * (op1_limb_14_col83))) - + ((op0_limb_20_col60) * (op1_limb_13_col82))) - + ((op0_limb_21_col61) * (op1_limb_12_col81))) - + ((op0_limb_22_col62) * (op1_limb_11_col80))) - + ((op0_limb_23_col63) * (op1_limb_10_col79))) - + ((op0_limb_24_col64) * (op1_limb_9_col78))) - + ((op0_limb_25_col65) * (op1_limb_8_col77))) - + ((op0_limb_26_col66) * (op1_limb_7_col76))) - + ((op0_limb_27_col67) * (op1_limb_6_col75))); - let conv_tmp_48d52_48 = ((((((((((((((((((((((M31_0) - + ((op0_limb_7_col47) * (op1_limb_27_col96))) - + ((op0_limb_8_col48) * (op1_limb_26_col95))) - + ((op0_limb_9_col49) * (op1_limb_25_col94))) - + ((op0_limb_10_col50) * (op1_limb_24_col93))) - + ((op0_limb_11_col51) * (op1_limb_23_col92))) - + ((op0_limb_12_col52) * (op1_limb_22_col91))) - + ((op0_limb_13_col53) * (op1_limb_21_col90))) - + ((op0_limb_14_col54) * (op1_limb_20_col89))) - + ((op0_limb_15_col55) * (op1_limb_19_col88))) - + ((op0_limb_16_col56) * (op1_limb_18_col87))) - + ((op0_limb_17_col57) * (op1_limb_17_col86))) - + ((op0_limb_18_col58) * (op1_limb_16_col85))) - + ((op0_limb_19_col59) * (op1_limb_15_col84))) - + ((op0_limb_20_col60) * (op1_limb_14_col83))) - + ((op0_limb_21_col61) * (op1_limb_13_col82))) - + ((op0_limb_22_col62) * (op1_limb_12_col81))) - + ((op0_limb_23_col63) * (op1_limb_11_col80))) - + ((op0_limb_24_col64) * (op1_limb_10_col79))) - + ((op0_limb_25_col65) * (op1_limb_9_col78))) - + ((op0_limb_26_col66) * (op1_limb_8_col77))) - + ((op0_limb_27_col67) * (op1_limb_7_col76))); - let conv_tmp_48d52_49 = (((((((((((((((((((((M31_0) - + ((op0_limb_8_col48) * (op1_limb_27_col96))) - + ((op0_limb_9_col49) * (op1_limb_26_col95))) - + ((op0_limb_10_col50) * (op1_limb_25_col94))) - + ((op0_limb_11_col51) * (op1_limb_24_col93))) - + ((op0_limb_12_col52) * (op1_limb_23_col92))) - + ((op0_limb_13_col53) * (op1_limb_22_col91))) - + ((op0_limb_14_col54) * (op1_limb_21_col90))) - + ((op0_limb_15_col55) * (op1_limb_20_col89))) - + ((op0_limb_16_col56) * (op1_limb_19_col88))) - + ((op0_limb_17_col57) * (op1_limb_18_col87))) - + ((op0_limb_18_col58) * (op1_limb_17_col86))) - + ((op0_limb_19_col59) * (op1_limb_16_col85))) - + ((op0_limb_20_col60) * (op1_limb_15_col84))) - + ((op0_limb_21_col61) * (op1_limb_14_col83))) - + ((op0_limb_22_col62) * (op1_limb_13_col82))) - + ((op0_limb_23_col63) * (op1_limb_12_col81))) - + ((op0_limb_24_col64) * (op1_limb_11_col80))) - + ((op0_limb_25_col65) * (op1_limb_10_col79))) - + ((op0_limb_26_col66) * (op1_limb_9_col78))) - + ((op0_limb_27_col67) * (op1_limb_8_col77))); - let conv_tmp_48d52_50 = ((((((((((((((((((((M31_0) - + ((op0_limb_9_col49) * (op1_limb_27_col96))) - + ((op0_limb_10_col50) * (op1_limb_26_col95))) - + ((op0_limb_11_col51) * (op1_limb_25_col94))) - + ((op0_limb_12_col52) * (op1_limb_24_col93))) - + ((op0_limb_13_col53) * (op1_limb_23_col92))) - + ((op0_limb_14_col54) * (op1_limb_22_col91))) - + ((op0_limb_15_col55) * (op1_limb_21_col90))) - + ((op0_limb_16_col56) * (op1_limb_20_col89))) - + ((op0_limb_17_col57) * (op1_limb_19_col88))) - + ((op0_limb_18_col58) * (op1_limb_18_col87))) - + ((op0_limb_19_col59) * (op1_limb_17_col86))) - + ((op0_limb_20_col60) * (op1_limb_16_col85))) - + ((op0_limb_21_col61) * (op1_limb_15_col84))) - + ((op0_limb_22_col62) * (op1_limb_14_col83))) - + ((op0_limb_23_col63) * (op1_limb_13_col82))) - + ((op0_limb_24_col64) * (op1_limb_12_col81))) - + ((op0_limb_25_col65) * (op1_limb_11_col80))) - + ((op0_limb_26_col66) * (op1_limb_10_col79))) - + ((op0_limb_27_col67) * (op1_limb_9_col78))); - let conv_tmp_48d52_51 = (((((((((((((((((((M31_0) - + ((op0_limb_10_col50) * (op1_limb_27_col96))) - + ((op0_limb_11_col51) * (op1_limb_26_col95))) - + ((op0_limb_12_col52) * (op1_limb_25_col94))) - + ((op0_limb_13_col53) * (op1_limb_24_col93))) - + ((op0_limb_14_col54) * (op1_limb_23_col92))) - + ((op0_limb_15_col55) * (op1_limb_22_col91))) - + ((op0_limb_16_col56) * (op1_limb_21_col90))) - + ((op0_limb_17_col57) * (op1_limb_20_col89))) - + ((op0_limb_18_col58) * (op1_limb_19_col88))) - + ((op0_limb_19_col59) * (op1_limb_18_col87))) - + ((op0_limb_20_col60) * (op1_limb_17_col86))) - + ((op0_limb_21_col61) * (op1_limb_16_col85))) - + ((op0_limb_22_col62) * (op1_limb_15_col84))) - + ((op0_limb_23_col63) * (op1_limb_14_col83))) - + ((op0_limb_24_col64) * (op1_limb_13_col82))) - + ((op0_limb_25_col65) * (op1_limb_12_col81))) - + ((op0_limb_26_col66) * (op1_limb_11_col80))) - + ((op0_limb_27_col67) * (op1_limb_10_col79))); - let conv_tmp_48d52_52 = ((((((((((((((((((M31_0) - + ((op0_limb_11_col51) * (op1_limb_27_col96))) - + ((op0_limb_12_col52) * (op1_limb_26_col95))) - + ((op0_limb_13_col53) * (op1_limb_25_col94))) - + ((op0_limb_14_col54) * (op1_limb_24_col93))) - + ((op0_limb_15_col55) * (op1_limb_23_col92))) - + ((op0_limb_16_col56) * (op1_limb_22_col91))) - + ((op0_limb_17_col57) * (op1_limb_21_col90))) - + ((op0_limb_18_col58) * (op1_limb_20_col89))) - + ((op0_limb_19_col59) * (op1_limb_19_col88))) - + ((op0_limb_20_col60) * (op1_limb_18_col87))) - + ((op0_limb_21_col61) * (op1_limb_17_col86))) - + ((op0_limb_22_col62) * (op1_limb_16_col85))) - + ((op0_limb_23_col63) * (op1_limb_15_col84))) - + ((op0_limb_24_col64) * (op1_limb_14_col83))) - + ((op0_limb_25_col65) * (op1_limb_13_col82))) - + ((op0_limb_26_col66) * (op1_limb_12_col81))) - + ((op0_limb_27_col67) * (op1_limb_11_col80))); - let conv_tmp_48d52_53 = (((((((((((((((((M31_0) - + ((op0_limb_12_col52) * (op1_limb_27_col96))) - + ((op0_limb_13_col53) * (op1_limb_26_col95))) - + ((op0_limb_14_col54) * (op1_limb_25_col94))) - + ((op0_limb_15_col55) * (op1_limb_24_col93))) - + ((op0_limb_16_col56) * (op1_limb_23_col92))) - + ((op0_limb_17_col57) * (op1_limb_22_col91))) - + ((op0_limb_18_col58) * (op1_limb_21_col90))) - + ((op0_limb_19_col59) * (op1_limb_20_col89))) - + ((op0_limb_20_col60) * (op1_limb_19_col88))) - + ((op0_limb_21_col61) * (op1_limb_18_col87))) - + ((op0_limb_22_col62) * (op1_limb_17_col86))) - + ((op0_limb_23_col63) * (op1_limb_16_col85))) - + ((op0_limb_24_col64) * (op1_limb_15_col84))) - + ((op0_limb_25_col65) * (op1_limb_14_col83))) - + ((op0_limb_26_col66) * (op1_limb_13_col82))) - + ((op0_limb_27_col67) * (op1_limb_12_col81))); - let conv_tmp_48d52_54 = ((((((((((((((((M31_0) - + ((op0_limb_13_col53) * (op1_limb_27_col96))) - + ((op0_limb_14_col54) * (op1_limb_26_col95))) - + ((op0_limb_15_col55) * (op1_limb_25_col94))) - + ((op0_limb_16_col56) * (op1_limb_24_col93))) - + ((op0_limb_17_col57) * (op1_limb_23_col92))) - + ((op0_limb_18_col58) * (op1_limb_22_col91))) - + ((op0_limb_19_col59) * (op1_limb_21_col90))) - + ((op0_limb_20_col60) * (op1_limb_20_col89))) - + ((op0_limb_21_col61) * (op1_limb_19_col88))) - + ((op0_limb_22_col62) * (op1_limb_18_col87))) - + ((op0_limb_23_col63) * (op1_limb_17_col86))) - + ((op0_limb_24_col64) * (op1_limb_16_col85))) - + ((op0_limb_25_col65) * (op1_limb_15_col84))) - + ((op0_limb_26_col66) * (op1_limb_14_col83))) - + ((op0_limb_27_col67) * (op1_limb_13_col82))); - let conv_tmp_48d52_55 = (((((((((((((((M31_0) - + ((op0_limb_14_col54) * (op1_limb_27_col96))) - + ((op0_limb_15_col55) * (op1_limb_26_col95))) - + ((op0_limb_16_col56) * (op1_limb_25_col94))) - + ((op0_limb_17_col57) * (op1_limb_24_col93))) - + ((op0_limb_18_col58) * (op1_limb_23_col92))) - + ((op0_limb_19_col59) * (op1_limb_22_col91))) - + ((op0_limb_20_col60) * (op1_limb_21_col90))) - + ((op0_limb_21_col61) * (op1_limb_20_col89))) - + ((op0_limb_22_col62) * (op1_limb_19_col88))) - + ((op0_limb_23_col63) * (op1_limb_18_col87))) - + ((op0_limb_24_col64) * (op1_limb_17_col86))) - + ((op0_limb_25_col65) * (op1_limb_16_col85))) - + ((op0_limb_26_col66) * (op1_limb_15_col84))) - + ((op0_limb_27_col67) * (op1_limb_14_col83))); - let conv_tmp_48d52_56 = ((((((((((((((M31_0) - + ((op0_limb_15_col55) * (op1_limb_27_col96))) - + ((op0_limb_16_col56) * (op1_limb_26_col95))) - + ((op0_limb_17_col57) * (op1_limb_25_col94))) - + ((op0_limb_18_col58) * (op1_limb_24_col93))) - + ((op0_limb_19_col59) * (op1_limb_23_col92))) - + ((op0_limb_20_col60) * (op1_limb_22_col91))) - + ((op0_limb_21_col61) * (op1_limb_21_col90))) - + ((op0_limb_22_col62) * (op1_limb_20_col89))) - + ((op0_limb_23_col63) * (op1_limb_19_col88))) - + ((op0_limb_24_col64) * (op1_limb_18_col87))) - + ((op0_limb_25_col65) * (op1_limb_17_col86))) - + ((op0_limb_26_col66) * (op1_limb_16_col85))) - + ((op0_limb_27_col67) * (op1_limb_15_col84))); - let conv_tmp_48d52_57 = (((((((((((((M31_0) - + ((op0_limb_16_col56) * (op1_limb_27_col96))) - + ((op0_limb_17_col57) * (op1_limb_26_col95))) - + ((op0_limb_18_col58) * (op1_limb_25_col94))) - + ((op0_limb_19_col59) * (op1_limb_24_col93))) - + ((op0_limb_20_col60) * (op1_limb_23_col92))) - + ((op0_limb_21_col61) * (op1_limb_22_col91))) - + ((op0_limb_22_col62) * (op1_limb_21_col90))) - + ((op0_limb_23_col63) * (op1_limb_20_col89))) - + ((op0_limb_24_col64) * (op1_limb_19_col88))) - + ((op0_limb_25_col65) * (op1_limb_18_col87))) - + ((op0_limb_26_col66) * (op1_limb_17_col86))) - + ((op0_limb_27_col67) * (op1_limb_16_col85))); - let conv_tmp_48d52_58 = ((((((((((((M31_0) - + ((op0_limb_17_col57) * (op1_limb_27_col96))) - + ((op0_limb_18_col58) * (op1_limb_26_col95))) - + ((op0_limb_19_col59) * (op1_limb_25_col94))) - + ((op0_limb_20_col60) * (op1_limb_24_col93))) - + ((op0_limb_21_col61) * (op1_limb_23_col92))) - + ((op0_limb_22_col62) * (op1_limb_22_col91))) - + ((op0_limb_23_col63) * (op1_limb_21_col90))) - + ((op0_limb_24_col64) * (op1_limb_20_col89))) - + ((op0_limb_25_col65) * (op1_limb_19_col88))) - + ((op0_limb_26_col66) * (op1_limb_18_col87))) - + ((op0_limb_27_col67) * (op1_limb_17_col86))); - let conv_tmp_48d52_59 = (((((((((((M31_0) - + ((op0_limb_18_col58) * (op1_limb_27_col96))) - + ((op0_limb_19_col59) * (op1_limb_26_col95))) - + ((op0_limb_20_col60) * (op1_limb_25_col94))) - + ((op0_limb_21_col61) * (op1_limb_24_col93))) - + ((op0_limb_22_col62) * (op1_limb_23_col92))) - + ((op0_limb_23_col63) * (op1_limb_22_col91))) - + ((op0_limb_24_col64) * (op1_limb_21_col90))) - + ((op0_limb_25_col65) * (op1_limb_20_col89))) - + ((op0_limb_26_col66) * (op1_limb_19_col88))) - + ((op0_limb_27_col67) * (op1_limb_18_col87))); - let conv_tmp_48d52_60 = ((((((((((M31_0) - + ((op0_limb_19_col59) * (op1_limb_27_col96))) - + ((op0_limb_20_col60) * (op1_limb_26_col95))) - + ((op0_limb_21_col61) * (op1_limb_25_col94))) - + ((op0_limb_22_col62) * (op1_limb_24_col93))) - + ((op0_limb_23_col63) * (op1_limb_23_col92))) - + ((op0_limb_24_col64) * (op1_limb_22_col91))) - + ((op0_limb_25_col65) * (op1_limb_21_col90))) - + ((op0_limb_26_col66) * (op1_limb_20_col89))) - + ((op0_limb_27_col67) * (op1_limb_19_col88))); - let conv_tmp_48d52_61 = (((((((((M31_0) - + ((op0_limb_20_col60) * (op1_limb_27_col96))) - + ((op0_limb_21_col61) * (op1_limb_26_col95))) - + ((op0_limb_22_col62) * (op1_limb_25_col94))) - + ((op0_limb_23_col63) * (op1_limb_24_col93))) - + ((op0_limb_24_col64) * (op1_limb_23_col92))) - + ((op0_limb_25_col65) * (op1_limb_22_col91))) - + ((op0_limb_26_col66) * (op1_limb_21_col90))) - + ((op0_limb_27_col67) * (op1_limb_20_col89))); - let conv_tmp_48d52_62 = ((((((((M31_0) - + ((op0_limb_21_col61) * (op1_limb_27_col96))) - + ((op0_limb_22_col62) * (op1_limb_26_col95))) - + ((op0_limb_23_col63) * (op1_limb_25_col94))) - + ((op0_limb_24_col64) * (op1_limb_24_col93))) - + ((op0_limb_25_col65) * (op1_limb_23_col92))) - + ((op0_limb_26_col66) * (op1_limb_22_col91))) - + ((op0_limb_27_col67) * (op1_limb_21_col90))); - let conv_tmp_48d52_63 = (((((((M31_0) - + ((op0_limb_22_col62) * (op1_limb_27_col96))) - + ((op0_limb_23_col63) * (op1_limb_26_col95))) - + ((op0_limb_24_col64) * (op1_limb_25_col94))) - + ((op0_limb_25_col65) * (op1_limb_24_col93))) - + ((op0_limb_26_col66) * (op1_limb_23_col92))) - + ((op0_limb_27_col67) * (op1_limb_22_col91))); - let conv_tmp_48d52_64 = ((((((M31_0) - + ((op0_limb_23_col63) * (op1_limb_27_col96))) - + ((op0_limb_24_col64) * (op1_limb_26_col95))) - + ((op0_limb_25_col65) * (op1_limb_25_col94))) - + ((op0_limb_26_col66) * (op1_limb_24_col93))) - + ((op0_limb_27_col67) * (op1_limb_23_col92))); - let conv_tmp_48d52_65 = (((((M31_0) - + ((op0_limb_24_col64) * (op1_limb_27_col96))) - + ((op0_limb_25_col65) * (op1_limb_26_col95))) - + ((op0_limb_26_col66) * (op1_limb_25_col94))) - + ((op0_limb_27_col67) * (op1_limb_24_col93))); - let conv_tmp_48d52_66 = ((((M31_0) + ((op0_limb_25_col65) * (op1_limb_27_col96))) - + ((op0_limb_26_col66) * (op1_limb_26_col95))) - + ((op0_limb_27_col67) * (op1_limb_25_col94))); - let conv_tmp_48d52_67 = (((M31_0) + ((op0_limb_26_col66) * (op1_limb_27_col96))) - + ((op0_limb_27_col67) * (op1_limb_26_col95))); - let conv_tmp_48d52_68 = ((M31_0) + ((op0_limb_27_col67) * (op1_limb_27_col96))); - let conv_mod_tmp_48d52_69 = ((((M31_0) + ((M31_32) * (conv_tmp_48d52_14))) - - ((M31_4) * (conv_tmp_48d52_35))) - + ((M31_8) * (conv_tmp_48d52_63))); - let conv_mod_tmp_48d52_70 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_14))) - + ((M31_32) * (conv_tmp_48d52_15))) - - ((M31_4) * (conv_tmp_48d52_36))) - + ((M31_8) * (conv_tmp_48d52_64))); - let conv_mod_tmp_48d52_71 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_15))) - + ((M31_32) * (conv_tmp_48d52_16))) - - ((M31_4) * (conv_tmp_48d52_37))) - + ((M31_8) * (conv_tmp_48d52_65))); - let conv_mod_tmp_48d52_72 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_16))) - + ((M31_32) * (conv_tmp_48d52_17))) - - ((M31_4) * (conv_tmp_48d52_38))) - + ((M31_8) * (conv_tmp_48d52_66))); - let conv_mod_tmp_48d52_73 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_17))) - + ((M31_32) * (conv_tmp_48d52_18))) - - ((M31_4) * (conv_tmp_48d52_39))) - + ((M31_8) * (conv_tmp_48d52_67))); - let conv_mod_tmp_48d52_74 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_18))) - + ((M31_32) * (conv_tmp_48d52_19))) - - ((M31_4) * (conv_tmp_48d52_40))) - + ((M31_8) * (conv_tmp_48d52_68))); - let conv_mod_tmp_48d52_75 = ((((M31_0) + ((M31_1) * (conv_tmp_48d52_19))) - + ((M31_32) * (conv_tmp_48d52_20))) - - ((M31_4) * (conv_tmp_48d52_41))); - let conv_mod_tmp_48d52_76 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_14))) - + ((M31_1) * (conv_tmp_48d52_20))) - + ((M31_32) * (conv_tmp_48d52_21))) - - ((M31_4) * (conv_tmp_48d52_42))); - let conv_mod_tmp_48d52_77 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_15))) - + ((M31_1) * (conv_tmp_48d52_21))) - + ((M31_32) * (conv_tmp_48d52_22))) - - ((M31_4) * (conv_tmp_48d52_43))); - let conv_mod_tmp_48d52_78 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_16))) - + ((M31_1) * (conv_tmp_48d52_22))) - + ((M31_32) * (conv_tmp_48d52_23))) - - ((M31_4) * (conv_tmp_48d52_44))); - let conv_mod_tmp_48d52_79 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_17))) - + ((M31_1) * (conv_tmp_48d52_23))) - + ((M31_32) * (conv_tmp_48d52_24))) - - ((M31_4) * (conv_tmp_48d52_45))); - let conv_mod_tmp_48d52_80 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_18))) - + ((M31_1) * (conv_tmp_48d52_24))) - + ((M31_32) * (conv_tmp_48d52_25))) - - ((M31_4) * (conv_tmp_48d52_46))); - let conv_mod_tmp_48d52_81 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_19))) - + ((M31_1) * (conv_tmp_48d52_25))) - + ((M31_32) * (conv_tmp_48d52_26))) - - ((M31_4) * (conv_tmp_48d52_47))); - let conv_mod_tmp_48d52_82 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_20))) - + ((M31_1) * (conv_tmp_48d52_26))) - + ((M31_32) * (conv_tmp_48d52_27))) - - ((M31_4) * (conv_tmp_48d52_48))); - let conv_mod_tmp_48d52_83 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_21))) - + ((M31_1) * (conv_tmp_48d52_27))) - + ((M31_32) * (conv_tmp_48d52_28))) - - ((M31_4) * (conv_tmp_48d52_49))); - let conv_mod_tmp_48d52_84 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_22))) - + ((M31_1) * (conv_tmp_48d52_28))) - + ((M31_32) * (conv_tmp_48d52_29))) - - ((M31_4) * (conv_tmp_48d52_50))); - let conv_mod_tmp_48d52_85 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_23))) - + ((M31_1) * (conv_tmp_48d52_29))) - + ((M31_32) * (conv_tmp_48d52_30))) - - ((M31_4) * (conv_tmp_48d52_51))); - let conv_mod_tmp_48d52_86 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_24))) - + ((M31_1) * (conv_tmp_48d52_30))) - + ((M31_32) * (conv_tmp_48d52_31))) - - ((M31_4) * (conv_tmp_48d52_52))); - let conv_mod_tmp_48d52_87 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_25))) - + ((M31_1) * (conv_tmp_48d52_31))) - + ((M31_32) * (conv_tmp_48d52_32))) - - ((M31_4) * (conv_tmp_48d52_53))); - let conv_mod_tmp_48d52_88 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_26))) - + ((M31_1) * (conv_tmp_48d52_32))) - + ((M31_32) * (conv_tmp_48d52_33))) - - ((M31_4) * (conv_tmp_48d52_54))); - let conv_mod_tmp_48d52_89 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_27))) - + ((M31_1) * (conv_tmp_48d52_33))) - + ((M31_32) * (conv_tmp_48d52_34))) - - ((M31_4) * (conv_tmp_48d52_55))); - let conv_mod_tmp_48d52_90 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_28))) - + ((M31_1) * (conv_tmp_48d52_34))) - - ((M31_4) * (conv_tmp_48d52_56))) - + ((M31_64) * (conv_tmp_48d52_63))); - let conv_mod_tmp_48d52_91 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_29))) - - ((M31_4) * (conv_tmp_48d52_57))) - + ((M31_2) * (conv_tmp_48d52_63))) - + ((M31_64) * (conv_tmp_48d52_64))); - let conv_mod_tmp_48d52_92 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_30))) - - ((M31_4) * (conv_tmp_48d52_58))) - + ((M31_2) * (conv_tmp_48d52_64))) - + ((M31_64) * (conv_tmp_48d52_65))); - let conv_mod_tmp_48d52_93 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_31))) - - ((M31_4) * (conv_tmp_48d52_59))) - + ((M31_2) * (conv_tmp_48d52_65))) - + ((M31_64) * (conv_tmp_48d52_66))); - let conv_mod_tmp_48d52_94 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_32))) - - ((M31_4) * (conv_tmp_48d52_60))) - + ((M31_2) * (conv_tmp_48d52_66))) - + ((M31_64) * (conv_tmp_48d52_67))); - let conv_mod_tmp_48d52_95 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_33))) - - ((M31_4) * (conv_tmp_48d52_61))) - + ((M31_2) * (conv_tmp_48d52_67))) - + ((M31_64) * (conv_tmp_48d52_68))); - let conv_mod_tmp_48d52_96 = ((((M31_0) + ((M31_2) * (conv_tmp_48d52_34))) - - ((M31_4) * (conv_tmp_48d52_62))) - + ((M31_2) * (conv_tmp_48d52_68))); - let k_mod_2_18_biased_tmp_48d52_97 = - ((((PackedUInt32::from_m31(((conv_mod_tmp_48d52_69) + (M31_134217728)))) - + (((PackedUInt32::from_m31( - ((conv_mod_tmp_48d52_70) + (M31_134217728)), - )) & (UInt32_511)) - << (UInt32_9))) - + (UInt32_65536)) - & (UInt32_262143)); - let k_col97 = ((k_mod_2_18_biased_tmp_48d52_97.low().as_m31()) - + (((k_mod_2_18_biased_tmp_48d52_97.high().as_m31()) - (M31_1)) * (M31_65536))); - *row[97] = k_col97; - for (i, &input) in [((k_col97) + (M31_262144))].unpack().iter().enumerate() { - *sub_components_inputs[i].range_check_19_inputs[0] = input; - } - *lookup_data.range_check_19_0 = [((k_col97) + (M31_262144))]; - let carry_0_col98 = - ((((conv_mod_tmp_48d52_69) - ((M31_1) * (k_col97))) + (M31_0)) * (M31_4194304)); - *row[98] = carry_0_col98; - for (i, &input) in [((carry_0_col98) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[1] = input; - } - *lookup_data.range_check_19_1 = [((carry_0_col98) + (M31_131072))]; - let carry_1_col99 = (((conv_mod_tmp_48d52_70) + (carry_0_col98)) * (M31_4194304)); - *row[99] = carry_1_col99; - for (i, &input) in [((carry_1_col99) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[2] = input; - } - *lookup_data.range_check_19_2 = [((carry_1_col99) + (M31_131072))]; - let carry_2_col100 = (((conv_mod_tmp_48d52_71) + (carry_1_col99)) * (M31_4194304)); - *row[100] = carry_2_col100; - for (i, &input) in [((carry_2_col100) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[3] = input; - } - *lookup_data.range_check_19_3 = [((carry_2_col100) + (M31_131072))]; - let carry_3_col101 = (((conv_mod_tmp_48d52_72) + (carry_2_col100)) * (M31_4194304)); - *row[101] = carry_3_col101; - for (i, &input) in [((carry_3_col101) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[4] = input; - } - *lookup_data.range_check_19_4 = [((carry_3_col101) + (M31_131072))]; - let carry_4_col102 = (((conv_mod_tmp_48d52_73) + (carry_3_col101)) * (M31_4194304)); - *row[102] = carry_4_col102; - for (i, &input) in [((carry_4_col102) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[5] = input; - } - *lookup_data.range_check_19_5 = [((carry_4_col102) + (M31_131072))]; - let carry_5_col103 = (((conv_mod_tmp_48d52_74) + (carry_4_col102)) * (M31_4194304)); - *row[103] = carry_5_col103; - for (i, &input) in [((carry_5_col103) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[6] = input; - } - *lookup_data.range_check_19_6 = [((carry_5_col103) + (M31_131072))]; - let carry_6_col104 = (((conv_mod_tmp_48d52_75) + (carry_5_col103)) * (M31_4194304)); - *row[104] = carry_6_col104; - for (i, &input) in [((carry_6_col104) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[7] = input; - } - *lookup_data.range_check_19_7 = [((carry_6_col104) + (M31_131072))]; - let carry_7_col105 = (((conv_mod_tmp_48d52_76) + (carry_6_col104)) * (M31_4194304)); - *row[105] = carry_7_col105; - for (i, &input) in [((carry_7_col105) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[8] = input; - } - *lookup_data.range_check_19_8 = [((carry_7_col105) + (M31_131072))]; - let carry_8_col106 = (((conv_mod_tmp_48d52_77) + (carry_7_col105)) * (M31_4194304)); - *row[106] = carry_8_col106; - for (i, &input) in [((carry_8_col106) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[9] = input; - } - *lookup_data.range_check_19_9 = [((carry_8_col106) + (M31_131072))]; - let carry_9_col107 = (((conv_mod_tmp_48d52_78) + (carry_8_col106)) * (M31_4194304)); - *row[107] = carry_9_col107; - for (i, &input) in [((carry_9_col107) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[10] = input; - } - *lookup_data.range_check_19_10 = [((carry_9_col107) + (M31_131072))]; - let carry_10_col108 = - (((conv_mod_tmp_48d52_79) + (carry_9_col107)) * (M31_4194304)); - *row[108] = carry_10_col108; - for (i, &input) in [((carry_10_col108) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[11] = input; - } - *lookup_data.range_check_19_11 = [((carry_10_col108) + (M31_131072))]; - let carry_11_col109 = - (((conv_mod_tmp_48d52_80) + (carry_10_col108)) * (M31_4194304)); - *row[109] = carry_11_col109; - for (i, &input) in [((carry_11_col109) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[12] = input; - } - *lookup_data.range_check_19_12 = [((carry_11_col109) + (M31_131072))]; - let carry_12_col110 = - (((conv_mod_tmp_48d52_81) + (carry_11_col109)) * (M31_4194304)); - *row[110] = carry_12_col110; - for (i, &input) in [((carry_12_col110) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[13] = input; - } - *lookup_data.range_check_19_13 = [((carry_12_col110) + (M31_131072))]; - let carry_13_col111 = - (((conv_mod_tmp_48d52_82) + (carry_12_col110)) * (M31_4194304)); - *row[111] = carry_13_col111; - for (i, &input) in [((carry_13_col111) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[14] = input; - } - *lookup_data.range_check_19_14 = [((carry_13_col111) + (M31_131072))]; - let carry_14_col112 = - (((conv_mod_tmp_48d52_83) + (carry_13_col111)) * (M31_4194304)); - *row[112] = carry_14_col112; - for (i, &input) in [((carry_14_col112) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[15] = input; - } - *lookup_data.range_check_19_15 = [((carry_14_col112) + (M31_131072))]; - let carry_15_col113 = - (((conv_mod_tmp_48d52_84) + (carry_14_col112)) * (M31_4194304)); - *row[113] = carry_15_col113; - for (i, &input) in [((carry_15_col113) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[16] = input; - } - *lookup_data.range_check_19_16 = [((carry_15_col113) + (M31_131072))]; - let carry_16_col114 = - (((conv_mod_tmp_48d52_85) + (carry_15_col113)) * (M31_4194304)); - *row[114] = carry_16_col114; - for (i, &input) in [((carry_16_col114) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[17] = input; - } - *lookup_data.range_check_19_17 = [((carry_16_col114) + (M31_131072))]; - let carry_17_col115 = - (((conv_mod_tmp_48d52_86) + (carry_16_col114)) * (M31_4194304)); - *row[115] = carry_17_col115; - for (i, &input) in [((carry_17_col115) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[18] = input; - } - *lookup_data.range_check_19_18 = [((carry_17_col115) + (M31_131072))]; - let carry_18_col116 = - (((conv_mod_tmp_48d52_87) + (carry_17_col115)) * (M31_4194304)); - *row[116] = carry_18_col116; - for (i, &input) in [((carry_18_col116) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[19] = input; - } - *lookup_data.range_check_19_19 = [((carry_18_col116) + (M31_131072))]; - let carry_19_col117 = - (((conv_mod_tmp_48d52_88) + (carry_18_col116)) * (M31_4194304)); - *row[117] = carry_19_col117; - for (i, &input) in [((carry_19_col117) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[20] = input; - } - *lookup_data.range_check_19_20 = [((carry_19_col117) + (M31_131072))]; - let carry_20_col118 = - (((conv_mod_tmp_48d52_89) + (carry_19_col117)) * (M31_4194304)); - *row[118] = carry_20_col118; - for (i, &input) in [((carry_20_col118) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[21] = input; - } - *lookup_data.range_check_19_21 = [((carry_20_col118) + (M31_131072))]; - let carry_21_col119 = ((((conv_mod_tmp_48d52_90) - ((M31_136) * (k_col97))) - + (carry_20_col118)) - * (M31_4194304)); - *row[119] = carry_21_col119; - for (i, &input) in [((carry_21_col119) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[22] = input; - } - *lookup_data.range_check_19_22 = [((carry_21_col119) + (M31_131072))]; - let carry_22_col120 = - (((conv_mod_tmp_48d52_91) + (carry_21_col119)) * (M31_4194304)); - *row[120] = carry_22_col120; - for (i, &input) in [((carry_22_col120) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[23] = input; - } - *lookup_data.range_check_19_23 = [((carry_22_col120) + (M31_131072))]; - let carry_23_col121 = - (((conv_mod_tmp_48d52_92) + (carry_22_col120)) * (M31_4194304)); - *row[121] = carry_23_col121; - for (i, &input) in [((carry_23_col121) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[24] = input; - } - *lookup_data.range_check_19_24 = [((carry_23_col121) + (M31_131072))]; - let carry_24_col122 = - (((conv_mod_tmp_48d52_93) + (carry_23_col121)) * (M31_4194304)); - *row[122] = carry_24_col122; - for (i, &input) in [((carry_24_col122) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[25] = input; - } - *lookup_data.range_check_19_25 = [((carry_24_col122) + (M31_131072))]; - let carry_25_col123 = - (((conv_mod_tmp_48d52_94) + (carry_24_col122)) * (M31_4194304)); - *row[123] = carry_25_col123; - for (i, &input) in [((carry_25_col123) + (M31_131072))] - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].range_check_19_inputs[26] = input; - } - *lookup_data.range_check_19_26 = [((carry_25_col123) + (M31_131072))]; - let carry_26_col124 = - (((conv_mod_tmp_48d52_95) + (carry_25_col123)) * (M31_4194304)); - *row[124] = carry_26_col124; - for (i, &input) in [((carry_26_col124) + (M31_131072))] - .unpack() - .iter() - .enumerate() + let conv_tmp_48d52_14 = + (((M31_0) - (dst_limb_0_col11)) + ((op0_limb_0_col40) * (op1_limb_0_col69))); + let conv_tmp_48d52_15 = ((((M31_0) - (dst_limb_1_col12)) + + ((op0_limb_0_col40) * (op1_limb_1_col70))) + + ((op0_limb_1_col41) * (op1_limb_0_col69))); + let conv_tmp_48d52_16 = (((((M31_0) - (dst_limb_2_col13)) + + ((op0_limb_0_col40) * (op1_limb_2_col71))) + + ((op0_limb_1_col41) * (op1_limb_1_col70))) + + ((op0_limb_2_col42) * (op1_limb_0_col69))); + let conv_tmp_48d52_17 = ((((((M31_0) - (dst_limb_3_col14)) + + ((op0_limb_0_col40) * (op1_limb_3_col72))) + + ((op0_limb_1_col41) * (op1_limb_2_col71))) + + ((op0_limb_2_col42) * (op1_limb_1_col70))) + + ((op0_limb_3_col43) * (op1_limb_0_col69))); + let conv_tmp_48d52_18 = (((((((M31_0) - (dst_limb_4_col15)) + + ((op0_limb_0_col40) * (op1_limb_4_col73))) + + ((op0_limb_1_col41) * (op1_limb_3_col72))) + + ((op0_limb_2_col42) * (op1_limb_2_col71))) + + ((op0_limb_3_col43) * (op1_limb_1_col70))) + + ((op0_limb_4_col44) * (op1_limb_0_col69))); + let conv_tmp_48d52_19 = ((((((((M31_0) - (dst_limb_5_col16)) + + ((op0_limb_0_col40) * (op1_limb_5_col74))) + + ((op0_limb_1_col41) * (op1_limb_4_col73))) + + ((op0_limb_2_col42) * (op1_limb_3_col72))) + + ((op0_limb_3_col43) * (op1_limb_2_col71))) + + ((op0_limb_4_col44) * (op1_limb_1_col70))) + + ((op0_limb_5_col45) * (op1_limb_0_col69))); + let conv_tmp_48d52_20 = (((((((((M31_0) - (dst_limb_6_col17)) + + ((op0_limb_0_col40) * (op1_limb_6_col75))) + + ((op0_limb_1_col41) * (op1_limb_5_col74))) + + ((op0_limb_2_col42) * (op1_limb_4_col73))) + + ((op0_limb_3_col43) * (op1_limb_3_col72))) + + ((op0_limb_4_col44) * (op1_limb_2_col71))) + + ((op0_limb_5_col45) * (op1_limb_1_col70))) + + ((op0_limb_6_col46) * (op1_limb_0_col69))); + let conv_tmp_48d52_21 = ((((((((((M31_0) - (dst_limb_7_col18)) + + ((op0_limb_0_col40) * (op1_limb_7_col76))) + + ((op0_limb_1_col41) * (op1_limb_6_col75))) + + ((op0_limb_2_col42) * (op1_limb_5_col74))) + + ((op0_limb_3_col43) * (op1_limb_4_col73))) + + ((op0_limb_4_col44) * (op1_limb_3_col72))) + + ((op0_limb_5_col45) * (op1_limb_2_col71))) + + ((op0_limb_6_col46) * (op1_limb_1_col70))) + + ((op0_limb_7_col47) * (op1_limb_0_col69))); + let conv_tmp_48d52_22 = (((((((((((M31_0) - (dst_limb_8_col19)) + + ((op0_limb_0_col40) * (op1_limb_8_col77))) + + ((op0_limb_1_col41) * (op1_limb_7_col76))) + + ((op0_limb_2_col42) * (op1_limb_6_col75))) + + ((op0_limb_3_col43) * (op1_limb_5_col74))) + + ((op0_limb_4_col44) * (op1_limb_4_col73))) + + ((op0_limb_5_col45) * (op1_limb_3_col72))) + + ((op0_limb_6_col46) * (op1_limb_2_col71))) + + ((op0_limb_7_col47) * (op1_limb_1_col70))) + + ((op0_limb_8_col48) * (op1_limb_0_col69))); + let conv_tmp_48d52_23 = ((((((((((((M31_0) - (dst_limb_9_col20)) + + ((op0_limb_0_col40) * (op1_limb_9_col78))) + + ((op0_limb_1_col41) * (op1_limb_8_col77))) + + ((op0_limb_2_col42) * (op1_limb_7_col76))) + + ((op0_limb_3_col43) * (op1_limb_6_col75))) + + ((op0_limb_4_col44) * (op1_limb_5_col74))) + + ((op0_limb_5_col45) * (op1_limb_4_col73))) + + ((op0_limb_6_col46) * (op1_limb_3_col72))) + + ((op0_limb_7_col47) * (op1_limb_2_col71))) + + ((op0_limb_8_col48) * (op1_limb_1_col70))) + + ((op0_limb_9_col49) * (op1_limb_0_col69))); + let conv_tmp_48d52_24 = (((((((((((((M31_0) - (dst_limb_10_col21)) + + ((op0_limb_0_col40) * (op1_limb_10_col79))) + + ((op0_limb_1_col41) * (op1_limb_9_col78))) + + ((op0_limb_2_col42) * (op1_limb_8_col77))) + + ((op0_limb_3_col43) * (op1_limb_7_col76))) + + ((op0_limb_4_col44) * (op1_limb_6_col75))) + + ((op0_limb_5_col45) * (op1_limb_5_col74))) + + ((op0_limb_6_col46) * (op1_limb_4_col73))) + + ((op0_limb_7_col47) * (op1_limb_3_col72))) + + ((op0_limb_8_col48) * (op1_limb_2_col71))) + + ((op0_limb_9_col49) * (op1_limb_1_col70))) + + ((op0_limb_10_col50) * (op1_limb_0_col69))); + let conv_tmp_48d52_25 = ((((((((((((((M31_0) - (dst_limb_11_col22)) + + ((op0_limb_0_col40) * (op1_limb_11_col80))) + + ((op0_limb_1_col41) * (op1_limb_10_col79))) + + ((op0_limb_2_col42) * (op1_limb_9_col78))) + + ((op0_limb_3_col43) * (op1_limb_8_col77))) + + ((op0_limb_4_col44) * (op1_limb_7_col76))) + + ((op0_limb_5_col45) * (op1_limb_6_col75))) + + ((op0_limb_6_col46) * (op1_limb_5_col74))) + + ((op0_limb_7_col47) * (op1_limb_4_col73))) + + ((op0_limb_8_col48) * (op1_limb_3_col72))) + + ((op0_limb_9_col49) * (op1_limb_2_col71))) + + ((op0_limb_10_col50) * (op1_limb_1_col70))) + + ((op0_limb_11_col51) * (op1_limb_0_col69))); + let conv_tmp_48d52_26 = (((((((((((((((M31_0) - (dst_limb_12_col23)) + + ((op0_limb_0_col40) * (op1_limb_12_col81))) + + ((op0_limb_1_col41) * (op1_limb_11_col80))) + + ((op0_limb_2_col42) * (op1_limb_10_col79))) + + ((op0_limb_3_col43) * (op1_limb_9_col78))) + + ((op0_limb_4_col44) * (op1_limb_8_col77))) + + ((op0_limb_5_col45) * (op1_limb_7_col76))) + + ((op0_limb_6_col46) * (op1_limb_6_col75))) + + ((op0_limb_7_col47) * (op1_limb_5_col74))) + + ((op0_limb_8_col48) * (op1_limb_4_col73))) + + ((op0_limb_9_col49) * (op1_limb_3_col72))) + + ((op0_limb_10_col50) * (op1_limb_2_col71))) + + ((op0_limb_11_col51) * (op1_limb_1_col70))) + + ((op0_limb_12_col52) * (op1_limb_0_col69))); + let conv_tmp_48d52_27 = ((((((((((((((((M31_0) - (dst_limb_13_col24)) + + ((op0_limb_0_col40) * (op1_limb_13_col82))) + + ((op0_limb_1_col41) * (op1_limb_12_col81))) + + ((op0_limb_2_col42) * (op1_limb_11_col80))) + + ((op0_limb_3_col43) * (op1_limb_10_col79))) + + ((op0_limb_4_col44) * (op1_limb_9_col78))) + + ((op0_limb_5_col45) * (op1_limb_8_col77))) + + ((op0_limb_6_col46) * (op1_limb_7_col76))) + + ((op0_limb_7_col47) * (op1_limb_6_col75))) + + ((op0_limb_8_col48) * (op1_limb_5_col74))) + + ((op0_limb_9_col49) * (op1_limb_4_col73))) + + ((op0_limb_10_col50) * (op1_limb_3_col72))) + + ((op0_limb_11_col51) * (op1_limb_2_col71))) + + ((op0_limb_12_col52) * (op1_limb_1_col70))) + + ((op0_limb_13_col53) * (op1_limb_0_col69))); + let conv_tmp_48d52_28 = (((((((((((((((((M31_0) - (dst_limb_14_col25)) + + ((op0_limb_0_col40) * (op1_limb_14_col83))) + + ((op0_limb_1_col41) * (op1_limb_13_col82))) + + ((op0_limb_2_col42) * (op1_limb_12_col81))) + + ((op0_limb_3_col43) * (op1_limb_11_col80))) + + ((op0_limb_4_col44) * (op1_limb_10_col79))) + + ((op0_limb_5_col45) * (op1_limb_9_col78))) + + ((op0_limb_6_col46) * (op1_limb_8_col77))) + + ((op0_limb_7_col47) * (op1_limb_7_col76))) + + ((op0_limb_8_col48) * (op1_limb_6_col75))) + + ((op0_limb_9_col49) * (op1_limb_5_col74))) + + ((op0_limb_10_col50) * (op1_limb_4_col73))) + + ((op0_limb_11_col51) * (op1_limb_3_col72))) + + ((op0_limb_12_col52) * (op1_limb_2_col71))) + + ((op0_limb_13_col53) * (op1_limb_1_col70))) + + ((op0_limb_14_col54) * (op1_limb_0_col69))); + let conv_tmp_48d52_29 = ((((((((((((((((((M31_0) - (dst_limb_15_col26)) + + ((op0_limb_0_col40) * (op1_limb_15_col84))) + + ((op0_limb_1_col41) * (op1_limb_14_col83))) + + ((op0_limb_2_col42) * (op1_limb_13_col82))) + + ((op0_limb_3_col43) * (op1_limb_12_col81))) + + ((op0_limb_4_col44) * (op1_limb_11_col80))) + + ((op0_limb_5_col45) * (op1_limb_10_col79))) + + ((op0_limb_6_col46) * (op1_limb_9_col78))) + + ((op0_limb_7_col47) * (op1_limb_8_col77))) + + ((op0_limb_8_col48) * (op1_limb_7_col76))) + + ((op0_limb_9_col49) * (op1_limb_6_col75))) + + ((op0_limb_10_col50) * (op1_limb_5_col74))) + + ((op0_limb_11_col51) * (op1_limb_4_col73))) + + ((op0_limb_12_col52) * (op1_limb_3_col72))) + + ((op0_limb_13_col53) * (op1_limb_2_col71))) + + ((op0_limb_14_col54) * (op1_limb_1_col70))) + + ((op0_limb_15_col55) * (op1_limb_0_col69))); + let conv_tmp_48d52_30 = (((((((((((((((((((M31_0) + - (dst_limb_16_col27)) + + ((op0_limb_0_col40) * (op1_limb_16_col85))) + + ((op0_limb_1_col41) * (op1_limb_15_col84))) + + ((op0_limb_2_col42) * (op1_limb_14_col83))) + + ((op0_limb_3_col43) * (op1_limb_13_col82))) + + ((op0_limb_4_col44) * (op1_limb_12_col81))) + + ((op0_limb_5_col45) * (op1_limb_11_col80))) + + ((op0_limb_6_col46) * (op1_limb_10_col79))) + + ((op0_limb_7_col47) * (op1_limb_9_col78))) + + ((op0_limb_8_col48) * (op1_limb_8_col77))) + + ((op0_limb_9_col49) * (op1_limb_7_col76))) + + ((op0_limb_10_col50) * (op1_limb_6_col75))) + + ((op0_limb_11_col51) * (op1_limb_5_col74))) + + ((op0_limb_12_col52) * (op1_limb_4_col73))) + + ((op0_limb_13_col53) * (op1_limb_3_col72))) + + ((op0_limb_14_col54) * (op1_limb_2_col71))) + + ((op0_limb_15_col55) * (op1_limb_1_col70))) + + ((op0_limb_16_col56) * (op1_limb_0_col69))); + let conv_tmp_48d52_31 = ((((((((((((((((((((M31_0) + - (dst_limb_17_col28)) + + ((op0_limb_0_col40) * (op1_limb_17_col86))) + + ((op0_limb_1_col41) * (op1_limb_16_col85))) + + ((op0_limb_2_col42) * (op1_limb_15_col84))) + + ((op0_limb_3_col43) * (op1_limb_14_col83))) + + ((op0_limb_4_col44) * (op1_limb_13_col82))) + + ((op0_limb_5_col45) * (op1_limb_12_col81))) + + ((op0_limb_6_col46) * (op1_limb_11_col80))) + + ((op0_limb_7_col47) * (op1_limb_10_col79))) + + ((op0_limb_8_col48) * (op1_limb_9_col78))) + + ((op0_limb_9_col49) * (op1_limb_8_col77))) + + ((op0_limb_10_col50) * (op1_limb_7_col76))) + + ((op0_limb_11_col51) * (op1_limb_6_col75))) + + ((op0_limb_12_col52) * (op1_limb_5_col74))) + + ((op0_limb_13_col53) * (op1_limb_4_col73))) + + ((op0_limb_14_col54) * (op1_limb_3_col72))) + + ((op0_limb_15_col55) * (op1_limb_2_col71))) + + ((op0_limb_16_col56) * (op1_limb_1_col70))) + + ((op0_limb_17_col57) * (op1_limb_0_col69))); + let conv_tmp_48d52_32 = (((((((((((((((((((((M31_0) + - (dst_limb_18_col29)) + + ((op0_limb_0_col40) * (op1_limb_18_col87))) + + ((op0_limb_1_col41) * (op1_limb_17_col86))) + + ((op0_limb_2_col42) * (op1_limb_16_col85))) + + ((op0_limb_3_col43) * (op1_limb_15_col84))) + + ((op0_limb_4_col44) * (op1_limb_14_col83))) + + ((op0_limb_5_col45) * (op1_limb_13_col82))) + + ((op0_limb_6_col46) * (op1_limb_12_col81))) + + ((op0_limb_7_col47) * (op1_limb_11_col80))) + + ((op0_limb_8_col48) * (op1_limb_10_col79))) + + ((op0_limb_9_col49) * (op1_limb_9_col78))) + + ((op0_limb_10_col50) * (op1_limb_8_col77))) + + ((op0_limb_11_col51) * (op1_limb_7_col76))) + + ((op0_limb_12_col52) * (op1_limb_6_col75))) + + ((op0_limb_13_col53) * (op1_limb_5_col74))) + + ((op0_limb_14_col54) * (op1_limb_4_col73))) + + ((op0_limb_15_col55) * (op1_limb_3_col72))) + + ((op0_limb_16_col56) * (op1_limb_2_col71))) + + ((op0_limb_17_col57) * (op1_limb_1_col70))) + + ((op0_limb_18_col58) * (op1_limb_0_col69))); + let conv_tmp_48d52_33 = ((((((((((((((((((((((M31_0) + - (dst_limb_19_col30)) + + ((op0_limb_0_col40) * (op1_limb_19_col88))) + + ((op0_limb_1_col41) * (op1_limb_18_col87))) + + ((op0_limb_2_col42) * (op1_limb_17_col86))) + + ((op0_limb_3_col43) * (op1_limb_16_col85))) + + ((op0_limb_4_col44) * (op1_limb_15_col84))) + + ((op0_limb_5_col45) * (op1_limb_14_col83))) + + ((op0_limb_6_col46) * (op1_limb_13_col82))) + + ((op0_limb_7_col47) * (op1_limb_12_col81))) + + ((op0_limb_8_col48) * (op1_limb_11_col80))) + + ((op0_limb_9_col49) * (op1_limb_10_col79))) + + ((op0_limb_10_col50) * (op1_limb_9_col78))) + + ((op0_limb_11_col51) * (op1_limb_8_col77))) + + ((op0_limb_12_col52) * (op1_limb_7_col76))) + + ((op0_limb_13_col53) * (op1_limb_6_col75))) + + ((op0_limb_14_col54) * (op1_limb_5_col74))) + + ((op0_limb_15_col55) * (op1_limb_4_col73))) + + ((op0_limb_16_col56) * (op1_limb_3_col72))) + + ((op0_limb_17_col57) * (op1_limb_2_col71))) + + ((op0_limb_18_col58) * (op1_limb_1_col70))) + + ((op0_limb_19_col59) * (op1_limb_0_col69))); + let conv_tmp_48d52_34 = (((((((((((((((((((((((M31_0) + - (dst_limb_20_col31)) + + ((op0_limb_0_col40) * (op1_limb_20_col89))) + + ((op0_limb_1_col41) * (op1_limb_19_col88))) + + ((op0_limb_2_col42) * (op1_limb_18_col87))) + + ((op0_limb_3_col43) * (op1_limb_17_col86))) + + ((op0_limb_4_col44) * (op1_limb_16_col85))) + + ((op0_limb_5_col45) * (op1_limb_15_col84))) + + ((op0_limb_6_col46) * (op1_limb_14_col83))) + + ((op0_limb_7_col47) * (op1_limb_13_col82))) + + ((op0_limb_8_col48) * (op1_limb_12_col81))) + + ((op0_limb_9_col49) * (op1_limb_11_col80))) + + ((op0_limb_10_col50) * (op1_limb_10_col79))) + + ((op0_limb_11_col51) * (op1_limb_9_col78))) + + ((op0_limb_12_col52) * (op1_limb_8_col77))) + + ((op0_limb_13_col53) * (op1_limb_7_col76))) + + ((op0_limb_14_col54) * (op1_limb_6_col75))) + + ((op0_limb_15_col55) * (op1_limb_5_col74))) + + ((op0_limb_16_col56) * (op1_limb_4_col73))) + + ((op0_limb_17_col57) * (op1_limb_3_col72))) + + ((op0_limb_18_col58) * (op1_limb_2_col71))) + + ((op0_limb_19_col59) * (op1_limb_1_col70))) + + ((op0_limb_20_col60) * (op1_limb_0_col69))); + let conv_tmp_48d52_35 = ((((((((((((((((((((((((M31_0) + - (dst_limb_21_col32)) + + ((op0_limb_0_col40) * (op1_limb_21_col90))) + + ((op0_limb_1_col41) * (op1_limb_20_col89))) + + ((op0_limb_2_col42) * (op1_limb_19_col88))) + + ((op0_limb_3_col43) * (op1_limb_18_col87))) + + ((op0_limb_4_col44) * (op1_limb_17_col86))) + + ((op0_limb_5_col45) * (op1_limb_16_col85))) + + ((op0_limb_6_col46) * (op1_limb_15_col84))) + + ((op0_limb_7_col47) * (op1_limb_14_col83))) + + ((op0_limb_8_col48) * (op1_limb_13_col82))) + + ((op0_limb_9_col49) * (op1_limb_12_col81))) + + ((op0_limb_10_col50) * (op1_limb_11_col80))) + + ((op0_limb_11_col51) * (op1_limb_10_col79))) + + ((op0_limb_12_col52) * (op1_limb_9_col78))) + + ((op0_limb_13_col53) * (op1_limb_8_col77))) + + ((op0_limb_14_col54) * (op1_limb_7_col76))) + + ((op0_limb_15_col55) * (op1_limb_6_col75))) + + ((op0_limb_16_col56) * (op1_limb_5_col74))) + + ((op0_limb_17_col57) * (op1_limb_4_col73))) + + ((op0_limb_18_col58) * (op1_limb_3_col72))) + + ((op0_limb_19_col59) * (op1_limb_2_col71))) + + ((op0_limb_20_col60) * (op1_limb_1_col70))) + + ((op0_limb_21_col61) * (op1_limb_0_col69))); + let conv_tmp_48d52_36 = (((((((((((((((((((((((((M31_0) + - (dst_limb_22_col33)) + + ((op0_limb_0_col40) * (op1_limb_22_col91))) + + ((op0_limb_1_col41) * (op1_limb_21_col90))) + + ((op0_limb_2_col42) * (op1_limb_20_col89))) + + ((op0_limb_3_col43) * (op1_limb_19_col88))) + + ((op0_limb_4_col44) * (op1_limb_18_col87))) + + ((op0_limb_5_col45) * (op1_limb_17_col86))) + + ((op0_limb_6_col46) * (op1_limb_16_col85))) + + ((op0_limb_7_col47) * (op1_limb_15_col84))) + + ((op0_limb_8_col48) * (op1_limb_14_col83))) + + ((op0_limb_9_col49) * (op1_limb_13_col82))) + + ((op0_limb_10_col50) * (op1_limb_12_col81))) + + ((op0_limb_11_col51) * (op1_limb_11_col80))) + + ((op0_limb_12_col52) * (op1_limb_10_col79))) + + ((op0_limb_13_col53) * (op1_limb_9_col78))) + + ((op0_limb_14_col54) * (op1_limb_8_col77))) + + ((op0_limb_15_col55) * (op1_limb_7_col76))) + + ((op0_limb_16_col56) * (op1_limb_6_col75))) + + ((op0_limb_17_col57) * (op1_limb_5_col74))) + + ((op0_limb_18_col58) * (op1_limb_4_col73))) + + ((op0_limb_19_col59) * (op1_limb_3_col72))) + + ((op0_limb_20_col60) * (op1_limb_2_col71))) + + ((op0_limb_21_col61) * (op1_limb_1_col70))) + + ((op0_limb_22_col62) * (op1_limb_0_col69))); + let conv_tmp_48d52_37 = ((((((((((((((((((((((((((M31_0) + - (dst_limb_23_col34)) + + ((op0_limb_0_col40) * (op1_limb_23_col92))) + + ((op0_limb_1_col41) * (op1_limb_22_col91))) + + ((op0_limb_2_col42) * (op1_limb_21_col90))) + + ((op0_limb_3_col43) * (op1_limb_20_col89))) + + ((op0_limb_4_col44) * (op1_limb_19_col88))) + + ((op0_limb_5_col45) * (op1_limb_18_col87))) + + ((op0_limb_6_col46) * (op1_limb_17_col86))) + + ((op0_limb_7_col47) * (op1_limb_16_col85))) + + ((op0_limb_8_col48) * (op1_limb_15_col84))) + + ((op0_limb_9_col49) * (op1_limb_14_col83))) + + ((op0_limb_10_col50) * (op1_limb_13_col82))) + + ((op0_limb_11_col51) * (op1_limb_12_col81))) + + ((op0_limb_12_col52) * (op1_limb_11_col80))) + + ((op0_limb_13_col53) * (op1_limb_10_col79))) + + ((op0_limb_14_col54) * (op1_limb_9_col78))) + + ((op0_limb_15_col55) * (op1_limb_8_col77))) + + ((op0_limb_16_col56) * (op1_limb_7_col76))) + + ((op0_limb_17_col57) * (op1_limb_6_col75))) + + ((op0_limb_18_col58) * (op1_limb_5_col74))) + + ((op0_limb_19_col59) * (op1_limb_4_col73))) + + ((op0_limb_20_col60) * (op1_limb_3_col72))) + + ((op0_limb_21_col61) * (op1_limb_2_col71))) + + ((op0_limb_22_col62) * (op1_limb_1_col70))) + + ((op0_limb_23_col63) * (op1_limb_0_col69))); + let conv_tmp_48d52_38 = (((((((((((((((((((((((((((M31_0) + - (dst_limb_24_col35)) + + ((op0_limb_0_col40) * (op1_limb_24_col93))) + + ((op0_limb_1_col41) * (op1_limb_23_col92))) + + ((op0_limb_2_col42) * (op1_limb_22_col91))) + + ((op0_limb_3_col43) * (op1_limb_21_col90))) + + ((op0_limb_4_col44) * (op1_limb_20_col89))) + + ((op0_limb_5_col45) * (op1_limb_19_col88))) + + ((op0_limb_6_col46) * (op1_limb_18_col87))) + + ((op0_limb_7_col47) * (op1_limb_17_col86))) + + ((op0_limb_8_col48) * (op1_limb_16_col85))) + + ((op0_limb_9_col49) * (op1_limb_15_col84))) + + ((op0_limb_10_col50) * (op1_limb_14_col83))) + + ((op0_limb_11_col51) * (op1_limb_13_col82))) + + ((op0_limb_12_col52) * (op1_limb_12_col81))) + + ((op0_limb_13_col53) * (op1_limb_11_col80))) + + ((op0_limb_14_col54) * (op1_limb_10_col79))) + + ((op0_limb_15_col55) * (op1_limb_9_col78))) + + ((op0_limb_16_col56) * (op1_limb_8_col77))) + + ((op0_limb_17_col57) * (op1_limb_7_col76))) + + ((op0_limb_18_col58) * (op1_limb_6_col75))) + + ((op0_limb_19_col59) * (op1_limb_5_col74))) + + ((op0_limb_20_col60) * (op1_limb_4_col73))) + + ((op0_limb_21_col61) * (op1_limb_3_col72))) + + ((op0_limb_22_col62) * (op1_limb_2_col71))) + + ((op0_limb_23_col63) * (op1_limb_1_col70))) + + ((op0_limb_24_col64) * (op1_limb_0_col69))); + let conv_tmp_48d52_39 = ((((((((((((((((((((((((((((M31_0) + - (dst_limb_25_col36)) + + ((op0_limb_0_col40) * (op1_limb_25_col94))) + + ((op0_limb_1_col41) * (op1_limb_24_col93))) + + ((op0_limb_2_col42) * (op1_limb_23_col92))) + + ((op0_limb_3_col43) * (op1_limb_22_col91))) + + ((op0_limb_4_col44) * (op1_limb_21_col90))) + + ((op0_limb_5_col45) * (op1_limb_20_col89))) + + ((op0_limb_6_col46) * (op1_limb_19_col88))) + + ((op0_limb_7_col47) * (op1_limb_18_col87))) + + ((op0_limb_8_col48) * (op1_limb_17_col86))) + + ((op0_limb_9_col49) * (op1_limb_16_col85))) + + ((op0_limb_10_col50) * (op1_limb_15_col84))) + + ((op0_limb_11_col51) * (op1_limb_14_col83))) + + ((op0_limb_12_col52) * (op1_limb_13_col82))) + + ((op0_limb_13_col53) * (op1_limb_12_col81))) + + ((op0_limb_14_col54) * (op1_limb_11_col80))) + + ((op0_limb_15_col55) * (op1_limb_10_col79))) + + ((op0_limb_16_col56) * (op1_limb_9_col78))) + + ((op0_limb_17_col57) * (op1_limb_8_col77))) + + ((op0_limb_18_col58) * (op1_limb_7_col76))) + + ((op0_limb_19_col59) * (op1_limb_6_col75))) + + ((op0_limb_20_col60) * (op1_limb_5_col74))) + + ((op0_limb_21_col61) * (op1_limb_4_col73))) + + ((op0_limb_22_col62) * (op1_limb_3_col72))) + + ((op0_limb_23_col63) * (op1_limb_2_col71))) + + ((op0_limb_24_col64) * (op1_limb_1_col70))) + + ((op0_limb_25_col65) * (op1_limb_0_col69))); + let conv_tmp_48d52_40 = (((((((((((((((((((((((((((((M31_0) + - (dst_limb_26_col37)) + + ((op0_limb_0_col40) * (op1_limb_26_col95))) + + ((op0_limb_1_col41) * (op1_limb_25_col94))) + + ((op0_limb_2_col42) * (op1_limb_24_col93))) + + ((op0_limb_3_col43) * (op1_limb_23_col92))) + + ((op0_limb_4_col44) * (op1_limb_22_col91))) + + ((op0_limb_5_col45) * (op1_limb_21_col90))) + + ((op0_limb_6_col46) * (op1_limb_20_col89))) + + ((op0_limb_7_col47) * (op1_limb_19_col88))) + + ((op0_limb_8_col48) * (op1_limb_18_col87))) + + ((op0_limb_9_col49) * (op1_limb_17_col86))) + + ((op0_limb_10_col50) * (op1_limb_16_col85))) + + ((op0_limb_11_col51) * (op1_limb_15_col84))) + + ((op0_limb_12_col52) * (op1_limb_14_col83))) + + ((op0_limb_13_col53) * (op1_limb_13_col82))) + + ((op0_limb_14_col54) * (op1_limb_12_col81))) + + ((op0_limb_15_col55) * (op1_limb_11_col80))) + + ((op0_limb_16_col56) * (op1_limb_10_col79))) + + ((op0_limb_17_col57) * (op1_limb_9_col78))) + + ((op0_limb_18_col58) * (op1_limb_8_col77))) + + ((op0_limb_19_col59) * (op1_limb_7_col76))) + + ((op0_limb_20_col60) * (op1_limb_6_col75))) + + ((op0_limb_21_col61) * (op1_limb_5_col74))) + + ((op0_limb_22_col62) * (op1_limb_4_col73))) + + ((op0_limb_23_col63) * (op1_limb_3_col72))) + + ((op0_limb_24_col64) * (op1_limb_2_col71))) + + ((op0_limb_25_col65) * (op1_limb_1_col70))) + + ((op0_limb_26_col66) * (op1_limb_0_col69))); + let conv_tmp_48d52_41 = ((((((((((((((((((((((((((((((M31_0) + - (dst_limb_27_col38)) + + ((op0_limb_0_col40) * (op1_limb_27_col96))) + + ((op0_limb_1_col41) * (op1_limb_26_col95))) + + ((op0_limb_2_col42) * (op1_limb_25_col94))) + + ((op0_limb_3_col43) * (op1_limb_24_col93))) + + ((op0_limb_4_col44) * (op1_limb_23_col92))) + + ((op0_limb_5_col45) * (op1_limb_22_col91))) + + ((op0_limb_6_col46) * (op1_limb_21_col90))) + + ((op0_limb_7_col47) * (op1_limb_20_col89))) + + ((op0_limb_8_col48) * (op1_limb_19_col88))) + + ((op0_limb_9_col49) * (op1_limb_18_col87))) + + ((op0_limb_10_col50) * (op1_limb_17_col86))) + + ((op0_limb_11_col51) * (op1_limb_16_col85))) + + ((op0_limb_12_col52) * (op1_limb_15_col84))) + + ((op0_limb_13_col53) * (op1_limb_14_col83))) + + ((op0_limb_14_col54) * (op1_limb_13_col82))) + + ((op0_limb_15_col55) * (op1_limb_12_col81))) + + ((op0_limb_16_col56) * (op1_limb_11_col80))) + + ((op0_limb_17_col57) * (op1_limb_10_col79))) + + ((op0_limb_18_col58) * (op1_limb_9_col78))) + + ((op0_limb_19_col59) * (op1_limb_8_col77))) + + ((op0_limb_20_col60) * (op1_limb_7_col76))) + + ((op0_limb_21_col61) * (op1_limb_6_col75))) + + ((op0_limb_22_col62) * (op1_limb_5_col74))) + + ((op0_limb_23_col63) * (op1_limb_4_col73))) + + ((op0_limb_24_col64) * (op1_limb_3_col72))) + + ((op0_limb_25_col65) * (op1_limb_2_col71))) + + ((op0_limb_26_col66) * (op1_limb_1_col70))) + + ((op0_limb_27_col67) * (op1_limb_0_col69))); + let conv_tmp_48d52_42 = ((((((((((((((((((((((((((((M31_0) + + ((op0_limb_1_col41) * (op1_limb_27_col96))) + + ((op0_limb_2_col42) * (op1_limb_26_col95))) + + ((op0_limb_3_col43) * (op1_limb_25_col94))) + + ((op0_limb_4_col44) * (op1_limb_24_col93))) + + ((op0_limb_5_col45) * (op1_limb_23_col92))) + + ((op0_limb_6_col46) * (op1_limb_22_col91))) + + ((op0_limb_7_col47) * (op1_limb_21_col90))) + + ((op0_limb_8_col48) * (op1_limb_20_col89))) + + ((op0_limb_9_col49) * (op1_limb_19_col88))) + + ((op0_limb_10_col50) * (op1_limb_18_col87))) + + ((op0_limb_11_col51) * (op1_limb_17_col86))) + + ((op0_limb_12_col52) * (op1_limb_16_col85))) + + ((op0_limb_13_col53) * (op1_limb_15_col84))) + + ((op0_limb_14_col54) * (op1_limb_14_col83))) + + ((op0_limb_15_col55) * (op1_limb_13_col82))) + + ((op0_limb_16_col56) * (op1_limb_12_col81))) + + ((op0_limb_17_col57) * (op1_limb_11_col80))) + + ((op0_limb_18_col58) * (op1_limb_10_col79))) + + ((op0_limb_19_col59) * (op1_limb_9_col78))) + + ((op0_limb_20_col60) * (op1_limb_8_col77))) + + ((op0_limb_21_col61) * (op1_limb_7_col76))) + + ((op0_limb_22_col62) * (op1_limb_6_col75))) + + ((op0_limb_23_col63) * (op1_limb_5_col74))) + + ((op0_limb_24_col64) * (op1_limb_4_col73))) + + ((op0_limb_25_col65) * (op1_limb_3_col72))) + + ((op0_limb_26_col66) * (op1_limb_2_col71))) + + ((op0_limb_27_col67) * (op1_limb_1_col70))); + let conv_tmp_48d52_43 = (((((((((((((((((((((((((((M31_0) + + ((op0_limb_2_col42) * (op1_limb_27_col96))) + + ((op0_limb_3_col43) * (op1_limb_26_col95))) + + ((op0_limb_4_col44) * (op1_limb_25_col94))) + + ((op0_limb_5_col45) * (op1_limb_24_col93))) + + ((op0_limb_6_col46) * (op1_limb_23_col92))) + + ((op0_limb_7_col47) * (op1_limb_22_col91))) + + ((op0_limb_8_col48) * (op1_limb_21_col90))) + + ((op0_limb_9_col49) * (op1_limb_20_col89))) + + ((op0_limb_10_col50) * (op1_limb_19_col88))) + + ((op0_limb_11_col51) * (op1_limb_18_col87))) + + ((op0_limb_12_col52) * (op1_limb_17_col86))) + + ((op0_limb_13_col53) * (op1_limb_16_col85))) + + ((op0_limb_14_col54) * (op1_limb_15_col84))) + + ((op0_limb_15_col55) * (op1_limb_14_col83))) + + ((op0_limb_16_col56) * (op1_limb_13_col82))) + + ((op0_limb_17_col57) * (op1_limb_12_col81))) + + ((op0_limb_18_col58) * (op1_limb_11_col80))) + + ((op0_limb_19_col59) * (op1_limb_10_col79))) + + ((op0_limb_20_col60) * (op1_limb_9_col78))) + + ((op0_limb_21_col61) * (op1_limb_8_col77))) + + ((op0_limb_22_col62) * (op1_limb_7_col76))) + + ((op0_limb_23_col63) * (op1_limb_6_col75))) + + ((op0_limb_24_col64) * (op1_limb_5_col74))) + + ((op0_limb_25_col65) * (op1_limb_4_col73))) + + ((op0_limb_26_col66) * (op1_limb_3_col72))) + + ((op0_limb_27_col67) * (op1_limb_2_col71))); + let conv_tmp_48d52_44 = ((((((((((((((((((((((((((M31_0) + + ((op0_limb_3_col43) * (op1_limb_27_col96))) + + ((op0_limb_4_col44) * (op1_limb_26_col95))) + + ((op0_limb_5_col45) * (op1_limb_25_col94))) + + ((op0_limb_6_col46) * (op1_limb_24_col93))) + + ((op0_limb_7_col47) * (op1_limb_23_col92))) + + ((op0_limb_8_col48) * (op1_limb_22_col91))) + + ((op0_limb_9_col49) * (op1_limb_21_col90))) + + ((op0_limb_10_col50) * (op1_limb_20_col89))) + + ((op0_limb_11_col51) * (op1_limb_19_col88))) + + ((op0_limb_12_col52) * (op1_limb_18_col87))) + + ((op0_limb_13_col53) * (op1_limb_17_col86))) + + ((op0_limb_14_col54) * (op1_limb_16_col85))) + + ((op0_limb_15_col55) * (op1_limb_15_col84))) + + ((op0_limb_16_col56) * (op1_limb_14_col83))) + + ((op0_limb_17_col57) * (op1_limb_13_col82))) + + ((op0_limb_18_col58) * (op1_limb_12_col81))) + + ((op0_limb_19_col59) * (op1_limb_11_col80))) + + ((op0_limb_20_col60) * (op1_limb_10_col79))) + + ((op0_limb_21_col61) * (op1_limb_9_col78))) + + ((op0_limb_22_col62) * (op1_limb_8_col77))) + + ((op0_limb_23_col63) * (op1_limb_7_col76))) + + ((op0_limb_24_col64) * (op1_limb_6_col75))) + + ((op0_limb_25_col65) * (op1_limb_5_col74))) + + ((op0_limb_26_col66) * (op1_limb_4_col73))) + + ((op0_limb_27_col67) * (op1_limb_3_col72))); + let conv_tmp_48d52_45 = (((((((((((((((((((((((((M31_0) + + ((op0_limb_4_col44) * (op1_limb_27_col96))) + + ((op0_limb_5_col45) * (op1_limb_26_col95))) + + ((op0_limb_6_col46) * (op1_limb_25_col94))) + + ((op0_limb_7_col47) * (op1_limb_24_col93))) + + ((op0_limb_8_col48) * (op1_limb_23_col92))) + + ((op0_limb_9_col49) * (op1_limb_22_col91))) + + ((op0_limb_10_col50) * (op1_limb_21_col90))) + + ((op0_limb_11_col51) * (op1_limb_20_col89))) + + ((op0_limb_12_col52) * (op1_limb_19_col88))) + + ((op0_limb_13_col53) * (op1_limb_18_col87))) + + ((op0_limb_14_col54) * (op1_limb_17_col86))) + + ((op0_limb_15_col55) * (op1_limb_16_col85))) + + ((op0_limb_16_col56) * (op1_limb_15_col84))) + + ((op0_limb_17_col57) * (op1_limb_14_col83))) + + ((op0_limb_18_col58) * (op1_limb_13_col82))) + + ((op0_limb_19_col59) * (op1_limb_12_col81))) + + ((op0_limb_20_col60) * (op1_limb_11_col80))) + + ((op0_limb_21_col61) * (op1_limb_10_col79))) + + ((op0_limb_22_col62) * (op1_limb_9_col78))) + + ((op0_limb_23_col63) * (op1_limb_8_col77))) + + ((op0_limb_24_col64) * (op1_limb_7_col76))) + + ((op0_limb_25_col65) * (op1_limb_6_col75))) + + ((op0_limb_26_col66) * (op1_limb_5_col74))) + + ((op0_limb_27_col67) * (op1_limb_4_col73))); + let conv_tmp_48d52_46 = ((((((((((((((((((((((((M31_0) + + ((op0_limb_5_col45) * (op1_limb_27_col96))) + + ((op0_limb_6_col46) * (op1_limb_26_col95))) + + ((op0_limb_7_col47) * (op1_limb_25_col94))) + + ((op0_limb_8_col48) * (op1_limb_24_col93))) + + ((op0_limb_9_col49) * (op1_limb_23_col92))) + + ((op0_limb_10_col50) * (op1_limb_22_col91))) + + ((op0_limb_11_col51) * (op1_limb_21_col90))) + + ((op0_limb_12_col52) * (op1_limb_20_col89))) + + ((op0_limb_13_col53) * (op1_limb_19_col88))) + + ((op0_limb_14_col54) * (op1_limb_18_col87))) + + ((op0_limb_15_col55) * (op1_limb_17_col86))) + + ((op0_limb_16_col56) * (op1_limb_16_col85))) + + ((op0_limb_17_col57) * (op1_limb_15_col84))) + + ((op0_limb_18_col58) * (op1_limb_14_col83))) + + ((op0_limb_19_col59) * (op1_limb_13_col82))) + + ((op0_limb_20_col60) * (op1_limb_12_col81))) + + ((op0_limb_21_col61) * (op1_limb_11_col80))) + + ((op0_limb_22_col62) * (op1_limb_10_col79))) + + ((op0_limb_23_col63) * (op1_limb_9_col78))) + + ((op0_limb_24_col64) * (op1_limb_8_col77))) + + ((op0_limb_25_col65) * (op1_limb_7_col76))) + + ((op0_limb_26_col66) * (op1_limb_6_col75))) + + ((op0_limb_27_col67) * (op1_limb_5_col74))); + let conv_tmp_48d52_47 = (((((((((((((((((((((((M31_0) + + ((op0_limb_6_col46) * (op1_limb_27_col96))) + + ((op0_limb_7_col47) * (op1_limb_26_col95))) + + ((op0_limb_8_col48) * (op1_limb_25_col94))) + + ((op0_limb_9_col49) * (op1_limb_24_col93))) + + ((op0_limb_10_col50) * (op1_limb_23_col92))) + + ((op0_limb_11_col51) * (op1_limb_22_col91))) + + ((op0_limb_12_col52) * (op1_limb_21_col90))) + + ((op0_limb_13_col53) * (op1_limb_20_col89))) + + ((op0_limb_14_col54) * (op1_limb_19_col88))) + + ((op0_limb_15_col55) * (op1_limb_18_col87))) + + ((op0_limb_16_col56) * (op1_limb_17_col86))) + + ((op0_limb_17_col57) * (op1_limb_16_col85))) + + ((op0_limb_18_col58) * (op1_limb_15_col84))) + + ((op0_limb_19_col59) * (op1_limb_14_col83))) + + ((op0_limb_20_col60) * (op1_limb_13_col82))) + + ((op0_limb_21_col61) * (op1_limb_12_col81))) + + ((op0_limb_22_col62) * (op1_limb_11_col80))) + + ((op0_limb_23_col63) * (op1_limb_10_col79))) + + ((op0_limb_24_col64) * (op1_limb_9_col78))) + + ((op0_limb_25_col65) * (op1_limb_8_col77))) + + ((op0_limb_26_col66) * (op1_limb_7_col76))) + + ((op0_limb_27_col67) * (op1_limb_6_col75))); + let conv_tmp_48d52_48 = ((((((((((((((((((((((M31_0) + + ((op0_limb_7_col47) * (op1_limb_27_col96))) + + ((op0_limb_8_col48) * (op1_limb_26_col95))) + + ((op0_limb_9_col49) * (op1_limb_25_col94))) + + ((op0_limb_10_col50) * (op1_limb_24_col93))) + + ((op0_limb_11_col51) * (op1_limb_23_col92))) + + ((op0_limb_12_col52) * (op1_limb_22_col91))) + + ((op0_limb_13_col53) * (op1_limb_21_col90))) + + ((op0_limb_14_col54) * (op1_limb_20_col89))) + + ((op0_limb_15_col55) * (op1_limb_19_col88))) + + ((op0_limb_16_col56) * (op1_limb_18_col87))) + + ((op0_limb_17_col57) * (op1_limb_17_col86))) + + ((op0_limb_18_col58) * (op1_limb_16_col85))) + + ((op0_limb_19_col59) * (op1_limb_15_col84))) + + ((op0_limb_20_col60) * (op1_limb_14_col83))) + + ((op0_limb_21_col61) * (op1_limb_13_col82))) + + ((op0_limb_22_col62) * (op1_limb_12_col81))) + + ((op0_limb_23_col63) * (op1_limb_11_col80))) + + ((op0_limb_24_col64) * (op1_limb_10_col79))) + + ((op0_limb_25_col65) * (op1_limb_9_col78))) + + ((op0_limb_26_col66) * (op1_limb_8_col77))) + + ((op0_limb_27_col67) * (op1_limb_7_col76))); + let conv_tmp_48d52_49 = (((((((((((((((((((((M31_0) + + ((op0_limb_8_col48) * (op1_limb_27_col96))) + + ((op0_limb_9_col49) * (op1_limb_26_col95))) + + ((op0_limb_10_col50) * (op1_limb_25_col94))) + + ((op0_limb_11_col51) * (op1_limb_24_col93))) + + ((op0_limb_12_col52) * (op1_limb_23_col92))) + + ((op0_limb_13_col53) * (op1_limb_22_col91))) + + ((op0_limb_14_col54) * (op1_limb_21_col90))) + + ((op0_limb_15_col55) * (op1_limb_20_col89))) + + ((op0_limb_16_col56) * (op1_limb_19_col88))) + + ((op0_limb_17_col57) * (op1_limb_18_col87))) + + ((op0_limb_18_col58) * (op1_limb_17_col86))) + + ((op0_limb_19_col59) * (op1_limb_16_col85))) + + ((op0_limb_20_col60) * (op1_limb_15_col84))) + + ((op0_limb_21_col61) * (op1_limb_14_col83))) + + ((op0_limb_22_col62) * (op1_limb_13_col82))) + + ((op0_limb_23_col63) * (op1_limb_12_col81))) + + ((op0_limb_24_col64) * (op1_limb_11_col80))) + + ((op0_limb_25_col65) * (op1_limb_10_col79))) + + ((op0_limb_26_col66) * (op1_limb_9_col78))) + + ((op0_limb_27_col67) * (op1_limb_8_col77))); + let conv_tmp_48d52_50 = ((((((((((((((((((((M31_0) + + ((op0_limb_9_col49) * (op1_limb_27_col96))) + + ((op0_limb_10_col50) * (op1_limb_26_col95))) + + ((op0_limb_11_col51) * (op1_limb_25_col94))) + + ((op0_limb_12_col52) * (op1_limb_24_col93))) + + ((op0_limb_13_col53) * (op1_limb_23_col92))) + + ((op0_limb_14_col54) * (op1_limb_22_col91))) + + ((op0_limb_15_col55) * (op1_limb_21_col90))) + + ((op0_limb_16_col56) * (op1_limb_20_col89))) + + ((op0_limb_17_col57) * (op1_limb_19_col88))) + + ((op0_limb_18_col58) * (op1_limb_18_col87))) + + ((op0_limb_19_col59) * (op1_limb_17_col86))) + + ((op0_limb_20_col60) * (op1_limb_16_col85))) + + ((op0_limb_21_col61) * (op1_limb_15_col84))) + + ((op0_limb_22_col62) * (op1_limb_14_col83))) + + ((op0_limb_23_col63) * (op1_limb_13_col82))) + + ((op0_limb_24_col64) * (op1_limb_12_col81))) + + ((op0_limb_25_col65) * (op1_limb_11_col80))) + + ((op0_limb_26_col66) * (op1_limb_10_col79))) + + ((op0_limb_27_col67) * (op1_limb_9_col78))); + let conv_tmp_48d52_51 = (((((((((((((((((((M31_0) + + ((op0_limb_10_col50) * (op1_limb_27_col96))) + + ((op0_limb_11_col51) * (op1_limb_26_col95))) + + ((op0_limb_12_col52) * (op1_limb_25_col94))) + + ((op0_limb_13_col53) * (op1_limb_24_col93))) + + ((op0_limb_14_col54) * (op1_limb_23_col92))) + + ((op0_limb_15_col55) * (op1_limb_22_col91))) + + ((op0_limb_16_col56) * (op1_limb_21_col90))) + + ((op0_limb_17_col57) * (op1_limb_20_col89))) + + ((op0_limb_18_col58) * (op1_limb_19_col88))) + + ((op0_limb_19_col59) * (op1_limb_18_col87))) + + ((op0_limb_20_col60) * (op1_limb_17_col86))) + + ((op0_limb_21_col61) * (op1_limb_16_col85))) + + ((op0_limb_22_col62) * (op1_limb_15_col84))) + + ((op0_limb_23_col63) * (op1_limb_14_col83))) + + ((op0_limb_24_col64) * (op1_limb_13_col82))) + + ((op0_limb_25_col65) * (op1_limb_12_col81))) + + ((op0_limb_26_col66) * (op1_limb_11_col80))) + + ((op0_limb_27_col67) * (op1_limb_10_col79))); + let conv_tmp_48d52_52 = ((((((((((((((((((M31_0) + + ((op0_limb_11_col51) * (op1_limb_27_col96))) + + ((op0_limb_12_col52) * (op1_limb_26_col95))) + + ((op0_limb_13_col53) * (op1_limb_25_col94))) + + ((op0_limb_14_col54) * (op1_limb_24_col93))) + + ((op0_limb_15_col55) * (op1_limb_23_col92))) + + ((op0_limb_16_col56) * (op1_limb_22_col91))) + + ((op0_limb_17_col57) * (op1_limb_21_col90))) + + ((op0_limb_18_col58) * (op1_limb_20_col89))) + + ((op0_limb_19_col59) * (op1_limb_19_col88))) + + ((op0_limb_20_col60) * (op1_limb_18_col87))) + + ((op0_limb_21_col61) * (op1_limb_17_col86))) + + ((op0_limb_22_col62) * (op1_limb_16_col85))) + + ((op0_limb_23_col63) * (op1_limb_15_col84))) + + ((op0_limb_24_col64) * (op1_limb_14_col83))) + + ((op0_limb_25_col65) * (op1_limb_13_col82))) + + ((op0_limb_26_col66) * (op1_limb_12_col81))) + + ((op0_limb_27_col67) * (op1_limb_11_col80))); + let conv_tmp_48d52_53 = (((((((((((((((((M31_0) + + ((op0_limb_12_col52) * (op1_limb_27_col96))) + + ((op0_limb_13_col53) * (op1_limb_26_col95))) + + ((op0_limb_14_col54) * (op1_limb_25_col94))) + + ((op0_limb_15_col55) * (op1_limb_24_col93))) + + ((op0_limb_16_col56) * (op1_limb_23_col92))) + + ((op0_limb_17_col57) * (op1_limb_22_col91))) + + ((op0_limb_18_col58) * (op1_limb_21_col90))) + + ((op0_limb_19_col59) * (op1_limb_20_col89))) + + ((op0_limb_20_col60) * (op1_limb_19_col88))) + + ((op0_limb_21_col61) * (op1_limb_18_col87))) + + ((op0_limb_22_col62) * (op1_limb_17_col86))) + + ((op0_limb_23_col63) * (op1_limb_16_col85))) + + ((op0_limb_24_col64) * (op1_limb_15_col84))) + + ((op0_limb_25_col65) * (op1_limb_14_col83))) + + ((op0_limb_26_col66) * (op1_limb_13_col82))) + + ((op0_limb_27_col67) * (op1_limb_12_col81))); + let conv_tmp_48d52_54 = ((((((((((((((((M31_0) + + ((op0_limb_13_col53) * (op1_limb_27_col96))) + + ((op0_limb_14_col54) * (op1_limb_26_col95))) + + ((op0_limb_15_col55) * (op1_limb_25_col94))) + + ((op0_limb_16_col56) * (op1_limb_24_col93))) + + ((op0_limb_17_col57) * (op1_limb_23_col92))) + + ((op0_limb_18_col58) * (op1_limb_22_col91))) + + ((op0_limb_19_col59) * (op1_limb_21_col90))) + + ((op0_limb_20_col60) * (op1_limb_20_col89))) + + ((op0_limb_21_col61) * (op1_limb_19_col88))) + + ((op0_limb_22_col62) * (op1_limb_18_col87))) + + ((op0_limb_23_col63) * (op1_limb_17_col86))) + + ((op0_limb_24_col64) * (op1_limb_16_col85))) + + ((op0_limb_25_col65) * (op1_limb_15_col84))) + + ((op0_limb_26_col66) * (op1_limb_14_col83))) + + ((op0_limb_27_col67) * (op1_limb_13_col82))); + let conv_tmp_48d52_55 = (((((((((((((((M31_0) + + ((op0_limb_14_col54) * (op1_limb_27_col96))) + + ((op0_limb_15_col55) * (op1_limb_26_col95))) + + ((op0_limb_16_col56) * (op1_limb_25_col94))) + + ((op0_limb_17_col57) * (op1_limb_24_col93))) + + ((op0_limb_18_col58) * (op1_limb_23_col92))) + + ((op0_limb_19_col59) * (op1_limb_22_col91))) + + ((op0_limb_20_col60) * (op1_limb_21_col90))) + + ((op0_limb_21_col61) * (op1_limb_20_col89))) + + ((op0_limb_22_col62) * (op1_limb_19_col88))) + + ((op0_limb_23_col63) * (op1_limb_18_col87))) + + ((op0_limb_24_col64) * (op1_limb_17_col86))) + + ((op0_limb_25_col65) * (op1_limb_16_col85))) + + ((op0_limb_26_col66) * (op1_limb_15_col84))) + + ((op0_limb_27_col67) * (op1_limb_14_col83))); + let conv_tmp_48d52_56 = ((((((((((((((M31_0) + + ((op0_limb_15_col55) * (op1_limb_27_col96))) + + ((op0_limb_16_col56) * (op1_limb_26_col95))) + + ((op0_limb_17_col57) * (op1_limb_25_col94))) + + ((op0_limb_18_col58) * (op1_limb_24_col93))) + + ((op0_limb_19_col59) * (op1_limb_23_col92))) + + ((op0_limb_20_col60) * (op1_limb_22_col91))) + + ((op0_limb_21_col61) * (op1_limb_21_col90))) + + ((op0_limb_22_col62) * (op1_limb_20_col89))) + + ((op0_limb_23_col63) * (op1_limb_19_col88))) + + ((op0_limb_24_col64) * (op1_limb_18_col87))) + + ((op0_limb_25_col65) * (op1_limb_17_col86))) + + ((op0_limb_26_col66) * (op1_limb_16_col85))) + + ((op0_limb_27_col67) * (op1_limb_15_col84))); + let conv_tmp_48d52_57 = (((((((((((((M31_0) + + ((op0_limb_16_col56) * (op1_limb_27_col96))) + + ((op0_limb_17_col57) * (op1_limb_26_col95))) + + ((op0_limb_18_col58) * (op1_limb_25_col94))) + + ((op0_limb_19_col59) * (op1_limb_24_col93))) + + ((op0_limb_20_col60) * (op1_limb_23_col92))) + + ((op0_limb_21_col61) * (op1_limb_22_col91))) + + ((op0_limb_22_col62) * (op1_limb_21_col90))) + + ((op0_limb_23_col63) * (op1_limb_20_col89))) + + ((op0_limb_24_col64) * (op1_limb_19_col88))) + + ((op0_limb_25_col65) * (op1_limb_18_col87))) + + ((op0_limb_26_col66) * (op1_limb_17_col86))) + + ((op0_limb_27_col67) * (op1_limb_16_col85))); + let conv_tmp_48d52_58 = ((((((((((((M31_0) + + ((op0_limb_17_col57) * (op1_limb_27_col96))) + + ((op0_limb_18_col58) * (op1_limb_26_col95))) + + ((op0_limb_19_col59) * (op1_limb_25_col94))) + + ((op0_limb_20_col60) * (op1_limb_24_col93))) + + ((op0_limb_21_col61) * (op1_limb_23_col92))) + + ((op0_limb_22_col62) * (op1_limb_22_col91))) + + ((op0_limb_23_col63) * (op1_limb_21_col90))) + + ((op0_limb_24_col64) * (op1_limb_20_col89))) + + ((op0_limb_25_col65) * (op1_limb_19_col88))) + + ((op0_limb_26_col66) * (op1_limb_18_col87))) + + ((op0_limb_27_col67) * (op1_limb_17_col86))); + let conv_tmp_48d52_59 = (((((((((((M31_0) + + ((op0_limb_18_col58) * (op1_limb_27_col96))) + + ((op0_limb_19_col59) * (op1_limb_26_col95))) + + ((op0_limb_20_col60) * (op1_limb_25_col94))) + + ((op0_limb_21_col61) * (op1_limb_24_col93))) + + ((op0_limb_22_col62) * (op1_limb_23_col92))) + + ((op0_limb_23_col63) * (op1_limb_22_col91))) + + ((op0_limb_24_col64) * (op1_limb_21_col90))) + + ((op0_limb_25_col65) * (op1_limb_20_col89))) + + ((op0_limb_26_col66) * (op1_limb_19_col88))) + + ((op0_limb_27_col67) * (op1_limb_18_col87))); + let conv_tmp_48d52_60 = ((((((((((M31_0) + + ((op0_limb_19_col59) * (op1_limb_27_col96))) + + ((op0_limb_20_col60) * (op1_limb_26_col95))) + + ((op0_limb_21_col61) * (op1_limb_25_col94))) + + ((op0_limb_22_col62) * (op1_limb_24_col93))) + + ((op0_limb_23_col63) * (op1_limb_23_col92))) + + ((op0_limb_24_col64) * (op1_limb_22_col91))) + + ((op0_limb_25_col65) * (op1_limb_21_col90))) + + ((op0_limb_26_col66) * (op1_limb_20_col89))) + + ((op0_limb_27_col67) * (op1_limb_19_col88))); + let conv_tmp_48d52_61 = (((((((((M31_0) + + ((op0_limb_20_col60) * (op1_limb_27_col96))) + + ((op0_limb_21_col61) * (op1_limb_26_col95))) + + ((op0_limb_22_col62) * (op1_limb_25_col94))) + + ((op0_limb_23_col63) * (op1_limb_24_col93))) + + ((op0_limb_24_col64) * (op1_limb_23_col92))) + + ((op0_limb_25_col65) * (op1_limb_22_col91))) + + ((op0_limb_26_col66) * (op1_limb_21_col90))) + + ((op0_limb_27_col67) * (op1_limb_20_col89))); + let conv_tmp_48d52_62 = ((((((((M31_0) + + ((op0_limb_21_col61) * (op1_limb_27_col96))) + + ((op0_limb_22_col62) * (op1_limb_26_col95))) + + ((op0_limb_23_col63) * (op1_limb_25_col94))) + + ((op0_limb_24_col64) * (op1_limb_24_col93))) + + ((op0_limb_25_col65) * (op1_limb_23_col92))) + + ((op0_limb_26_col66) * (op1_limb_22_col91))) + + ((op0_limb_27_col67) * (op1_limb_21_col90))); + let conv_tmp_48d52_63 = (((((((M31_0) + + ((op0_limb_22_col62) * (op1_limb_27_col96))) + + ((op0_limb_23_col63) * (op1_limb_26_col95))) + + ((op0_limb_24_col64) * (op1_limb_25_col94))) + + ((op0_limb_25_col65) * (op1_limb_24_col93))) + + ((op0_limb_26_col66) * (op1_limb_23_col92))) + + ((op0_limb_27_col67) * (op1_limb_22_col91))); + let conv_tmp_48d52_64 = ((((((M31_0) + ((op0_limb_23_col63) * (op1_limb_27_col96))) + + ((op0_limb_24_col64) * (op1_limb_26_col95))) + + ((op0_limb_25_col65) * (op1_limb_25_col94))) + + ((op0_limb_26_col66) * (op1_limb_24_col93))) + + ((op0_limb_27_col67) * (op1_limb_23_col92))); + let conv_tmp_48d52_65 = (((((M31_0) + ((op0_limb_24_col64) * (op1_limb_27_col96))) + + ((op0_limb_25_col65) * (op1_limb_26_col95))) + + ((op0_limb_26_col66) * (op1_limb_25_col94))) + + ((op0_limb_27_col67) * (op1_limb_24_col93))); + let conv_tmp_48d52_66 = ((((M31_0) + ((op0_limb_25_col65) * (op1_limb_27_col96))) + + ((op0_limb_26_col66) * (op1_limb_26_col95))) + + ((op0_limb_27_col67) * (op1_limb_25_col94))); + let conv_tmp_48d52_67 = (((M31_0) + ((op0_limb_26_col66) * (op1_limb_27_col96))) + + ((op0_limb_27_col67) * (op1_limb_26_col95))); + let conv_tmp_48d52_68 = ((M31_0) + ((op0_limb_27_col67) * (op1_limb_27_col96))); + let conv_mod_tmp_48d52_69 = ((((M31_0) + ((M31_32) * (conv_tmp_48d52_14))) + - ((M31_4) * (conv_tmp_48d52_35))) + + ((M31_8) * (conv_tmp_48d52_63))); + let conv_mod_tmp_48d52_70 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_14))) + + ((M31_32) * (conv_tmp_48d52_15))) + - ((M31_4) * (conv_tmp_48d52_36))) + + ((M31_8) * (conv_tmp_48d52_64))); + let conv_mod_tmp_48d52_71 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_15))) + + ((M31_32) * (conv_tmp_48d52_16))) + - ((M31_4) * (conv_tmp_48d52_37))) + + ((M31_8) * (conv_tmp_48d52_65))); + let conv_mod_tmp_48d52_72 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_16))) + + ((M31_32) * (conv_tmp_48d52_17))) + - ((M31_4) * (conv_tmp_48d52_38))) + + ((M31_8) * (conv_tmp_48d52_66))); + let conv_mod_tmp_48d52_73 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_17))) + + ((M31_32) * (conv_tmp_48d52_18))) + - ((M31_4) * (conv_tmp_48d52_39))) + + ((M31_8) * (conv_tmp_48d52_67))); + let conv_mod_tmp_48d52_74 = (((((M31_0) + ((M31_1) * (conv_tmp_48d52_18))) + + ((M31_32) * (conv_tmp_48d52_19))) + - ((M31_4) * (conv_tmp_48d52_40))) + + ((M31_8) * (conv_tmp_48d52_68))); + let conv_mod_tmp_48d52_75 = ((((M31_0) + ((M31_1) * (conv_tmp_48d52_19))) + + ((M31_32) * (conv_tmp_48d52_20))) + - ((M31_4) * (conv_tmp_48d52_41))); + let conv_mod_tmp_48d52_76 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_14))) + + ((M31_1) * (conv_tmp_48d52_20))) + + ((M31_32) * (conv_tmp_48d52_21))) + - ((M31_4) * (conv_tmp_48d52_42))); + let conv_mod_tmp_48d52_77 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_15))) + + ((M31_1) * (conv_tmp_48d52_21))) + + ((M31_32) * (conv_tmp_48d52_22))) + - ((M31_4) * (conv_tmp_48d52_43))); + let conv_mod_tmp_48d52_78 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_16))) + + ((M31_1) * (conv_tmp_48d52_22))) + + ((M31_32) * (conv_tmp_48d52_23))) + - ((M31_4) * (conv_tmp_48d52_44))); + let conv_mod_tmp_48d52_79 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_17))) + + ((M31_1) * (conv_tmp_48d52_23))) + + ((M31_32) * (conv_tmp_48d52_24))) + - ((M31_4) * (conv_tmp_48d52_45))); + let conv_mod_tmp_48d52_80 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_18))) + + ((M31_1) * (conv_tmp_48d52_24))) + + ((M31_32) * (conv_tmp_48d52_25))) + - ((M31_4) * (conv_tmp_48d52_46))); + let conv_mod_tmp_48d52_81 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_19))) + + ((M31_1) * (conv_tmp_48d52_25))) + + ((M31_32) * (conv_tmp_48d52_26))) + - ((M31_4) * (conv_tmp_48d52_47))); + let conv_mod_tmp_48d52_82 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_20))) + + ((M31_1) * (conv_tmp_48d52_26))) + + ((M31_32) * (conv_tmp_48d52_27))) + - ((M31_4) * (conv_tmp_48d52_48))); + let conv_mod_tmp_48d52_83 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_21))) + + ((M31_1) * (conv_tmp_48d52_27))) + + ((M31_32) * (conv_tmp_48d52_28))) + - ((M31_4) * (conv_tmp_48d52_49))); + let conv_mod_tmp_48d52_84 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_22))) + + ((M31_1) * (conv_tmp_48d52_28))) + + ((M31_32) * (conv_tmp_48d52_29))) + - ((M31_4) * (conv_tmp_48d52_50))); + let conv_mod_tmp_48d52_85 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_23))) + + ((M31_1) * (conv_tmp_48d52_29))) + + ((M31_32) * (conv_tmp_48d52_30))) + - ((M31_4) * (conv_tmp_48d52_51))); + let conv_mod_tmp_48d52_86 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_24))) + + ((M31_1) * (conv_tmp_48d52_30))) + + ((M31_32) * (conv_tmp_48d52_31))) + - ((M31_4) * (conv_tmp_48d52_52))); + let conv_mod_tmp_48d52_87 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_25))) + + ((M31_1) * (conv_tmp_48d52_31))) + + ((M31_32) * (conv_tmp_48d52_32))) + - ((M31_4) * (conv_tmp_48d52_53))); + let conv_mod_tmp_48d52_88 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_26))) + + ((M31_1) * (conv_tmp_48d52_32))) + + ((M31_32) * (conv_tmp_48d52_33))) + - ((M31_4) * (conv_tmp_48d52_54))); + let conv_mod_tmp_48d52_89 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_27))) + + ((M31_1) * (conv_tmp_48d52_33))) + + ((M31_32) * (conv_tmp_48d52_34))) + - ((M31_4) * (conv_tmp_48d52_55))); + let conv_mod_tmp_48d52_90 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_28))) + + ((M31_1) * (conv_tmp_48d52_34))) + - ((M31_4) * (conv_tmp_48d52_56))) + + ((M31_64) * (conv_tmp_48d52_63))); + let conv_mod_tmp_48d52_91 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_29))) + - ((M31_4) * (conv_tmp_48d52_57))) + + ((M31_2) * (conv_tmp_48d52_63))) + + ((M31_64) * (conv_tmp_48d52_64))); + let conv_mod_tmp_48d52_92 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_30))) + - ((M31_4) * (conv_tmp_48d52_58))) + + ((M31_2) * (conv_tmp_48d52_64))) + + ((M31_64) * (conv_tmp_48d52_65))); + let conv_mod_tmp_48d52_93 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_31))) + - ((M31_4) * (conv_tmp_48d52_59))) + + ((M31_2) * (conv_tmp_48d52_65))) + + ((M31_64) * (conv_tmp_48d52_66))); + let conv_mod_tmp_48d52_94 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_32))) + - ((M31_4) * (conv_tmp_48d52_60))) + + ((M31_2) * (conv_tmp_48d52_66))) + + ((M31_64) * (conv_tmp_48d52_67))); + let conv_mod_tmp_48d52_95 = (((((M31_0) + ((M31_2) * (conv_tmp_48d52_33))) + - ((M31_4) * (conv_tmp_48d52_61))) + + ((M31_2) * (conv_tmp_48d52_67))) + + ((M31_64) * (conv_tmp_48d52_68))); + let conv_mod_tmp_48d52_96 = ((((M31_0) + ((M31_2) * (conv_tmp_48d52_34))) + - ((M31_4) * (conv_tmp_48d52_62))) + + ((M31_2) * (conv_tmp_48d52_68))); + let k_mod_2_18_biased_tmp_48d52_97 = + ((((PackedUInt32::from_m31(((conv_mod_tmp_48d52_69) + (M31_134217728)))) + + (((PackedUInt32::from_m31(((conv_mod_tmp_48d52_70) + (M31_134217728)))) + & (UInt32_511)) + << (UInt32_9))) + + (UInt32_65536)) + & (UInt32_262143)); + let k_col97 = ((k_mod_2_18_biased_tmp_48d52_97.low().as_m31()) + + (((k_mod_2_18_biased_tmp_48d52_97.high().as_m31()) - (M31_1)) * (M31_65536))); + *row[97] = k_col97; + let range_check_19_inputs_0 = [((k_col97) + (M31_262144))].unpack(); + *lookup_data.range_check_19_0 = [((k_col97) + (M31_262144))]; + let carry_0_col98 = + ((((conv_mod_tmp_48d52_69) - ((M31_1) * (k_col97))) + (M31_0)) * (M31_4194304)); + *row[98] = carry_0_col98; + let range_check_19_inputs_1 = [((carry_0_col98) + (M31_131072))].unpack(); + *lookup_data.range_check_19_1 = [((carry_0_col98) + (M31_131072))]; + let carry_1_col99 = (((conv_mod_tmp_48d52_70) + (carry_0_col98)) * (M31_4194304)); + *row[99] = carry_1_col99; + let range_check_19_inputs_2 = [((carry_1_col99) + (M31_131072))].unpack(); + *lookup_data.range_check_19_2 = [((carry_1_col99) + (M31_131072))]; + let carry_2_col100 = (((conv_mod_tmp_48d52_71) + (carry_1_col99)) * (M31_4194304)); + *row[100] = carry_2_col100; + let range_check_19_inputs_3 = [((carry_2_col100) + (M31_131072))].unpack(); + *lookup_data.range_check_19_3 = [((carry_2_col100) + (M31_131072))]; + let carry_3_col101 = (((conv_mod_tmp_48d52_72) + (carry_2_col100)) * (M31_4194304)); + *row[101] = carry_3_col101; + let range_check_19_inputs_4 = [((carry_3_col101) + (M31_131072))].unpack(); + *lookup_data.range_check_19_4 = [((carry_3_col101) + (M31_131072))]; + let carry_4_col102 = (((conv_mod_tmp_48d52_73) + (carry_3_col101)) * (M31_4194304)); + *row[102] = carry_4_col102; + let range_check_19_inputs_5 = [((carry_4_col102) + (M31_131072))].unpack(); + *lookup_data.range_check_19_5 = [((carry_4_col102) + (M31_131072))]; + let carry_5_col103 = (((conv_mod_tmp_48d52_74) + (carry_4_col102)) * (M31_4194304)); + *row[103] = carry_5_col103; + let range_check_19_inputs_6 = [((carry_5_col103) + (M31_131072))].unpack(); + *lookup_data.range_check_19_6 = [((carry_5_col103) + (M31_131072))]; + let carry_6_col104 = (((conv_mod_tmp_48d52_75) + (carry_5_col103)) * (M31_4194304)); + *row[104] = carry_6_col104; + let range_check_19_inputs_7 = [((carry_6_col104) + (M31_131072))].unpack(); + *lookup_data.range_check_19_7 = [((carry_6_col104) + (M31_131072))]; + let carry_7_col105 = (((conv_mod_tmp_48d52_76) + (carry_6_col104)) * (M31_4194304)); + *row[105] = carry_7_col105; + let range_check_19_inputs_8 = [((carry_7_col105) + (M31_131072))].unpack(); + *lookup_data.range_check_19_8 = [((carry_7_col105) + (M31_131072))]; + let carry_8_col106 = (((conv_mod_tmp_48d52_77) + (carry_7_col105)) * (M31_4194304)); + *row[106] = carry_8_col106; + let range_check_19_inputs_9 = [((carry_8_col106) + (M31_131072))].unpack(); + *lookup_data.range_check_19_9 = [((carry_8_col106) + (M31_131072))]; + let carry_9_col107 = (((conv_mod_tmp_48d52_78) + (carry_8_col106)) * (M31_4194304)); + *row[107] = carry_9_col107; + let range_check_19_inputs_10 = [((carry_9_col107) + (M31_131072))].unpack(); + *lookup_data.range_check_19_10 = [((carry_9_col107) + (M31_131072))]; + let carry_10_col108 = (((conv_mod_tmp_48d52_79) + (carry_9_col107)) * (M31_4194304)); + *row[108] = carry_10_col108; + let range_check_19_inputs_11 = [((carry_10_col108) + (M31_131072))].unpack(); + *lookup_data.range_check_19_11 = [((carry_10_col108) + (M31_131072))]; + let carry_11_col109 = (((conv_mod_tmp_48d52_80) + (carry_10_col108)) * (M31_4194304)); + *row[109] = carry_11_col109; + let range_check_19_inputs_12 = [((carry_11_col109) + (M31_131072))].unpack(); + *lookup_data.range_check_19_12 = [((carry_11_col109) + (M31_131072))]; + let carry_12_col110 = (((conv_mod_tmp_48d52_81) + (carry_11_col109)) * (M31_4194304)); + *row[110] = carry_12_col110; + let range_check_19_inputs_13 = [((carry_12_col110) + (M31_131072))].unpack(); + *lookup_data.range_check_19_13 = [((carry_12_col110) + (M31_131072))]; + let carry_13_col111 = (((conv_mod_tmp_48d52_82) + (carry_12_col110)) * (M31_4194304)); + *row[111] = carry_13_col111; + let range_check_19_inputs_14 = [((carry_13_col111) + (M31_131072))].unpack(); + *lookup_data.range_check_19_14 = [((carry_13_col111) + (M31_131072))]; + let carry_14_col112 = (((conv_mod_tmp_48d52_83) + (carry_13_col111)) * (M31_4194304)); + *row[112] = carry_14_col112; + let range_check_19_inputs_15 = [((carry_14_col112) + (M31_131072))].unpack(); + *lookup_data.range_check_19_15 = [((carry_14_col112) + (M31_131072))]; + let carry_15_col113 = (((conv_mod_tmp_48d52_84) + (carry_14_col112)) * (M31_4194304)); + *row[113] = carry_15_col113; + let range_check_19_inputs_16 = [((carry_15_col113) + (M31_131072))].unpack(); + *lookup_data.range_check_19_16 = [((carry_15_col113) + (M31_131072))]; + let carry_16_col114 = (((conv_mod_tmp_48d52_85) + (carry_15_col113)) * (M31_4194304)); + *row[114] = carry_16_col114; + let range_check_19_inputs_17 = [((carry_16_col114) + (M31_131072))].unpack(); + *lookup_data.range_check_19_17 = [((carry_16_col114) + (M31_131072))]; + let carry_17_col115 = (((conv_mod_tmp_48d52_86) + (carry_16_col114)) * (M31_4194304)); + *row[115] = carry_17_col115; + let range_check_19_inputs_18 = [((carry_17_col115) + (M31_131072))].unpack(); + *lookup_data.range_check_19_18 = [((carry_17_col115) + (M31_131072))]; + let carry_18_col116 = (((conv_mod_tmp_48d52_87) + (carry_17_col115)) * (M31_4194304)); + *row[116] = carry_18_col116; + let range_check_19_inputs_19 = [((carry_18_col116) + (M31_131072))].unpack(); + *lookup_data.range_check_19_19 = [((carry_18_col116) + (M31_131072))]; + let carry_19_col117 = (((conv_mod_tmp_48d52_88) + (carry_18_col116)) * (M31_4194304)); + *row[117] = carry_19_col117; + let range_check_19_inputs_20 = [((carry_19_col117) + (M31_131072))].unpack(); + *lookup_data.range_check_19_20 = [((carry_19_col117) + (M31_131072))]; + let carry_20_col118 = (((conv_mod_tmp_48d52_89) + (carry_19_col117)) * (M31_4194304)); + *row[118] = carry_20_col118; + let range_check_19_inputs_21 = [((carry_20_col118) + (M31_131072))].unpack(); + *lookup_data.range_check_19_21 = [((carry_20_col118) + (M31_131072))]; + let carry_21_col119 = ((((conv_mod_tmp_48d52_90) - ((M31_136) * (k_col97))) + + (carry_20_col118)) + * (M31_4194304)); + *row[119] = carry_21_col119; + let range_check_19_inputs_22 = [((carry_21_col119) + (M31_131072))].unpack(); + *lookup_data.range_check_19_22 = [((carry_21_col119) + (M31_131072))]; + let carry_22_col120 = (((conv_mod_tmp_48d52_91) + (carry_21_col119)) * (M31_4194304)); + *row[120] = carry_22_col120; + let range_check_19_inputs_23 = [((carry_22_col120) + (M31_131072))].unpack(); + *lookup_data.range_check_19_23 = [((carry_22_col120) + (M31_131072))]; + let carry_23_col121 = (((conv_mod_tmp_48d52_92) + (carry_22_col120)) * (M31_4194304)); + *row[121] = carry_23_col121; + let range_check_19_inputs_24 = [((carry_23_col121) + (M31_131072))].unpack(); + *lookup_data.range_check_19_24 = [((carry_23_col121) + (M31_131072))]; + let carry_24_col122 = (((conv_mod_tmp_48d52_93) + (carry_23_col121)) * (M31_4194304)); + *row[122] = carry_24_col122; + let range_check_19_inputs_25 = [((carry_24_col122) + (M31_131072))].unpack(); + *lookup_data.range_check_19_25 = [((carry_24_col122) + (M31_131072))]; + let carry_25_col123 = (((conv_mod_tmp_48d52_94) + (carry_24_col122)) * (M31_4194304)); + *row[123] = carry_25_col123; + let range_check_19_inputs_26 = [((carry_25_col123) + (M31_131072))].unpack(); + *lookup_data.range_check_19_26 = [((carry_25_col123) + (M31_131072))]; + let carry_26_col124 = (((conv_mod_tmp_48d52_95) + (carry_25_col123)) * (M31_4194304)); + *row[124] = carry_26_col124; + let range_check_19_inputs_27 = [((carry_26_col124) + (M31_131072))].unpack(); + *lookup_data.range_check_19_27 = [((carry_26_col124) + (M31_131072))]; + + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + ((input_pc_col0) + (M31_2)), + ((input_ap_col1) + (ap_update_add_1_col7)), + input_fp_col2, + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows { - *sub_components_inputs[i].range_check_19_inputs[27] = input; + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_2[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_2[i]); + range_check_19_state.add_input(&range_check_19_inputs_0[i]); + range_check_19_state.add_input(&range_check_19_inputs_1[i]); + range_check_19_state.add_input(&range_check_19_inputs_2[i]); + range_check_19_state.add_input(&range_check_19_inputs_3[i]); + range_check_19_state.add_input(&range_check_19_inputs_4[i]); + range_check_19_state.add_input(&range_check_19_inputs_5[i]); + range_check_19_state.add_input(&range_check_19_inputs_6[i]); + range_check_19_state.add_input(&range_check_19_inputs_7[i]); + range_check_19_state.add_input(&range_check_19_inputs_8[i]); + range_check_19_state.add_input(&range_check_19_inputs_9[i]); + range_check_19_state.add_input(&range_check_19_inputs_10[i]); + range_check_19_state.add_input(&range_check_19_inputs_11[i]); + range_check_19_state.add_input(&range_check_19_inputs_12[i]); + range_check_19_state.add_input(&range_check_19_inputs_13[i]); + range_check_19_state.add_input(&range_check_19_inputs_14[i]); + range_check_19_state.add_input(&range_check_19_inputs_15[i]); + range_check_19_state.add_input(&range_check_19_inputs_16[i]); + range_check_19_state.add_input(&range_check_19_inputs_17[i]); + range_check_19_state.add_input(&range_check_19_inputs_18[i]); + range_check_19_state.add_input(&range_check_19_inputs_19[i]); + range_check_19_state.add_input(&range_check_19_inputs_20[i]); + range_check_19_state.add_input(&range_check_19_inputs_21[i]); + range_check_19_state.add_input(&range_check_19_inputs_22[i]); + range_check_19_state.add_input(&range_check_19_inputs_23[i]); + range_check_19_state.add_input(&range_check_19_inputs_24[i]); + range_check_19_state.add_input(&range_check_19_inputs_25[i]); + range_check_19_state.add_input(&range_check_19_inputs_26[i]); + range_check_19_state.add_input(&range_check_19_inputs_27[i]); } - *lookup_data.range_check_19_27 = [((carry_26_col124) + (M31_131072))]; - - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - ((input_pc_col0) + (M31_2)), - ((input_ap_col1) + (ap_update_add_1_col7)), - input_fp_col2, - ]; - }, - ); + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)] diff --git a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs index 445df28b..3ff0956a 100644 --- a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs @@ -2,7 +2,6 @@ #![allow(unused_imports)] use std::iter::zip; -use air_structs_derive::SubComponentInputs; use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -28,7 +27,9 @@ use stwo_prover::core::fields::FieldExpOps; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; +use stwo_prover::core::utils::{ + bit_reverse_coset_to_circle_domain_order, bit_reverse_index, coset_index_to_circle_domain_index, +}; use super::component::{Claim, InteractionClaim}; use crate::components::utils::pack_values; @@ -69,35 +70,14 @@ impl ClaimGenerator { } let packed_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + let (trace, lookup_data) = write_trace_simd( n_rows, packed_inputs, memory_address_to_id_state, memory_id_to_big_state, + verify_instruction_state, ); - if need_padding { - sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); - } - sub_components_inputs - .memory_address_to_id_inputs - .iter() - .for_each(|inputs| { - memory_address_to_id_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .memory_id_to_big_inputs - .iter() - .for_each(|inputs| { - memory_id_to_big_state.add_inputs(&inputs[..n_rows]); - }); - sub_components_inputs - .verify_instruction_inputs - .iter() - .for_each(|inputs| { - verify_instruction_state.add_inputs(&inputs[..n_rows]); - }); - tree_builder.extend_evals(trace.to_evals()); ( @@ -108,17 +88,6 @@ impl ClaimGenerator { }, ) } - - pub fn add_inputs(&self, _inputs: &[InputType]) { - unimplemented!("Implement manually"); - } -} - -#[derive(SubComponentInputs, Uninitialized, IterMut, ParIterMut)] -pub struct SubComponentInputs { - pub memory_address_to_id_inputs: [Vec; 2], - pub memory_id_to_big_inputs: [Vec; 2], - pub verify_instruction_inputs: [Vec; 1], } #[allow(clippy::useless_conversion)] @@ -130,18 +99,14 @@ fn write_trace_simd( inputs: Vec, memory_address_to_id_state: &memory_address_to_id::ClaimGenerator, memory_id_to_big_state: &memory_id_to_big::ClaimGenerator, -) -> ( - ComponentTrace, - SubComponentInputs, - LookupData, -) { + verify_instruction_state: &verify_instruction::ClaimGenerator, +) -> (ComponentTrace, LookupData) { let log_n_packed_rows = inputs.len().ilog2(); let log_size = log_n_packed_rows + LOG_N_LANES; - let (mut trace, mut lookup_data, mut sub_components_inputs) = unsafe { + let (mut trace, mut lookup_data) = unsafe { ( ComponentTrace::::uninitialized(log_size), LookupData::uninitialized(log_n_packed_rows), - SubComponentInputs::uninitialized(log_size), ) }; @@ -158,179 +123,177 @@ fn write_trace_simd( .enumerate() .zip(inputs.into_par_iter()) .zip(lookup_data.par_iter_mut()) - .zip(sub_components_inputs.par_iter_mut().chunks(N_LANES)) - .for_each( - |((((row_index, row), ret_opcode_input), lookup_data), mut sub_components_inputs)| { - let input_tmp_e23a5_0 = ret_opcode_input; - let input_pc_col0 = input_tmp_e23a5_0.pc; - *row[0] = input_pc_col0; - let input_ap_col1 = input_tmp_e23a5_0.ap; - *row[1] = input_ap_col1; - let input_fp_col2 = input_tmp_e23a5_0.fp; - *row[2] = input_fp_col2; + .for_each(|(((row_index, row), ret_opcode_input), lookup_data)| { + let input_tmp_e23a5_0 = ret_opcode_input; + let input_pc_col0 = input_tmp_e23a5_0.pc; + *row[0] = input_pc_col0; + let input_ap_col1 = input_tmp_e23a5_0.ap; + *row[1] = input_ap_col1; + let input_fp_col2 = input_tmp_e23a5_0.fp; + *row[2] = input_fp_col2; - // Decode Instruction. + // Decode Instruction. - let memory_address_to_id_value_tmp_e23a5_1 = - memory_address_to_id_state.deduce_output(input_pc_col0); - let memory_id_to_big_value_tmp_e23a5_2 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_1); - for (i, &input) in ( - input_pc_col0, - [M31_32766, M31_32767, M31_32767], - [ - M31_1, M31_1, M31_0, M31_1, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, - M31_0, M31_0, M31_0, M31_1, M31_0, - ], - ) - .unpack() - .iter() - .enumerate() - { - *sub_components_inputs[i].verify_instruction_inputs[0] = input; - } - *lookup_data.verify_instruction_0 = [ - input_pc_col0, - M31_32766, - M31_32767, - M31_32767, - M31_1, - M31_1, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_1, - M31_0, - ]; + let memory_address_to_id_value_tmp_e23a5_1 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_e23a5_2 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_1); + let verify_instruction_inputs_0 = ( + input_pc_col0, + [M31_32766, M31_32767, M31_32767], + [ + M31_1, M31_1, M31_0, M31_1, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, M31_0, + M31_0, M31_0, M31_1, M31_0, + ], + ) + .unpack(); + *lookup_data.verify_instruction_0 = [ + input_pc_col0, + M31_32766, + M31_32767, + M31_32767, + M31_1, + M31_1, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + ]; - // Read Positive Num Bits 27. + // Read Positive Num Bits 27. - let memory_address_to_id_value_tmp_e23a5_3 = - memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_1))); - let memory_id_to_big_value_tmp_e23a5_4 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_3); - let next_pc_id_col3 = memory_address_to_id_value_tmp_e23a5_3; - *row[3] = next_pc_id_col3; - for (i, &input) in ((input_fp_col2) - (M31_1)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[0] = input; - } - *lookup_data.memory_address_to_id_0 = - [((input_fp_col2) - (M31_1)), next_pc_id_col3]; - let next_pc_limb_0_col4 = memory_id_to_big_value_tmp_e23a5_4.get_m31(0); - *row[4] = next_pc_limb_0_col4; - let next_pc_limb_1_col5 = memory_id_to_big_value_tmp_e23a5_4.get_m31(1); - *row[5] = next_pc_limb_1_col5; - let next_pc_limb_2_col6 = memory_id_to_big_value_tmp_e23a5_4.get_m31(2); - *row[6] = next_pc_limb_2_col6; - for (i, &input) in next_pc_id_col3.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[0] = input; - } - *lookup_data.memory_id_to_big_0 = [ - next_pc_id_col3, - next_pc_limb_0_col4, - next_pc_limb_1_col5, - next_pc_limb_2_col6, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; + let memory_address_to_id_value_tmp_e23a5_3 = + memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_1))); + let memory_id_to_big_value_tmp_e23a5_4 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_3); + let next_pc_id_col3 = memory_address_to_id_value_tmp_e23a5_3; + *row[3] = next_pc_id_col3; + let memory_address_to_id_inputs_0 = ((input_fp_col2) - (M31_1)).unpack(); + *lookup_data.memory_address_to_id_0 = [((input_fp_col2) - (M31_1)), next_pc_id_col3]; + let next_pc_limb_0_col4 = memory_id_to_big_value_tmp_e23a5_4.get_m31(0); + *row[4] = next_pc_limb_0_col4; + let next_pc_limb_1_col5 = memory_id_to_big_value_tmp_e23a5_4.get_m31(1); + *row[5] = next_pc_limb_1_col5; + let next_pc_limb_2_col6 = memory_id_to_big_value_tmp_e23a5_4.get_m31(2); + *row[6] = next_pc_limb_2_col6; + let memory_id_to_big_inputs_0 = next_pc_id_col3.unpack(); + *lookup_data.memory_id_to_big_0 = [ + next_pc_id_col3, + next_pc_limb_0_col4, + next_pc_limb_1_col5, + next_pc_limb_2_col6, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; - // Read Positive Num Bits 27. + // Read Positive Num Bits 27. - let memory_address_to_id_value_tmp_e23a5_5 = - memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_2))); - let memory_id_to_big_value_tmp_e23a5_6 = - memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_5); - let next_fp_id_col7 = memory_address_to_id_value_tmp_e23a5_5; - *row[7] = next_fp_id_col7; - for (i, &input) in ((input_fp_col2) - (M31_2)).unpack().iter().enumerate() { - *sub_components_inputs[i].memory_address_to_id_inputs[1] = input; - } - *lookup_data.memory_address_to_id_1 = - [((input_fp_col2) - (M31_2)), next_fp_id_col7]; - let next_fp_limb_0_col8 = memory_id_to_big_value_tmp_e23a5_6.get_m31(0); - *row[8] = next_fp_limb_0_col8; - let next_fp_limb_1_col9 = memory_id_to_big_value_tmp_e23a5_6.get_m31(1); - *row[9] = next_fp_limb_1_col9; - let next_fp_limb_2_col10 = memory_id_to_big_value_tmp_e23a5_6.get_m31(2); - *row[10] = next_fp_limb_2_col10; - for (i, &input) in next_fp_id_col7.unpack().iter().enumerate() { - *sub_components_inputs[i].memory_id_to_big_inputs[1] = input; - } - *lookup_data.memory_id_to_big_1 = [ - next_fp_id_col7, - next_fp_limb_0_col8, - next_fp_limb_1_col9, - next_fp_limb_2_col10, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - M31_0, - ]; + let memory_address_to_id_value_tmp_e23a5_5 = + memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_2))); + let memory_id_to_big_value_tmp_e23a5_6 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_e23a5_5); + let next_fp_id_col7 = memory_address_to_id_value_tmp_e23a5_5; + *row[7] = next_fp_id_col7; + let memory_address_to_id_inputs_1 = ((input_fp_col2) - (M31_2)).unpack(); + *lookup_data.memory_address_to_id_1 = [((input_fp_col2) - (M31_2)), next_fp_id_col7]; + let next_fp_limb_0_col8 = memory_id_to_big_value_tmp_e23a5_6.get_m31(0); + *row[8] = next_fp_limb_0_col8; + let next_fp_limb_1_col9 = memory_id_to_big_value_tmp_e23a5_6.get_m31(1); + *row[9] = next_fp_limb_1_col9; + let next_fp_limb_2_col10 = memory_id_to_big_value_tmp_e23a5_6.get_m31(2); + *row[10] = next_fp_limb_2_col10; + let memory_id_to_big_inputs_1 = next_fp_id_col7.unpack(); + *lookup_data.memory_id_to_big_1 = [ + next_fp_id_col7, + next_fp_limb_0_col8, + next_fp_limb_1_col9, + next_fp_limb_2_col10, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + M31_0, + ]; - *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; - *lookup_data.opcodes_1 = [ - (((next_pc_limb_0_col4) + ((next_pc_limb_1_col5) * (M31_512))) - + ((next_pc_limb_2_col6) * (M31_262144))), - input_ap_col1, - (((next_fp_limb_0_col8) + ((next_fp_limb_1_col9) * (M31_512))) - + ((next_fp_limb_2_col10) * (M31_262144))), - ]; - }, - ); + *lookup_data.opcodes_0 = [input_pc_col0, input_ap_col1, input_fp_col2]; + *lookup_data.opcodes_1 = [ + (((next_pc_limb_0_col4) + ((next_pc_limb_1_col5) * (M31_512))) + + ((next_pc_limb_2_col6) * (M31_262144))), + input_ap_col1, + (((next_fp_limb_0_col8) + ((next_fp_limb_1_col9) * (M31_512))) + + ((next_fp_limb_2_col10) * (M31_262144))), + ]; + + // Add sub-components inputs. + #[allow(clippy::needless_range_loop)] + for i in 0..N_LANES { + if bit_reverse_index( + coset_index_to_circle_domain_index(row_index * N_LANES + i, log_size), + log_size, + ) < n_rows + { + verify_instruction_state.add_input(&verify_instruction_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_0[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_0[i]); + memory_address_to_id_state.add_input(&memory_address_to_id_inputs_1[i]); + memory_id_to_big_state.add_input(&memory_id_to_big_inputs_1[i]); + } + } + }); - (trace, sub_components_inputs, lookup_data) + (trace, lookup_data) } #[derive(Uninitialized, IterMut, ParIterMut)]