Make sure unsupported/illegal instructions are caught
This commit is contained in:
@@ -47,6 +47,8 @@ impl Core {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
assert_eq!(instr & 3, 3, "Compressed instructions not supported");
|
||||||
|
|
||||||
let instr = Instruction(instr);
|
let instr = Instruction(instr);
|
||||||
|
|
||||||
let runner = find_runner(instr);
|
let runner = find_runner(instr);
|
||||||
@@ -65,6 +67,9 @@ impl Core {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
eprintln!("Invalid Instruction");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ impl Instruction {
|
|||||||
|
|
||||||
/// Returns the opcode of the instruction, with the last 2 bits stripped away, as they are always 0b11 in a non-compressed instruction
|
/// Returns the opcode of the instruction, with the last 2 bits stripped away, as they are always 0b11 in a non-compressed instruction
|
||||||
pub fn opcode_noncompressed(&self) -> u8 {
|
pub fn opcode_noncompressed(&self) -> u8 {
|
||||||
debug_assert_eq!(self.0 & 0b11, 0b11);
|
debug_assert_eq!(self.0 & 0b11, 0b11, "Compressed (or invalid) opcode");
|
||||||
(self.0 >> 2 & 0x1f) as u8
|
(self.0 >> 2 & 0x1f) as u8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user