diff --git a/crates/sub_protocols/src/logup.rs b/crates/sub_protocols/src/logup.rs index bb24613d..c7b5a465 100644 --- a/crates/sub_protocols/src/logup.rs +++ b/crates/sub_protocols/src/logup.rs @@ -106,9 +106,7 @@ pub fn prove_generic_logup( if *table == Table::execution() { // 0] bytecode lookup let pc_column = &trace.base[COL_PC]; - let bytecode_columns = trace.base[N_RUNTIME_COLUMNS..][..N_INSTRUCTION_COLUMNS] - .iter() - .collect::>(); + let bytecode_columns = &trace.base[N_RUNTIME_COLUMNS..][..N_INSTRUCTION_COLUMNS]; numerators[offset..][..1 << log_n_rows].par_iter_mut().for_each(|num| { *num = EF::ONE; }); // TODO embedding overhead @@ -116,11 +114,11 @@ pub fn prove_generic_logup( .par_iter_mut() .enumerate() .for_each(|(i, denom)| { - let mut data = Vec::with_capacity(1 + N_INSTRUCTION_COLUMNS); - for col in &bytecode_columns { - data.push(col[i]); + let mut data = [F::ZERO; N_INSTRUCTION_COLUMNS + 1]; + for j in 0..N_INSTRUCTION_COLUMNS { + data[j] = bytecode_columns[j][i]; } - data.push(pc_column[i]); + data[N_INSTRUCTION_COLUMNS] = pc_column[i]; *denom = c - finger_print(F::from_usize(LOGUP_BYTECODE_DOMAINSEP), &data, alphas_eq_poly) }); offset += 1 << log_n_rows; @@ -142,15 +140,16 @@ pub fn prove_generic_logup( .enumerate() .for_each(|(i, denom)| { *denom = { + let mut bus_data = [F::ZERO; N_INSTRUCTION_COLUMNS]; + for (j, entry) in bus.data.iter().enumerate() { + bus_data[j] = match entry { + BusData::Column(col) => trace.base[*col][i], + BusData::Constant(val) => F::from_usize(*val), + }; + } c + finger_print( F::from_usize(LOGUP_PRECOMPILE_DOMAINSEP), - &bus.data - .iter() - .map(|entry| match entry { - BusData::Column(col) => trace.base[*col][i], - BusData::Constant(val) => F::from_usize(*val), - }) - .collect::>(), + &bus_data[..bus.data.len()], alphas_eq_poly, ) }