- basic arch check for HAVE_RDTSC
authorDavid I. Lehn <dlehn@users.sourceforge.net>
Wed, 16 May 2001 05:04:44 +0000 (05:04 +0000)
committerDavid I. Lehn <dlehn@users.sourceforge.net>
Wed, 16 May 2001 05:04:44 +0000 (05:04 +0000)
Original commit message from CVS:
- basic arch check for HAVE_RDTSC
- use common gst_trace_read_tsc() for RDTSC call
- add untested function to do ascii dump of trace data

acconfig.h
configure.in
gst/gsttrace.c
gst/gsttrace.h
libs/idct/ieeetest.c
test/lat.c

index 5ce0799..5f869fa 100644 (file)
@@ -21,6 +21,8 @@
 #undef HAVE_CPU_ARM
 #undef HAVE_CPU_SPARC
 
+#undef HAVE_RDTSC
+
 #undef HAVE_GDK_PIXBUF
 #undef HAVE_LIBGHTTP
 #undef HAVE_LIBMMX
index 382e207..fb4c4ec 100644 (file)
@@ -117,16 +117,22 @@ dnl ==============================================
 
 dnl Determine CPU
 case "x${target_cpu}" in
-  xi?86)     HAVE_CPU_I386=yes ;
-             AC_DEFINE(HAVE_CPU_I386) ;;
-  xpowerpc)  HAVE_CPU_PPC=yes ;
-             AC_DEFINE(HAVE_CPU_PPC) ;;
-  xalpha)    HAVE_CPU_ALPHA=yes ;
-             AC_DEFINE(HAVE_CPU_ALPHA) ;;
-  xarm*)     HAVE_CPU_ARM=yes ;
-             AC_DEFINE(HAVE_CPU_ARM) ;;
-  xsparc*)   HAVE_CPU_SPARC=yes ;
-             AC_DEFINE(HAVE_CPU_SPARC) ;;
+  xi?86 | k?) HAVE_CPU_I386=yes
+              AC_DEFINE(HAVE_CPU_I386)
+              dnl FIXME could use some better detection
+              dnl       (ie CPUID)
+              case "x${target_cpu}" in
+                xi386 | xi486) ;;
+                *)             AC_DEFINE(HAVE_RDTSC) ;;
+              esac ;;
+  xpowerpc)   HAVE_CPU_PPC=yes
+              AC_DEFINE(HAVE_CPU_PPC) ;;
+  xalpha)     HAVE_CPU_ALPHA=yes
+              AC_DEFINE(HAVE_CPU_ALPHA) ;;
+  xarm*)      HAVE_CPU_ARM=yes
+              AC_DEFINE(HAVE_CPU_ARM) ;;
+  xsparc*)    HAVE_CPU_SPARC=yes
+              AC_DEFINE(HAVE_CPU_SPARC) ;;
 esac
 
 dnl Determine endianness
@@ -720,6 +726,10 @@ if test "x$HAVE_LINUX_VIDEODEV" = xyes; then
   AC_DEFINE(HAVE_LINUX_VIDEODEV)
 fi
 
+if test "x$HAVE_MPEG2DEC" = xyes; then
+  AC_DEFINE(HAVE_MPEG2DEC)
+fi
+
 dnl #############################
 dnl # Set automake conditionals #
 dnl #############################
index 182cdc9..fb0c7b1 100644 (file)
 #include "gsttrace.h"
 
 
-#ifdef HAVE_RDTS
 __inline__ void read_tsc(guint64 *dst) {
-  __asm__ __volatile__
-    ("rdtsc"
-     : "=a" (*(guint32 *)dst), "=d" (*(((guint32 *)dst) + 1))
-     :
-     : "eax", "edx");
-}
+#ifdef HAVE_RDTSC
+  guint64 tsc;
+  __asm__ __volatile__ ("rdtsc" : "=A" (tsc));
+  *dst = tsc;
 #else
-__inline__ void read_tsc(guint64 *dst) {
-}
+  *dst = 0;
 #endif
