added sparc cothreads
authorErik Walthinsen <omega@temple-baptist.org>
Fri, 2 Mar 2001 18:30:37 +0000 (18:30 +0000)
committerErik Walthinsen <omega@temple-baptist.org>
Fri, 2 Mar 2001 18:30:37 +0000 (18:30 +0000)
Original commit message from CVS:
added sparc cothreads

acconfig.h
configure.in
gst/Makefile.am
gst/cothreads.c
gst/gstarch.h
gst/gstsparc.h [new file with mode: 0644]

index bee8daf..b79e609 100644 (file)
@@ -19,6 +19,7 @@
 #undef HAVE_CPU_PPC
 #undef HAVE_CPU_ALPHA
 #undef HAVE_CPU_ARM
+#undef HAVE_CPU_SPARC
 
 #undef HAVE_GDK_PIXBUF
 #undef HAVE_LIBGHTTP
index dd25724..b0bb657 100644 (file)
@@ -124,6 +124,8 @@ case "x${target_cpu}" in
              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
@@ -564,6 +566,7 @@ AM_CONDITIONAL(HAVE_CPU_I386,       test "x$HAVE_CPU_I386" = "xyes")
 AM_CONDITIONAL(HAVE_CPU_PPC,        test "x$HAVE_CPU_PPC" = "xyes")
 AM_CONDITIONAL(HAVE_CPU_ALPHA,      test "x$HAVE_CPU_ALPHA" = "xyes")
 AM_CONDITIONAL(HAVE_CPU_ARM,        test "x$HAVE_CPU_ARM" = "xyes")
+AM_CONDITIONAL(HAVE_CPU_SPARC       test "x$HAVE_CPU_SPARC" = "xyes")
 AM_CONDITIONAL(HAVE_GDK_PIXBUF,     test "x$USE_GDK_PIXBUF" = "xyes")
 AM_CONDITIONAL(HAVE_LIBGHTTP,       test "x$USE_LIBGHTTP" = "xyes")
 AM_CONDITIONAL(HAVE_LIBMMX,         test "x$USE_LIBMMX" = "xyes")
index 317e4e4..d25c9f9 100644 (file)
@@ -124,6 +124,7 @@ noinst_HEADERS =    \
        gstppc.h        \
        gstalpha.h      \
        gstarm.h        \
+       gstsparc.h      \
        gstpropsprivate.h
 
 CFLAGS = $(LIBGST_CFLAGS)
index 8a938f1..a2e9aa6 100644 (file)
@@ -268,6 +268,9 @@ cothread_switch (cothread_state *thread)
   ctx->current = thread->threadnum;
 
   /* save the current stack pointer, frame pointer, and pc */
+#ifdef GST_ARCH_PRESETJMP
+  GST_ARCH_PRESETJMP();
+#endif
   enter = setjmp(current->jmp);
   if (enter != 0) {
     GST_DEBUG (0,"enter thread #%d %d %p<->%p (%d)\n",current->threadnum, enter, 
index d3b2216..d78e768 100644 (file)
@@ -35,6 +35,8 @@
 #include "gstalpha.h"
 #elif defined(HAVE_CPU_ARM)
 #include "gstarm.h"
+#elif defined(HAVE_CPU_SPARC)
+#include "gstsparc.h"
 #else
 #error Need to know about this architecture, or have a generic implementation
 #endif
diff --git a/gst/gstsparc.h b/gst/gstsparc.h
new file mode 100644 (file)
index 0000000..8dca391
--- /dev/null
@@ -0,0 +1,42 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *
+ * gstsparc.h: Header for Sparc-specific architecture issues
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GSTSPARC_H__
+#define __GST_GSTSPARC_H__
+
+#define GST_ARCH_SET_SP(stackpointer) \
+    __asm__( "ta 3\n\t"
+             "mov %0, %%sp" : : "r"(stackpointer));
+
+#define GST_ARCH_CALL(target) \
+    __asm__( "call %0,0\n\t"
+             "nop" : : "r"(target) );
+
+#define GST_ARCH_PRESETJMP() \
+    __asm__( "ta 3" );
+
+// Need to get more information about the stackframe format
+// and get the fields more correct.  Check GDB sources maybe?
+
+#define GST_ARCH_SETUP_STACK(sp) sp -= 4
+
+#endif /* __GST_GSTSPARC_H__ */