diff options
author | Oded Gabbay <oded.gabbay@gmail.com> | 2015-06-27 20:27:10 +0300 |
---|---|---|
committer | Oded Gabbay <oded.gabbay@gmail.com> | 2015-12-27 22:37:42 +0200 |
commit | 36772a6438c108d5bd8ebe250d51cdd485fce307 (patch) | |
tree | 1a5943752de0624b6677f310cb03e7d7828956c2 | |
parent | 69cab13474783082babd76a4f79514c44e056255 (diff) |
sse2: add debug infrastructuredebug
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
-rw-r--r-- | pixman/pixman-sse2.c | 136 |
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; |