+}
 
 void gst_trace_read_tsc(guint64 *dst) {
   read_tsc(dst);
@@ -91,6 +88,27 @@ void gst_trace_flush(GstTrace *trace) {
   trace->bufoffset = 0;
 }
 
+void gst_trace_text_flush(GstTrace *trace) {
+  int i;
+  const int strsize = 20+1 + 10+1 + 10+1 + 112+1 + 1;
+  char str[strsize];
+
+  if (!trace) {
+    trace = _gst_trace_default;
+    if (!trace ) return;
+  }
+
+  for (i=0; i<trace->bufoffset; i++) {
+    snprintf(str, strsize, "%20lld %10d %10d %s\n",
+        trace->buf[i].timestamp,
+        trace->buf[i].sequence,
+        trace->buf[i].data,
+        trace->buf[i].message);
+    write(trace->fd,str,strlen(str));
+  }
+  trace->bufoffset = 0;
+}
+
 void gst_trace_set_default(GstTrace *trace) {
   g_return_if_fail(trace != NULL);
   _gst_trace_default = trace;
index 9af6e6e..3be17ea 100644 (file)
@@ -52,6 +52,7 @@ GstTrace*     gst_trace_new                   (guchar *filename, gint size);
 
 void           gst_trace_destroy               (GstTrace *trace);
 void           gst_trace_flush                 (GstTrace *trace);
+void           gst_trace_text_flush            (GstTrace *trace);
 #define        gst_trace_get_size(trace)       ((trace)->bufsize)
 #define        gst_trace_get_offset(trace)     ((trace)->bufoffset)
 #define        gst_trace_get_remaining(trace)  ((trace)->bufsize - (trace)->bufoffset)
index 396c25e..d78158e 100644 (file)
@@ -39,20 +39,6 @@ char * meets (double val, double limit)
   return ((fabs(val) <= limit) ? "meets" : "FAILS");
 }
 
-#ifdef HAVE_RDTS
-__inline__ void read_tsc(guint64 *dst) {
-  __asm__ __volatile__
-    ("rdtsc"
-     : "=a" (*(guint32 *)dst), "=d" (*(((guint32 *)dst) + 1))
-     :
-     : "eax", "edx");
-}
-#else
-__inline__ void read_tsc(guint64 *dst) {
-}
-#endif
-
-
 int
 main(int argc, char **argv)
 {
@@ -128,9 +114,9 @@ main(int argc, char **argv)
       memcpy(testout, refcoefs, sizeof(DCTELEM)*DCTSIZE2);
         }
 
-        read_tsc(&tscstart);
+        gst_trace_read_tsc(&tscstart);
     gst_idct_convert(idct, testout);
-        read_tsc(&tscstop);
+        gst_trace_read_tsc(&tscstop);
         //printf("time %llu, %llu %lld\n", tscstart, tscstop, tscstop-tscstart);
         if (tscstop - tscstart < tscmin) tscmin = tscstop-tscstart;
         if (tscstop - tscstart > tscmax) tscmax = tscstop-tscstart;
index 714334e..ef900f7 100644 (file)
@@ -1,9 +1,6 @@
 #include <gst/gst.h>
 #include <stdlib.h>
 
-#define rdtscll(result) \
-        __asm__ __volatile__("rdtsc" : "=A" (result) : /* No inputs */ )
-
 static guint64 max = 0, min = -1, total = 0;
 static guint count = 0;
 static guint print_del = 1;
@@ -11,16 +8,14 @@ static guint iterations = 0;
 static guint mhz = 0;
 
 void handoff_src(GstElement *src, GstBuffer *buf, gpointer user_data) {
-  guint64 start;
-  rdtscll(start);
-  GST_BUFFER_TIMESTAMP(buf) = start;
+  gst_trace_read_tsc(&GST_BUFFER_TIMESTAMP(buf));
 }
 
 void handoff_sink(GstElement *sink, GstBuffer *buf, gpointer user_data) {
   guint64 end, d, avg;
   guint avg_ns;
 
-  rdtscll(end);
+  gst_trace_read_tsc(&end);
   d = end - GST_BUFFER_TIMESTAMP(buf);
   if (d > max) max = d;
   if (d < min) min = d;