sp1-recursion-core 5.2.4

SP1 is a performant, 100% open-source, contributor-friendly zkVM.
Documentation
#pragma once

#include "prelude.hpp"

namespace sp1_recursion_core_sys::exp_reverse_bits {
template <class F>
__SP1_HOSTDEV__ void event_to_row(const ExpReverseBitsEventFFI<F>& event,
                                  size_t i, ExpReverseBitsLenCols<F>& cols) {
  cols.x = *event.base;
  cols.current_bit = event.exp_ptr[i];
  cols.multiplier = (event.exp_ptr[i] == F::one()) ? *event.base : F::one();
}

template <class F>
__SP1_HOSTDEV__ void instr_to_row(const ExpReverseBitsInstrFFI<F>& instr,
                                  size_t i, size_t len,
                                  ExpReverseBitsLenPreprocessedCols<F>& cols) {
  cols.is_real = F::one();
  cols.iteration_num = F::from_canonical_u32(i);
  cols.is_first = F::from_bool(i == 0);
  cols.is_last = F::from_bool(i == len - 1);

  cols.x_mem.addr = *instr.base;
  cols.x_mem.mult = F::zero() - F::from_bool(i == 0);

  cols.exponent_mem.addr = instr.exp_ptr[i];
  cols.exponent_mem.mult = F::zero() - F::one();

  cols.result_mem.addr = *instr.result;
  cols.result_mem.mult = *instr.mult * F::from_bool(i == len - 1);
}
}  // namespace sp1_recursion_core_sys::exp_reverse_bits