use crsn::asm::data::{Rd, Wr}; /// A low level instruction #[derive(Clone, Debug, Eq, PartialEq)] pub enum ArithOp { Test { a: Rd }, Compare { a: Rd, b: Rd }, RangeTest { val: Rd, a: Rd, b: Rd }, Add { dst: Wr, a: Rd, b: Rd }, Sub { dst: Wr, a: Rd, b: Rd }, Mul { dst: Wr, a: Rd, b: Rd }, Div { dst: Wr, rem: Wr, a: Rd, div: Rd }, // "Mod" is functionally equivalent to "Div" with the result discarded, // but status flags are updated by the remainder Mod { dst: Wr, a: Rd, div: Rd }, And { dst: Wr, a: Rd, b: Rd }, Or { dst: Wr, a: Rd, b: Rd }, Xor { dst: Wr, a: Rd, b: Rd }, Cpl { dst: Wr, a: Rd }, Rol { dst: Wr, a: Rd, n: Rd }, // Rotate (with wrap-around) Ror { dst: Wr, a: Rd, n: Rd }, Lsl { dst: Wr, a: Rd, n: Rd }, // Shift Lsr { dst: Wr, a: Rd, n: Rd }, Asr { dst: Wr, a: Rd, n: Rd }, }