openvm_native_compiler/asm/
utils.rs

1use openvm_stark_backend::p3_field::PrimeField32;
2
3use crate::prelude::{MemIndex, RVar};
4
5/// Represents a memory index triple.
6pub enum IndexTriple<F> {
7    Var(i32, F, F),
8    Const(F, F, F),
9}
10
11impl<F: PrimeField32> MemIndex<F> {
12    pub fn fp(&self) -> IndexTriple<F> {
13        match &self.index {
14            RVar::Const(index) => IndexTriple::Const(
15                *index,
16                F::from_canonical_usize(self.offset),
17                F::from_canonical_usize(self.size),
18            ),
19            RVar::Val(index) => IndexTriple::Var(
20                index.fp(),
21                F::from_canonical_usize(self.offset),
22                F::from_canonical_usize(self.size),
23            ),
24        }
25    }
26}
27
28/// A value or a constant.
29pub enum ValueOrConst<F, EF> {
30    Val(i32),
31    ExtVal(i32),
32    Const(F),
33    ExtConst(EF),
34}