Added msub and andfc/andcf to LLE, also fixed compiler warning.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2844 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
7c4e654253
commit
d3552a8e2c
|
@ -1023,6 +1023,15 @@ void madd(const UDSPInstruction& opc)
|
||||||
dsp_set_long_prod(prod);
|
dsp_set_long_prod(prod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void msub(const UDSPInstruction& opc)
|
||||||
|
{
|
||||||
|
u8 sreg = (opc.hex >> 8) & 0x1;
|
||||||
|
|
||||||
|
s64 prod = dsp_get_long_prod();
|
||||||
|
prod -= (s64)dsp_get_ax_l(sreg) * (s64)dsp_get_ax_h(sreg) * GetMultiplyModifier();
|
||||||
|
dsp_set_long_prod(prod);
|
||||||
|
}
|
||||||
|
|
||||||
void lsr16(const UDSPInstruction& opc)
|
void lsr16(const UDSPInstruction& opc)
|
||||||
{
|
{
|
||||||
u8 areg = (opc.hex >> 8) & 0x1;
|
u8 areg = (opc.hex >> 8) & 0x1;
|
||||||
|
|
|
@ -87,6 +87,7 @@ void addis(const UDSPInstruction& opc);
|
||||||
void addi(const UDSPInstruction& opc);
|
void addi(const UDSPInstruction& opc);
|
||||||
void lsl16(const UDSPInstruction& opc);
|
void lsl16(const UDSPInstruction& opc);
|
||||||
void madd(const UDSPInstruction& opc);
|
void madd(const UDSPInstruction& opc);
|
||||||
|
void msub(const UDSPInstruction& opc);
|
||||||
void lsr16(const UDSPInstruction& opc);
|
void lsr16(const UDSPInstruction& opc);
|
||||||
void asr16(const UDSPInstruction& opc);
|
void asr16(const UDSPInstruction& opc);
|
||||||
void shifti(const UDSPInstruction& opc);
|
void shifti(const UDSPInstruction& opc);
|
||||||
|
|
|
@ -163,7 +163,7 @@ DSPOPCTemplate opcodes[] =
|
||||||
{"CMPIS", 0x0600, 0xfe00, DSPInterpreter::cmpis, nop, 1, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 1, 0, 0, 0x00ff}}, NULL, NULL,},
|
{"CMPIS", 0x0600, 0xfe00, DSPInterpreter::cmpis, nop, 1, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 1, 0, 0, 0x00ff}}, NULL, NULL,},
|
||||||
|
|
||||||
{"ANDI", 0x0240, 0xfeff, DSPInterpreter::andi, nop, 2, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
{"ANDI", 0x0240, 0xfeff, DSPInterpreter::andi, nop, 2, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
||||||
{"ANDCF", 0x02c0, 0xfeff, nop, nop, 2, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
{"ANDCF", 0x02c0, 0xfeff, DSPInterpreter::andfc, nop, 2, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
||||||
|
|
||||||
{"XORI", 0x0220, 0xfeff, DSPInterpreter::xori, nop, 2, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
{"XORI", 0x0220, 0xfeff, DSPInterpreter::xori, nop, 2, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
||||||
{"ANDF", 0x02a0, 0xfeff, DSPInterpreter::andf, nop, 2, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
{"ANDF", 0x02a0, 0xfeff, DSPInterpreter::andf, nop, 2, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_IMM, 2, 1, 0, 0xffff}}, NULL, NULL,},
|
||||||
|
@ -271,7 +271,7 @@ DSPOPCTemplate opcodes[] =
|
||||||
{"SUB", 0x5c00, 0xfeff, DSPInterpreter::sub, nop, 1 | P_EXT, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_ACCM_D, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
{"SUB", 0x5c00, 0xfeff, DSPInterpreter::sub, nop, 1 | P_EXT, 2, {{P_ACCM, 1, 0, 8, 0x0100}, {P_ACCM_D, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
||||||
|
|
||||||
{"MADD", 0xf200, 0xfeff, DSPInterpreter::madd, nop, 1 | P_EXT, 2, {{P_REG18, 1, 0, 8, 0x0100}, {P_REG1A, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
{"MADD", 0xf200, 0xfeff, DSPInterpreter::madd, nop, 1 | P_EXT, 2, {{P_REG18, 1, 0, 8, 0x0100}, {P_REG1A, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
||||||
{"MSUB", 0xf600, 0xfeff, nop , nop, 1 | P_EXT, 2, {{P_REG18, 1, 0, 8, 0x0100}, {P_REG1A, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
{"MSUB", 0xf600, 0xfeff, DSPInterpreter::msub, nop, 1 | P_EXT, 2, {{P_REG18, 1, 0, 8, 0x0100}, {P_REG1A, 1, 0, 8, 0x0100}}, NULL, NULL,},
|
||||||
{"MADDX", 0xe000, 0xfcff, DSPInterpreter::maddx, nop, 1 | P_EXT, 2, {{P_REGM18, 1, 0, 8, 0x0200}, {P_REGM19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
{"MADDX", 0xe000, 0xfcff, DSPInterpreter::maddx, nop, 1 | P_EXT, 2, {{P_REGM18, 1, 0, 8, 0x0200}, {P_REGM19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
||||||
{"MSUBX", 0xe400, 0xfcff, DSPInterpreter::msubx, nop, 1 | P_EXT, 2, {{P_REGM18, 1, 0, 8, 0x0200}, {P_REGM19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
{"MSUBX", 0xe400, 0xfcff, DSPInterpreter::msubx, nop, 1 | P_EXT, 2, {{P_REGM18, 1, 0, 8, 0x0200}, {P_REGM19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
||||||
{"MADDC", 0xe800, 0xfcff, DSPInterpreter::maddc, nop, 1 | P_EXT, 2, {{P_ACCM, 1, 0, 9, 0x0200}, {P_REG19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
{"MADDC", 0xe800, 0xfcff, DSPInterpreter::maddc, nop, 1 | P_EXT, 2, {{P_ACCM, 1, 0, 9, 0x0200}, {P_REG19, 1, 0, 7, 0x0100}}, NULL, NULL,},
|
||||||
|
|
|
@ -219,7 +219,7 @@ char* gd_dis_params(gd_globals_t* gdg, DSPOPCTemplate* opc, u16 op1, u16 op2, ch
|
||||||
if (opc->params[j].size != 2)
|
if (opc->params[j].size != 2)
|
||||||
{
|
{
|
||||||
if (opc->params[j].mask == 0x007f) // LSL, LSR, ASL, ASR
|
if (opc->params[j].mask == 0x007f) // LSL, LSR, ASL, ASR
|
||||||
sprintf(buf, "#%d", val < 64 ? val : -(0x80-val)); // I know compiler complains, but this is in gcdsptool...
|
sprintf(buf, "#%d", val < 64 ? val : -(0x80-(s32)val));
|
||||||
else
|
else
|
||||||
sprintf(buf, "#0x%02x", val);
|
sprintf(buf, "#0x%02x", val);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue