[PATCH 1/5] d3dx9_36: Replace powf(2, unsigned int) with (1u << unsigned int).

Stefan Dösinger stefan at codeweavers.com
Sat Nov 21 18:00:57 CST 2015


The code deviates from wined3d's float_32_to_16. As far as I can see
(https://www.winehq.org/pipermail/wine-devel/2011-February/088981.html)
this is intentional.

I have placed the casts to float to stay in sync with float_32_to_16.
Visual Studio 2015 doesn't need them, it only warns about signed vs
unsigned int comparisons and never warns if a float is involved. GCC
doesn't generate a warning, and neither does clang as far as I can see.

The last changed line has a cast to unsigned int anyway, this one is
needed to make MSVC happy.

Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
---
 dlls/d3dx9_36/math.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index 09c055e..5e8d51a 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -2138,21 +2138,21 @@ unsigned short float_32_to_16(const float in)
     if (isnan(in)) return (sign ? 0xffff : 0x7fff);
     if (in == 0.0f) return (sign ? 0x8000 : 0x0000);
 
-    if (tmp < powf(2, 10))
+    if (tmp < (float)(1u << 10))
     {
         do
         {
             tmp *= 2.0f;
             exp--;
-        } while (tmp < powf(2, 10));
+        } while (tmp < (float)(1u << 10));
     }
-    else if (tmp >= powf(2, 11))
+    else if (tmp >= (float)(1u << 11))
     {
         do
         {
             tmp /= 2.0f;
             exp++;
-        } while (tmp >= powf(2, 11));
+        } while (tmp >= (float)(1u << 11));
     }
 
     exp += 10;  /* Normalize the mantissa */
@@ -2190,7 +2190,7 @@ unsigned short float_32_to_16(const float in)
         exp = origexp;
 
         /* the 13 extra bits from single precision are used for rounding */
-        mantissa = (unsigned int)(tmp * powf(2, 13));
+        mantissa = (unsigned int)(tmp * (1u << 13));
         mantissa >>= 1 - exp; /* denormalize */
 
         mantissa -= ~(mantissa >> 13) & 1; /* round half to even */
-- 
2.4.10




More information about the wine-patches mailing list