aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Antonio Sanchez <cantonios@google.com>2021-02-26 13:59:46 -0800
committerGravatar Antonio Sanchez <cantonios@google.com>2021-02-26 14:08:40 -0800
commit29ebd84cb779eae01302a9f1e40cf06ca5eeeceb (patch)
treeb5f4e4991a36f234b68be6d7c2b00d62d060f8e3 /test
parentfe19714f8094a2b6d6dab0cdd3c32874d0ad66b9 (diff)
Fix NEON sqrt for 32-bit, add prsqrt.
With !406, we accidentally broke arm 32-bit NEON builds, since `vsqrt_f32` is only available for 64-bit. Here we add back the `rsqrt` implementation for 32-bit, relying on a `prsqrt` implementation with better handling of edge cases. Note that several of the 32-bit NEON packet tests are currently failing - either due to denormal handling (NEON versions flush to zero, but scalar paths don't) or due to accuracy (e.g. sin/cos).
Diffstat (limited to 'test')
-rw-r--r--test/packetmath.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index ae7168fc8..ceafb9002 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -504,6 +504,7 @@ void packetmath() {
data1[i] = numext::abs(internal::random<Scalar>());
}
CHECK_CWISE1_IF(PacketTraits::HasSqrt, numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_IF(PacketTraits::HasRsqrt, numext::rsqrt, internal::prsqrt);
}
// Notice that this definition works for complex types as well.
@@ -532,7 +533,7 @@ void packetmath_real() {
CHECK_CWISE1_IF(PacketTraits::HasLog, std::log, internal::plog);
CHECK_CWISE1_IF(PacketTraits::HasLog, log2, internal::plog2);
- CHECK_CWISE1_IF(PacketTraits::HasRsqrt, 1 / std::sqrt, internal::prsqrt);
+ CHECK_CWISE1_IF(PacketTraits::HasRsqrt, numext::rsqrt, internal::prsqrt);
for (int i = 0; i < size; ++i) {
data1[i] = Scalar(internal::random<double>(-1, 1) * std::pow(10., internal::random<double>(-3, 3)));