File indexing completed on 2025-01-31 10:25:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifndef VC_AVX_DEBUG_H_
0029 #define VC_AVX_DEBUG_H_
0030
0031 #ifndef NDEBUG
0032 #include "vector.h"
0033 #include <iostream>
0034 #include <iomanip>
0035 #endif
0036
0037 namespace Vc_VERSIONED_NAMESPACE
0038 {
0039 namespace AVX
0040 {
0041 template <typename T, typename U> struct AddType {
0042 const U &d;
0043 };
0044 template <typename T, typename U> AddType<T, U> addType(const U &x) { return {x}; }
0045
0046 #ifdef NDEBUG
0047 class DebugStream
0048 {
0049 public:
0050 DebugStream(const char *, const char *, int) {}
0051 template<typename T> inline DebugStream &operator<<(const T &) { return *this; }
0052 };
0053 #else
0054 class DebugStream
0055 {
0056 private:
0057 template<typename T, typename V> static void printVector(V _x)
0058 {
0059 enum { Size = sizeof(V) / sizeof(T) };
0060 union { V v; T m[Size]; } x = { _x };
0061 std::cerr << '[' << std::setprecision(24) << x.m[0];
0062 for (int i = 1; i < Size; ++i) {
0063 std::cerr << ", " << std::setprecision(24) << x.m[i];
0064 }
0065 std::cerr << ']';
0066 }
0067 public:
0068 DebugStream(const char *func, const char *file, int line)
0069 {
0070 std::cerr << "\033[1;40;33mDEBUG: " << file << ':' << line << ' ' << func << ' ';
0071 }
0072
0073 template<typename T> DebugStream &operator<<(const T &x) { std::cerr << x; return *this; }
0074
0075 template <typename T, typename U> DebugStream &operator<<(AddType<T, U> &&x)
0076 {
0077 printVector<T, U>(x.d);
0078 return *this;
0079 }
0080 DebugStream &operator<<(__m128 x) {
0081 printVector<float, __m128>(x);
0082 return *this;
0083 }
0084 DebugStream &operator<<(__m256 x) {
0085 printVector<float, __m256>(x);
0086 return *this;
0087 }
0088 DebugStream &operator<<(__m128d x) {
0089 printVector<double, __m128d>(x);
0090 return *this;
0091 }
0092 DebugStream &operator<<(__m256d x) {
0093 printVector<double, __m256d>(x);
0094 return *this;
0095 }
0096 DebugStream &operator<<(__m128i x) {
0097 printVector<unsigned int, __m128i>(x);
0098 return *this;
0099 }
0100 DebugStream &operator<<(__m256i x) {
0101 printVector<unsigned int, __m256i>(x);
0102 return *this;
0103 }
0104
0105 ~DebugStream()
0106 {
0107 std::cerr << "\033[0m" << std::endl;
0108 }
0109 };
0110 #endif
0111
0112 #ifdef Vc_DEBUG
0113 #undef Vc_DEBUG
0114 #endif
0115 #ifdef Vc_MSVC
0116 #define Vc_DEBUG Vc::AVX::DebugStream(__FUNCSIG__, __FILE__, __LINE__)
0117 #else
0118 #define Vc_DEBUG Vc::AVX::DebugStream(__PRETTY_FUNCTION__, __FILE__, __LINE__)
0119 #endif
0120
0121 }
0122 }
0123
0124 #endif