diff options
author | Pedro Caldeira <pedro.caldeira@ibm.com> | 2020-06-24 15:27:26 -0500 |
---|---|---|
committer | Pedro Caldeira <pedro.caldeira@ibm.com> | 2020-08-10 13:22:01 -0500 |
commit | 704798d1df4866be335ca013da19a44791f85a7e (patch) | |
tree | 803adcc571ff585d3f6de996c969b08985a2d1b7 /test/packetmath.cpp | |
parent | 46f8a18567731925e06a7389a6c611e1dc420ea8 (diff) |
Add support for Bfloat16 to use vector instructions on Altivec
architecture
Diffstat (limited to 'test/packetmath.cpp')
-rw-r--r-- | test/packetmath.cpp | 31 |
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> |