27 const auto poseidon2_perm_mem_INPUT_TAG_DIFF_3 =
28 (in.get(C::poseidon2_perm_mem_input_tag_3_) - constants_MEM_TAG_FF);
29 const auto poseidon2_perm_mem_BATCHED_TAG_CHECK =
30 FF(1) * poseidon2_perm_mem_INPUT_TAG_DIFF_0 +
FF(8) * poseidon2_perm_mem_INPUT_TAG_DIFF_1 +
31 FF(64) * poseidon2_perm_mem_INPUT_TAG_DIFF_2 +
FF(512) * poseidon2_perm_mem_INPUT_TAG_DIFF_3;
35 auto tmp = (in.get(C::poseidon2_perm_mem_read_address_1_) -
36 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_read_address_0_) +
FF(1)));
37 tmp *= scaling_factor;
38 std::get<0>(evals) +=
typename Accumulator::View(tmp);
42 auto tmp = (in.get(C::poseidon2_perm_mem_read_address_2_) -
43 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_read_address_0_) +
FF(2)));
44 tmp *= scaling_factor;
45 std::get<1>(evals) +=
typename Accumulator::View(tmp);
49 auto tmp = (in.get(C::poseidon2_perm_mem_read_address_3_) -
50 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_read_address_0_) +
FF(3)));
51 tmp *= scaling_factor;
52 std::get<2>(evals) +=
typename Accumulator::View(tmp);
56 auto tmp = (in.get(C::poseidon2_perm_mem_write_address_1_) -
57 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_write_address_0_) +
FF(1)));
58 tmp *= scaling_factor;
59 std::get<3>(evals) +=
typename Accumulator::View(tmp);
63 auto tmp = (in.get(C::poseidon2_perm_mem_write_address_2_) -
64 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_write_address_0_) +
FF(2)));
65 tmp *= scaling_factor;
66 std::get<4>(evals) +=
typename Accumulator::View(tmp);
70 auto tmp = (in.get(C::poseidon2_perm_mem_write_address_3_) -
71 in.get(C::poseidon2_perm_mem_sel) * (in.get(C::poseidon2_perm_mem_write_address_0_) +
FF(3)));
72 tmp *= scaling_factor;
73 std::get<5>(evals) +=
typename Accumulator::View(tmp);
77 auto tmp = in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err) *
78 (
FF(1) - in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err));
79 tmp *= scaling_factor;
80 std::get<6>(evals) +=
typename Accumulator::View(tmp);
84 auto tmp = in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err) *
85 (
FF(1) - in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err));
86 tmp *= scaling_factor;
87 std::get<7>(evals) +=
typename Accumulator::View(tmp);
91 auto tmp = in.get(C::poseidon2_perm_mem_sel) *
92 (in.get(C::poseidon2_perm_mem_max_mem_addr) - constants_AVM_HIGHEST_MEM_ADDRESS);
93 tmp *= scaling_factor;
94 std::get<8>(evals) +=
typename Accumulator::View(tmp);
99 (in.get(C::poseidon2_perm_mem_sel_should_read_mem) -
100 in.get(C::poseidon2_perm_mem_sel) * (
FF(1) - in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err)) *
101 (
FF(1) - in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err)));
102 tmp *= scaling_factor;
103 std::get<9>(evals) +=
typename Accumulator::View(tmp);
108 (poseidon2_perm_mem_BATCHED_TAG_CHECK * ((
FF(1) - in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)) *
109 (
FF(1) - in.get(C::poseidon2_perm_mem_batch_tag_inv)) +
110 in.get(C::poseidon2_perm_mem_batch_tag_inv)) -
111 in.get(C::poseidon2_perm_mem_sel_invalid_tag_err));
112 tmp *= scaling_factor;
117 auto tmp = (in.get(C::poseidon2_perm_mem_err) -
118 (
FF(1) - (
FF(1) - in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err)) *
119 (
FF(1) - in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err)) *
120 (
FF(1) - in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))));
121 tmp *= scaling_factor;
126 auto tmp = (in.get(C::poseidon2_perm_mem_sel_should_exec) -
127 in.get(C::poseidon2_perm_mem_sel) * (
FF(1) - in.get(C::poseidon2_perm_mem_err)));
128 tmp *= scaling_factor;