Add memory and register checking when required in the VM
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -10,7 +10,7 @@ impl Vm {
|
||||
($mapping:expr) => {{
|
||||
let (r1, r2) = cursor.next_regs()?;
|
||||
next_ip = cursor.position();
|
||||
let value = ($mapping)(self.get_reg(r1), self.get_reg(r2));
|
||||
let value = ($mapping)(self.get_reg_checked(r1)?, self.get_reg_checked(r2)?);
|
||||
self.set_reg(r1, value);
|
||||
}};
|
||||
}
|
||||
@@ -25,7 +25,7 @@ impl Vm {
|
||||
INV => {
|
||||
let r1 = cursor.next_reg()?;
|
||||
next_ip = cursor.position();
|
||||
let value = self.get_reg(r1);
|
||||
let value = self.get_reg_checked(r1)?;
|
||||
self.set_reg(r1, !value);
|
||||
}
|
||||
NOT => {
|
||||
@@ -80,8 +80,8 @@ impl Vm {
|
||||
LOAD => {
|
||||
let (r1, r2) = cursor.next_regs()?;
|
||||
next_ip = cursor.position();
|
||||
let value = self.load(r2);
|
||||
self.set_reg(r1, value);
|
||||
let value = self.load(r2)?;
|
||||
self.set_reg_checked(r1, value)?;
|
||||
}
|
||||
REGCOPY => math_inst!(|_: u64, w2: u64| w2),
|
||||
STOREIMM64 => {
|
||||
@@ -101,14 +101,14 @@ impl Vm {
|
||||
MEMCOPY => {
|
||||
let (r1, r2) = cursor.next_regs()?;
|
||||
next_ip = cursor.position();
|
||||
let value = self.load(r2);
|
||||
self.store(r1, value);
|
||||
let value = self.load(r2)?;
|
||||
self.store(r1, value)?;
|
||||
}
|
||||
STORE => {
|
||||
let (r1, r2) = cursor.next_regs()?;
|
||||
next_ip = cursor.position();
|
||||
let value = self.get_reg(r1);
|
||||
self.store(r2, value);
|
||||
self.store(r2, value)?;
|
||||
}
|
||||
HALT => {
|
||||
next_ip = cursor.position();
|
||||
|
||||
Reference in New Issue
Block a user