Blackfin - read_time primitive
authorMarc Hoffman <mmhoffm@gmail.com>
Wed, 13 Jun 2007 11:09:07 +0000 (11:09 +0000)
committerMarc Hoffman <mmhoffm@gmail.com>
Wed, 13 Jun 2007 11:09:07 +0000 (11:09 +0000)
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

libavutil/common.h

index 313658c..b9fd06d 100644 (file)
@@ -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)
 {