Commit 0775c88f authored by Michael Niedermayer's avatar Michael Niedermayer

START/STOP_TIMER for ppc32 by (Luca Barbato: lu_zero, gentoo org)

Originally committed as revision 4298 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 2935001c
...@@ -456,9 +456,9 @@ if((y)<(x)){\ ...@@ -456,9 +456,9 @@ if((y)<(x)){\
} }
#endif #endif
#if defined(ARCH_X86) || defined(ARCH_X86_64) #if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_POWERPC)
#if defined(ARCH_X86_64) #if defined(ARCH_X86_64)
static inline uint64_t rdtsc(void) static inline uint64_t read_time(void)
{ {
uint64_t a, d; uint64_t a, d;
asm volatile( "rdtsc\n\t" asm volatile( "rdtsc\n\t"
...@@ -466,8 +466,8 @@ static inline uint64_t rdtsc(void) ...@@ -466,8 +466,8 @@ static inline uint64_t rdtsc(void)
); );
return (d << 32) | (a & 0xffffffff); return (d << 32) | (a & 0xffffffff);
} }
#else #elif defined(ARCH_X86)
static inline long long rdtsc(void) static inline long long read_time(void)
{ {
long long l; long long l;
asm volatile( "rdtsc\n\t" asm volatile( "rdtsc\n\t"
...@@ -475,14 +475,33 @@ static inline long long rdtsc(void) ...@@ -475,14 +475,33 @@ static inline long long rdtsc(void)
); );
return l; return l;
} }
#else //FIXME check ppc64
static inline uint64_t read_time(void)
{
uint32_t tbu, tbl, temp;
/* from section 2.2.1 of the 32-bit PowerPC PEM */
__asm__ __volatile__(
"1:\n"
"mftbu %2\n"
"mftb %0\n"
"mftbu %1\n"
"cmpw %2,%1\n"
"bne 1b\n"
: "=r"(tbl), "=r"(tbu), "=r"(temp)
:
: "cc");
return (((uint64_t)tbu)<<32) | (uint64_t)tbl;
}
#endif #endif
#define START_TIMER \ #define START_TIMER \
uint64_t tend;\ uint64_t tend;\
uint64_t tstart= rdtsc();\ uint64_t tstart= read_time();\
#define STOP_TIMER(id) \ #define STOP_TIMER(id) \
tend= rdtsc();\ tend= read_time();\
{\ {\
static uint64_t tsum=0;\ static uint64_t tsum=0;\
static int tcount=0;\ static int tcount=0;\
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment