mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-20 10:21:09 +00:00
spu: improve dfnma instruction
This commit is contained in:
parent
2ed6e51d24
commit
1b0f5b1ed9
@ -3921,9 +3921,8 @@ void spu_recompiler::DFNMA(spu_opcode_t op)
|
|||||||
const XmmLink& va = XmmGet(op.ra, XmmType::Double);
|
const XmmLink& va = XmmGet(op.ra, XmmType::Double);
|
||||||
const XmmLink& vt = XmmGet(op.rt, XmmType::Double);
|
const XmmLink& vt = XmmGet(op.rt, XmmType::Double);
|
||||||
c->mulpd(va, SPU_OFF_128(gpr, op.rb));
|
c->mulpd(va, SPU_OFF_128(gpr, op.rb));
|
||||||
c->addpd(vt, va);
|
c->addpd(va, vt);
|
||||||
c->xorpd(va, va);
|
c->xorpd(va, XmmConst(_mm_set1_epi64x(0x8000000000000000)));
|
||||||
c->subpd(va, vt);
|
|
||||||
c->movapd(SPU_OFF_128(gpr, op.rt), va);
|
c->movapd(SPU_OFF_128(gpr, op.rt), va);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,7 +1090,7 @@ bool spu_interpreter_fast::DFNMS(SPUThread& spu, spu_opcode_t op)
|
|||||||
|
|
||||||
bool spu_interpreter_fast::DFNMA(SPUThread& spu, spu_opcode_t op)
|
bool spu_interpreter_fast::DFNMA(SPUThread& spu, spu_opcode_t op)
|
||||||
{
|
{
|
||||||
spu.gpr[op.rt].vd = _mm_sub_pd(_mm_set1_pd(0.0), _mm_add_pd(_mm_mul_pd(spu.gpr[op.ra].vd, spu.gpr[op.rb].vd), spu.gpr[op.rt].vd));
|
spu.gpr[op.rt].vd = _mm_xor_pd(_mm_add_pd(_mm_mul_pd(spu.gpr[op.ra].vd, spu.gpr[op.rb].vd), spu.gpr[op.rt].vd), _mm_set1_pd(-0.0));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4141,7 +4141,7 @@ public:
|
|||||||
|
|
||||||
void DFNMA(spu_opcode_t op) //
|
void DFNMA(spu_opcode_t op) //
|
||||||
{
|
{
|
||||||
set_vr(op.rt, -get_vr<f64[2]>(op.rt) - get_vr<f64[2]>(op.ra) * get_vr<f64[2]>(op.rb));
|
set_vr(op.rt, -(get_vr<f64[2]>(op.ra) * get_vr<f64[2]>(op.rb) + get_vr<f64[2]>(op.rt)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FREST(spu_opcode_t op) //
|
void FREST(spu_opcode_t op) //
|
||||||
|
Loading…
x
Reference in New Issue
Block a user