2010-06-15 Joel Sherrill <joel.sherrill@oarcorp.com>

PR 1561/cpukit
	* .cvsignore, ChangeLog, Makefile.am, Makefile.in, README, context.S,
	cpu.c, preinstall.am, rtems/asm.h, rtems/score/cpu.h,
	rtems/score/sparc64.h, rtems/score/types.h: New files.
This commit is contained in:
Joel Sherrill
2010-06-15 22:43:56 +00:00
parent 591b76084c
commit c86da31cb9
12 changed files with 2766 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View File

@@ -0,0 +1,31 @@
2010-06-15 Joel Sherrill <joel.sherrill@oarcorp.com>
PR 1561/cpukit
* .cvsignore, ChangeLog, Makefile.am, Makefile.in, README, context.S,
cpu.c, preinstall.am, rtems/asm.h, rtems/score/cpu.h,
rtems/score/sparc64.h, rtems/score/types.h: New files.
2010-05-10 Gedare Bloom <gedare@gwmail.gwu.edu>
* README: Explain separation of score between here and libcpu.
2010-05-03 Gedare Bloom <gedare@gwmail.gwu.edu>
* rtems/score/cpu.h, context.S, cpu.c: Remove privileged
registers from context.
2010-05-03 Gedare Bloom <gedare@gwmail.gwu.edu>
* cpu.c: Remove interrupt handling code. Moved to libcpu.
2010-05-03 Gedare Bloom <gedare@gwmail.gwu.edu>
* context.S: renamed cpu_asm.S to context.S
2010-05-02 Gedare Bloom <gedare@gwmail.gwu.edu>
* cpu_asm.S: Remove interrupt handling code. Moved to libcpu.
2009-10-19 Eugen Leontie <eugen@gwu.edu>
Added sparc64 architecture

View File

@@ -0,0 +1,22 @@
##
## $Id$
##
include $(top_srcdir)/automake/compile.am
include_rtemsdir = $(includedir)/rtems
include_rtems_HEADERS = rtems/asm.h
#include_rtems_sparc64dir = $(includedir)/rtems/sparc64
#include_rtems_sparc64_HEADERS =
include_rtems_scoredir = $(includedir)/rtems/score
include_rtems_score_HEADERS = rtems/score/sparc64.h rtems/score/cpu.h \
rtems/score/types.h
noinst_LIBRARIES = libscorecpu.a
libscorecpu_a_SOURCES = context.S cpu.c
libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
include $(srcdir)/preinstall.am
include $(top_srcdir)/automake/local.am

View File

