Commit bf45a2ea authored by George Hotz's avatar George Hotz

fix mul, broken div

parent 6d47705a
...@@ -142,17 +142,24 @@ contract MIPS { ...@@ -142,17 +142,24 @@ contract MIPS {
else if (func == 0x12) val = m.ReadMemory(stateHash, REG_LO); // mflo else if (func == 0x12) val = m.ReadMemory(stateHash, REG_LO); // mflo
else if (func == 0x13) storeAddr = REG_LO; // mtlo else if (func == 0x13) storeAddr = REG_LO; // mtlo
uint64 acc; uint32 hi;
if (func == 0x18) { // mult if (func == 0x18) { // mult
acc = uint64(int64(rs)*int64(rt)); uint64 acc = uint64(int64(int32(rs))*int64(int32(rt)));
hi = uint32(acc>>32);
val = uint32(acc);
} else if (func == 0x19) { // multu } else if (func == 0x19) { // multu
acc = uint64(uint64(rs)*uint64(rt)); uint64 acc = uint64(uint64(rs)*uint64(rt));
hi = uint32(acc>>32);
val = uint32(acc);
} else if (func == 0x1a) { // div
// TODO: totally wrong
val = uint32(int32(rs)/int32(rt));
hi = uint32(int32(rs)%int32(rt));
} }
// lo/hi writeback // lo/hi writeback
if (func == 0x18 || func == 0x19) { if (func == 0x18 || func == 0x19 || func == 0x1a) {
stateHash = m.WriteMemory(stateHash, REG_HI, uint32(acc>>32)); stateHash = m.WriteMemory(stateHash, REG_HI, hi);
val = uint32(acc);
storeAddr = REG_LO; storeAddr = REG_LO;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment