You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.6 KiB
76 lines
1.6 KiB
4 years ago
|
use thiserror::Error;
|
||
4 years ago
|
|
||
4 years ago
|
use crate::asm::data::literal::{DebugMsg, Label, RoutineName};
|
||
|
use crate::asm::data::Register;
|
||
4 years ago
|
|
||
4 years ago
|
#[derive(Error, Debug)]
|
||
4 years ago
|
pub enum Fault {
|
||
|
#[error("Bad instruction at addr {addr:#10x}: {cause}")]
|
||
|
BadInstruction {
|
||
4 years ago
|
addr: u32,
|
||
4 years ago
|
cause: InstrError,
|
||
|
},
|
||
|
|
||
|
#[error("Runtime hit a barrier instruction: {msg}")]
|
||
|
Barrier {
|
||
|
msg: DebugMsg,
|
||
|
},
|
||
|
|
||
|
#[error("User fault: {msg}")]
|
||
|
FaultInstr {
|
||
|
msg: DebugMsg,
|
||
|
},
|
||
|
|
||
4 years ago
|
// #[error("Memory region {area:?} is locked by thread {owner:?}")]
|
||
|
// MemoryLocked {
|
||
|
// area: MemorySpan,
|
||
|
// owner: ThreadToken
|
||
|
// },
|
||
|
//
|
||
|
// #[error("Memory claim {claim:?} owned by thread {owner:?} does not exist")]
|
||
|
// ClaimNotExist {
|
||
|
// claim: ClaimId,
|
||
|
// owner: ThreadToken
|
||
|
// },
|
||
4 years ago
|
|
||
|
#[error("Register does not exist: {reg:?}")]
|
||
|
RegisterNotExist {
|
||
|
reg: Register,
|
||
|
},
|
||
|
|
||
|
#[error("Register is read-only: {reg:?}")]
|
||
|
RegisterNotWritable {
|
||
|
reg: Register,
|
||
|
},
|
||
4 years ago
|
|
||
|
#[error("Called undefined routine: {routine}")]
|
||
|
NoSuchRoutine {
|
||
|
routine: RoutineName,
|
||
|
},
|
||
|
|
||
|
#[error("Jump to undefined far label: {label}")]
|
||
|
NoSuchFarLabel {
|
||
|
label: Label,
|
||
|
},
|
||
|
|
||
|
#[error("Crossed a barrier: {msg}")]
|
||
|
JumpThroughBarrier {
|
||
|
msg: DebugMsg,
|
||
|
},
|
||
|
|
||
|
#[error("Call stack underflow")]
|
||
|
CallStackUnderflow,
|
||
4 years ago
|
}
|
||
|
|
||
4 years ago
|
#[derive(Error, Debug)]
|
||
4 years ago
|
pub enum InstrError {
|
||
|
#[error("Instruction not recognized")]
|
||
|
UnknownInstruction,
|
||
|
|
||
|
#[error("Invalid bit span")]
|
||
|
BadBitSpan,
|
||
|
|
||
|
#[error("Operands data size differs")]
|
||
|
UnevenOperandSize,
|
||
|
}
|