public string getParameterString(string key, int pc) { string result = ""; int idx = 0; string ra = ""; string rt = ""; switch (type) { case SPUOpcodeType.RR: return(mnemonic + " " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))) + ", " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(18, 7))) + ", " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(11, 7)))); case SPUOpcodeType.RRR: return(mnemonic + " " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(4, 7))) + ", " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(18, 7))) + ", " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(11, 7))) + ", " + getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7)))); case SPUOpcodeType.RI7: rt = getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))); result = mnemonic + " " + rt + ", "; ra = getRegisterString(ConversionUtil.binStringToInt(key.Substring(18, 7))); idx = ConversionUtil.binStringToInt(key.Substring(11, 7)); if (signed) { idx <<= 32 - 7; idx >>= 32 - 7; } idx <<= shift; if (mnemonic[0] == 'b' && mnemonic[1] != 'r' && mnemonic[2] != 'a') { idx += pc; } else if (mnemonic[mnemonic.Length - 1] == 'd') { return(result + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X")) + "(" + ra + ")"); } if (mnemonic == "shlqbyi" && idx == 0) { return("lr " + rt + ", " + ra); } return(result + ra + ", " + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X"))); case SPUOpcodeType.RI8: rt = getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))); result = mnemonic + " " + rt + ", "; ra = getRegisterString(ConversionUtil.binStringToInt(key.Substring(18, 7))); idx = ConversionUtil.binStringToInt(key.Substring(10, 8)); if (signed) { idx <<= 32 - 8; idx >>= 32 - 8; } idx <<= shift; if (mnemonic[0] == 'b' && mnemonic[1] != 'r' && mnemonic[2] != 'a') { idx += pc; } else if (mnemonic[mnemonic.Length - 1] == 'd') { return(result + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X")) + "(" + ra + ")"); } return(result + ra + ", " + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X"))); case SPUOpcodeType.RI10: rt = getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))); result = mnemonic + " " + rt + ", "; ra = getRegisterString(ConversionUtil.binStringToInt(key.Substring(18, 7))); idx = ConversionUtil.binStringToInt(key.Substring(8, 10)); if (signed) { idx <<= 32 - 10; idx >>= 32 - 10; } idx <<= shift; if (mnemonic[0] == 'b' && mnemonic[1] != 'r' && mnemonic[2] != 'a') { idx += pc; } else if (mnemonic[mnemonic.Length - 1] == 'd') { return(result + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X")) + "(" + ra + ")"); } else if (mnemonic == "ori" && idx == 0) { return("lr " + rt + ", " + ra); } return(result + ra + ", " + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X"))); case SPUOpcodeType.RI16: rt = getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))); result = mnemonic + " " + rt + ", "; idx = ConversionUtil.binStringToInt(key.Substring(9, 16)); if (signed) { idx <<= 32 - 16; idx >>= 32 - 16; } idx <<= shift; if (mnemonic[0] == 'b' && mnemonic[1] != 'r' && mnemonic[2] != 'a') { idx += pc; } return(result + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X"))); case SPUOpcodeType.RI18: rt = getRegisterString(ConversionUtil.binStringToInt(key.Substring(25, 7))); result = mnemonic + " " + rt + ", "; idx = ConversionUtil.binStringToInt(key.Substring(7, 18)); if (signed) { idx <<= 32 - 16; idx >>= 32 - 16; } idx <<= shift; if (mnemonic[0] == 'b' && mnemonic[1] != 'r' && mnemonic[2] != 'a') { idx += pc; } return(result + ((idx <= 0) ? "" + idx : "0x" + idx.ToString("X"))); case SPUOpcodeType.Special: return(mnemonic); } return(""); }
public void parseParameter(string key) { switch (type) { case SPUOpcodeType.RR: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); ra = ConversionUtil.binStringToInt(key.Substring(18, 7)); rb = ConversionUtil.binStringToInt(key.Substring(11, 7)); break; case SPUOpcodeType.RRR: rt = ConversionUtil.binStringToInt(key.Substring(4, 7)); ra = ConversionUtil.binStringToInt(key.Substring(18, 7)); rb = ConversionUtil.binStringToInt(key.Substring(11, 7)); rc = ConversionUtil.binStringToInt(key.Substring(25, 7)); break; case SPUOpcodeType.RI7: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); ra = ConversionUtil.binStringToInt(key.Substring(18, 7)); idx = ConversionUtil.binStringToInt(key.Substring(11, 7)); if (node.data.signed) { idx <<= 32 - 7; idx >>= 32 - 7; } idx <<= node.data.shift; break; case SPUOpcodeType.RI8: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); ra = ConversionUtil.binStringToInt(key.Substring(18, 7)); idx = ConversionUtil.binStringToInt(key.Substring(10, 8)); if (node.data.signed) { idx <<= 32 - 8; idx >>= 32 - 8; } idx <<= node.data.shift; break; case SPUOpcodeType.RI10: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); ra = ConversionUtil.binStringToInt(key.Substring(18, 7)); idx = ConversionUtil.binStringToInt(key.Substring(8, 10)); if (node.data.signed) { idx <<= 32 - 10; idx >>= 32 - 10; } idx <<= node.data.shift; break; case SPUOpcodeType.RI16: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); idx = ConversionUtil.binStringToInt(key.Substring(9, 16)); if (node.data.signed) { idx <<= 32 - 16; idx >>= 32 - 16; } idx <<= node.data.shift; break; case SPUOpcodeType.RI18: rt = ConversionUtil.binStringToInt(key.Substring(25, 7)); idx = ConversionUtil.binStringToInt(key.Substring(7, 18)); if (node.data.signed) { idx <<= 32 - 16; idx >>= 32 - 16; } idx <<= node.data.shift; break; case SPUOpcodeType.Special: break; } }