Add INTERRUPT_ENABLE flag, fix bug with register preservation
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -4,5 +4,6 @@ bitflags! {
|
|||||||
pub struct Flags: u64 {
|
pub struct Flags: u64 {
|
||||||
const HALT = 1;
|
const HALT = 1;
|
||||||
const COMPARE = 1 << 1;
|
const COMPARE = 1 << 1;
|
||||||
|
const INTERRUPT_ENABLE = 1 << 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,7 +229,6 @@ impl State {
|
|||||||
self.push(Source::Reg(reg))?;
|
self.push(Source::Reg(reg))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let sp = self.sp();
|
let sp = self.sp();
|
||||||
self.set_reg_unchecked(FP, sp - Self::INTERRUPT_REG_SPACE);
|
self.set_reg_unchecked(FP, sp - Self::INTERRUPT_REG_SPACE);
|
||||||
self.set_reg_unchecked(R00, index as u64);
|
self.set_reg_unchecked(R00, index as u64);
|
||||||
@@ -246,7 +245,8 @@ impl State {
|
|||||||
self.set_reg_unchecked(SP, sp);
|
self.set_reg_unchecked(SP, sp);
|
||||||
|
|
||||||
// pop R31 .. R0
|
// pop R31 .. R0
|
||||||
for reg in R31 ..= R00 {
|
for reg in R00..=R31 {
|
||||||
|
let reg = R31 - reg + R00;
|
||||||
self.pop(Dest::Reg(reg))?;
|
self.pop(Dest::Reg(reg))?;
|
||||||
}
|
}
|
||||||
self.pop(Dest::Reg(STATUS))?;
|
self.pop(Dest::Reg(STATUS))?;
|
||||||
|
|||||||
Reference in New Issue
Block a user