This commit is contained in:
Branimir Karadžić
2018-11-27 19:52:01 -08:00
parent ad3d46f3c0
commit 48e9aa1366
5 changed files with 208 additions and 202 deletions

View File

@@ -105,22 +105,22 @@ namespace bx
return -floor(-_a);
}
inline constexpr BX_CONST_FUNC float lerp(float _a, float _b, float _t)
inline BX_CONSTEXPR_FUNC float lerp(float _a, float _b, float _t)
{
return _a + (_b - _a) * _t;
}
inline constexpr BX_CONST_FUNC float sign(float _a)
inline BX_CONSTEXPR_FUNC float sign(float _a)
{
return _a < 0.0f ? -1.0f : 1.0f;
}
inline constexpr BX_CONST_FUNC float abs(float _a)
inline BX_CONSTEXPR_FUNC float abs(float _a)
{
return _a < 0.0f ? -_a : _a;
}
inline constexpr BX_CONST_FUNC float square(float _a)
inline BX_CONSTEXPR_FUNC float square(float _a)
{
return _a * _a;
}
@@ -238,17 +238,17 @@ namespace bx
#endif // BX_CONFIG_SUPPORTS_SIMD
}
inline constexpr BX_CONST_FUNC float trunc(float _a)
inline BX_CONSTEXPR_FUNC float trunc(float _a)
{
return float(int(_a) );
}
inline constexpr BX_CONST_FUNC float fract(float _a)
inline BX_CONSTEXPR_FUNC float fract(float _a)
{
return _a - trunc(_a);
}
inline constexpr BX_CONST_FUNC float mad(float _a, float _b, float _c)
inline BX_CONSTEXPR_FUNC float mad(float _a, float _b, float _c)
{
return _a * _b + _c;
}
@@ -258,7 +258,7 @@ namespace bx
return _a - _b * floor(_a / _b);
}
inline constexpr BX_CONST_FUNC bool equal(float _a, float _b, float _epsilon)
inline BX_CONSTEXPR_FUNC bool equal(float _a, float _b, float _epsilon)
{
// Reference(s):
// - https://web.archive.org/web/20181103180318/http://realtimecollisiondetection.net/blog/?p=89
@@ -285,27 +285,27 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC float step(float _edge, float _a)
inline BX_CONSTEXPR_FUNC float step(float _edge, float _a)
{
return _a < _edge ? 0.0f : 1.0f;
}
inline constexpr BX_CONST_FUNC float pulse(float _a, float _start, float _end)
inline BX_CONSTEXPR_FUNC float pulse(float _a, float _start, float _end)
{
return step(_a, _start) - step(_a, _end);
}
inline constexpr BX_CONST_FUNC float smoothStep(float _a)
inline BX_CONSTEXPR_FUNC float smoothStep(float _a)
{
return square(_a)*(3.0f - 2.0f*_a);
}
inline constexpr BX_CONST_FUNC float bias(float _time, float _bias)
inline BX_CONSTEXPR_FUNC float bias(float _time, float _bias)
{
return _time / ( ( (1.0f/_bias - 2.0f)*(1.0f - _time) ) + 1.0f);
}
inline constexpr BX_CONST_FUNC float gain(float _time, float _gain)
inline BX_CONSTEXPR_FUNC float gain(float _time, float _gain)
{
// Reference(s):
// - Bias And Gain Are Your Friend
@@ -350,7 +350,7 @@ namespace bx
ptr[2] = _a.z;
}
inline constexpr BX_CONST_FUNC Vec3 abs(const Vec3& _a)
inline BX_CONSTEXPR_FUNC Vec3 abs(const Vec3& _a)
{
return
{
@@ -360,7 +360,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 neg(const Vec3& _a)
inline BX_CONSTEXPR_FUNC Vec3 neg(const Vec3& _a)
{
return
{
@@ -370,7 +370,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 add(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 add(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -380,7 +380,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 add(const Vec3& _a, float _b)
inline BX_CONSTEXPR_FUNC Vec3 add(const Vec3& _a, float _b)
{
return
{
@@ -390,7 +390,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 sub(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 sub(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -400,7 +400,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 sub(const Vec3& _a, float _b)
inline BX_CONSTEXPR_FUNC Vec3 sub(const Vec3& _a, float _b)
{
return
{
@@ -410,7 +410,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 mul(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 mul(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -420,7 +420,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 mul(const Vec3& _a, float _b)
inline BX_CONSTEXPR_FUNC Vec3 mul(const Vec3& _a, float _b)
{
return
{
@@ -430,17 +430,17 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 mad(const Vec3& _a, const Vec3& _b, const Vec3& _c)
inline BX_CONSTEXPR_FUNC Vec3 mad(const Vec3& _a, const Vec3& _b, const Vec3& _c)
{
return add(mul(_a, _b), _c);
}
inline constexpr BX_CONST_FUNC float dot(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC float dot(const Vec3& _a, const Vec3& _b)
{
return _a.x*_b.x + _a.y*_b.y + _a.z*_b.z;
}
inline constexpr BX_CONST_FUNC Vec3 cross(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 cross(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -455,7 +455,7 @@ namespace bx
return sqrt(dot(_a, _a) );
}
inline constexpr BX_CONST_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, float _t)
inline BX_CONSTEXPR_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, float _t)
{
return
{
@@ -465,7 +465,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, const Vec3& _t)
inline BX_CONSTEXPR_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, const Vec3& _t)
{
return
{
@@ -482,7 +482,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC Vec3 min(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 min(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -492,7 +492,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 max(const Vec3& _a, const Vec3& _b)
inline BX_CONSTEXPR_FUNC Vec3 max(const Vec3& _a, const Vec3& _b)
{
return
{
@@ -502,7 +502,7 @@ namespace bx
};
}
inline constexpr BX_CONST_FUNC Vec3 rcp(const Vec3& _a)
inline BX_CONSTEXPR_FUNC Vec3 rcp(const Vec3& _a)
{
return
{

View File

@@ -29,162 +29,162 @@
namespace bx
{
inline constexpr BX_CONST_FUNC uint32_t uint32_li(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_li(uint32_t _a)
{
return _a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_dec(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_dec(uint32_t _a)
{
return _a - 1;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_inc(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_inc(uint32_t _a)
{
return _a + 1;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_not(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_not(uint32_t _a)
{
return ~_a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_neg(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_neg(uint32_t _a)
{
return -(int32_t)_a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_ext(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_ext(uint32_t _a)
{
return ( (int32_t)_a)>>31;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_and(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_and(uint32_t _a, uint32_t _b)
{
return _a & _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_andc(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_andc(uint32_t _a, uint32_t _b)
{
return _a & ~_b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_xor(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_xor(uint32_t _a, uint32_t _b)
{
return _a ^ _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_xorl(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_xorl(uint32_t _a, uint32_t _b)
{
return !_a != !_b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_or(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_or(uint32_t _a, uint32_t _b)
{
return _a | _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_orc(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_orc(uint32_t _a, uint32_t _b)
{
return _a | ~_b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_sll(uint32_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint32_t uint32_sll(uint32_t _a, int32_t _sa)
{
return _a << _sa;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_srl(uint32_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint32_t uint32_srl(uint32_t _a, int32_t _sa)
{
return _a >> _sa;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_sra(uint32_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint32_t uint32_sra(uint32_t _a, int32_t _sa)
{
return ( (int32_t)_a) >> _sa;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_rol(uint32_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint32_t uint32_rol(uint32_t _a, int32_t _sa)
{
return ( _a << _sa) | (_a >> (32-_sa) );
}
inline constexpr BX_CONST_FUNC uint32_t uint32_ror(uint32_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint32_t uint32_ror(uint32_t _a, int32_t _sa)
{
return ( _a >> _sa) | (_a << (32-_sa) );
}
inline constexpr BX_CONST_FUNC uint32_t uint32_add(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_add(uint32_t _a, uint32_t _b)
{
return _a + _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_iadd(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_iadd(uint32_t _a, uint32_t _b)
{
return int32_t(_a) + int32_t(_b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_sub(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_sub(uint32_t _a, uint32_t _b)
{
return _a - _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_isub(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_isub(uint32_t _a, uint32_t _b)
{
return int32_t(_a) - int32_t(_b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_mul(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_mul(uint32_t _a, uint32_t _b)
{
return _a * _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_div(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_div(uint32_t _a, uint32_t _b)
{
return _a / _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_mod(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_mod(uint32_t _a, uint32_t _b)
{
return _a % _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b)
{
return -(_a == _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b)
{
return -(_a != _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmplt(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmplt(uint32_t _a, uint32_t _b)
{
return -(_a < _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmple(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmple(uint32_t _a, uint32_t _b)
{
return -(_a <= _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b)
{
return -(_a > _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cmpge(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cmpge(uint32_t _a, uint32_t _b)
{
return -(_a >= _b);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_setnz(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_setnz(uint32_t _a)
{
return -!!_a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b)
{
const uint32_t add = uint32_add(_a, _b);
const uint32_t lt = uint32_cmplt(add, _a);
@@ -193,7 +193,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_satsub(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_satsub(uint32_t _a, uint32_t _b)
{
const uint32_t sub = uint32_sub(_a, _b);
const uint32_t le = uint32_cmple(sub, _a);
@@ -202,7 +202,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_satmul(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_satmul(uint32_t _a, uint32_t _b)
{
const uint64_t mul = (uint64_t)_a * (uint64_t)_b;
const uint32_t hi = mul >> 32;
@@ -212,7 +212,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b)
{
const uint32_t mask = uint32_ext(test);
const uint32_t sel_a = uint32_and(_a, mask);
@@ -222,7 +222,7 @@ namespace bx
return (result);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b)
{
const uint32_t sel_a = uint32_and(_a, _mask);
const uint32_t sel_b = uint32_andc(_b, _mask);
@@ -231,7 +231,7 @@ namespace bx
return (result);
}
inline constexpr BX_CONST_FUNC uint32_t uint32_imin(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_imin(uint32_t _a, uint32_t _b)
{
const uint32_t a_sub_b = uint32_sub(_a, _b);
const uint32_t result = uint32_sels(a_sub_b, _a, _b);
@@ -239,7 +239,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_imax(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_imax(uint32_t _a, uint32_t _b)
{
const uint32_t b_sub_a = uint32_sub(_b, _a);
const uint32_t result = uint32_sels(b_sub_a, _a, _b);
@@ -247,27 +247,27 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b)
{
return _a > _b ? _b : _a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c)
inline BX_CONSTEXPR_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c)
{
return uint32_min(_a, uint32_min(_b, _c) );
}
inline constexpr BX_CONST_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b)
{
return _a > _b ? _a : _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c)
inline BX_CONSTEXPR_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c)
{
return uint32_max(_a, uint32_max(_b, _c) );
}
inline constexpr BX_CONST_FUNC uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max)
inline BX_CONSTEXPR_FUNC uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max)
{
const uint32_t tmp = uint32_max(_a, _min);
const uint32_t result = uint32_min(tmp, _max);
@@ -275,7 +275,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max)
inline BX_CONSTEXPR_FUNC uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max)
{
const uint32_t tmp = uint32_imax(_a, _min);
const uint32_t result = uint32_imin(tmp, _max);
@@ -283,7 +283,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max)
inline BX_CONSTEXPR_FUNC uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max)
{
const uint32_t inc = uint32_inc(_val);
const uint32_t max_diff = uint32_sub(_max, _val);
@@ -295,7 +295,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max)
inline BX_CONSTEXPR_FUNC uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max)
{
const uint32_t dec = uint32_dec(_val);
const uint32_t min_diff = uint32_sub(_min, _val);
@@ -307,7 +307,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cntbits(uint32_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cntbits(uint32_t _val)
{
const uint32_t tmp0 = uint32_srl(_val, 1);
const uint32_t tmp1 = uint32_and(tmp0, 0x55555555);
@@ -330,7 +330,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cntlz(uint32_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cntlz(uint32_t _val)
{
const uint32_t tmp0 = uint32_srl(_val, 1);
const uint32_t tmp1 = uint32_or(tmp0, _val);
@@ -348,7 +348,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_cnttz(uint32_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint32_cnttz(uint32_t _val)
{
const uint32_t tmp0 = uint32_not(_val);
const uint32_t tmp1 = uint32_dec(_val);
@@ -358,7 +358,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_part1by1(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_part1by1(uint32_t _a)
{
// shuffle:
// ---- ---- ---- ---- fedc ba98 7654 3210
@@ -386,7 +386,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_part1by2(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_part1by2(uint32_t _a)
{
// shuffle:
// ---- ---- ---- ---- ---- --98 7654 3210
@@ -414,7 +414,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_testpow2(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_testpow2(uint32_t _a)
{
const uint32_t tmp0 = uint32_dec(_a);
const uint32_t tmp1 = uint32_xor(_a, tmp0);
@@ -424,7 +424,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_nextpow2(uint32_t _a)
inline BX_CONSTEXPR_FUNC uint32_t uint32_nextpow2(uint32_t _a)
{
const uint32_t tmp0 = uint32_dec(_a);
const uint32_t tmp1 = uint32_srl(tmp0, 1);
@@ -442,7 +442,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t uint64_cntbits(uint64_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint64_cntbits(uint64_t _val)
{
const uint32_t lo = uint32_t(_val&UINT32_MAX);
const uint32_t hi = uint32_t(_val>>32);
@@ -452,7 +452,7 @@ namespace bx
return total;
}
inline constexpr BX_CONST_FUNC uint32_t uint64_cntlz(uint64_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint64_cntlz(uint64_t _val)
{
return _val & UINT64_C(0xffffffff00000000)
? uint32_cntlz(uint32_t(_val>>32) )
@@ -460,7 +460,7 @@ namespace bx
;
}
inline constexpr BX_CONST_FUNC uint32_t uint64_cnttz(uint64_t _val)
inline BX_CONSTEXPR_FUNC uint32_t uint64_cnttz(uint64_t _val)
{
return _val & UINT64_C(0xffffffff)
? uint32_cnttz(uint32_t(_val) )
@@ -468,47 +468,47 @@ namespace bx
;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_sll(uint64_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint64_t uint64_sll(uint64_t _a, int32_t _sa)
{
return _a << _sa;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_srl(uint64_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint64_t uint64_srl(uint64_t _a, int32_t _sa)
{
return _a >> _sa;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_sra(uint64_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint64_t uint64_sra(uint64_t _a, int32_t _sa)
{
return ( (int64_t)_a) >> _sa;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_rol(uint64_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint64_t uint64_rol(uint64_t _a, int32_t _sa)
{
return ( _a << _sa) | (_a >> (64-_sa) );
}
inline constexpr BX_CONST_FUNC uint64_t uint64_ror(uint64_t _a, int32_t _sa)
inline BX_CONSTEXPR_FUNC uint64_t uint64_ror(uint64_t _a, int32_t _sa)
{
return ( _a >> _sa) | (_a << (64-_sa) );
}
inline constexpr BX_CONST_FUNC uint64_t uint64_add(uint64_t _a, uint64_t _b)
inline BX_CONSTEXPR_FUNC uint64_t uint64_add(uint64_t _a, uint64_t _b)
{
return _a + _b;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_sub(uint64_t _a, uint64_t _b)
inline BX_CONSTEXPR_FUNC uint64_t uint64_sub(uint64_t _a, uint64_t _b)
{
return _a - _b;
}
inline constexpr BX_CONST_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b)
inline BX_CONSTEXPR_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b)
{
return _a * _b;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b)
{
do
{
@@ -521,12 +521,12 @@ namespace bx
return _a;
}
inline constexpr BX_CONST_FUNC uint32_t uint32_lcm(uint32_t _a, uint32_t _b)
inline BX_CONSTEXPR_FUNC uint32_t uint32_lcm(uint32_t _a, uint32_t _b)
{
return _a * (_b / uint32_gcd(_a, _b) );
}
inline constexpr BX_CONST_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride)
inline BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride)
{
const uint32_t mod = uint32_mod(_offset, _stride);
const uint32_t add = uint32_sub(_stride, mod);
@@ -537,7 +537,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride)
inline BX_CONSTEXPR_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride)
{
const uint32_t align = uint32_lcm(16, _stride);
const uint32_t mod = uint32_mod(_offset, align);
@@ -549,7 +549,7 @@ namespace bx
return result;
}
inline constexpr BX_CONST_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride)
inline BX_CONSTEXPR_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride)
{
const uint32_t align = uint32_lcm(256, _stride);
const uint32_t mod = uint32_mod(_offset, align);

View File

@@ -46,6 +46,7 @@
#define BX_ALIGN_256(_value) BX_ALIGN_MASK(_value, 0xff)
#define BX_ALIGN_4096(_value) BX_ALIGN_MASK(_value, 0xfff)
///
#define BX_ALIGNOF(_type) __alignof(_type)
#if defined(__has_feature)
@@ -112,6 +113,11 @@
# error "Unknown BX_COMPILER_?"
#endif
/// The return value of the function is solely a function of the arguments.
///
#define BX_CONSTEXPR_FUNC constexpr BX_CONST_FUNC
///
#define BX_STATIC_ASSERT(_condition, ...) static_assert(_condition, "" __VA_ARGS__)
///
@@ -199,19 +205,19 @@
///
#define BX_CLASS_NO_DEFAULT_CTOR(_class) \
private: _class()
private: _class()
#define BX_CLASS_NO_COPY(_class) \
private: _class(const _class& _rhs)
private: _class(const _class& _rhs)
#define BX_CLASS_NO_ASSIGNMENT(_class) \
private: _class& operator=(const _class& _rhs)
private: _class& operator=(const _class& _rhs)
#define BX_CLASS_ALLOCATOR(_class) \
public: void* operator new(size_t _size); \
public: void operator delete(void* _ptr); \
public: void* operator new[](size_t _size); \
public: void operator delete[](void* _ptr)
#define BX_CLASS_ALLOCATOR(_class) \
public: void* operator new(size_t _size); \
public: void operator delete(void* _ptr); \
public: void* operator new[](size_t _size); \
public: void operator delete[](void* _ptr)
#define BX_CLASS_1(_class, _a1) BX_CONCATENATE(BX_CLASS_, _a1)(_class)
#define BX_CLASS_2(_class, _a1, _a2) BX_CLASS_1(_class, _a1); BX_CLASS_1(_class, _a2)

View File

@@ -124,19 +124,19 @@ namespace bx
/// Returns linear interpolation between two values _a and _b.
///
constexpr BX_CONST_FUNC float lerp(float _a, float _b, float _t);
BX_CONSTEXPR_FUNC float lerp(float _a, float _b, float _t);
/// Returns the sign of _a.
///
constexpr BX_CONST_FUNC float sign(float _a);
BX_CONSTEXPR_FUNC float sign(float _a);
/// Returns the absolute of _a.
///
constexpr BX_CONST_FUNC float abs(float _a);
BX_CONSTEXPR_FUNC float abs(float _a);
/// Returns the square of _a.
///
constexpr BX_CONST_FUNC float square(float _a);
BX_CONSTEXPR_FUNC float square(float _a);
/// Returns the cosine of the argument _a.
///
@@ -217,23 +217,23 @@ namespace bx
/// Returns the nearest integer not greater in magnitude than _a.
///
constexpr BX_CONST_FUNC float trunc(float _a);
BX_CONSTEXPR_FUNC float trunc(float _a);
/// Returns the fractional (or decimal) part of _a, which is greater than or equal to 0
/// and less than 1.
///
constexpr BX_CONST_FUNC float fract(float _a);
BX_CONSTEXPR_FUNC float fract(float _a);
/// Returns result of multipla and add (_a * _b + _c).
///
constexpr BX_CONST_FUNC float mad(float _a, float _b, float _c);
BX_CONSTEXPR_FUNC float mad(float _a, float _b, float _c);
/// Returns the floating-point remainder of the division operation _a/_b.
///
BX_CONST_FUNC float mod(float _a, float _b);
///
constexpr BX_CONST_FUNC bool equal(float _a, float _b, float _epsilon);
BX_CONSTEXPR_FUNC bool equal(float _a, float _b, float _epsilon);
///
BX_CONST_FUNC bool equal(const float* _a, const float* _b, uint32_t _num, float _epsilon);
@@ -242,19 +242,19 @@ namespace bx
BX_CONST_FUNC float wrap(float _a, float _wrap);
///
constexpr BX_CONST_FUNC float step(float _edge, float _a);
BX_CONSTEXPR_FUNC float step(float _edge, float _a);
///
constexpr BX_CONST_FUNC float pulse(float _a, float _start, float _end);
BX_CONSTEXPR_FUNC float pulse(float _a, float _start, float _end);
///
constexpr BX_CONST_FUNC float smoothStep(float _a);
BX_CONSTEXPR_FUNC float smoothStep(float _a);
///
constexpr BX_CONST_FUNC float bias(float _time, float _bias);
BX_CONSTEXPR_FUNC float bias(float _time, float _bias);
///
constexpr BX_CONST_FUNC float gain(float _time, float _gain);
BX_CONSTEXPR_FUNC float gain(float _time, float _gain);
///
BX_CONST_FUNC float angleDiff(float _a, float _b);
@@ -270,58 +270,58 @@ namespace bx
void store(void* _ptr, const Vec3& _a);
///
constexpr BX_CONST_FUNC Vec3 abs(const Vec3& _a);
BX_CONSTEXPR_FUNC Vec3 abs(const Vec3& _a);
///
constexpr BX_CONST_FUNC Vec3 neg(const Vec3& _a);
BX_CONSTEXPR_FUNC Vec3 neg(const Vec3& _a);
///
constexpr BX_CONST_FUNC Vec3 add(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 add(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 add(const Vec3& _a, float _b);
BX_CONSTEXPR_FUNC Vec3 add(const Vec3& _a, float _b);
///
constexpr BX_CONST_FUNC Vec3 sub(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 sub(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 sub(const Vec3& _a, float _b);
BX_CONSTEXPR_FUNC Vec3 sub(const Vec3& _a, float _b);
///
constexpr BX_CONST_FUNC Vec3 mul(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 mul(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 mul(const Vec3& _a, float _b);
BX_CONSTEXPR_FUNC Vec3 mul(const Vec3& _a, float _b);
///
constexpr BX_CONST_FUNC Vec3 mad(const Vec3& _a, const Vec3& _b, const Vec3& _c);
BX_CONSTEXPR_FUNC Vec3 mad(const Vec3& _a, const Vec3& _b, const Vec3& _c);
///
constexpr BX_CONST_FUNC float dot(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC float dot(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 cross(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 cross(const Vec3& _a, const Vec3& _b);
///
BX_CONST_FUNC float length(const Vec3& _a);
///
constexpr BX_CONST_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, float _t);
BX_CONSTEXPR_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, float _t);
///
constexpr BX_CONST_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, const Vec3& _t);
BX_CONSTEXPR_FUNC Vec3 lerp(const Vec3& _a, const Vec3& _b, const Vec3& _t);
///
BX_CONST_FUNC Vec3 normalize(const Vec3& _a);
///
constexpr BX_CONST_FUNC Vec3 min(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 min(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 max(const Vec3& _a, const Vec3& _b);
BX_CONSTEXPR_FUNC Vec3 max(const Vec3& _a, const Vec3& _b);
///
constexpr BX_CONST_FUNC Vec3 rcp(const Vec3& _a);
BX_CONSTEXPR_FUNC Vec3 rcp(const Vec3& _a);
///
void calcTangentFrame(Vec3& _outT, Vec3& _outB, const Vec3& _n);

View File

@@ -16,214 +16,214 @@ namespace bx
constexpr uint16_t kHalfFloatTwo = UINT16_C(0x4000);
///
constexpr BX_CONST_FUNC uint32_t uint32_li(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_li(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_dec(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_dec(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_inc(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_inc(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_not(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_not(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_neg(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_neg(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_ext(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_ext(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_and(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_and(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_andc(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_andc(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_xor(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_xor(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_xorl(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_xorl(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_or(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_or(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_orc(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_orc(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_sll(uint32_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint32_t uint32_sll(uint32_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint32_t uint32_srl(uint32_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint32_t uint32_srl(uint32_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint32_t uint32_sra(uint32_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint32_t uint32_sra(uint32_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint32_t uint32_rol(uint32_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint32_t uint32_rol(uint32_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint32_t uint32_ror(uint32_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint32_t uint32_ror(uint32_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint32_t uint32_add(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_add(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_sub(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_sub(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_mul(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_mul(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_div(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_div(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_mod(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_mod(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmpeq(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmpneq(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmplt(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmplt(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmple(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmple(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmpgt(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_cmpge(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_cmpge(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_setnz(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_setnz(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_satsub(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_satsub(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_satmul(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_satmul(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_sels(uint32_t test, uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_selb(uint32_t _mask, uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_imin(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_imin(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_imax(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_imax(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c);
BX_CONSTEXPR_FUNC uint32_t uint32_min(uint32_t _a, uint32_t _b, uint32_t _c);
///
constexpr BX_CONST_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b);
///
constexpr BX_CONST_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c);
BX_CONSTEXPR_FUNC uint32_t uint32_max(uint32_t _a, uint32_t _b, uint32_t _c);
///
constexpr BX_CONST_FUNC uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max);
BX_CONSTEXPR_FUNC uint32_t uint32_clamp(uint32_t _a, uint32_t _min, uint32_t _max);
///
constexpr BX_CONST_FUNC uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max);
BX_CONSTEXPR_FUNC uint32_t uint32_iclamp(uint32_t _a, uint32_t _min, uint32_t _max);
///
constexpr BX_CONST_FUNC uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max);
BX_CONSTEXPR_FUNC uint32_t uint32_incwrap(uint32_t _val, uint32_t _min, uint32_t _max);
///
constexpr BX_CONST_FUNC uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max);
BX_CONSTEXPR_FUNC uint32_t uint32_decwrap(uint32_t _val, uint32_t _min, uint32_t _max);
/// Count number of bits set.
///
constexpr BX_CONST_FUNC uint32_t uint32_cntbits(uint32_t _val);
BX_CONSTEXPR_FUNC uint32_t uint32_cntbits(uint32_t _val);
/// Count number of leading zeros.
///
constexpr BX_CONST_FUNC uint32_t uint32_cntlz(uint32_t _val);
BX_CONSTEXPR_FUNC uint32_t uint32_cntlz(uint32_t _val);
///
constexpr BX_CONST_FUNC uint32_t uint32_cnttz(uint32_t _val);
BX_CONSTEXPR_FUNC uint32_t uint32_cnttz(uint32_t _val);
///
constexpr BX_CONST_FUNC uint32_t uint32_part1by1(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_part1by1(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_part1by2(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_part1by2(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_testpow2(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_testpow2(uint32_t _a);
///
constexpr BX_CONST_FUNC uint32_t uint32_nextpow2(uint32_t _a);
BX_CONSTEXPR_FUNC uint32_t uint32_nextpow2(uint32_t _a);
/// Count number of bits set.
///
constexpr BX_CONST_FUNC uint32_t uint64_cntbits(uint64_t _val);
BX_CONSTEXPR_FUNC uint32_t uint64_cntbits(uint64_t _val);
/// Count number of leading zeros.
///
constexpr BX_CONST_FUNC uint32_t uint64_cntlz(uint64_t _val);
BX_CONSTEXPR_FUNC uint32_t uint64_cntlz(uint64_t _val);
///
constexpr BX_CONST_FUNC uint32_t uint64_cnttz(uint64_t _val);
BX_CONSTEXPR_FUNC uint32_t uint64_cnttz(uint64_t _val);
///
constexpr BX_CONST_FUNC uint64_t uint64_sll(uint64_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint64_t uint64_sll(uint64_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint64_t uint64_srl(uint64_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint64_t uint64_srl(uint64_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint64_t uint64_sra(uint64_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint64_t uint64_sra(uint64_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint64_t uint64_rol(uint64_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint64_t uint64_rol(uint64_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint64_t uint64_ror(uint64_t _a, int32_t _sa);
BX_CONSTEXPR_FUNC uint64_t uint64_ror(uint64_t _a, int32_t _sa);
///
constexpr BX_CONST_FUNC uint64_t uint64_add(uint64_t _a, uint64_t _b);
BX_CONSTEXPR_FUNC uint64_t uint64_add(uint64_t _a, uint64_t _b);
///
constexpr BX_CONST_FUNC uint64_t uint64_sub(uint64_t _a, uint64_t _b);
BX_CONSTEXPR_FUNC uint64_t uint64_sub(uint64_t _a, uint64_t _b);
///
constexpr BX_CONST_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b);
BX_CONSTEXPR_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b);
/// Greatest common divisor.
///
constexpr BX_CONST_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b);
/// Least common multiple.
///
constexpr BX_CONST_FUNC uint32_t uint32_lcm(uint32_t _a, uint32_t _b);
BX_CONSTEXPR_FUNC uint32_t uint32_lcm(uint32_t _a, uint32_t _b);
/// Align to arbitrary stride.
///
constexpr BX_CONST_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride);
BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride);
/// Align to arbitrary stride and 16-bytes.
///
constexpr BX_CONST_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride);
BX_CONSTEXPR_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride);
/// Align to arbitrary stride and 256-bytes.
///
constexpr BX_CONST_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride);
BX_CONSTEXPR_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride);
/// Convert float to half-float.
///