Optimize exp2() polynomial evaluation using FMA
Bug: b/216472189
Bug: b/169754022
Change-Id: I2014e165898fb1f0fdaef80938e5d97aef11968c
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/63551
Reviewed-by: Sean Risser <srisser@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/ShaderCore.cpp b/src/Pipeline/ShaderCore.cpp
index d58aacf..381521f 100644
--- a/src/Pipeline/ShaderCore.cpp
+++ b/src/Pipeline/ShaderCore.cpp
@@ -362,7 +362,7 @@
Float4 d = As<Float4>(Int4(0x3E75EDB7)); // 2.4016463e-1f
Float4 e = As<Float4>(Int4(0x3F31725D)); // 6.9315127e-1f
- Float4 ff = ((((a * f + b) * f + c) * f + d) * f + e) * f + Float4(1.0f);
+ Float4 ff = MulAdd(MulAdd(MulAdd(MulAdd(MulAdd(a, f, b), f, c), f, d), f, e), f, 1.0f);
return ii * ff;
}