39 lines
1.2 KiB
Rust
Raw Normal View History

2022-06-14 17:38:42 -07:00
mod eq_iszero;
mod not;
use plonky2::field::extension::Extendable;
use plonky2::field::packed::PackedField;
use plonky2::hash::hash_types::RichField;
use plonky2::iop::ext_target::ExtensionTarget;
use crate::constraint_consumer::{ConstraintConsumer, RecursiveConstraintConsumer};
2022-06-28 02:28:25 +02:00
use crate::cpu::registers;
2022-06-28 02:28:25 +02:00
pub fn generate<F: RichField>(lv: &mut [F; registers::NUM_CPU_COLUMNS]) {
let cycle_filter = lv[registers::IS_CPU_CYCLE].to_canonical_u64();
if cycle_filter == 0 {
return;
}
assert_eq!(cycle_filter, 1);
not::generate(lv);
2022-06-14 17:38:42 -07:00
eq_iszero::generate(lv);
}
pub fn eval_packed<P: PackedField>(
2022-06-28 02:28:25 +02:00
lv: &[P; registers::NUM_CPU_COLUMNS],
yield_constr: &mut ConstraintConsumer<P>,
) {
not::eval_packed(lv, yield_constr);
2022-06-14 17:38:42 -07:00
eq_iszero::eval_packed(lv, yield_constr);
}
pub fn eval_ext_circuit<F: RichField + Extendable<D>, const D: usize>(
builder: &mut plonky2::plonk::circuit_builder::CircuitBuilder<F, D>,
2022-06-28 02:28:25 +02:00
lv: &[ExtensionTarget<D>; registers::NUM_CPU_COLUMNS],
yield_constr: &mut RecursiveConstraintConsumer<F, D>,
) {
not::eval_ext_circuit(builder, lv, yield_constr);
2022-06-14 17:38:42 -07:00
eq_iszero::eval_ext_circuit(builder, lv, yield_constr);
}