X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmath%2Fm_debug_util.h;h=2e67db8e55d61ae584bcce3332731af112f96a49;hb=7cd57e35b6427068b87c2fdb6c2aadef57f53520;hp=c07cdcf7ba7520dc56daec49955e6ab90ba089ea;hpb=b8f29f29eb611c92d43aaf8ffcd2d9743b3af967;p=mesa.git diff --git a/src/mesa/math/m_debug_util.h b/src/mesa/math/m_debug_util.h index c07cdcf7ba7..2e67db8e55d 100644 --- a/src/mesa/math/m_debug_util.h +++ b/src/mesa/math/m_debug_util.h @@ -29,7 +29,7 @@ #define __M_DEBUG_UTIL_H__ -#ifdef DEBUG /* This code only used for debugging */ +#ifdef DEBUG_MATH /* This code only used for debugging */ /* Comment this out to deactivate the cycle counter. @@ -185,6 +185,44 @@ extern char *mesa_profile; #endif +#elif defined(__x86_64__) + +#define rdtscll(val) do { \ + unsigned int a,d; \ + __asm__ volatile("rdtsc" : "=a" (a), "=d" (d)); \ + (val) = ((unsigned long)a) | (((unsigned long)d)<<32); \ +} while(0) + +/* Copied from i386 PIII version */ +#define INIT_COUNTER() \ + do { \ + int cycle_i; \ + counter_overhead = LONG_MAX; \ + for ( cycle_i = 0 ; cycle_i < 16 ; cycle_i++ ) { \ + unsigned long cycle_tmp1, cycle_tmp2; \ + rdtscll(cycle_tmp1); \ + rdtscll(cycle_tmp2); \ + if ( counter_overhead > (cycle_tmp2 - cycle_tmp1) ) { \ + counter_overhead = cycle_tmp2 - cycle_tmp1; \ + } \ + } \ + } while (0) + + +#define BEGIN_RACE(x) \ + x = LONG_MAX; \ + for ( cycle_i = 0 ; cycle_i < 10 ; cycle_i++ ) { \ + unsigned long cycle_tmp1, cycle_tmp2; \ + rdtscll(cycle_tmp1); \ + +#define END_RACE(x) \ + rdtscll(cycle_tmp2); \ + if ( x > (cycle_tmp2 - cycle_tmp1) ) { \ + x = cycle_tmp2 - cycle_tmp1; \ + } \ + } \ + x -= counter_overhead; + #elif defined(__sparc__) #define INIT_COUNTER() \ @@ -193,8 +231,8 @@ extern char *mesa_profile; #define BEGIN_RACE(x) \ x = LONG_MAX; \ for (cycle_i = 0; cycle_i <10; cycle_i++) { \ - register long cycle_tmp1 asm("l0"); \ - register long cycle_tmp2 asm("l1"); \ + register long cycle_tmp1 __asm__("l0"); \ + register long cycle_tmp2 __asm__("l1"); \ /* rd %tick, %l0 */ \ __asm__ __volatile__ (".word 0xa1410000" : "=r" (cycle_tmp1)); /* save timestamp */ @@ -248,9 +286,9 @@ static int significand_match( GLfloat a, GLfloat b ) return 0; } - frexp( a, &a_ex ); - frexp( b, &b_ex ); - frexp( d, &d_ex ); + FREXPF( a, &a_ex ); + FREXPF( b, &b_ex ); + FREXPF( d, &d_ex ); if ( a_ex < b_ex ) { return a_ex - d_ex; @@ -265,7 +303,7 @@ enum { NIL = 0, ONE = 1, NEG = -1, VAR = 2 }; */ #if defined(__GNUC__) # define ALIGN16(type, array) type array __attribute__ ((aligned (16))) -#elif defined(__MSC__) +#elif defined(_MSC_VER) # define ALIGN16(type, array) type array __declspec(align(16)) /* GH: Does this work? */ #elif defined(__WATCOMC__) # define ALIGN16(type, array) /* Watcom does not support this */ @@ -277,6 +315,6 @@ enum { NIL = 0, ONE = 1, NEG = -1, VAR = 2 }; #endif -#endif /* DEBUG */ +#endif /* DEBUG_MATH */ #endif /* __M_DEBUG_UTIL_H__ */