mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-12-28 22:26:55 +00:00
Merge pull request #263 from lioncash/sasx
Fix emulation of SASX and SSAX instructions.
This commit is contained in:
commit
f1ec1a0d2c
|
@ -5724,7 +5724,7 @@ L_stm_s_takeabort:
|
||||||
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
||||||
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
||||||
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
||||||
state->Reg[tar] = (a1 - a2)&0xFFFF | (((b1 - b2)&0xFFFF)<< 0x10);
|
state->Reg[tar] = ((a1 - a2) & 0xFFFF) | (((b1 - b2)&0xFFFF)<< 0x10);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if ((instr & 0xFF0) == 0xf10)//sadd16
|
else if ((instr & 0xFF0) == 0xf10)//sadd16
|
||||||
|
@ -5736,7 +5736,7 @@ L_stm_s_takeabort:
|
||||||
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
||||||
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
||||||
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
||||||
state->Reg[tar] = (a1 + a2)&0xFFFF | (((b1 + b2)&0xFFFF)<< 0x10);
|
state->Reg[tar] = ((a1 + a2) & 0xFFFF) | (((b1 + b2)&0xFFFF)<< 0x10);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if ((instr & 0xFF0) == 0xf50)//ssax
|
else if ((instr & 0xFF0) == 0xf50)//ssax
|
||||||
|
@ -5748,7 +5748,7 @@ L_stm_s_takeabort:
|
||||||
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
||||||
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
||||||
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
||||||
state->Reg[tar] = (a1 - b2) & 0xFFFF | (((a2 + b1) & 0xFFFF) << 0x10);
|
state->Reg[tar] = ((a1 + b2) & 0xFFFF) | (((a2 - b1) & 0xFFFF) << 0x10);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if ((instr & 0xFF0) == 0xf30)//sasx
|
else if ((instr & 0xFF0) == 0xf30)//sasx
|
||||||
|
@ -5760,7 +5760,7 @@ L_stm_s_takeabort:
|
||||||
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
s16 a2 = ((state->Reg[src1] >> 0x10) & 0xFFFF);
|
||||||
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
s16 b1 = (state->Reg[src2] & 0xFFFF);
|
||||||
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
s16 b2 = ((state->Reg[src2] >> 0x10) & 0xFFFF);
|
||||||
state->Reg[tar] = (a2 - b1) & 0xFFFF | (((a2 + b1) & 0xFFFF) << 0x10);
|
state->Reg[tar] = ((a1 - b2) & 0xFFFF) | (((a2 + b1) & 0xFFFF) << 0x10);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else printf ("Unhandled v6 insn: sadd/ssub\n");
|
else printf ("Unhandled v6 insn: sadd/ssub\n");
|
||||||
|
|
Loading…
Reference in a new issue