@@ -0,0 +1,654 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = README $(include_rtems_HEADERS) \
$(include_rtems_score_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/preinstall.am \
$(top_srcdir)/automake/compile.am \
$(top_srcdir)/automake/local.am ChangeLog
subdir = score/cpu/sparc64
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aclocal/canonical-target-name.m4 \
$(top_srcdir)/aclocal/canonicalize-tools.m4 \
$(top_srcdir)/aclocal/check-itron.m4 \
$(top_srcdir)/aclocal/check-multiprocessing.m4 \
$(top_srcdir)/aclocal/check-networking.m4 \
$(top_srcdir)/aclocal/check-newlib.m4 \
$(top_srcdir)/aclocal/check-posix.m4 \
$(top_srcdir)/aclocal/check-rtems-debug.m4 \
$(top_srcdir)/aclocal/check-tool.m4 \
$(top_srcdir)/aclocal/enable-itron.m4 \
$(top_srcdir)/aclocal/enable-multiprocessing.m4 \
$(top_srcdir)/aclocal/enable-networking.m4 \
$(top_srcdir)/aclocal/enable-posix.m4 \
$(top_srcdir)/aclocal/enable-rtems-debug.m4 \
$(top_srcdir)/aclocal/env-rtemscpu.m4 \
$(top_srcdir)/aclocal/gcc-pipe.m4 \
$(top_srcdir)/aclocal/gcc-sanity.m4 \
$(top_srcdir)/aclocal/gcc-weak.m4 \
$(top_srcdir)/aclocal/multi.m4 \
$(top_srcdir)/aclocal/multilib.m4 \
$(top_srcdir)/aclocal/prog-cc.m4 \
$(top_srcdir)/aclocal/prog-ccas.m4 \
$(top_srcdir)/aclocal/rtems-ampolish.m4 \
$(top_srcdir)/aclocal/rtems-top.m4 \
$(top_srcdir)/aclocal/version.m4 $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
libscorecpu_a_AR = $(AR) $(ARFLAGS)
libscorecpu_a_LIBADD =
am_libscorecpu_a_OBJECTS = libscorecpu_a-context.$(OBJEXT) \
libscorecpu_a-cpu.$(OBJEXT)
libscorecpu_a_OBJECTS = $(am_libscorecpu_a_OBJECTS)
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/../depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libscorecpu_a_SOURCES)
DIST_SOURCES = $(libscorecpu_a_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(include_rtemsdir)" \
"$(DESTDIR)$(include_rtems_scoredir)"
HEADERS = $(include_rtems_HEADERS) $(include_rtems_score_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMPOLISH3 = @AMPOLISH3@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASDEPMODE = @CCASDEPMODE@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MULTIBUILDTOP = @MULTIBUILDTOP@
MULTISUBDIR = @MULTISUBDIR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PROJECT_INCLUDE = @PROJECT_INCLUDE@
PROJECT_LIB = @PROJECT_LIB@
RANLIB = @RANLIB@
RPCGEN = @RPCGEN@
RTEMS_CCASFLAGS = @RTEMS_CCASFLAGS@
RTEMS_CPPFLAGS = @RTEMS_CPPFLAGS@
RTEMS_CPU = @RTEMS_CPU@
RTEMS_HAS_POSIX_API = @RTEMS_HAS_POSIX_API@
RTEMS_RELLDFLAGS = @RTEMS_RELLDFLAGS@
RTEMS_TOPdir = @RTEMS_TOPdir@
RTEMS_USE_NEWLIB = @RTEMS_USE_NEWLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
dirstamp = @dirstamp@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
multilib_basedir = @multilib_basedir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
project_includedir = @project_includedir@
project_libdir = @project_libdir@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = @RTEMS_CPPFLAGS@
AM_CFLAGS = -Werror=overflow -Werror=pointer-to-int-cast \
-Werror=int-to-pointer-cast
AM_CCASFLAGS = @RTEMS_CCASFLAGS@
include_rtemsdir = $(includedir)/rtems
include_rtems_HEADERS = rtems/asm.h
#include_rtems_sparc64dir = $(includedir)/rtems/sparc64
#include_rtems_sparc64_HEADERS =
include_rtems_scoredir = $(includedir)/rtems/score
include_rtems_score_HEADERS = rtems/score/sparc64.h rtems/score/cpu.h \
rtems/score/types.h
noinst_LIBRARIES = libscorecpu.a
libscorecpu_a_SOURCES = context.S cpu.c
libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
PREINSTALL_DIRS = $(PROJECT_INCLUDE)/rtems/$(dirstamp) \
$(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
DISTCLEANFILES = $(PREINSTALL_DIRS)
PREINSTALL_FILES = $(PROJECT_INCLUDE)/rtems/asm.h \
$(PROJECT_INCLUDE)/rtems/score/sparc64.h \
$(PROJECT_INCLUDE)/rtems/score/cpu.h \
$(PROJECT_INCLUDE)/rtems/score/types.h
CLEANFILES = $(PREINSTALL_FILES)
all: all-am
.SUFFIXES:
.SUFFIXES: .S .c .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/automake/compile.am $(srcdir)/preinstall.am $(top_srcdir)/automake/local.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign score/cpu/sparc64/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign score/cpu/sparc64/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libscorecpu.a: $(libscorecpu_a_OBJECTS) $(libscorecpu_a_DEPENDENCIES)
-rm -f libscorecpu.a
$(libscorecpu_a_AR) libscorecpu.a $(libscorecpu_a_OBJECTS) $(libscorecpu_a_LIBADD)
$(RANLIB) libscorecpu.a
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscorecpu_a-context.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscorecpu_a-cpu.Po@am__quote@
.S.o:
@am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $<
.S.obj:
@am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
libscorecpu_a-context.o: context.S
@am__fastdepCCAS_TRUE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT libscorecpu_a-context.o -MD -MP -MF $(DEPDIR)/libscorecpu_a-context.Tpo -c -o libscorecpu_a-context.o `test -f 'context.S' || echo '$(srcdir)/'`context.S
@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/libscorecpu_a-context.Tpo $(DEPDIR)/libscorecpu_a-context.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='context.S' object='libscorecpu_a-context.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o libscorecpu_a-context.o `test -f 'context.S' || echo '$(srcdir)/'`context.S
libscorecpu_a-context.obj: context.S
@am__fastdepCCAS_TRUE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT libscorecpu_a-context.obj -MD -MP -MF $(DEPDIR)/libscorecpu_a-context.Tpo -c -o libscorecpu_a-context.obj `if test -f 'context.S'; then $(CYGPATH_W) 'context.S'; else $(CYGPATH_W) '$(srcdir)/context.S'; fi`
@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/libscorecpu_a-context.Tpo $(DEPDIR)/libscorecpu_a-context.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='context.S' object='libscorecpu_a-context.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o libscorecpu_a-context.obj `if test -f 'context.S'; then $(CYGPATH_W) 'context.S'; else $(CYGPATH_W) '$(srcdir)/context.S'; fi`
.c.o:
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
libscorecpu_a-cpu.o: cpu.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscorecpu_a-cpu.o -MD -MP -MF $(DEPDIR)/libscorecpu_a-cpu.Tpo -c -o libscorecpu_a-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libscorecpu_a-cpu.Tpo $(DEPDIR)/libscorecpu_a-cpu.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpu.c' object='libscorecpu_a-cpu.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscorecpu_a-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c
libscorecpu_a-cpu.obj: cpu.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscorecpu_a-cpu.obj -MD -MP -MF $(DEPDIR)/libscorecpu_a-cpu.Tpo -c -o libscorecpu_a-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libscorecpu_a-cpu.Tpo $(DEPDIR)/libscorecpu_a-cpu.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpu.c' object='libscorecpu_a-cpu.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscorecpu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscorecpu_a-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`
install-include_rtemsHEADERS: $(include_rtems_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(include_rtemsdir)" || $(MKDIR_P) "$(DESTDIR)$(include_rtemsdir)"
@list='$(include_rtems_HEADERS)'; test -n "$(include_rtemsdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_rtemsdir)'"; \
$(INSTALL_HEADER) $$files "$(DESTDIR)$(include_rtemsdir)" || exit $$?; \
done
uninstall-include_rtemsHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(include_rtems_HEADERS)'; test -n "$(include_rtemsdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(include_rtemsdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(include_rtemsdir)" && rm -f $$files
install-include_rtems_scoreHEADERS: $(include_rtems_score_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(include_rtems_scoredir)" || $(MKDIR_P) "$(DESTDIR)$(include_rtems_scoredir)"
@list='$(include_rtems_score_HEADERS)'; test -n "$(include_rtems_scoredir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_rtems_scoredir)'"; \
$(INSTALL_HEADER) $$files "$(DESTDIR)$(include_rtems_scoredir)" || exit $$?; \
done
uninstall-include_rtems_scoreHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(include_rtems_score_HEADERS)'; test -n "$(include_rtems_scoredir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(include_rtems_scoredir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(include_rtems_scoredir)" && rm -f $$files
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(include_rtemsdir)" "$(DESTDIR)$(include_rtems_scoredir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-include_rtemsHEADERS \
install-include_rtems_scoreHEADERS
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-include_rtemsHEADERS \
uninstall-include_rtems_scoreHEADERS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am \
install-include_rtemsHEADERS \
install-include_rtems_scoreHEADERS install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-include_rtemsHEADERS \
uninstall-include_rtems_scoreHEADERS
@AMPOLISH3_TRUE@$(srcdir)/preinstall.am: Makefile.am
@AMPOLISH3_TRUE@ $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
all-am: $(PREINSTALL_FILES)
$(PROJECT_INCLUDE)/rtems/$(dirstamp):
@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems
@: > $(PROJECT_INCLUDE)/rtems/$(dirstamp)
$(PROJECT_INCLUDE)/rtems/asm.h: rtems/asm.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/asm.h
$(PROJECT_INCLUDE)/rtems/score/$(dirstamp):
@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems/score
@: > $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(PROJECT_INCLUDE)/rtems/score/sparc64.h: rtems/score/sparc64.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/sparc64.h
$(PROJECT_INCLUDE)/rtems/score/cpu.h: rtems/score/cpu.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/cpu.h
$(PROJECT_INCLUDE)/rtems/score/types.h: rtems/score/types.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/types.h
preinstall-am: $(PREINSTALL_FILES)
preinstall: preinstall-am
.PHONY: preinstall preinstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -0,0 +1,15 @@
#
# $Id$
#
A lot of explanation needed, will do when known.
The score/cpu/sparc64 contains only code that can execute without accessing
privileged registers or using privileged instructions. This was done because
the privileged registers differ between the sun4u and sun4v models.
The model specific and privileged code that would normally be found in
score/cpu/sparc64 resides in libcpu/sparc64/@RTEMS_CPU_MODEL@/score or in
libcpu/sparc64/shared/score directory. This is primarily the interrupt
handling code.

View File

@@ -0,0 +1,322 @@
/* context.S
*
* This file contains the basic algorithms for all assembly code used
* in an specific CPU port of RTEMS. These algorithms must be implemented
* in assembly language.
*
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* Ported to ERC32 implementation of the SPARC by On-Line Applications
* Research Corporation (OAR) under contract to the European Space
* Agency (ESA).
*
* ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
* European Space Agency.
*
* Ported to UltraSPARC T1 Niagara implementation of the SPARC-v9.
* Niagara modifications of respective RTEMS file:
* COPYRIGHT (c) 2010. Gedare Bloom.
*
* $Id$
*/
#include <rtems/asm.h>
/*
* The assembler needs to be told that we know what to do with
* the global registers.
*/
.register %g2, #scratch
.register %g3, #scratch
.register %g6, #scratch
.register %g7, #scratch
#if (SPARC_HAS_FPU == 1)
/*
* void _CPU_Context_save_fp(
* void **fp_context_ptr
* )
*
* This routine is responsible for saving the FP context
* at *fp_context_ptr. If the point to load the FP context
* from is changed then the pointer is modified by this routine.
*
*/
.align 4
PUBLIC(_CPU_Context_save_fp)
SYM(_CPU_Context_save_fp):
save %sp, -CPU_MINIMUM_STACK_FRAME_SIZE, %sp
/*
* The following enables the floating point unit.
*/
sparc64_enable_FPU(%l0)
/*
* Although sun4v supports alternate register names for double-
* and quad-word floating point, SPARC v9 only uses f[#]
*
* Because quad-word fp is not supported by the hardware in
* many situations, we stick with double-word fp operations
*/
ldx [%i0], %l0
std %f0, [%l0]
std %f2, [%l0 + F2_OFFSET]
std %f4, [%l0 + F4_OFFSET]
std %f6, [%l0 + F6_OFFSET]
std %f8, [%l0 + F8_OFFSET]
std %f10, [%l0 + F1O_OFFSET]
std %f12, [%l0 + F12_OFFSET]
std %f14, [%l0 + F14_OFFSET]
std %f16, [%l0 + F16_OFFSET]
std %f18, [%l0 + F18_OFFSET]
std %f20, [%l0 + F2O_OFFSET]
std %f22, [%l0 + F22_OFFSET]
std %f24, [%l0 + F24_OFFSET]
std %f26, [%l0 + F26_OFFSET]
std %f28, [%l0 + F28_OFFSET]
std %f30, [%l0 + F3O_OFFSET]
std %f32, [%l0 + F32_OFFSET]
std %f34, [%l0 + F34_OFFSET]
std %f36, [%l0 + F36_OFFSET]
std %f38, [%l0 + F38_OFFSET]
std %f40, [%l0 + F4O_OFFSET]
std %f42, [%l0 + F42_OFFSET]
std %f44, [%l0 + F44_OFFSET]
std %f46, [%l0 + F46_OFFSET]
std %f48, [%l0 + F48_OFFSET]
std %f50, [%l0 + F5O_OFFSET]
std %f52, [%l0 + F52_OFFSET]
std %f54, [%l0 + F54_OFFSET]
std %f56, [%l0 + F56_OFFSET]
std %f58, [%l0 + F58_OFFSET]
std %f60, [%l0 + F6O_OFFSET]
std %f62, [%l0 + F62_OFFSET]
stx %fsr, [%l0 + FSR_OFFSET]
ret
restore
/*
* void _CPU_Context_restore_fp(
* void **fp_context_ptr
* )
*
* This routine is responsible for restoring the FP context
* at *fp_context_ptr. If the point to load the FP context
* from is changed then the pointer is modified by this routine.
*
*/
.align 4
PUBLIC(_CPU_Context_restore_fp)
SYM(_CPU_Context_restore_fp):
save %sp, -CPU_MINIMUM_STACK_FRAME_SIZE , %sp
/*
* The following enables the floating point unit.
*/
sparc64_enable_FPU(%l0)
ldx [%i0], %l0
ldd [%l0 + FO_OFFSET], %f0
ldd [%l0 + F2_OFFSET], %f2
ldd [%l0 + F4_OFFSET], %f4
ldd [%l0 + F6_OFFSET], %f6
ldd [%l0 + F8_OFFSET], %f8
ldd [%l0 + F1O_OFFSET], %f10
ldd [%l0 + F12_OFFSET], %f12
ldd [%l0 + F14_OFFSET], %f14
ldd [%l0 + F16_OFFSET], %f16
ldd [%l0 + F18_OFFSET], %f18
ldd [%l0 + F2O_OFFSET], %f20
ldd [%l0 + F22_OFFSET], %f22
ldd [%l0 + F24_OFFSET], %f24
ldd [%l0 + F26_OFFSET], %f26
ldd [%l0 + F28_OFFSET], %f28
ldd [%l0 + F3O_OFFSET], %f30
ldd [%l0 + F32_OFFSET], %f32
ldd [%l0 + F34_OFFSET], %f34
ldd [%l0 + F36_OFFSET], %f36
ldd [%l0 + F38_OFFSET], %f38
ldd [%l0 + F4O_OFFSET], %f40
ldd [%l0 + F42_OFFSET], %f42
ldd [%l0 + F44_OFFSET], %f44
ldd [%l0 + F46_OFFSET], %f46
ldd [%l0 + F48_OFFSET], %f48
ldd [%l0 + F5O_OFFSET], %f50
ldd [%l0 + F52_OFFSET], %f52
ldd [%l0 + F54_OFFSET], %f54
ldd [%l0 + F56_OFFSET], %f56
ldd [%l0 + F58_OFFSET], %f58
ldd [%l0 + F6O_OFFSET], %f60
ldd [%l0 + F62_OFFSET], %f62
ldx [%l0 + FSR_OFFSET], %fsr
ret
restore
#endif /* SPARC_HAS_FPU */
/*
* void _CPU_Context_switch(
* Context_Control *run,
* Context_Control *heir
* )
*
* This routine performs a normal non-FP context switch.
*/
.align 4
PUBLIC(_CPU_Context_switch)
SYM(_CPU_Context_switch):
! skip g0
stx %g1, [%o0 + G1_OFFSET] ! save the global registers
stx %g2, [%o0 + G2_OFFSET]
stx %g3, [%o0 + G3_OFFSET]
stx %g4, [%o0 + G4_OFFSET]
stx %g5, [%o0 + G5_OFFSET]
stx %g6, [%o0 + G6_OFFSET]
stx %g7, [%o0 + G7_OFFSET]
! load the address of the ISR stack nesting prevention flag
setx SYM(_CPU_ISR_Dispatch_disable), %g1, %g2
lduw [%g2], %g2
! save it a bit later so we do not waste a couple of cycles
stx %l0, [%o0 + L0_OFFSET] ! save the local registers
stx %l1, [%o0 + L1_OFFSET]
stx %l2, [%o0 + L2_OFFSET]
stx %l3, [%o0 + L3_OFFSET]
stx %l4, [%o0 + L4_OFFSET]
stx %l5, [%o0 + L5_OFFSET]
stx %l6, [%o0 + L6_OFFSET]
stx %l7, [%o0 + L7_OFFSET]
! Now actually save ISR stack nesting prevention flag
stuw %g2, [%o0 + ISR_DISPATCH_DISABLE_STACK_OFFSET]
stx %i0, [%o0 + I0_OFFSET] ! save the input registers
stx %i1, [%o0 + I1_OFFSET]
stx %i2, [%o0 + I2_OFFSET]
stx %i3, [%o0 + I3_OFFSET]
stx %i4, [%o0 + I4_OFFSET]
stx %i5, [%o0 + I5_OFFSET]
stx %i6, [%o0 + I6_FP_OFFSET]
stx %i7, [%o0 + I7_OFFSET]
stx %o0, [%o0 + O0_OFFSET] ! save the output registers
stx %o1, [%o0 + O1_OFFSET]
stx %o2, [%o0 + O2_OFFSET]
stx %o3, [%o0 + O3_OFFSET]
stx %o4, [%o0 + O4_OFFSET]
stx %o5, [%o0 + O5_OFFSET]
stx %o6, [%o0 + O6_SP_OFFSET]
stx %o7, [%o0 + O7_OFFSET] ! o7 is the PC
! rdpr %pil, %o2
! stuw %o2, [%o0 + PIL_OFFSET] ! save pil
! rdpr %pstate, %o2
! stx %o2, [%o0 + PSTATE_OFFSET] ! save status register
/*
* This is entered from _CPU_Context_restore with:
* o1 = context to restore
! * o2 = pstate
*
* NOTE: Flushing the register windows is necessary, but it adds
* an unpredictable (but bounded) overhead to context switching.
*/
PUBLIC(_CPU_Context_restore_heir)
SYM(_CPU_Context_restore_heir):
flushw
! skip g0
ldx [%o1 + G1_OFFSET], %g1 ! restore the global registers
ldx [%o1 + G2_OFFSET], %g2
ldx [%o1 + G3_OFFSET], %g3
ldx [%o1 + G4_OFFSET], %g4
ldx [%o1 + G5_OFFSET], %g5
ldx [%o1 + G6_OFFSET], %g6
ldx [%o1 + G7_OFFSET], %g7
! Load thread specific ISR dispatch prevention flag
ldx [%o1 + ISR_DISPATCH_DISABLE_STACK_OFFSET], %o2
setx SYM(_CPU_ISR_Dispatch_disable), %o5, %o3
! Store it to memory later to use the cycles
ldx [%o1 + L0_OFFSET], %l0 ! restore the local registers
ldx [%o1 + L1_OFFSET], %l1
ldx [%o1 + L2_OFFSET], %l2
ldx [%o1 + L3_OFFSET], %l3
ldx [%o1 + L4_OFFSET], %l4
ldx [%o1 + L5_OFFSET], %l5
ldx [%o1 + L6_OFFSET], %l6
ldx [%o1 + L7_OFFSET], %l7
! Now restore thread specific ISR dispatch prevention flag
stuw %o2, [%o3]
ldx [%o1 + I0_OFFSET], %i0 ! restore the input registers
ldx [%o1 + I1_OFFSET], %i1
ldx [%o1 + I2_OFFSET], %i2
ldx [%o1 + I3_OFFSET], %i3
ldx [%o1 + I4_OFFSET], %i4
ldx [%o1 + I5_OFFSET], %i5
ldx [%o1 + I6_FP_OFFSET], %i6
ldx [%o1 + I7_OFFSET], %i7
ldx [%o1 + O0_OFFSET], %o0
ldx [%o1 + O2_OFFSET], %o2 ! restore the output registers
ldx [%o1 + O3_OFFSET], %o3
ldx [%o1 + O4_OFFSET], %o4
ldx [%o1 + O5_OFFSET], %o5
ldx [%o1 + O6_SP_OFFSET], %o6
ldx [%o1 + O7_OFFSET], %o7 ! PC
! on a hunch... we should be able to use some of the %o regs
! lduw [%o1 + PIL_OFFSET], %o2
! wrpr %g0, %o2, %pil
! ldx [%o1 + PSTATE_OFFSET], %o2
! do o1 last to avoid destroying heir context pointer
ldx [%o1 + O1_OFFSET], %o1 ! overwrite heir pointer
! wrpr %g0, %o2, %pstate
retl
nop
/*
* void _CPU_Context_restore(
* Context_Control *new_context
* )
*
* This routine is generally used only to perform restart self.
*
* NOTE: It is unnecessary to reload some registers.
*/
/* if _CPU_Context_restore_heir does not flushw, then do it here */
.align 4
PUBLIC(_CPU_Context_restore)
SYM(_CPU_Context_restore):
save %sp, -CPU_MINIMUM_STACK_FRAME_SIZE, %sp
! rdpr %pstate, %o2
ba SYM(_CPU_Context_restore_heir)
mov %i0, %o1 ! in the delay slot
/* end of file */

View File

@@ -0,0 +1,116 @@
/*
* SPARC-v9 Dependent Source
*
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* This file is based on the SPARC cpu.c file. Modifications are made to
* provide support for the SPARC-v9.
* COPYRIGHT (c) 2010. Gedare Bloom.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#include <rtems/system.h>
#include <rtems/asm.h>
#include <rtems/score/isr.h>
#include <rtems/rtems/cache.h>
/*PAGE
*
* _CPU_Initialize
*
* This routine performs processor dependent initialization.
*
* INPUT PARAMETERS: NONE
*
* Output Parameters: NONE
*
* NOTE: There is no need to save the pointer to the thread dispatch routine.
* The SPARC's assembly code can reference it directly with no problems.
*/
void _CPU_Initialize(void)
{
#if (SPARC_HAS_FPU == 1)
Context_Control_fp *pointer;
/*
* This seems to be the most appropriate way to obtain an initial
* FP context on the SPARC. The NULL fp context is copied in to
* the task's FP context during Context_Initialize_fp.
*/
pointer = &_CPU_Null_fp_context;
_CPU_Context_save_fp( &pointer );
#endif
/*
* Since no tasks have been created yet and no interrupts have occurred,
* there is no way that the currently executing thread can have an
* _ISR_Dispatch stack frame on its stack.
*/
_CPU_ISR_Dispatch_disable = 0;
}
/*PAGE
*
* _CPU_Context_Initialize
*
* This kernel routine initializes the basic non-FP context area associated
* with each thread.
*
* Input parameters:
* the_context - pointer to the context area
* stack_base - address of memory for the SPARC
* size - size in bytes of the stack area
* new_level - interrupt level for this context area
* entry_point - the starting execution point for this this context
* is_fp - TRUE if this context is associated with an FP thread
*
* Output parameters: NONE
*/
void _CPU_Context_Initialize(
Context_Control *the_context,
void *stack_base,
uint32_t size,
uint32_t new_level,
void *entry_point,
bool is_fp
)
{
uint64_t stack_high; /* highest "stack aligned" address */
uint32_t the_size;
/*
* On CPUs with stacks which grow down (i.e. SPARC), we build the stack
* based on the stack_high address.
*/
stack_high = ((uint64_t)(stack_base) + size);
stack_high &= ~(CPU_STACK_ALIGNMENT - 1);
the_size = size & ~(CPU_STACK_ALIGNMENT - 1);
/*
* See the README in this directory for a diagram of the stack.
*/
the_context->o7 = ((uint64_t) entry_point) - 8;
the_context->o6_sp = stack_high - CPU_MINIMUM_STACK_FRAME_SIZE - STACK_BIAS;
the_context->i6_fp = 0;
/* PSTATE used to be built here, but is no longer included in context */
/*
* Since THIS thread is being created, there is no way that THIS
* thread can have an _ISR_Dispatch stack frame on its stack.
*/
the_context->isr_dispatch_disable = 0;
}

View File

@@ -0,0 +1,41 @@
## Automatically generated by ampolish3 - Do not edit
if AMPOLISH3
$(srcdir)/preinstall.am: Makefile.am
$(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
endif
PREINSTALL_DIRS =
DISTCLEANFILES = $(PREINSTALL_DIRS)
all-am: $(PREINSTALL_FILES)
PREINSTALL_FILES =
CLEANFILES = $(PREINSTALL_FILES)
$(PROJECT_INCLUDE)/rtems/$(dirstamp):
@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems
@: > $(PROJECT_INCLUDE)/rtems/$(dirstamp)
PREINSTALL_DIRS += $(PROJECT_INCLUDE)/rtems/$(dirstamp)
$(PROJECT_INCLUDE)/rtems/asm.h: rtems/asm.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/asm.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/asm.h
$(PROJECT_INCLUDE)/rtems/score/$(dirstamp):
@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems/score
@: > $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
PREINSTALL_DIRS += $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(PROJECT_INCLUDE)/rtems/score/sparc64.h: rtems/score/sparc64.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/sparc64.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/sparc64.h
$(PROJECT_INCLUDE)/rtems/score/cpu.h: rtems/score/cpu.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/cpu.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/cpu.h
$(PROJECT_INCLUDE)/rtems/score/types.h: rtems/score/types.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/types.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/types.h

View File

@@ -0,0 +1,102 @@
/**
* @file rtems/asm.h
*
* This include file attempts to address the problems
* caused by incompatible flavors of assemblers and
* toolsets. It primarily addresses variations in the
* use of leading underscores on symbols and the requirement
* that register names be preceded by a %.
*/
/*
* NOTE: The spacing in the use of these macros
* is critical to them working as advertised.
*
* COPYRIGHT:
*
* This file is based on similar code found in newlib available
* from ftp.cygnus.com. The file which was used had no copyright
* notice. This file is freely distributable as long as the source
* of the file is noted.
*
* $Id$
*/
#ifndef _RTEMS_ASM_H
#define _RTEMS_ASM_H
/*
* Indicate we are in an assembly file and get the basic CPU definitions.
*/
#ifndef ASM
#define ASM
#endif
#ifndef __ASM__
#define __ASM__
#endif
#include <rtems/score/cpuopts.h>
#include <rtems/score/cpu.h>
/*
* Recent versions of GNU cpp define variables which indicate the
* need for underscores and percents. If not using GNU cpp or
* the version does not support this, then you will obviously
* have to define these as appropriate.
*/
/* XXX __USER_LABEL_PREFIX__ and __REGISTER_PREFIX__ do not work on gcc 2.7.0 */
/* XXX The following ifdef magic fixes the problem but results in a warning */
/* XXX when compiling assembly code. */
#ifndef __USER_LABEL_PREFIX__
#define __USER_LABEL_PREFIX__ _
#endif
#ifndef __REGISTER_PREFIX__
#define __REGISTER_PREFIX__
#endif
#include <rtems/concat.h>
/* Use the right prefix for global labels. */
#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
/* Use the right prefix for registers. */
#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
/*
* define macros for all of the registers on this CPU
*
* EXAMPLE: #define d0 REG (d0)
*/
/*
* Define macros to handle section beginning and ends.
*/
#define BEGIN_CODE_DCL .text
#define END_CODE_DCL
#define BEGIN_DATA_DCL .data
#define END_DATA_DCL
#define BEGIN_CODE .text
#define END_CODE
#define BEGIN_DATA
#define END_DATA
#define BEGIN_BSS
#define END_BSS
#define END
/*
* Following must be tailor for a particular flavor of the C compiler.
* They may need to put underscores in front of the symbols.
*/
#define PUBLIC(sym) .globl SYM (sym)
#define EXTERN(sym) .globl SYM (sym)
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,341 @@
/**
* @file rtems/score/sparc64.h
*/
/*
* This include file contains information pertaining to the SPARC
* processor family.
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* This file is based on the SPARC sparc.h file. Modifications are made
* to support the SPARC64 processor.
* COPYRIGHT (c) 2010. Gedare Bloom.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifndef _RTEMS_SCORE_SPARC_H
#define _RTEMS_SCORE_SPARC_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* This file contains the information required to build
* RTEMS for a particular member of the "sparc" family. It does
* this by setting variables to indicate which implementation
* dependent features are present in a particular member
* of the family.
*
* Currently recognized feature flags:
*
* + SPARC_HAS_FPU
* 0 - no HW FPU
* 1 - has HW FPU (assumed to be compatible w/90C602)
*
* + SPARC_HAS_BITSCAN
* 0 - does not have scan instructions
* 1 - has scan instruction (not currently implemented)
*
* + SPARC_NUMBER_OF_REGISTER_WINDOWS
* 8 is the most common number supported by SPARC implementations.
* SPARC_PSR_CWP_MASK is derived from this value.
*/
/*
* Some higher end SPARCs have a bitscan instructions. It would
* be nice to take advantage of them. Right now, there is no
* port to a CPU model with this feature and no (untested) code
* that is based on this feature flag.
*/
#define SPARC_HAS_BITSCAN 0
/*
* This should be OK until a port to a higher end SPARC processor
* is made that has more than 8 register windows. If this cannot
* be determined based on multilib settings (v7/v8/v9), then the
* cpu_asm.S code that depends on this will have to move to libcpu.
*
* SPARC v9 supports from 3 to 32 register windows.
* N_REG_WINDOWS = 8 on UltraSPARC T1 (impl. dep. #2-V8).
*/
#define SPARC_NUMBER_OF_REGISTER_WINDOWS 8
/*
* This should be determined based on some soft float derived
* cpp predefine but gcc does not currently give us that information.
*/
#if defined(_SOFT_FLOAT)
#define SPARC_HAS_FPU 0
#else
#define SPARC_HAS_FPU 1
#endif
#if SPARC_HAS_FPU
#define CPU_MODEL_NAME "w/FPU"
#else
#define CPU_MODEL_NAME "w/soft-float"
#endif
/*
* Define the name of the CPU family.
*/
#define CPU_NAME "SPARC"
/*
* Miscellaneous constants
*/
/*
* The PSR is deprecated and deleted.
*
* The following registers represent fields of the PSR:
* PIL - Processor Interrupt Level register
* CWP - Current Window Pointer register
* VER - Version register
* CCR - Condition Codes Register
* PSTATE - Processor State register
*/
/*
* PSTATE masks and starting bit positions
*
* NOTE: Reserved bits are ignored.
*/
#define SPARC_PSTATE_AG_MASK 0x00000001 /* bit 0 */
#define SPARC_PSTATE_IE_MASK 0x00000002 /* bit 1 */
#define SPARC_PSTATE_PRIV_MASK 0x00000004 /* bit 2 */
#define SPARC_PSTATE_AM_MASK 0x00000008 /* bit 3 */
#define SPARC_PSTATE_PEF_MASK 0x00000010 /* bit 4 */
#define SPARC_PSTATE_MM_MASK 0x00000040 /* bit 6 */
#define SPARC_PSTATE_TLE_MASK 0x00000100 /* bit 8 */
#define SPARC_PSTATE_CLE_MASK 0x00000200 /* bit 9 */
#define SPARC_PSTATE_AG_BIT_POSITION 0 /* bit 0 */
#define SPARC_PSTATE_IE_BIT_POSITION 1 /* bit 1 */
#define SPARC_PSTATE_PRIV_BIT_POSITION 2 /* bit 2 */
#define SPARC_PSTATE_AM_BIT_POSITION 3 /* bit 3 */
#define SPARC_PSTATE_PEF_BIT_POSITION 4 /* bit 4 */
#define SPARC_PSTATE_MM_BIT_POSITION 6 /* bit 6 */
#define SPARC_PSTATE_TLE_BIT_POSITION 8 /* bit 8 */
#define SPARC_PSTATE_CLE_BIT_POSITION 9 /* bit 9 */
#define SPARC_FPRS_FEF_MASK 0x0100 /* bit 2 */
#define SPARC_FPRS_FEF_BIT_POSITION 2 /* bit 2 */
#define SPARC_TSTATE_IE_MASK 0x00000200 /* bit 9 */
#define SPARC_SOFTINT_TM_MASK 0x00000001 /* bit 0 */
#define SPARC_SOFTINT_SM_MASK 0x00010000 /* bit 16 */
#define SPARC_SOFTINT_TM_BIT_POSITION 1 /* bit 0 */
#define SPARC_SOFTINT_SM_BIT_POSITION 17 /* bit 16 */
#define STACK_BIAS (2047)
#ifdef ASM
/*
* To enable the FPU we need to set both PSTATE.pef and FPRS.fef
*/
#define sparc64_enable_FPU(rtmp1) \
rdpr %pstate, rtmp1; \
or rtmp1, SPARC_PSTATE_PEF_MASK, rtmp1; \
wrpr %g0, rtmp1, %pstate; \
rd %fprs, rtmp1; \
or rtmp1, SPARC_FPRS_FEF_MASK, rtmp1; \
wr %g0, rtmp1, %fprs
#endif
#ifndef ASM
/*
* Standard nop
*/
#define nop() \
do { \
asm volatile ( "nop" ); \
} while ( 0 )
/*
* Get and set the pstate
*/
#define sparc64_get_pstate( _pstate ) \
do { \
(_pstate) = 0; \
asm volatile( "rdpr %%pstate, %0" : "=r" (_pstate) : "0" (_pstate) ); \
} while ( 0 )
#define sparc64_set_pstate( _pstate ) \
do { \
asm volatile ( \
"wrpr %g0, %0, %%pstate " : "=r" ((_pstate)) : "0" ((_pstate)) ); \
} while ( 0 )
/*
* Get and set the PIL
*/
#define sparc64_get_pil( _pil ) \
do { \
(_pil) = 0; \
asm volatile( "rdpr %%pil, %0" : "=r" (_pil) : "0" (_pil) ); \
} while ( 0 )
#define sparc64_set_pil( _pil ) \
do { \
asm volatile ( "wrpr %g0, %0, %%pil " : "=r" ((_pil)) : "0" ((_pil)) ); \
} while ( 0 )
/*
* Get and set the TBA
*/
#define sparc64_get_tba( _tba ) \
do { \
(_tba) = 0; /* to avoid unitialized warnings */ \
asm volatile( "rdpr %%tba, %0" : "=r" (_tba) : "0" (_tba) ); \
} while ( 0 )
#define sparc64_set_tba( _tba ) \
do { \
asm volatile( "wrpr %%g0, %0, %%tba" : "=r" (_tba) : "0" (_tba) ); \
} while ( 0 )
/*
* Get and set the TL (trap level)
*/
#define sparc64_get_tl( _tl ) \
do { \
(_tl) = 0; /* to avoid unitialized warnings */ \
asm volatile( "rdpr %%tl, %0" : "=r" (_tl) : "0" (_tl) ); \
} while ( 0 )
#define sparc64_set_tl( _tl ) \
do { \
asm volatile( "wrpr %%g0, %0, %%tl" : "=r" (_tl) : "0" (_tl) ); \
} while ( 0 )
/*
* read the stick register
*
* Note:
* stick asr=24, mnemonic=stick
* Note: stick does not appear to be a valid ASR for US3, although it is
* implemented in US3i.
*/
#define sparc64_read_stick( _stick ) \
do { \
(_stick) = 0; \
asm volatile( "rd %%stick, %0" : "=r" (_stick) : "0" (_stick) ); \
} while ( 0 )
/*
* write the stick_cmpr register
*
* Note:
* stick_cmpr asr=25, mnemonic=stick_cmpr
* Note: stick_cmpr does not appear to be a valid ASR for US3, although it is
* implemented in US3i.
*/
#define sparc64_write_stick_cmpr( _stick_cmpr ) \
do { \
asm volatile( "wr %%g0, %0, %%stick_cmpr" : "=r" (_stick_cmpr) \
: "0" (_stick_cmpr) ); \
} while ( 0 )
/*
* read the Tick register
*/
#define sparc64_read_tick( _tick ) \
do { \
(_tick) = 0; \
asm volatile( "rd %%tick, %0" : "=r" (_tick) : "0" (_tick) ); \
} while ( 0 )
/*
* write the tick_cmpr register
*/
#define sparc64_write_tick_cmpr( _tick_cmpr ) \
do { \
asm volatile( "wr %%g0, %0, %%tick_cmpr" : "=r" (_tick_cmpr) \
: "0" (_tick_cmpr) ); \
} while ( 0 )
/*
* Clear the softint register.
*
* sun4u and sun4v: softint_clr asr = 21, with mnemonic clear_softint
*/
#define sparc64_clear_interrupt_bits( _bit_mask ) \
do { \
asm volatile( "wr %%g0, %0, %%clear_softint" : "=r" (_bit_mask) \
: "0" (_bit_mask)); \
} while ( 0 )
/************* DEPRECATED ****************/
/* Note: Although the y register is deprecated, gcc still uses it */
/*
* Get and set the Y
*/
#define sparc_get_y( _y ) \
do { \
asm volatile( "rd %%y, %0" : "=r" (_y) : "0" (_y) ); \
} while ( 0 )
#define sparc_set_y( _y ) \
do { \
asm volatile( "wr %0, %%y" : "=r" (_y) : "0" (_y) ); \
} while ( 0 )
/************* /DEPRECATED ****************/
/*
* Manipulate the interrupt level in the pstate
*/
uint32_t sparc_disable_interrupts(void);
void sparc_enable_interrupts(uint32_t);
#define sparc_flash_interrupts( _level ) \
do { \
register uint32_t _ignored = 0; \
\
sparc_enable_interrupts( (_level) ); \
_ignored = sparc_disable_interrupts(); \
} while ( 0 )
#define sparc64_get_interrupt_level( _level ) \
do { \
_level = 0; \
sparc64_get_pil( _level ); \
} while ( 0 )
#endif /* !ASM */
#ifdef __cplusplus
}
#endif
#endif /* _RTEMS_SCORE_SPARC_H */

View File

@@ -0,0 +1,51 @@
/**
* @file rtems/score/types.h
*/
/*
* This include file contains type definitions pertaining to the
* SPARC-v9 processor family.
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifndef _RTEMS_SCORE_TYPES_H
#define _RTEMS_SCORE_TYPES_H
#ifndef ASM
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* This section defines the basic types for this processor.
*/
typedef uint16_t Priority_Bit_map_control;
typedef void sparc_isr;
typedef void ( *sparc_isr_entry )( void );
#ifdef RTEMS_DEPRECATED_TYPES
typedef bool boolean; /* Boolean value */
typedef float single_precision; /* single precision float */
typedef double double_precision; /* double precision float */
#endif
#ifdef __cplusplus
}
#endif
#endif /* !ASM */
#endif