Commit 1310c074 authored by George Hotz's avatar George Hotz

fix sra

parent 9ecfbb6d
...@@ -38,12 +38,17 @@ contract MIPS { ...@@ -38,12 +38,17 @@ contract MIPS {
} }
function SE(uint32 dat, uint32 idx) internal pure returns (uint32) { function SE(uint32 dat, uint32 idx) internal pure returns (uint32) {
if (idx == 16) { bool isSigned = (dat >> (idx-1)) != 0;
uint256 signed = ((1 << (32-idx)) - 1) << idx;
uint256 mask = (1 << idx) - 1;
return uint32(dat&mask | (isSigned ? signed : 0));
/*if (idx == 16) {
return dat&0xFFFF | (dat&0x8000 != 0 ? 0xFFFF0000 : 0); return dat&0xFFFF | (dat&0x8000 != 0 ? 0xFFFF0000 : 0);
} else if (idx == 8) { } else if (idx == 8) {
return dat&0xFF | (dat&0x80 != 0 ? 0xFFFFFF00 : 0); return dat&0xFF | (dat&0x80 != 0 ? 0xFFFFFF00 : 0);
} }
return dat; return dat;*/
} }
// will revert if any required input state is missing // will revert if any required input state is missing
...@@ -146,10 +151,10 @@ contract MIPS { ...@@ -146,10 +151,10 @@ contract MIPS {
// Shift and ShiftV // Shift and ShiftV
if (func == 0x00) { return rt << shamt; // sll if (func == 0x00) { return rt << shamt; // sll
} else if (func == 0x02) { return rt >> shamt; // srl } else if (func == 0x02) { return rt >> shamt; // srl
} else if (func == 0x03) { return rt >> shamt; // sra } else if (func == 0x03) { return SE(rt >> shamt, 32-shamt); // sra
} else if (func == 0x04) { return rt << rs; // sllv } else if (func == 0x04) { return rt << rs; // sllv
} else if (func == 0x06) { return rt >> rs; // srlv } else if (func == 0x06) { return rt >> rs; // srlv
} else if (func == 0x07) { return rt >> rs; // srav } else if (func == 0x07) { return SE(rt >> rs, 32-rs); // srav
} else if (func == 0x08) { return rs; // jr } else if (func == 0x08) { return rs; // jr
} else if (func == 0x09) { return rs; // jalr } else if (func == 0x09) { return rs; // jalr
// 0x10-0x13 = mfhi, mthi, mflo, mtlo // 0x10-0x13 = mfhi, mthi, mflo, mtlo
......
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