aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/packetmath.cpp
diff options
context:
space:
mode:
authorGravatar Pedro Caldeira <pedro.caldeira@ibm.com>2020-06-24 15:27:26 -0500
committerGravatar Pedro Caldeira <pedro.caldeira@ibm.com>2020-08-10 13:22:01 -0500
commit704798d1df4866be335ca013da19a44791f85a7e (patch)
tree803adcc571ff585d3f6de996c969b08985a2d1b7 /test/packetmath.cpp
parent46f8a18567731925e06a7389a6c611e1dc420ea8 (diff)
Add support for Bfloat16 to use vector instructions on Altivec
architecture
Diffstat (limited to 'test/packetmath.cpp')
-rw-r--r--test/packetmath.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index 0fe29102a..c8ea3139e 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -247,6 +247,20 @@ void packetmath_boolean_mask_ops() {
data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0);
}
CHECK_CWISE2_IF(true, internal::pcmp_eq, internal::pcmp_eq);
+
+ //Test (-0) == (0) for signed operations
+ for (int i = 0; i < PacketSize; ++i) {
+ data1[i] = Scalar(-0.0);
+ data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0);
+ }
+ CHECK_CWISE2_IF(true, internal::pcmp_eq, internal::pcmp_eq);
+
+ //Test NaN
+ for (int i = 0; i < PacketSize; ++i) {
+ data1[i] = std::numeric_limits<Scalar>::quiet_NaN();
+ data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0);
+ }
+ CHECK_CWISE2_IF(true, internal::pcmp_eq, internal::pcmp_eq);
}
// Packet16b representing bool does not support ptrue, pandnot or pcmp_eq, since the scalar path
@@ -255,6 +269,22 @@ template<>
void packetmath_boolean_mask_ops<bool, internal::packet_traits<bool>::type>() {}
template <typename Scalar, typename Packet>
+void packetmath_minus_zero_add() {
+ const int PacketSize = internal::unpacket_traits<Packet>::size;
+ const int size = 2 * PacketSize;
+ EIGEN_ALIGN_MAX Scalar data1[size];
+ EIGEN_ALIGN_MAX Scalar data2[size];
+ EIGEN_ALIGN_MAX Scalar ref[size];
+
+ for (int i = 0; i < PacketSize; ++i) {
+ data1[i] = Scalar(-0.0);
+ data1[i + PacketSize] = Scalar(-0.0);
+ }
+ CHECK_CWISE2_IF(internal::packet_traits<Scalar>::HasAdd, REF_ADD, internal::padd);
+}
+
+
+template <typename Scalar, typename Packet>
void packetmath() {
typedef internal::packet_traits<Scalar> PacketTraits;
const int PacketSize = internal::unpacket_traits<Packet>::size;
@@ -454,6 +484,7 @@ void packetmath() {
packetmath_boolean_mask_ops<Scalar, Packet>();
packetmath_pcast_ops_runner<Scalar, Packet>::run();
+ packetmath_minus_zero_add<Scalar, Packet>();
}
template <typename Scalar, typename Packet>