mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-24 16:18:16 +00:00
more cothreads cleanup, and first pass at ARM code
Original commit message from CVS: more cothreads cleanup, and first pass at ARM code
This commit is contained in:
parent
284014fed1
commit
5ed8c467bf
5 changed files with 51 additions and 15 deletions
|
@ -104,6 +104,7 @@ noinst_HEADERS = \
|
||||||
gsti386.h \
|
gsti386.h \
|
||||||
gstppc.h \
|
gstppc.h \
|
||||||
gstalpha.h \
|
gstalpha.h \
|
||||||
|
gstarm.h \
|
||||||
gstpropsprivate.h
|
gstpropsprivate.h
|
||||||
|
|
||||||
CFLAGS = $(LIBGST_CFLAGS)
|
CFLAGS = $(LIBGST_CFLAGS)
|
||||||
|
|
|
@ -123,6 +123,7 @@ cothread_create (cothread_context *ctx)
|
||||||
s->threadnum = ctx->nthreads;
|
s->threadnum = ctx->nthreads;
|
||||||
s->flags = 0;
|
s->flags = 0;
|
||||||
s->sp = ((int *)s + COTHREAD_STACKSIZE);
|
s->sp = ((int *)s + COTHREAD_STACKSIZE);
|
||||||
|
// is this needed anymore?
|
||||||
s->top_sp = s->sp;
|
s->top_sp = s->sp;
|
||||||
|
|
||||||
GST_INFO (GST_CAT_COTHREADS,"created cothread #%d: %p at sp:%p", ctx->nthreads, s, 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;
|
ctx->current = thread->threadnum;
|
||||||
|
|
||||||
/* save the current stack pointer, frame pointer, and pc */
|
/* save the current stack pointer, frame pointer, and pc */
|
||||||
// GET_SP(current->sp);
|
|
||||||
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,
|
||||||
|
@ -282,14 +282,13 @@ cothread_switch (cothread_state *thread)
|
||||||
/* restore stack pointer and other stuff of new cothread */
|
/* restore stack pointer and other stuff of new cothread */
|
||||||
if (thread->flags & COTHREAD_STARTED) {
|
if (thread->flags & COTHREAD_STARTED) {
|
||||||
GST_DEBUG (0,"in thread \n");
|
GST_DEBUG (0,"in thread \n");
|
||||||
// SET_SP(thread->sp);
|
|
||||||
// switch to it
|
// switch to it
|
||||||
longjmp(thread->jmp,1);
|
longjmp(thread->jmp,1);
|
||||||
} else {
|
} else {
|
||||||
SETUP_STACK(thread->sp);
|
GST_ARCH_SETUP_STACK(thread->sp);
|
||||||
SET_SP(thread->sp);
|
GST_ARCH_SET_SP(thread->sp);
|
||||||
// start it
|
// start it
|
||||||
CALL(cothread_stub);
|
GST_ARCH_CALL(cothread_stub);
|
||||||
GST_DEBUG (0,"exit thread \n");
|
GST_DEBUG (0,"exit thread \n");
|
||||||
ctx->current = 0;
|
ctx->current = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,9 +50,10 @@ struct _cothread_state {
|
||||||
char **argv;
|
char **argv;
|
||||||
|
|
||||||
int flags;
|
int flags;
|
||||||
int *sp;
|
void *sp;
|
||||||
int *top_sp;
|
// is this needed any more?
|
||||||
int *pc;
|
void *top_sp;
|
||||||
|
void *pc;
|
||||||
jmp_buf jmp;
|
jmp_buf jmp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -27,18 +27,16 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CPU_I386
|
#if defined(HAVE_CPU_I386)
|
||||||
#include "gsti386.h"
|
#include "gsti386.h"
|
||||||
#else
|
#elif defined (HAVE_CPU_PPC)
|
||||||
#ifdef HAVE_CPU_PPC
|
|
||||||
#include "gstppc.h"
|
#include "gstppc.h"
|
||||||
#else
|
#elif defined(HAVE_CPU_ALPHA)
|
||||||
#ifdef HAVE_CPU_ALPHA
|
|
||||||
#include "gstalpha.h"
|
#include "gstalpha.h"
|
||||||
|
#elif defined(HAVE_CPU_ARM)
|
||||||
|
#include "gstarm.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
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __GST_GSTARCH_H__ */
|
#endif /* __GST_GSTARCH_H__ */
|
||||||
|
|
37
gst/gstarm.h
Normal file
37
gst/gstarm.h
Normal file
|
@ -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__ */
|
Loading…
Reference in a new issue