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) => {
15                IndexTriple::Const(*index, F::from_usize(self.offset), F::from_usize(self.size))
16            }
17            RVar::Val(index) => IndexTriple::Var(
18                index.fp(),
19                F::from_usize(self.offset),
20                F::from_usize(self.size),
21            ),
22        }
23    }
24}
25
26/// A value or a constant.
27pub enum ValueOrConst<F, EF> {
28    Val(i32),
29    ExtVal(i32),
30    Const(F),
31    ExtConst(EF),
32}