| @@ -1,7 +1,7 @@ | |||||
| // | // | ||||
| // Lol Engine | // Lol Engine | ||||
| // | // | ||||
| // Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||||
| // This program is free software; you can redistribute it and/or | // This program is free software; you can redistribute it and/or | ||||
| // modify it under the terms of the Do What The Fuck You Want To | // modify it under the terms of the Do What The Fuck You Want To | ||||
| // Public License, Version 2, as published by Sam Hocevar. See | // Public License, Version 2, as published by Sam Hocevar. See | ||||
| @@ -40,7 +40,8 @@ namespace lol | |||||
| /* Lookup table-based algorithm from “Fast Half Float Conversions” | /* Lookup table-based algorithm from “Fast Half Float Conversions” | ||||
| * by Jeroen van der Zijp, November 2008. No rounding is performed, | * by Jeroen van der Zijp, November 2008. No rounding is performed, | ||||
| * and some NaN values may be incorrectly converted to Inf. */ | |||||
| * and some NaN values may be incorrectly converted to Inf (because | |||||
| * the lowest order bits in the mantissa are ignored). */ | |||||
| static inline uint16_t float_to_half_nobranch(uint32_t x) | static inline uint16_t float_to_half_nobranch(uint32_t x) | ||||
| { | { | ||||
| static uint16_t const basetable[512] = | static uint16_t const basetable[512] = | ||||
| @@ -157,6 +158,7 @@ static inline void float_to_half_vector(half *dst, float const *src) | |||||
| } | } | ||||
| #endif | #endif | ||||
| /* We use this De Bruijn sequence to compute a branchless integer log2 */ | |||||
| static int const shifttable[32] = | static int const shifttable[32] = | ||||
| { | { | ||||
| 23, 14, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, | 23, 14, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, | ||||