more cothreads cleanup, and first pass at ARM code
authorErik Walthinsen <omega@temple-baptist.org>
Fri, 19 Jan 2001 09:14:42 +0000 (09:14 +0000)
committerErik Walthinsen <omega@temple-baptist.org>
Fri, 19 Jan 2001 09:14:42 +0000 (09:14 +0000)
Original commit message from CVS:
more cothreads cleanup, and first pass at ARM code

gst/Makefile.am
gst/cothreads.c
gst/cothreads.h
gst/gstarch.h
gst/gstarm.h [new file with mode: 0644]

index 94a1334..fb80219 100644 (file)
@@ -104,6 +104,7 @@ noinst_HEADERS =    \
        gsti386.h       \
        gstppc.h        \
        gstalpha.h      \
+       gstarm.h        \
        gstpropsprivate.h
 
 CFLAGS = $(LIBGST_CFLAGS)
index f28db02..1c54093 100644 (file)
@@ -123,6 +123,7 @@ cothread_create (cothread_context *ctx)
   s->threadnum = ctx->nthreads;
   s->flags = 0;
   s->sp = ((int *)s + COTHREAD_STACKSIZE);
+  // is this needed anymore?
   s->top_sp = s->sp;
 
   GST_INFO (GST_CAT_COTHREADS,"created cothread #%d: %p at sp:%p", ctx->nthreads, s, s->sp);
@@ -267,7 +268,6 @@ cothread_switch (cothread_state *thread)
   ctx->current = thread->threadnum;
 
   /* save the current stack pointer, frame pointer, and pc */
-//  GET_SP(current->sp);
   enter = setjmp(current->jmp);
   if (enter != 0) {
     GST_DEBUG (0,"enter thread #%d %d %p<->%p (%d)\n",current->threadnum, enter, 
@@ -282,14 +282,13 @@ cothread_switch (cothread_state *thread)
   /* restore stack pointer and other stuff of new cothread */
   if (thread->flags & COTHREAD_STARTED) {
     GST_DEBUG (0,"in thread \n");
-//    SET_SP(thread->sp);
     // switch to it
     longjmp(thread->jmp,1);
   } else {
-    SETUP_STACK(thread->sp);
-    SET_SP(thread->sp);
+    GST_ARCH_SETUP_STACK(thread->sp);
+    GST_ARCH_SET_SP(thread->sp);
     // start it
-    CALL(cothread_stub);
+    GST_ARCH_CALL(cothread_stub);
     GST_DEBUG (0,"exit thread \n");
     ctx->current = 0;
   }
index c00dd42..8854f61 100644 (file)
@@ -50,9 +50,10 @@ struct _cothread_state {
   char **argv;
 
   int flags;
-  int *sp;
-  int *top_sp;
-  int *pc;
+  void *sp;
+  // is this needed any more?
+  void *top_sp;
+  void *pc;
   jmp_buf jmp;
 };
 
index 3d09d59..d3b2216 100644 (file)
 #include "config.h"
 #endif
 
-#ifdef HAVE_CPU_I386
+#if defined(HAVE_CPU_I386)
 #include "gsti386.h"
-#else
-#ifdef HAVE_CPU_PPC
+#elif defined (HAVE_CPU_PPC)
 #include "gstppc.h"
-#else
-#ifdef HAVE_CPU_ALPHA
+#elif defined(HAVE_CPU_ALPHA)
 #include "gstalpha.h"
+#elif defined(HAVE_CPU_ARM)
+#include "gstarm.h"
 #else
 #error Need to know about this architecture, or have a generic implementation
 #endif
-#endif
-#endif
 
 #endif /* __GST_GSTARCH_H__ */
diff --git a/gst/gstarm.h b/gst/gstarm.h
new file mode 100644 (file)
index 0000000..3b626e9
--- /dev/null
@@ -0,0 +1,37 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *
+ * gstppc.h: Header for PPC-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_GSTARM_H__
+#define __GST_GSTARM_H__
+
+#define GST_ARCH_SET_SP(stackpointer) \
+    __asm__( "mov%?\t%!sp, %0" : : "r"(stackpointer));
+
+#define GST_ARCH_CALL(target) \
+    __asm__( "mov%?\t%!pc, %1" : : "r"(target) );
+
+// 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_GSTARM_H__ */