Keep only A as generic on chips (#3271)

This commit is contained in:
Thibaut Schaeffer
2025-09-10 10:13:09 +02:00
committed by GitHub
parent f081b3b749
commit 18935c07f7
3 changed files with 27 additions and 29 deletions

View File

@@ -44,20 +44,20 @@ use powdr_autoprecompiles::{
};
use serde::{Deserialize, Serialize};
pub struct PowdrChip<F: PrimeField32, A: Adapter> {
pub struct PowdrChip<A: Adapter<Field: PrimeField32>> {
pub name: String,
pub opcode: PowdrOpcode,
/// An "executor" for this chip, based on the original instructions in the basic block
pub executor: PowdrExecutor<F>,
pub air: Arc<PowdrAir<F>>,
pub executor: PowdrExecutor<A::Field>,
pub air: Arc<PowdrAir<A::Field>>,
_marker: std::marker::PhantomData<A>,
}
impl<F: PrimeField32, A: Adapter> PowdrChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> PowdrChip<A> {
pub(crate) fn new(
precompile: PowdrPrecompile<F>,
original_airs: OriginalAirs<F>,
memory: Arc<Mutex<OfflineMemory<F>>>,
precompile: PowdrPrecompile<A::Field>,
original_airs: OriginalAirs<A::Field>,
memory: Arc<Mutex<OfflineMemory<A::Field>>>,
base_config: ExtendedVmConfig,
periphery: PowdrPeripheryInstances,
) -> Self {
@@ -77,11 +77,11 @@ impl<F: PrimeField32, A: Adapter> PowdrChip<F, A> {
}
}
impl<F: PrimeField32, A: Adapter> InstructionExecutor<F> for PowdrChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> InstructionExecutor<A::Field> for PowdrChip<A> {
fn execute(
&mut self,
memory: &mut MemoryController<F>,
instruction: &Instruction<F>,
memory: &mut MemoryController<A::Field>,
instruction: &Instruction<A::Field>,
from_state: ExecutionState<u32>,
) -> ExecutionResult<ExecutionState<u32>> {
let &Instruction { opcode, .. } = instruction;
@@ -97,7 +97,7 @@ impl<F: PrimeField32, A: Adapter> InstructionExecutor<F> for PowdrChip<F, A> {
}
}
impl<F: PrimeField32, A: Adapter> ChipUsageGetter for PowdrChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> ChipUsageGetter for PowdrChip<A> {
fn air_name(&self) -> String {
format!("powdr_air_for_opcode_{}", self.opcode.global_opcode()).to_string()
}
@@ -110,7 +110,7 @@ impl<F: PrimeField32, A: Adapter> ChipUsageGetter for PowdrChip<F, A> {
}
}
impl<SC: StarkGenericConfig, A> Chip<SC> for PowdrChip<Val<SC>, A>
impl<SC: StarkGenericConfig, A: Adapter<Field = Val<SC>>> Chip<SC> for PowdrChip<A>
where
Val<SC>: PrimeField32,
A: Adapter<

View File

@@ -37,22 +37,21 @@ use powdr_autoprecompiles::Apc;
use super::air::PlonkAir;
pub struct PlonkChip<F: PrimeField32, A: Adapter> {
pub struct PlonkChip<A: Adapter<Field: PrimeField32>> {
name: String,
opcode: PowdrOpcode,
air: Arc<PlonkAir<F>>,
executor: PowdrExecutor<F>,
apc: Arc<Apc<F, Instr<F>>>,
air: Arc<PlonkAir<A::Field>>,
executor: PowdrExecutor<A::Field>,
apc: Arc<Apc<A::Field, Instr<A::Field>>>,
bus_map: BusMap,
_marker: std::marker::PhantomData<A>,
}
impl<F: PrimeField32, A: Adapter> PlonkChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> PlonkChip<A> {
#[allow(dead_code)]
pub(crate) fn new(
precompile: PowdrPrecompile<F>,
original_airs: OriginalAirs<F>,
memory: Arc<Mutex<OfflineMemory<F>>>,
precompile: PowdrPrecompile<A::Field>,
original_airs: OriginalAirs<A::Field>,
memory: Arc<Mutex<OfflineMemory<A::Field>>>,
base_config: ExtendedVmConfig,
periphery: PowdrPeripheryInstances,
bus_map: BusMap,
@@ -76,16 +75,15 @@ impl<F: PrimeField32, A: Adapter> PlonkChip<F, A> {
executor,
bus_map,
apc,
_marker: std::marker::PhantomData,
}
}
}
impl<F: PrimeField32, A: Adapter> InstructionExecutor<F> for PlonkChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> InstructionExecutor<A::Field> for PlonkChip<A> {
fn execute(
&mut self,
memory: &mut MemoryController<F>,
instruction: &Instruction<F>,
memory: &mut MemoryController<A::Field>,
instruction: &Instruction<A::Field>,
from_state: ExecutionState<u32>,
) -> ExecutionResult<ExecutionState<u32>> {
let &Instruction { opcode, .. } = instruction;
@@ -101,7 +99,7 @@ impl<F: PrimeField32, A: Adapter> InstructionExecutor<F> for PlonkChip<F, A> {
}
}
impl<F: PrimeField32, A: Adapter> ChipUsageGetter for PlonkChip<F, A> {
impl<A: Adapter<Field: PrimeField32>> ChipUsageGetter for PlonkChip<A> {
fn air_name(&self) -> String {
format!("powdr_plonk_air_for_opcode_{}", self.opcode.global_opcode()).to_string()
}
@@ -114,7 +112,7 @@ impl<F: PrimeField32, A: Adapter> ChipUsageGetter for PlonkChip<F, A> {
}
}
impl<SC: StarkGenericConfig, A> Chip<SC> for PlonkChip<Val<SC>, A>
impl<SC: StarkGenericConfig, A: Adapter<Field = Val<SC>>> Chip<SC> for PlonkChip<A>
where
Val<SC>: PrimeField32,
A: Adapter<

View File

@@ -100,8 +100,8 @@ pub enum PowdrExecutor<
AirId = String,
> + 'static,
> {
Powdr(PowdrChip<F, A>),
Plonk(PlonkChip<F, A>),
Powdr(PowdrChip<A>),
Plonk(PlonkChip<A>),
}
impl<F: PrimeField32, A> PowdrExecutor<F, A>