Skip to main content

asmkit/core/
emitter.rs

1use crate::AsmError;
2
3use super::operand::Operand;
4
5const NOREG: Operand = Operand::new();
6
7pub trait Emitter {
8    fn emit(&mut self, opcode: i64, op0: &Operand, op1: &Operand, op2: &Operand, op3: &Operand);
9
10    fn emit_n(&mut self, opcode: i64, ops: &[&Operand]) {
11        match ops {
12            [op0] => self.emit(opcode, op0, &NOREG, &NOREG, &NOREG),
13
14            [op0, op1] => self.emit(opcode, op0, op1, &NOREG, &NOREG),
15
16            [op0, op1, op2] => self.emit(opcode, op0, op1, op2, &NOREG),
17            [op0, op1, op2, op3] => self.emit(opcode, op0, op1, op2, op3),
18            _ => unreachable!(),
19        }
20    }
21
22    fn last_error(&self) -> Option<AsmError> {
23        None
24    }
25}