Add/rename/implement instructions based on new spec
* Add Mod instruction * Rename Neg -> INeg * Rename Copy -> MemCopy * Add RegCopy Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -6,7 +6,8 @@ pub enum Inst {
|
|||||||
Add(Reg, Reg),
|
Add(Reg, Reg),
|
||||||
Mul(Reg, Reg),
|
Mul(Reg, Reg),
|
||||||
Div(Reg, Reg),
|
Div(Reg, Reg),
|
||||||
Neg(Reg),
|
Mod(Reg, Reg),
|
||||||
|
INeg(Reg),
|
||||||
And(Reg, Reg),
|
And(Reg, Reg),
|
||||||
Or(Reg, Reg),
|
Or(Reg, Reg),
|
||||||
Xor(Reg, Reg),
|
Xor(Reg, Reg),
|
||||||
@@ -21,7 +22,8 @@ pub enum Inst {
|
|||||||
Load(Reg, Reg),
|
Load(Reg, Reg),
|
||||||
Store(Reg, Reg),
|
Store(Reg, Reg),
|
||||||
StoreImm(Reg, u32),
|
StoreImm(Reg, u32),
|
||||||
Copy(Reg, Reg),
|
MemCopy(Reg, Reg),
|
||||||
|
RegCopy(Reg, Reg),
|
||||||
|
|
||||||
Nop,
|
Nop,
|
||||||
Halt,
|
Halt,
|
||||||
|
|||||||
@@ -164,7 +164,8 @@ impl Vm {
|
|||||||
self.set_reg(r1, value);
|
self.set_reg(r1, value);
|
||||||
}
|
}
|
||||||
Inst::Div(r1, r2) => map!(r1 = r1 / r2),
|
Inst::Div(r1, r2) => map!(r1 = r1 / r2),
|
||||||
Inst::Neg(r1) => {
|
Inst::Mod(r1, r2) => map!(r1 = r1 % r2),
|
||||||
|
Inst::INeg(r1) => {
|
||||||
let value = self.get_reg(r1);
|
let value = self.get_reg(r1);
|
||||||
let ivalue = -i64::from_ne_bytes(value.to_ne_bytes());
|
let ivalue = -i64::from_ne_bytes(value.to_ne_bytes());
|
||||||
let uvalue = u64::from_ne_bytes(ivalue.to_ne_bytes());
|
let uvalue = u64::from_ne_bytes(ivalue.to_ne_bytes());
|
||||||
@@ -212,7 +213,11 @@ impl Vm {
|
|||||||
Inst::StoreImm(r1, value) => {
|
Inst::StoreImm(r1, value) => {
|
||||||
self.set_reg(r1, value as u64);
|
self.set_reg(r1, value as u64);
|
||||||
}
|
}
|
||||||
Inst::Copy(r1, r2) => {
|
Inst::RegCopy(r1, r2) => {
|
||||||
|
let w1 = self.get_reg(r2);
|
||||||
|
self.set_reg(r1, w1);
|
||||||
|
}
|
||||||
|
Inst::MemCopy(r1, r2) => {
|
||||||
let w1 = self.load(r2);
|
let w1 = self.load(r2);
|
||||||
self.store(r1, w1);
|
self.store(r1, w1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user