mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Implement vmin/vmax in x86 jit, slots right into VecDo3
This commit is contained in:
parent
7375706d2f
commit
1a1c161a0d
6 changed files with 20 additions and 13 deletions
|
@ -730,10 +730,6 @@ namespace MIPSComp
|
|||
DISABLE;
|
||||
}
|
||||
|
||||
void Jit::Comp_VMinMax(u32 op) {
|
||||
DISABLE;
|
||||
}
|
||||
|
||||
void Jit::Comp_VHdp(u32 op) {
|
||||
DISABLE;
|
||||
}
|
||||
|
|
|
@ -200,7 +200,6 @@ public:
|
|||
void Comp_VHdp(u32 op);
|
||||
void Comp_VCrs(u32 op);
|
||||
void Comp_VDet(u32 op);
|
||||
void Comp_VMinMax(u32 op);
|
||||
void Comp_Vi2x(u32 op);
|
||||
void Comp_Vx2i(u32 op);
|
||||
void Comp_Vf2i(u32 op);
|
||||
|
|
|
@ -1052,7 +1052,7 @@ namespace MIPSInt
|
|||
int n = GetNumVectorElements(sz);
|
||||
if (op & 0x10000)
|
||||
{
|
||||
//vbfy2
|
||||
// vbfy2
|
||||
d[0] = s[0] + s[2];
|
||||
d[1] = s[1] + s[3];
|
||||
d[2] = s[0] - s[2];
|
||||
|
|
|
@ -502,8 +502,8 @@ const MIPSInstruction tableVFPU3[8] = //011011 xxx
|
|||
{
|
||||
INSTR("vcmp",&Jit::Comp_Generic, Dis_Vcmp, Int_Vcmp, IS_VFPU|OUT_EAT_PREFIX),
|
||||
{-2},
|
||||
INSTR("vmin",&Jit::Comp_VMinMax, Dis_VectorSet3, Int_Vminmax, IS_VFPU|OUT_EAT_PREFIX),
|
||||
INSTR("vmax",&Jit::Comp_VMinMax, Dis_VectorSet3, Int_Vminmax, IS_VFPU|OUT_EAT_PREFIX),
|
||||
INSTR("vmin",&Jit::Comp_VecDo3, Dis_VectorSet3, Int_Vminmax, IS_VFPU|OUT_EAT_PREFIX),
|
||||
INSTR("vmax",&Jit::Comp_VecDo3, Dis_VectorSet3, Int_Vminmax, IS_VFPU|OUT_EAT_PREFIX),
|
||||
{-2},
|
||||
INSTR("vscmp",&Jit::Comp_Generic, Dis_VectorSet3, Int_Vscmp, IS_VFPU|OUT_EAT_PREFIX),
|
||||
INSTR("vsge",&Jit::Comp_Generic, Dis_VectorSet3, Int_Vsge, IS_VFPU|OUT_EAT_PREFIX),
|
||||
|
|
|
@ -435,13 +435,27 @@ void Jit::Comp_VecDo3(u32 op) {
|
|||
}
|
||||
break;
|
||||
case 25: //VFPU1
|
||||
switch ((op >> 23)&7)
|
||||
switch ((op >> 23) & 7)
|
||||
{
|
||||
case 0: // d[i] = s[i] * t[i]; break; //vmul
|
||||
xmmop = &XEmitter::MULSS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 27: //VFPU3
|
||||
switch ((op >> 23) & 3)
|
||||
{
|
||||
case 2: // vmin
|
||||
xmmop = &XEmitter::MINSS;
|
||||
break;
|
||||
case 3: // vmax
|
||||
xmmop = &XEmitter::MAXSS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
_dbg_assert_msg_(CPU,0,"invalid VecDo3");
|
||||
break;
|
||||
}
|
||||
|
||||
if (xmmop == NULL)
|
||||
|
@ -484,8 +498,10 @@ void Jit::Comp_VecDo3(u32 op) {
|
|||
if (!fpr.V(sregs[i]).IsSimpleReg(tempxregs[i]))
|
||||
MOVSS(tempxregs[i], fpr.V(sregs[i]));
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; ++i)
|
||||
(this->*xmmop)(tempxregs[i], fpr.V(tregs[i]));
|
||||
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
if (!fpr.V(dregs[i]).IsSimpleReg(tempxregs[i]))
|
||||
|
@ -934,9 +950,6 @@ void Jit::Comp_Vtfm(u32 op) {
|
|||
fpr.ReleaseSpillLocks();
|
||||
}
|
||||
|
||||
void Jit::Comp_VMinMax(u32 op) {
|
||||
DISABLE;
|
||||
}
|
||||
|
||||
void Jit::Comp_VHdp(u32 op) {
|
||||
DISABLE;
|
||||
|
|
|
@ -210,7 +210,6 @@ public:
|
|||
void Comp_VHdp(u32 op);
|
||||
void Comp_VCrs(u32 op);
|
||||
void Comp_VDet(u32 op);
|
||||
void Comp_VMinMax(u32 op);
|
||||
void Comp_Vi2x(u32 op);
|
||||
void Comp_Vx2i(u32 op);
|
||||
void Comp_Vf2i(u32 op);
|
||||
|
|
Loading…
Add table
Reference in a new issue