mod bytecode;
mod exec;
mod flags;
mod instr;
pub mod opcodes;
pub use bytecode::{Bytecode, BytecodeError};
pub use exec::{ExecStep, InstructionSet};
pub use flags::{
DeleteFlag, ExtendFlag, Flag, FloatEqFlag, InsertFlag, IntFlags, MergeFlag, NoneEqFlag,
ParseFlagError, RoundingFlag, SignFlag, SplitFlag,
};
pub use instr::{
ArithmeticOp, BitwiseOp, BytesOp, CmpOp, ControlFlowOp, Curve25519Op, DigestOp, Instr, MoveOp,
PutOp, ReservedOp, Secp256k1Op,
};
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)]
#[non_exhaustive]
#[derive(Default)]
pub enum Isa {
#[display("ALU")]
#[default]
Alu,
#[display("FLOAT")]
Float,
#[display("BPDIGEST")]
BpDigest,
#[display("SECP256")]
Secp256k1,
#[display("ED25519")]
Curve25519,
#[display("ALURE")]
AluRe,
#[display("BP")]
Bp,
#[display("RGB")]
Rgb,
#[display("LNP")]
Lnp,
#[display("SIMD")]
Simd,
#[display("REBICA")]
Rebica,
}
impl Isa {
pub const fn all() -> [Isa; 11] {
[
Isa::Alu,
Isa::Float,
Isa::BpDigest,
Isa::Secp256k1,
Isa::Curve25519,
Isa::AluRe,
Isa::Bp,
Isa::Rgb,
Isa::Lnp,
Isa::Simd,
Isa::Rebica,
]
}
}