summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-07-31 22:50:44 -0400
committerMarek Olšák <[email protected]>2018-07-31 23:28:01 -0400
commit157c6e81958d3b2223adf5567722b0502ada78ec (patch)
tree6e90b4dcd64cb6f70ed60308b542718bbaa77caa /src/util
parentc5c6e0187fd5d535c304ca3fd62de0f5e636c0c2 (diff)
util: don't use __builtin_clz unconditionally
This fixes the build if __builtin_clz is unsupported. Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/util')
-rw-r--r--src/util/half_float.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/util/half_float.c b/src/util/half_float.c
index 588f050d924..2eff2c84f51 100644
--- a/src/util/half_float.c
+++ b/src/util/half_float.c
@@ -215,7 +215,17 @@ uint16_t _mesa_uint16_div_64k_to_half(uint16_t v)
return v << 8;
/* Count the leading 0s in the uint16_t */
- int n = __builtin_clz(v) - (sizeof(unsigned int) - sizeof(uint16_t)) * 8;
+#ifdef HAVE___BUILTIN_CLZ
+ int n = __builtin_clz(v) - 16;
+#else
+ int n = 16;
+ for (int i = 15; i >= 0; i--) {
+ if (v & (1 << i)) {
+ n = 15 - i;
+ break;
+ }
+ }
+#endif
/* Shift the mantissa up so bit 16 is the hidden 1 bit,
* mask it off, then shift back down to 10 bits