added sparc cothreads

Original commit message from CVS:
added sparc cothreads
This commit is contained in:
Erik Walthinsen 2001-03-02 18:30:37 +00:00
parent 3c79a3d66f
commit ca4e87219c
6 changed files with 52 additions and 0 deletions

View file

@ -19,6 +19,7 @@
#undef HAVE_CPU_PPC #undef HAVE_CPU_PPC
#undef HAVE_CPU_ALPHA #undef HAVE_CPU_ALPHA
#undef HAVE_CPU_ARM #undef HAVE_CPU_ARM
#undef HAVE_CPU_SPARC
#undef HAVE_GDK_PIXBUF #undef HAVE_GDK_PIXBUF
#undef HAVE_LIBGHTTP #undef HAVE_LIBGHTTP

View file

@ -124,6 +124,8 @@ case "x${target_cpu}" in
AC_DEFINE(HAVE_CPU_ALPHA) ;; AC_DEFINE(HAVE_CPU_ALPHA) ;;
xarm*) HAVE_CPU_ARM=yes ; xarm*) HAVE_CPU_ARM=yes ;
AC_DEFINE(HAVE_CPU_ARM) ;; AC_DEFINE(HAVE_CPU_ARM) ;;
xsparc*) HAVE_CPU_SPARC=yes ;
AC_DEFINE(HAVE_CPU_SPARC) ;;
esac esac
dnl Determine endianness 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_PPC, test "x$HAVE_CPU_PPC" = "xyes")
AM_CONDITIONAL(HAVE_CPU_ALPHA, test "x$HAVE_CPU_ALPHA" = "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_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_GDK_PIXBUF, test "x$USE_GDK_PIXBUF" = "xyes")
AM_CONDITIONAL(HAVE_LIBGHTTP, test "x$USE_LIBGHTTP" = "xyes") AM_CONDITIONAL(HAVE_LIBGHTTP, test "x$USE_LIBGHTTP" = "xyes")
AM_CONDITIONAL(HAVE_LIBMMX, test "x$USE_LIBMMX" = "xyes") AM_CONDITIONAL(HAVE_LIBMMX, test "x$USE_LIBMMX" = "xyes")

View file

@ -124,6 +124,7 @@ noinst_HEADERS = \
gstppc.h \ gstppc.h \
gstalpha.h \ gstalpha.h \
gstarm.h \ gstarm.h \
gstsparc.h \
gstpropsprivate.h gstpropsprivate.h
CFLAGS = $(LIBGST_CFLAGS) CFLAGS = $(LIBGST_CFLAGS)

View file

@ -268,6 +268,9 @@ cothread_switch (cothread_state *thread)
ctx->current = thread->threadnum; ctx->current = thread->threadnum;
/* save the current stack pointer, frame pointer, and pc */ /* save the current stack pointer, frame pointer, and pc */
#ifdef GST_ARCH_PRESETJMP
GST_ARCH_PRESETJMP();
#endif
enter = setjmp(current->jmp); enter = setjmp(current->jmp);
if (enter != 0) { if (enter != 0) {
GST_DEBUG (0,"enter thread #%d %d %p<->%p (%d)\n",current->threadnum, enter, GST_DEBUG (0,"enter thread #%d %d %p<->%p (%d)\n",current->threadnum, enter,

View file

@ -35,6 +35,8 @@
#include "gstalpha.h" #include "gstalpha.h"
#elif defined(HAVE_CPU_ARM) #elif defined(HAVE_CPU_ARM)
#include "gstarm.h" #include "gstarm.h"
#elif defined(HAVE_CPU_SPARC)
#include "gstsparc.h"
#else #else
#error Need to know about this architecture, or have a generic implementation #error Need to know about this architecture, or have a generic implementation
#endif #endif

42
gst/gstsparc.h Normal file
View file

@ -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__ */