Optimize Frexp() zero handling

Use of the zeroSign variable was eliminated by observing that we already
obtained the sign bit but cleared it when isNotZero is false, which can
be avoided by instead inserting the exponent for 0.5f only when the
argument is not zero.

Bug: b/243791551
Change-Id: I993cb41a94994a3033b08146f59660651380e716
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/67888
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Pipeline/ShaderCore.cpp b/src/Pipeline/ShaderCore.cpp
index 66eaf79..8e42292 100644
--- a/src/Pipeline/ShaderCore.cpp
+++ b/src/Pipeline/ShaderCore.cpp
@@ -518,8 +518,7 @@
 	// Assumes IEEE 754
 	auto isNotZero = CmpNEQ(val, 0.0f);
 	auto v = As<SIMD::Int>(val);
-	auto zeroSign = v & 0x80000000 & ~isNotZero;
-	auto significand = As<SIMD::Float>((((v & 0x807FFFFF) | 0x3F000000) & isNotZero) | zeroSign);
+	auto significand = As<SIMD::Float>((v & 0x807FFFFF) | (0x3F000000 & isNotZero));
 
 	auto exponent = Exponent(val) & isNotZero;