|  | 
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | add_ulp_magnitude (T t, unsigned ulp) | 
|  | Adds the given number of ULPs (Units in the Last Place) to the given floating-point number. 
 | 
|  | 
| template<typename T > | 
| BVH_ALWAYS_INLINE T | atomic_max (std::atomic< T > &atomic, const T &value) | 
|  | Computes the maximum between an atomic variable and a value, and returns the value previously held by the atomic variable. 
 | 
|  | 
| template<typename T > | 
| BVH_ALWAYS_INLINE Vec< T, 3 > | cross (const Vec< T, 3 > &a, const Vec< T, 3 > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE T | dot (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | fast_mul_add (const Vec< T, N > &a, const Vec< T, N > &b, const Vec< T, N > &c) | 
|  | 
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | fast_mul_add (T a, T b, T c) | 
|  | Fast multiply-add operation. 
 | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE T | length (const Vec< T, N > &v) | 
|  | 
| template<typename T , std::enable_if_t< std::is_unsigned_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE constexpr T | make_bitmask (size_t bits) | 
|  | Generates a bitmask with the given number of bits. 
 | 
|  | 
| template<typename T , std::enable_if_t< std::is_unsigned_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | morton_encode (T x, T y, T z) | 
|  | Morton-encode three unsigned integers into one. 
 | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | normalize (const Vec< T, N > &v) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator* (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator* (const Vec< T, N > &a, T b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator* (T a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator+ (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator- (const Vec< T, N > &a) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator- (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator/ (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | operator/ (T a, const Vec< T, N > &b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | robust_max (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | robust_max (T a, T b) | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | robust_min (const Vec< T, N > &a, const Vec< T, N > &b) | 
|  | 
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | robust_min (T a, T b) | 
|  | 
| template<typename T , std::enable_if_t< std::is_unsigned_v< T >, bool >  = true> | 
| constexpr T | round_up_log2 (T i, T p=0) | 
|  | Computes the (rounded-up) compile-time log in base-2 of an unsigned integer. 
 | 
|  | 
| template<typename T , size_t N> | 
| BVH_ALWAYS_INLINE Vec< T, N > | safe_inverse (const Vec< T, N > &v) | 
|  | 
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | safe_inverse (T x) | 
|  | Computes the inverse of the given value, always returning a finite value. 
 | 
|  | 
| template<typename T , std::enable_if_t< std::is_unsigned_v< T >, bool >  = true> | 
| BVH_ALWAYS_INLINE T | split_bits (T x) | 
|  | Split an unsigned integer such that its bits are spaced by 2 zeros. 
 | 
|  | 
| template<size_t Begin, size_t End, typename F > | 
| BVH_ALWAYS_INLINE void | static_for (F &&f) | 
|  | Executes the given function once for every integer in the range [Begin, End).
 | 
|  |