zkevm_opcode_defs 0.153.11

ZKsync EraVM opcode definitions
Documentation
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum Condition {
    Always = 0,
    Gt,
    Lt,
    Eq,
    Ge,
    Le,
    Ne,
    GtOrLt,
}

pub const CONDITIONAL_BITS_WIDTH: usize = 3;

impl Condition {
    const NUM_VARIANTS: usize = 8;

    pub fn materialize_variant(idx: usize) -> Self {
        assert!(idx < Self::NUM_VARIANTS);

        match idx {
            0 => Condition::Always,
            1 => Condition::Gt,
            2 => Condition::Lt,
            3 => Condition::Eq,
            4 => Condition::Ge,
            5 => Condition::Le,
            6 => Condition::Ne,
            7 => Condition::GtOrLt,
            _ => panic!("unknown variant"),
        }
    }

    pub const fn variant_index(&self) -> usize {
        match self {
            Condition::Always => 0,
            Condition::Gt => 1,
            Condition::Lt => 2,
            Condition::Eq => 3,
            Condition::Ge => 4,
            Condition::Le => 5,
            Condition::Ne => 6,
            Condition::GtOrLt => 7,
        }
    }
}

pub const ALL_CONDITIONS: [Condition; 1 << CONDITIONAL_BITS_WIDTH] = [
    Condition::Always,
    Condition::Gt,
    Condition::Lt,
    Condition::Eq,
    Condition::Ge,
    Condition::Le,
    Condition::Ne,
    Condition::GtOrLt,
];