From ed0bbc22681681a16b7d45b05133c38a0b82006f Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Mon, 29 Mar 2021 18:01:20 -0400 Subject: formatting + file renames --- common/utility.hpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 common/utility.hpp (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp new file mode 100644 index 0000000..40bc7c4 --- /dev/null +++ b/common/utility.hpp @@ -0,0 +1,30 @@ +#pragma once + +#ifdef _MANAGED + +#include +inline double sqrtsd(double val) { return sqrt(val); } + +#else + +#include +inline double sqrtsd(double val) { + __m128d src = _mm_load_sd(&val); + __m128d dst = _mm_sqrt_sd(src, src); + _mm_store_sd(&val, dst); + return val; +} + +#endif + +inline constexpr double minsd(double a, double b) { + return (a < b) ? a : b; +} + +inline constexpr double maxsd(double a, double b) { + return (b < a) ? a : b; +} + +inline constexpr double clampsd(double v, double lo, double hi) { + return minsd(maxsd(v, lo), hi); +} -- cgit v1.2.3 From 11045335c14371847411b8fb5096f479e18fbf5e Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Mon, 29 Mar 2021 19:57:33 -0400 Subject: add zero/inf/nan guards --- common/utility.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index 40bc7c4..d7b63cf 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -28,3 +28,15 @@ inline constexpr double maxsd(double a, double b) { inline constexpr double clampsd(double v, double lo, double hi) { return minsd(maxsd(v, lo), hi); } + +// returns the unbiased exponent of x if x is normal +inline int ilogb(double x) +{ + union { double f; unsigned long long i; } u = { x }; + return static_cast((u.i >> 52) & 0x7ff) - 0x3ff; +} + +inline bool infnan(double x) +{ + return ilogb(x) == 0x400; +} -- cgit v1.2.3 From 4456e2bc8b9c1ef9c1aa2e3509adc8f456bb5fdc Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 30 Mar 2021 18:26:20 -0400 Subject: put utility in namespace --- common/utility.hpp | 67 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 30 deletions(-) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index d7b63cf..ae14b48 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -1,42 +1,49 @@ #pragma once #ifdef _MANAGED - #include -inline double sqrtsd(double val) { return sqrt(val); } - #else - #include -inline double sqrtsd(double val) { - __m128d src = _mm_load_sd(&val); - __m128d dst = _mm_sqrt_sd(src, src); - _mm_store_sd(&val, dst); - return val; -} - #endif -inline constexpr double minsd(double a, double b) { - return (a < b) ? a : b; -} +namespace rawaccel { -inline constexpr double maxsd(double a, double b) { - return (b < a) ? a : b; -} - -inline constexpr double clampsd(double v, double lo, double hi) { - return minsd(maxsd(v, lo), hi); -} +#ifdef _MANAGED + inline double sqrtsd(double val) { return sqrt(val); } +#else + inline double sqrtsd(double val) { + __m128d src = _mm_load_sd(&val); + __m128d dst = _mm_sqrt_sd(src, src); + _mm_store_sd(&val, dst); + return val; + } +#endif -// returns the unbiased exponent of x if x is normal -inline int ilogb(double x) -{ - union { double f; unsigned long long i; } u = { x }; - return static_cast((u.i >> 52) & 0x7ff) - 0x3ff; -} + constexpr double minsd(double a, double b) + { + return (a < b) ? a : b; + } + + constexpr double maxsd(double a, double b) + { + return (b < a) ? a : b; + } + + constexpr double clampsd(double v, double lo, double hi) + { + return minsd(maxsd(v, lo), hi); + } + + // returns the unbiased exponent of x if x is normal + inline int ilogb(double x) + { + union { double f; unsigned long long i; } u = { x }; + return static_cast((u.i >> 52) & 0x7ff) - 0x3ff; + } + + inline bool infnan(double x) + { + return ilogb(x) == 0x400; + } -inline bool infnan(double x) -{ - return ilogb(x) == 0x400; } -- cgit v1.2.3 From fa3ebfb1eb054ba88824a908c996094bb98e85c5 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 30 Mar 2021 18:27:02 -0400 Subject: refactor lut/motivity --- common/utility.hpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index ae14b48..de90d44 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -34,6 +34,33 @@ namespace rawaccel { return minsd(maxsd(v, lo), hi); } + template + constexpr const T& min(const T& a, const T& b) + { + return (b < a) ? b : a; + } + + template + constexpr const T& max(const T& a, const T& b) + { + return (b < a) ? a : b; + } + + template + constexpr const T& clamp(const T& v, const T& lo, const T& hi) + { + return (v < lo) ? lo : (hi < v) ? hi : v; + } + + constexpr double lerp(double a, double b, double t) + { + double x = a + t * (b - a); + if ((t > 1) == (a < b)) { + return maxsd(x, b); + } + return minsd(x, b); + } + // returns the unbiased exponent of x if x is normal inline int ilogb(double x) { @@ -41,6 +68,14 @@ namespace rawaccel { return static_cast((u.i >> 52) & 0x7ff) - 0x3ff; } + // returns x * 2^n if n is in [-1022, 1023] + inline double scalbn(double x, int n) + { + union { double f; unsigned long long i; } u; + u.i = static_cast(0x3ff + n) << 52; + return x * u.f; + } + inline bool infnan(double x) { return ilogb(x) == 0x400; -- cgit v1.2.3 From 14bde56daf188bfc027dc8ead5b45ec0aa1109d6 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 1 Apr 2021 01:51:31 -0400 Subject: update rest grapher is still broken refactored io / error handling a bit --- common/utility.hpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index de90d44..5f5c186 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -81,4 +81,8 @@ namespace rawaccel { return ilogb(x) == 0x400; } + struct noop { + template + constexpr void operator()(Ts&&...) const noexcept {} + }; } -- cgit v1.2.3 From d8140fb31ba622f48756986d4d66db6b6ab8b511 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 1 Apr 2021 23:28:41 -0400 Subject: use callbacks for applying accel --- common/utility.hpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index 5f5c186..a8e5f83 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -85,4 +85,11 @@ namespace rawaccel { template constexpr void operator()(Ts&&...) const noexcept {} }; + + template struct remove_ref { using type = T; }; + template struct remove_ref { using type = T; }; + template struct remove_ref { using type = T; }; + + template + using remove_ref_t = typename remove_ref::type; } -- cgit v1.2.3 From c55d1bfd01147fa014ac07d4b03ef3cad8427ae6 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 8 Apr 2021 02:30:01 -0400 Subject: optimize a bit/refactor modify --- common/utility.hpp | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'common/utility.hpp') diff --git a/common/utility.hpp b/common/utility.hpp index a8e5f83..cbd19e3 100644 --- a/common/utility.hpp +++ b/common/utility.hpp @@ -1,24 +1,7 @@ #pragma once -#ifdef _MANAGED -#include -#else -#include -#endif - namespace rawaccel { -#ifdef _MANAGED - inline double sqrtsd(double val) { return sqrt(val); } -#else - inline double sqrtsd(double val) { - __m128d src = _mm_load_sd(&val); - __m128d dst = _mm_sqrt_sd(src, src); - _mm_store_sd(&val, dst); - return val; - } -#endif - constexpr double minsd(double a, double b) { return (a < b) ? a : b; @@ -92,4 +75,14 @@ namespace rawaccel { template using remove_ref_t = typename remove_ref::type; + + template + struct is_same { static constexpr bool value = false; }; + + template + struct is_same { static constexpr bool value = true; }; + + template + inline constexpr bool is_same_v = is_same::value; + } -- cgit v1.2.3