mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-19 16:21:30 +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& vt = XmmGet(op.rt, XmmType::Double);
|
||||
c->mulpd(va, SPU_OFF_128(gpr, op.rb));
|
||||
c->addpd(vt, va);
|
||||
c->xorpd(va, va);
|
||||
c->subpd(va, vt);
|
||||
c->addpd(va, vt);
|
||||
c->xorpd(va, XmmConst(_mm_set1_epi64x(0x8000000000000000)));
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -4141,7 +4141,7 @@ public:
|
||||
|
||||
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) //
|
||||
|
Loading…
x
Reference in New Issue
Block a user