use p3_field::PrimeField32;
use serde::{Deserialize, Serialize};
use crate::air::Block;
use super::{Opcode, D};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Instruction<F> {
pub opcode: Opcode,
pub op_a: F,
pub op_b: Block<F>,
pub op_c: Block<F>,
pub offset_imm: F,
pub size_imm: F,
pub imm_b: bool,
pub imm_c: bool,
pub debug: String,
}
impl<F: PrimeField32> Instruction<F> {
#[allow(clippy::too_many_arguments)]
pub fn new(
opcode: Opcode,
op_a: F,
op_b: [F; D],
op_c: [F; D],
offset_imm: F,
size_imm: F,
imm_b: bool,
imm_c: bool,
debug: String,
) -> Self {
Self {
opcode,
op_a,
op_b: Block::from(op_b),
op_c: Block::from(op_c),
offset_imm,
size_imm,
imm_b,
imm_c,
debug,
}
}
pub fn dummy() -> Self {
Instruction::new(
Opcode::ADD,
F::zero(),
[F::zero(); 4],
[F::zero(); 4],
F::zero(),
F::zero(),
false,
false,
"".to_string(),
)
}
}