Add INTERRUPT_ENABLE flag, fix bug with register preservation

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-03-10 12:20:59 -04:00
parent 3da72874f5
commit 85e5f7a2bf
2 changed files with 4 additions and 3 deletions

View File

@@ -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;
} }
} }

View File

@@ -225,11 +225,10 @@ impl State {
self.push(Source::Imm(status))?; self.push(Source::Imm(status))?;
// push R0 .. R31 // push R0 .. R31
for reg in R00 ..= R31 { for reg in R00..=R31 {
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))?;