File indexing completed on 2025-01-31 10:25:43
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