Files
pim-rs/pim-isa/src/lib.rs

77 lines
1.3 KiB
Rust

#![no_std]
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum Instruction {
NOP,
EXIT,
JUMP {
offset: i16,
count: u16,
},
MOV {
src: File,
dst: File,
},
FILL {
src: File,
dst: File,
},
ADD {
src0: File,
src1: File,
dst: File,
aam: bool,
},
MUL {
src0: File,
src1: File,
dst: File,
aam: bool,
},
MAC {
src0: File,
src1: File,
src2: File,
dst: File,
aam: bool,
},
MAD {
src0: File,
src1: File,
src2: File,
dst: File,
aam: bool,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum File {
GrfA { index: u8 },
GrfB { index: u8 },
SrfM { index: u8 },
SrfA { index: u8 },
Bank,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Kernel(pub [Instruction; 32]);
impl Kernel {
pub const NOP: Kernel = Kernel([Instruction::NOP; 32]);
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PimConfig {
pub bank_mode: BankMode,
pub kernel: Kernel,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum BankMode {
SingleBank,
AllBank,
PimAllBank,
}