aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/common.h
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2005-05-21 21:37:07 +0000
committerMichael Niedermayer <michaelni@gmx.at>2005-05-21 21:37:07 +0000
commit0775c88f4ecef954987e82cdd83c805ff004a5ec (patch)
tree9a133cd2c688b16c22f9c420510dba327f31796c /libavcodec/common.h
parent2935001c86fe647fde79395f15a4cf679cc1c3b2 (diff)
downloadffmpeg-0775c88f4ecef954987e82cdd83c805ff004a5ec.tar.gz
START/STOP_TIMER for ppc32 by (Luca Barbato: lu_zero, gentoo org)
Originally committed as revision 4298 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/common.h')
-rw-r--r--libavcodec/common.h31
1 files changed, 25 insertions, 6 deletions
diff --git a/libavcodec/common.h b/libavcodec/common.h
index 5a47c4a3c8..75ef127f24 100644
--- a/libavcodec/common.h
+++ b/libavcodec/common.h
@@ -456,9 +456,9 @@ if((y)<(x)){\
}
#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)
-static inline uint64_t rdtsc(void)
+static inline uint64_t read_time(void)
{
uint64_t a, d;
asm volatile( "rdtsc\n\t"
@@ -466,8 +466,8 @@ static inline uint64_t rdtsc(void)
);
return (d << 32) | (a & 0xffffffff);
}
-#else
-static inline long long rdtsc(void)
+#elif defined(ARCH_X86)
+static inline long long read_time(void)
{
long long l;
asm volatile( "rdtsc\n\t"
@@ -475,14 +475,33 @@ static inline long long rdtsc(void)
);
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
#define START_TIMER \
uint64_t tend;\
-uint64_t tstart= rdtsc();\
+uint64_t tstart= read_time();\
#define STOP_TIMER(id) \
-tend= rdtsc();\
+tend= read_time();\
{\
static uint64_t tsum=0;\
static int tcount=0;\