summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOded Gabbay <oded.gabbay@gmail.com>2015-06-27 20:27:10 +0300
committerOded Gabbay <oded.gabbay@gmail.com>2015-12-27 22:37:42 +0200
commit36772a6438c108d5bd8ebe250d51cdd485fce307 (patch)
tree1a5943752de0624b6677f310cb03e7d7828956c2
parent69cab13474783082babd76a4f79514c44e056255 (diff)
sse2: add debug infrastructuredebug
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
-rw-r--r--pixman/pixman-sse2.c136
1 files changed, 136 insertions, 0 deletions
diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
index 8955103..404349f 100644
--- a/pixman/pixman-sse2.c
+++ b/pixman/pixman-sse2.c
@@ -39,6 +39,142 @@
#include "pixman-combine32.h"
#include "pixman-inlines.h"
+#undef DEBUG_MODE
+
+#ifdef DEBUG_MODE
+
+static force_inline int
+get_x(const __m128i vec){
+ return _mm_cvtsi128_si32 (vec);
+}
+
+static force_inline int
+get_y(const __m128i vec){
+ return _mm_cvtsi128_si32 (_mm_shuffle_epi32(vec,0x55));
+}
+
+static force_inline int
+get_z(const __m128i vec){
+ return _mm_cvtsi128_si32 (_mm_shuffle_epi32(vec,0xAA));
+}
+
+static force_inline int
+get_w(const __m128i vec){
+ return _mm_cvtsi128_si32 (_mm_shuffle_epi32(vec,0xFF));
+}
+
+union SSE128i {
+ __m128i sse;
+ char array[16];
+};
+
+static void __print_uchar_vector(__m128i input, char *name, int decimal, int cond)
+{
+ int i;
+ unsigned char element[16];
+ union SSE128i sse8;
+
+ if (!cond)
+ return;
+
+ sse8.sse = _mm_loadu_si128(&input);
+ element[0] = sse8.array[0];
+ element[1] = sse8.array[1];
+ element[2] = sse8.array[2];
+ element[3] = sse8.array[3];
+ element[4] = sse8.array[4];
+ element[5] = sse8.array[5];
+ element[6] = sse8.array[6];
+ element[7] = sse8.array[7];
+ element[8] = sse8.array[8];
+ element[9] = sse8.array[9];
+ element[10] = sse8.array[10];
+ element[11] = sse8.array[11];
+ element[12] = sse8.array[12];
+ element[13] = sse8.array[13];
+ element[14] = sse8.array[14];
+ element[15] = sse8.array[15];
+
+
+ printf("%s: ", name);
+ for (i = 0 ; i < 16 ; i++) {
+ printf("0x%x ", element[i]);
+ if (decimal)
+ printf("(%u), ", element[i]);
+ }
+ printf("\n");
+}
+
+static void __print_uint_vector(__m128i input, char *name, int decimal, int cond)
+{
+ int i;
+ unsigned int element[4];
+
+ if (!cond)
+ return;
+
+ printf("%s: ", name);
+ element[0] = get_x(input);
+ element[1] = get_y(input);
+ element[2] = get_z(input);
+ element[3] = get_w(input);
+
+ for (i = 0 ; i < 4 ; i++) {
+ printf("0x%08x ", element[i]);
+ if (decimal)
+ printf("(%u), ", element[i]);
+ }
+ printf("\n");
+}
+
+static void __print_ushort_vector(__m128i input, char *name, int decimal, int cond)
+{
+ int i;
+ unsigned short element[8];
+
+ if (!cond)
+ return;
+
+ printf("%s: ", name);
+ element[0] = _mm_extract_epi16(input, 0);
+ element[1] = _mm_extract_epi16(input, 1);
+ element[2] = _mm_extract_epi16(input, 2);
+ element[3] = _mm_extract_epi16(input, 3);
+ element[4] = _mm_extract_epi16(input, 4);
+ element[5] = _mm_extract_epi16(input, 5);
+ element[6] = _mm_extract_epi16(input, 6);
+ element[7] = _mm_extract_epi16(input, 7);
+
+ for (i = 0 ; i < 8 ; i++) {
+ printf("0x%04x ", element[i]);
+ if (decimal)
+ printf("(%u), ", element[i]);
+ }
+ printf("\n");
+}
+
+#define print_uchar_vector(v,s,d,c) __print_uchar_vector(v,s,d,c);
+#define print_uint_vector(v,s,d,c) __print_uint_vector(v,s,d,c);
+#define print_ushort_vector(v,s,d,c) __print_ushort_vector(v,s,d,c);
+#define my_exit(c) exit(c)
+#define my_printf printf
+
+#else
+
+#define print_uchar_vector(v,s,d,c)
+#define print_uint_vector(v,s,d,c)
+#define print_ushort_vector(v,s,d,c)
+#define my_exit(c)
+
+int empty_printf (const char *__restrict __format, ...)
+{
+ return 0;
+}
+
+#define my_printf empty_printf
+
+#endif /* DEBUG_MODE */
+
static __m128i mask_0080;
static __m128i mask_00ff;
static __m128i mask_0101;