diff --git a/libs/util/test/test-quat.c b/libs/util/test/test-quat.c index 64a8cd75b..57e38f8dd 100644 --- a/libs/util/test/test-quat.c +++ b/libs/util/test/test-quat.c @@ -352,7 +352,7 @@ static struct { {0, 0, 1, 1, 0, 0, 0, 1, 0}}, -#if defined(__i686__) && defined(__OPTIMIZE__) +#if (defined(__i686__) || defined(__aarch64__)) && defined(__OPTIMIZE__) // the fp unit carries more precision than a 32-bit float, so // the close-to-zero errors are different {{s05, 0.0, 0.0, s05}, diff --git a/libs/util/test/test-simd.c b/libs/util/test/test-simd.c index 7cba48f3b..bc0c4c140 100644 --- a/libs/util/test/test-simd.c +++ b/libs/util/test/test-simd.c @@ -191,7 +191,11 @@ static vec4d_test_t vec4d_tests[] = { T(crossd, one, up, { 1, -1, 0} ), // This one fails when optimizing with -mfma (which is why fma is not // used): ulp errors in z and w - T(crossd, qtest, qtest, {0, 0, 0, 0} ), + T(crossd, qtest, qtest, {0, 0, 0, 0}, +#if defined(__aarch64__) + {0, 0, -2.1938006966593093e-17, 1.3322676295501878e-17}, +#endif + ), T(qmuld, qident, qident, qident ), T(qmuld, qident, right, right ), @@ -213,7 +217,11 @@ static vec4d_test_t vec4d_tests[] = { T(qmuld, one, { 2, 2, 2, -2 }, { 0, 0, 0, -8 } ), // This one fails when optimizing with -mfma (which is why fma is not // used): ulp error in z - T(qmuld, qtest, qtest, {0.768, 0.576, 0, -0.28} ), + T(qmuld, qtest, qtest, {0.768, 0.576, 0, -0.28}, +#if defined(__aarch64__) + {0, 0, -2.1938006966593093e-17, 0}, +#endif + ), // The one vector is not unit (magnitude 2), so using it as a rotation // quaternion results in scaling by 4. However, it still has the effect @@ -316,12 +324,16 @@ static vec4f_test_t vec4f_tests[] = { T(crossf, one, right, { 0, 1, -1} ), T(crossf, one, forward, {-1, 0, 1} ), T(crossf, one, up, { 1, -1, 0} ), +#ifdef __aarch64__ + T(crossf, qtest, qtest, {0, 0, -1.47819534e-09, -1.43051153e-08} ), +#else #if !defined(__SSE__) && !defined(__OPTIMIZE__) // when not optimizing and SSE is not available (but ok when // optimizing) T(crossf, qtest, qtest, {0, 0, -1.47819534e-09, 0} ), #else T(crossf, qtest, qtest, {0, 0, 0, 0} ), +#endif #endif T(qmulf, qident, qident, qident ), @@ -343,14 +355,18 @@ static vec4f_test_t vec4f_tests[] = { T(qmulf, one, one, { 2, 2, 2, -2 } ), T(qmulf, one, { 2, 2, 2, -2 }, { 0, 0, 0, -8 } ), T(qmulf, qtest, qtest, {0.768, 0.576, 0, -0.28}, +#ifdef __aarch64__ + {0, 6e-8, -1.47819534e-09, 2.98023224e-08} +#else #if !defined(__SSE__) && !defined(__OPTIMIZE__) // when not optimizing and SSE is not available (but ok when // optimizing) {0, 6e-8, -1.47819534e-09, 3e-8} -#elif !defined( __SSE__) +#elif !defined(__SSE__) {0, 6e-8, 0, 6e-8} #else {0, 6e-8, 0, 3e-8} +#endif #endif ), @@ -373,18 +389,18 @@ static vec4f_test_t vec4f_tests[] = { T(qvmulf, qtest, right, {0.5392, 0.6144, -0.576, 0}, {0, -5.9e-8, -6e-8, 0} ), T(qvmulf, qtest, forward, {0.6144, 0.1808, 0.768, 0}, -#if !defined(__SSE__) && !defined(__OPTIMIZE__) +#if !(defined(__SSE__) || defined(__aarch64__)) && !defined(__OPTIMIZE__) {-5.9e-8, 0, 0, 0} -#elif !defined(__SSE__) +#elif !(defined(__SSE__) || defined(__aarch64__)) {-5.9e-8, 3e-8, 0, 0} #else {-5.9e-8, 1.5e-8, 0, 0} #endif ), T(qvmulf, qtest, up, {0.576, -0.768, -0.28, 0}, -#if !defined(__SSE__) && !defined(__OPTIMIZE__) +#if !(defined(__SSE__) || defined(__aarch64__)) && !defined(__OPTIMIZE__) {6e-8, 0, 3e-8, 0} -#elif !defined(__SSE__) +#elif !(defined(__SSE__) || defined(__aarch64__)) {6e-8, 0, 6e-8, 0} #else {6e-8, 0, 3e-8, 0} @@ -393,18 +409,18 @@ static vec4f_test_t vec4f_tests[] = { T(vqmulf, right, qtest, {0.5392, 0.6144, 0.576, 0}, {0, -5.9e-8, 5.9e-8, 0} ), T(vqmulf, forward, qtest, {0.6144, 0.1808, -0.768, 0}, -#if !defined(__SSE__) && !defined(__OPTIMIZE__) +#if !(defined(__SSE__) || defined(__aarch64__)) && !defined(__OPTIMIZE__) {-5.9e-8, 0, 0, 0} -#elif !defined(__SSE__) +#elif !(defined(__SSE__) || defined(__aarch64__)) {-5.9e-8, 3e-8, 0, 0} #else {-5.9e-8, 1.5e-8, 0, 0} #endif ), T(vqmulf, up, qtest, {-0.576, 0.768, -0.28, 0}, -#if !defined(__SSE__) && !defined(__OPTIMIZE__) +#if !(defined(__SSE__) || defined(__aarch64__)) && !defined(__OPTIMIZE__) {-5.9e-8, 0, 3e-8, 0} -#elif !defined(__SSE__) +#elif !(defined(__SSE__) || defined(__aarch64__)) {-5.9e-8, 0, 6e-8, 0} #else {-5.9e-8, 0, 3e-8, 0} @@ -501,6 +517,7 @@ run_vec4d_tests (void) printf ("E: " VEC4D_FMT "\n", VEC4_EXP(expect)); printf ("e: " VEC4D_FMT "\n", VEC4_EXP(test->expect)); printf ("u: " VEC4D_FMT "\n", VEC4_EXP(test->ulp_errors)); + printf ("U: " VEC4D_FMT "\n", VEC4_EXP(result - test->expect)); } } return ret; @@ -526,6 +543,7 @@ run_vec4f_tests (void) printf ("E: " VEC4F_FMT "\n", VEC4_EXP(expect)); printf ("e: " VEC4F_FMT "\n", VEC4_EXP(test->expect)); printf ("u: " VEC4F_FMT "\n", VEC4_EXP(test->ulp_errors)); + printf ("U: " VEC4F_FMT "\n", VEC4_EXP(result - test->expect)); } } return ret;