From 746747f01f8c5fe77900326faed14599e2ca0e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Tue, 18 Apr 2023 19:18:03 -0700 Subject: [PATCH] Neon: Fixed sqrt. --- include/bx/inline/simd128_neon.inl | 2 +- tests/math_test.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/bx/inline/simd128_neon.inl b/include/bx/inline/simd128_neon.inl index 207f2e7..ff1a5e4 100644 --- a/include/bx/inline/simd128_neon.inl +++ b/include/bx/inline/simd128_neon.inl @@ -653,7 +653,7 @@ BX_SIMD128_IMPLEMENT_TEST(yzw, yzww); BX_SIMD_FORCE_INLINE simd128_neon_t simd_sqrt(simd128_neon_t _a) { const simd128_neon_t rsqrt = simd_rsqrt(_a); - const simd128_neon_t result = simd_rcp(rsqrt); + const simd128_neon_t result = simd_mul(_a, rsqrt); return result; } diff --git a/tests/math_test.cpp b/tests/math_test.cpp index 5f359d4..eebcb0e 100644 --- a/tests/math_test.cpp +++ b/tests/math_test.cpp @@ -17,9 +17,13 @@ TEST_CASE("isFinite, isInfinite, isNan", "") { union { uint32_t ui; float f; } u = { uint32_t(ii) }; +#if BX_PLATFORM_OSX + BX_UNUSED(u); +#else REQUIRE(::isnanf(u.f) == bx::isNan(u.f) ); REQUIRE(::finitef(u.f) == bx::isFinite(u.f) ); REQUIRE(::isinff(u.f) == bx::isInfinite(u.f) ); +#endif // BX_PLATFORM_OSX } } @@ -106,6 +110,10 @@ TEST_CASE("libm", "") REQUIRE(bx::isEqual(bx::rsqrt(xx), 1.0f/::sqrtf(xx), 0.00001f) ); } + REQUIRE(bx::isNan(bx::sqrt(-1.0f) ) ); + REQUIRE(bx::isEqual(bx::sqrt(0.0f), 0.0f, 0.0f) ); + REQUIRE(bx::isEqual(bx::sqrt(1.0f), 1.0f, 0.0f) ); + for (float xx = 0.0f; xx < 1000000.0f; xx += 1000.f) { bx::write(writer, &err, "sqrt(%f) == %f (expected: %f)\n", xx, bx::sqrt(xx), ::sqrtf(xx) );