mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-20 20:49:12 +12:00
[Shader JIT] Compile MAD to FMA when possible
This commit is contained in:
parent
cd04ed3770
commit
8a13b8c878
2 changed files with 20 additions and 9 deletions
|
@ -580,17 +580,26 @@ void ShaderEmitter::recMAD(const PICAShader& shader, u32 instruction) {
|
|||
loadRegister<3>(src3_xmm, shader, src3, 0, operandDescriptor);
|
||||
|
||||
// TODO: Implement safe PICA mul
|
||||
// Multiply src1 * src2
|
||||
if (haveAVX) {
|
||||
vmulps(scratch1, src1_xmm, src2_xmm);
|
||||
} else {
|
||||
movaps(scratch1, src1_xmm);
|
||||
mulps(scratch1, src2_xmm);
|
||||
// If we have FMA3, optimize MAD to use FMA
|
||||
if (haveFMA3) {
|
||||
vfmadd213ps(src1_xmm, src2_xmm, src3_xmm);
|
||||
storeRegister(src1_xmm, shader, dest, operandDescriptor);
|
||||
}
|
||||
|
||||
// If we don't have FMA3, do a multiplication and addition
|
||||
else {
|
||||
// Multiply src1 * src2
|
||||
if (haveAVX) {
|
||||
vmulps(scratch1, src1_xmm, src2_xmm);
|
||||
} else {
|
||||
movaps(scratch1, src1_xmm);
|
||||
mulps(scratch1, src2_xmm);
|
||||
}
|
||||
|
||||
// Add src3
|
||||
addps(scratch1, src3_xmm);
|
||||
storeRegister(scratch1, shader, dest, operandDescriptor);
|
||||
// Add src3
|
||||
addps(scratch1, src3_xmm);
|
||||
storeRegister(scratch1, shader, dest, operandDescriptor);
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderEmitter::recCMP(const PICAShader& shader, u32 instruction) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue