Warning, file /include/Vc/sse/debug.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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_SSE_DEBUG_H_
0029 #define VC_SSE_DEBUG_H_
0030
0031 #ifndef NDEBUG
0032 #include "types.h"
0033 #include <iostream>
0034 #include <iomanip>
0035 #endif
0036
0037 namespace Vc_VERSIONED_NAMESPACE
0038 {
0039 namespace SSE
0040 {
0041
0042 #ifdef NDEBUG
0043 class DebugStream
0044 {
0045 public:
0046 DebugStream(const char *, const char *, int) {}
0047 template<typename T> inline DebugStream &operator<<(const T &) { return *this; }
0048 };
0049 #else
0050 class DebugStream
0051 {
0052 private:
0053 static char hexChar(char x) { return x + (x > 9 ? 87 : 48); }
0054 template<typename T, typename V> static void printVector(V _x)
0055 {
0056 std::cerr << "0x";
0057 const auto bytes = reinterpret_cast<const std::uint8_t *>(&_x);
0058 for (std::size_t i = 0; i < sizeof(V); ++i) {
0059 std::cerr << hexChar(bytes[i] >> 4) << hexChar(bytes[i] & 0xf);
0060 if (i % 4 == 3) {
0061 std::cerr << '\'';
0062 }
0063 }
0064
0065 enum { Size = sizeof(V) / sizeof(T) };
0066 union { V v; T m[Size]; } x = { _x };
0067 std::cerr << " = [" << std::setprecision(24) << x.m[0];
0068 for (int i = 1; i < Size; ++i) {
0069 std::cerr << ", " << std::setprecision(24) << x.m[i];
0070 }
0071 std::cerr << ']';
0072 }
0073 public:
0074 DebugStream(const char *func, const char *file, int line)
0075 {
0076 std::cerr << "\033[1;40;33mDEBUG: " << file << ':' << line << ' ' << func << ' ';
0077 }
0078
0079 template<typename T> DebugStream &operator<<(const T &x) { std::cerr << x; return *this; }
0080
0081 DebugStream &operator<<(__m128 x) {
0082 printVector<float, __m128>(x);
0083 return *this;
0084 }
0085 DebugStream &operator<<(__m128d x) {
0086 printVector<double, __m128d>(x);
0087 return *this;
0088 }
0089 DebugStream &operator<<(__m128i x) {
0090 printVector<int, __m128i>(x);
0091 return *this;
0092 }
0093
0094 ~DebugStream()
0095 {
0096 std::cerr << "\033[0m" << std::endl;
0097 }
0098 };
0099 #endif
0100
0101 #define Vc_DEBUG Vc::SSE::DebugStream(__PRETTY_FUNCTION__, __FILE__, __LINE__)
0102
0103 }
0104 }
0105
0106 #endif