Browse Source

Blackfin - read_time primitive
note this primitive currently uses a union to concatenate 2x32bit registers because of poor compiler support
around DImode and asm.

Originally committed as revision 9302 to svn://svn.ffmpeg.org/ffmpeg/trunk

Marc Hoffman 18 years ago
parent
commit
f70c273902
1 changed files with 14 additions and 1 deletions
  1. 14 1
      libavutil/common.h

+ 14 - 1
libavutil/common.h

@@ -267,7 +267,7 @@ static inline int ff_get_fourcc(const char *s){
         }\
     }
 
-#if defined(ARCH_X86) || defined(ARCH_POWERPC)
+#if defined(ARCH_X86) || defined(ARCH_POWERPC) || defined(ARCH_BFIN)
 #if defined(ARCH_X86_64)
 static inline uint64_t read_time(void)
 {
@@ -286,6 +286,19 @@ static inline long long read_time(void)
         );
         return l;
 }
+#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)
 {