use crate::components::prelude::*;
#[derive(Copy, Clone, Serialize, Deserialize, CairoSerialize)]
pub struct DecodeInstructionBc3Cd {}
impl DecodeInstructionBc3Cd {
#[allow(unused_parens)]
#[allow(clippy::double_parens)]
#[allow(non_snake_case)]
#[allow(clippy::unused_unit)]
#[allow(unused_variables)]
#[allow(clippy::too_many_arguments)]
pub fn evaluate<E: EvalAtRow>(
[decode_instruction_bc3cd_input_pc]: [E::F; 1],
offset0_col0: E::F,
offset1_col1: E::F,
offset2_col2: E::F,
dst_base_fp_col3: E::F,
op0_base_fp_col4: E::F,
op1_imm_col5: E::F,
op1_base_fp_col6: E::F,
ap_update_add_1_col7: E::F,
common_lookup_elements: &relations::CommonLookupElements,
eval: &mut E,
) -> [E::F; 4] {
let M31_1 = E::F::from(M31::from(1));
let M31_128 = E::F::from(M31::from(128));
let M31_16 = E::F::from(M31::from(16));
let M31_1719106205 = E::F::from(M31::from(1719106205));
let M31_256 = E::F::from(M31::from(256));
let M31_32 = E::F::from(M31::from(32));
let M31_32768 = E::F::from(M31::from(32768));
let M31_64 = E::F::from(M31::from(64));
let M31_8 = E::F::from(M31::from(8));
eval.add_constraint(
(dst_base_fp_col3.clone() * (M31_1.clone() - dst_base_fp_col3.clone())),
);
eval.add_constraint(
(op0_base_fp_col4.clone() * (M31_1.clone() - op0_base_fp_col4.clone())),
);
eval.add_constraint((op1_imm_col5.clone() * (M31_1.clone() - op1_imm_col5.clone())));
eval.add_constraint(
(op1_base_fp_col6.clone() * (M31_1.clone() - op1_base_fp_col6.clone())),
);
let op1_base_ap_tmp_bc3cd_9 = eval
.add_intermediate(((M31_1.clone() - op1_imm_col5.clone()) - op1_base_fp_col6.clone()));
eval.add_constraint(
(op1_base_ap_tmp_bc3cd_9.clone() * (M31_1.clone() - op1_base_ap_tmp_bc3cd_9.clone())),
);
eval.add_constraint(
(ap_update_add_1_col7.clone() * (M31_1.clone() - ap_update_add_1_col7.clone())),
);
eval.add_to_relation(RelationEntry::new(
common_lookup_elements,
E::EF::from(M31_1.clone()),
&[
M31_1719106205.clone(),
decode_instruction_bc3cd_input_pc.clone(),
offset0_col0.clone(),
offset1_col1.clone(),
offset2_col2.clone(),
((((((dst_base_fp_col3.clone() * M31_8.clone())
+ (op0_base_fp_col4.clone() * M31_16.clone()))
+ (op1_imm_col5.clone() * M31_32.clone()))
+ (op1_base_fp_col6.clone() * M31_64.clone()))
+ (op1_base_ap_tmp_bc3cd_9.clone() * M31_128.clone()))
+ M31_256.clone()),
((ap_update_add_1_col7.clone() * M31_32.clone()) + M31_256.clone()),
],
));
[
(offset0_col0.clone() - M31_32768.clone()),
(offset1_col1.clone() - M31_32768.clone()),
(offset2_col2.clone() - M31_32768.clone()),
op1_base_ap_tmp_bc3cd_9.clone(),
]
}
}