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 {
|
||||
const HALT = 1;
|
||||
const COMPARE = 1 << 1;
|
||||
const INTERRUPT_ENABLE = 1 << 2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,11 +225,10 @@ impl State {
|
||||
self.push(Source::Imm(status))?;
|
||||
|
||||
// push R0 .. R31
|
||||
for reg in R00 ..= R31 {
|
||||
for reg in R00..=R31 {
|
||||
self.push(Source::Reg(reg))?;
|
||||
}
|
||||
|
||||
|
||||
let sp = self.sp();
|
||||
self.set_reg_unchecked(FP, sp - Self::INTERRUPT_REG_SPACE);
|
||||
self.set_reg_unchecked(R00, index as u64);
|
||||
@@ -246,7 +245,8 @@ impl State {
|
||||
self.set_reg_unchecked(SP, sp);
|
||||
|
||||
// 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(STATUS))?;
|
||||
|
||||
Reference in New Issue
Block a user