@@ -10,19 +10,19 @@ template <typename FF_> class memImpl {
10
10
public:
11
11
using FF = FF_;
12
12
13
- static constexpr std::array<size_t , 52 > SUBRELATION_PARTIAL_LENGTHS = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
14
- 2 , 3 , 4 , 3 , 4 , 3 , 3 , 2 , 3 , 3 , 4 , 4 , 4 ,
15
- 4 , 2 , 6 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
16
- 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
13
+ static constexpr std::array<size_t , 53 > SUBRELATION_PARTIAL_LENGTHS = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 ,
14
+ 3 , 4 , 3 , 4 , 3 , 3 , 2 , 3 , 3 , 4 , 4 , 4 , 4 , 4 ,
15
+ 2 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
16
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
17
17
18
18
template <typename ContainerOverSubrelations, typename AllEntities>
19
19
void static accumulate (ContainerOverSubrelations& evals,
20
20
const AllEntities& new_term,
21
21
[[maybe_unused]] const RelationParameters<FF>&,
22
22
[[maybe_unused]] const FF& scaling_factor)
23
23
{
24
+ const auto constants_MEM_TAG_FF = FF (0 );
24
25
const auto constants_MEM_TAG_U32 = FF (4 );
25
- const auto constants_MEM_TAG_FF = FF (7 );
26
26
const auto mem_SEL_DIRECT_MEM_OP_A =
27
27
((new_term.mem_sel_op_a + new_term.mem_sel_op_poseidon_read_a ) + new_term.mem_sel_op_poseidon_write_a );
28
28
const auto mem_SEL_DIRECT_MEM_OP_B =
@@ -218,156 +218,163 @@ template <typename FF_> class memImpl {
218
218
}
219
219
{
220
220
using Accumulator = typename std::tuple_element_t <27 , ContainerOverSubrelations>;
221
- auto tmp = (new_term.mem_skip_check_tag - new_term.mem_sel_op_slice );
221
+ auto tmp = ((new_term.mem_lastAccess * (FF (1 ) - new_term.mem_rw_shift )) *
222
+ (new_term.mem_tag_shift - constants_MEM_TAG_FF));
222
223
tmp *= scaling_factor;
223
224
std::get<27 >(evals) += typename Accumulator::View (tmp);
224
225
}
225
226
{
226
227
using Accumulator = typename std::tuple_element_t <28 , ContainerOverSubrelations>;
227
- auto tmp = (((new_term.mem_tag * (FF (1 ) - new_term.mem_skip_check_tag )) * (FF (1 ) - new_term.mem_rw )) *
228
- (((new_term.mem_r_in_tag - new_term.mem_tag ) * (FF (1 ) - new_term.mem_one_min_inv )) -
229
- new_term.mem_tag_err ));
228
+ auto tmp = (new_term.mem_skip_check_tag - new_term.mem_sel_op_slice );
230
229
tmp *= scaling_factor;
231
230
std::get<28 >(evals) += typename Accumulator::View (tmp);
232
231
}
233
232
{
234
233
using Accumulator = typename std::tuple_element_t <29 , ContainerOverSubrelations>;
235
- auto tmp = ((new_term.mem_tag * (FF (1 ) - new_term.mem_tag_err )) * new_term.mem_one_min_inv );
234
+ auto tmp = (((FF (1 ) - new_term.mem_skip_check_tag ) * (FF (1 ) - new_term.mem_rw )) *
235
+ (((new_term.mem_r_in_tag - new_term.mem_tag ) * (FF (1 ) - new_term.mem_one_min_inv )) -
236
+ new_term.mem_tag_err ));
236
237
tmp *= scaling_factor;
237
238
std::get<29 >(evals) += typename Accumulator::View (tmp);
238
239
}
239
240
{
240
241
using Accumulator = typename std::tuple_element_t <30 , ContainerOverSubrelations>;
241
- auto tmp = ((new_term. mem_skip_check_tag + new_term.mem_rw ) * new_term.mem_tag_err );
242
+ auto tmp = ((FF ( 1 ) - new_term.mem_tag_err ) * new_term.mem_one_min_inv );
242
243
tmp *= scaling_factor;
243
244
std::get<30 >(evals) += typename Accumulator::View (tmp);
244
245
}
245
246
{
246
247
using Accumulator = typename std::tuple_element_t <31 , ContainerOverSubrelations>;
247
- auto tmp = (new_term.mem_rw * ( new_term.mem_w_in_tag - new_term.mem_tag ) );
248
+ auto tmp = (( new_term.mem_skip_check_tag + new_term.mem_rw ) * new_term.mem_tag_err );
248
249
tmp *= scaling_factor;
249
250
std::get<31 >(evals) += typename Accumulator::View (tmp);
250
251
}
251
252
{
252
253
using Accumulator = typename std::tuple_element_t <32 , ContainerOverSubrelations>;
253
- auto tmp = (new_term.mem_rw * new_term.mem_tag_err );
254
+ auto tmp = (new_term.mem_rw * ( new_term.mem_w_in_tag - new_term. mem_tag ) );
254
255
tmp *= scaling_factor;
255
256
std::get<32 >(evals) += typename Accumulator::View (tmp);
256
257
}
257
258
{
258
259
using Accumulator = typename std::tuple_element_t <33 , ContainerOverSubrelations>;
259
- auto tmp = (new_term.mem_sel_resolve_ind_addr_a * ( new_term.mem_r_in_tag - constants_MEM_TAG_U32) );
260
+ auto tmp = (new_term.mem_rw * new_term.mem_tag_err );
260
261
tmp *= scaling_factor;
261
262
std::get<33 >(evals) += typename Accumulator::View (tmp);
262
263
}
263
264
{
264
265
using Accumulator = typename std::tuple_element_t <34 , ContainerOverSubrelations>;
265
- auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
266
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_a * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
266
267
tmp *= scaling_factor;
267
268
std::get<34 >(evals) += typename Accumulator::View (tmp);
268
269
}
269
270
{
270
271
using Accumulator = typename std::tuple_element_t <35 , ContainerOverSubrelations>;
271
- auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
272
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
272
273
tmp *= scaling_factor;
273
274
std::get<35 >(evals) += typename Accumulator::View (tmp);
274
275
}
275
276
{
276
277
using Accumulator = typename std::tuple_element_t <36 , ContainerOverSubrelations>;
277
- auto tmp = (new_term.mem_sel_resolve_ind_addr_d * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
278
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
278
279
tmp *= scaling_factor;
279
280
std::get<36 >(evals) += typename Accumulator::View (tmp);
280
281
}
281
282
{
282
283
using Accumulator = typename std::tuple_element_t <37 , ContainerOverSubrelations>;
283
- auto tmp = (new_term.mem_sel_resolve_ind_addr_a * new_term.mem_rw );
284
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_d * ( new_term.mem_r_in_tag - constants_MEM_TAG_U32) );
284
285
tmp *= scaling_factor;
285
286
std::get<37 >(evals) += typename Accumulator::View (tmp);
286
287
}
287
288
{
288
289
using Accumulator = typename std::tuple_element_t <38 , ContainerOverSubrelations>;
289
- auto tmp = (new_term.mem_sel_resolve_ind_addr_b * new_term.mem_rw );
290
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_a * new_term.mem_rw );
290
291
tmp *= scaling_factor;
291
292
std::get<38 >(evals) += typename Accumulator::View (tmp);
292
293
}
293
294
{
294
295
using Accumulator = typename std::tuple_element_t <39 , ContainerOverSubrelations>;
295
- auto tmp = (new_term.mem_sel_resolve_ind_addr_c * new_term.mem_rw );
296
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_b * new_term.mem_rw );
296
297
tmp *= scaling_factor;
297
298
std::get<39 >(evals) += typename Accumulator::View (tmp);
298
299
}
299
300
{
300
301
using Accumulator = typename std::tuple_element_t <40 , ContainerOverSubrelations>;
301
- auto tmp = (new_term.mem_sel_resolve_ind_addr_d * new_term.mem_rw );
302
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_c * new_term.mem_rw );
302
303
tmp *= scaling_factor;
303
304
std::get<40 >(evals) += typename Accumulator::View (tmp);
304
305
}
305
306
{
306
307
using Accumulator = typename std::tuple_element_t <41 , ContainerOverSubrelations>;
307
- auto tmp = (new_term.mem_sel_op_slice * ( new_term.mem_w_in_tag - constants_MEM_TAG_FF) );
308
+ auto tmp = (new_term.mem_sel_resolve_ind_addr_d * new_term.mem_rw );
308
309
tmp *= scaling_factor;
309
310
std::get<41 >(evals) += typename Accumulator::View (tmp);
310
311
}
311
312
{
312
313
using Accumulator = typename std::tuple_element_t <42 , ContainerOverSubrelations>;
313
- auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
314
+ auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
314
315
tmp *= scaling_factor;
315
316
std::get<42 >(evals) += typename Accumulator::View (tmp);
316
317
}
317
318
{
318
319
using Accumulator = typename std::tuple_element_t <43 , ContainerOverSubrelations>;
319
- auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
320
+ auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
320
321
tmp *= scaling_factor;
321
322
std::get<43 >(evals) += typename Accumulator::View (tmp);
322
323
}
323
324
{
324
325
using Accumulator = typename std::tuple_element_t <44 , ContainerOverSubrelations>;
325
- auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
326
+ auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
326
327
tmp *= scaling_factor;
327
328
std::get<44 >(evals) += typename Accumulator::View (tmp);
328
329
}
329
330
{
330
331
using Accumulator = typename std::tuple_element_t <45 , ContainerOverSubrelations>;
331
- auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
332
+ auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
332
333
tmp *= scaling_factor;
333
334
std::get<45 >(evals) += typename Accumulator::View (tmp);
334
335
}
335
336
{
336
337
using Accumulator = typename std::tuple_element_t <46 , ContainerOverSubrelations>;
337
- auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
338
+ auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
338
339
tmp *= scaling_factor;
339
340
std::get<46 >(evals) += typename Accumulator::View (tmp);
340
341
}
341
342
{
342
343
using Accumulator = typename std::tuple_element_t <47 , ContainerOverSubrelations>;
343
- auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
344
+ auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
344
345
tmp *= scaling_factor;
345
346
std::get<47 >(evals) += typename Accumulator::View (tmp);
346
347
}
347
348
{
348
349
using Accumulator = typename std::tuple_element_t <48 , ContainerOverSubrelations>;
349
- auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
350
+ auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
350
351
tmp *= scaling_factor;
351
352
std::get<48 >(evals) += typename Accumulator::View (tmp);
352
353
}
353
354
{
354
355
using Accumulator = typename std::tuple_element_t <49 , ContainerOverSubrelations>;
355
- auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
356
+ auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
356
357
tmp *= scaling_factor;
357
358
std::get<49 >(evals) += typename Accumulator::View (tmp);
358
359
}
359
360
{
360
361
using Accumulator = typename std::tuple_element_t <50 , ContainerOverSubrelations>;
361
- auto tmp = (new_term.mem_sel_op_poseidon_write_d * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
362
+ auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
362
363
tmp *= scaling_factor;
363
364
std::get<50 >(evals) += typename Accumulator::View (tmp);
364
365
}
365
366
{
366
367
using Accumulator = typename std::tuple_element_t <51 , ContainerOverSubrelations>;
367
- auto tmp = (( new_term.mem_sel_mov_ia_to_ic + new_term.mem_sel_mov_ib_to_ic ) * new_term. mem_tag_err );
368
+ auto tmp = (new_term.mem_sel_op_poseidon_write_d * ( new_term.mem_r_in_tag - constants_MEM_TAG_FF) );
368
369
tmp *= scaling_factor;
369
370
std::get<51 >(evals) += typename Accumulator::View (tmp);
370
371
}
372
+ {
373
+ using Accumulator = typename std::tuple_element_t <52 , ContainerOverSubrelations>;
374
+ auto tmp = ((new_term.mem_sel_mov_ia_to_ic + new_term.mem_sel_mov_ib_to_ic ) * new_term.mem_tag_err );
375
+ tmp *= scaling_factor;
376
+ std::get<52 >(evals) += typename Accumulator::View (tmp);
377
+ }
371
378
}
372
379
};
373
380
@@ -399,16 +406,18 @@ template <typename FF> class mem : public Relation<memImpl<FF>> {
399
406
case 26 :
400
407
return " MEM_ZERO_INIT" ;
401
408
case 27 :
402
- return " SKIP_CHECK_TAG " ;
409
+ return " MEM_ZERO_INIT_TAG_FF " ;
403
410
case 28 :
404
- return " MEM_IN_TAG_CONSISTENCY_1 " ;
411
+ return " SKIP_CHECK_TAG " ;
405
412
case 29 :
406
- return " MEM_IN_TAG_CONSISTENCY_2 " ;
413
+ return " MEM_IN_TAG_CONSISTENCY_1 " ;
407
414
case 30 :
415
+ return " MEM_IN_TAG_CONSISTENCY_2" ;
416
+ case 31 :
408
417
return " NO_TAG_ERR_WRITE_OR_SKIP" ;
409
- case 32 :
418
+ case 33 :
410
419
return " NO_TAG_ERR_WRITE" ;
411
- case 51 :
420
+ case 52 :
412
421
return " MOV_SAME_TAG" ;
413
422
}
414
423
return std::to_string (index );
0 commit comments