Split libavutil/timer.h per architecture
[ffmpeg.git] / libavutil / timer.h
index 709e12f..78342d7 100644 (file)
 #include <stdint.h>
 #include "config.h"
 
-#if ARCH_X86 || ARCH_PPC || ARCH_BFIN
-#define AV_READ_TIME read_time
-#if ARCH_X86
-static inline uint64_t read_time(void)
-{
-    uint32_t a, d;
-    __asm__ volatile("rdtsc\n\t"
-                 : "=a" (a), "=d" (d));
-    return ((uint64_t)d << 32) + a;
-}
-#elif ARCH_BFIN
-static inline uint64_t read_time(void)
-{
-    union {
-        struct {
-            unsigned lo;
-            unsigned hi;
-        } p;
-        unsigned long long c;
-    } t;
-    __asm__ volatile ("%0=cycles; %1=cycles2;" : "=d" (t.p.lo), "=d" (t.p.hi));
-    return t.c;
-}
-#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;
-}
+#if   ARCH_BFIN
+#   include "bfin/timer.h"
+#elif ARCH_PPC
+#   include "ppc/timer.h"
+#elif ARCH_X86
+#   include "x86/timer.h"
 #endif
-#elif HAVE_GETHRTIME
-#define AV_READ_TIME gethrtime
+
+#if !defined(AV_READ_TIME) && HAVE_GETHRTIME
+#   define AV_READ_TIME gethrtime
 #endif
 
 #ifdef AV_READ_TIME