Add support for Intel's XScale processor

This commit is contained in:
Nick Clifton 2000-11-30 01:57:27 +00:00
parent 09872ef885
commit 0ffc3b94a0
17 changed files with 3234 additions and 0 deletions

View File

@ -1,3 +1,22 @@
2000-11-29 Nick Clifton <nickc@redhat.com>
* configure.host: Add xscale target.
* libc/machine/xscale: New directory.
* libc/machine/xscale/Makefile.am: New file.
* libc/machine/xscale/Makefile.in: New file.
* libc/machine/xscale/aclocal.m4: New file.
* libc/machine/xscale/configure: New file.
* libc/machine/xscale/configure.in: New file.
* libc/machine/xscale/memchr.S: New file.
* libc/machine/xscale/memcmp.S: New file.
* libc/machine/xscale/memcpy.S: New file.
* libc/machine/xscale/memmove.S: New file.
* libc/machine/xscale/memset.S: New file.
* libc/machine/xscale/strchr.S: New file.
* libc/machine/xscale/strcmp.S: New file.
* libc/machine/xscale/strcpy.S: New file.
* libc/machine/xscale/strlen.S: New file.
Sat Nov 25 11:24:00 2000 Corinna Vinschen <vinschen@cygnus.com>
* libc/include/sys/types.h: Change i to `__i' in FD_ZERO macro to

View File

@ -145,6 +145,9 @@ case "${host_cpu}" in
strongarm)
machine_dir=arm
;;
xscale)
machine_dir=xscale
;;
thumb)
machine_dir=arm
;;
@ -263,6 +266,9 @@ case "${host}" in
strongarm-*-*)
sys_dir=arm
;;
xscale-*-*)
sys_dir=arm
;;
thumb-*-*)
sys_dir=arm
;;
@ -422,6 +428,11 @@ case "${host}" in
newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
;;
xscale-*-*)
syscall_dir=syscalls
newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
;;
thumb-*-pe)
syscall_dir=syscalls
newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"

View File

@ -0,0 +1,14 @@
## Process this file with automake to generate Makefile.in
AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
noinst_LIBRARIES = lib.a
lib_a_SOURCES = \
memchr.c memcmp.c memcpy.c memmove.c memset.c \
strchr.c strcmp.c strcpy.c strlen.c
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host

View File

@ -0,0 +1,322 @@
# Makefile.in generated automatically by automake 1.4 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AR = @AR@
AS = @AS@
CC = @CC@
CPP = @CPP@
EXEEXT = @EXEEXT@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
VERSION = @VERSION@
machine_dir = @machine_dir@
newlib_basedir = @newlib_basedir@
sys_dir = @sys_dir@
AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
noinst_LIBRARIES = lib.a
lib_a_SOURCES = \
memchr.c memcmp.c memcpy.c memmove.c memset.c \
strchr.c strcmp.c strcpy.c strlen.c
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
DEFS = @DEFS@ -I. -I$(srcdir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
lib_a_LIBADD =
lib_a_OBJECTS = memchr.o memcmp.o memcpy.o memmove.o memset.o strchr.o \
strcmp.o strcpy.o strlen.o
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in aclocal.m4 configure configure.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
SOURCES = $(lib_a_SOURCES)
OBJECTS = $(lib_a_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in \
../../../acinclude.m4 ../../../aclocal.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
mostlyclean-noinstLIBRARIES:
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
distclean-noinstLIBRARIES:
maintainer-clean-noinstLIBRARIES:
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
clean-compile:
distclean-compile:
-rm -f *.tab.c
maintainer-clean-compile:
lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)
-rm -f lib.a
$(AR) cru lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
$(RANLIB) lib.a
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
mostlyclean-tags:
clean-tags:
distclean-tags:
-rm -f TAGS ID
maintainer-clean-tags:
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
-rm -rf $(distdir)
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
dc_install_base=`cd $(distdir)/=inst && pwd`; \
cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) dist
-rm -rf $(distdir)
@banner="$(distdir).tar.gz is ready for distribution"; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"
dist: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
dist-all: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
distdir: $(DISTFILES)
-rm -rf $(distdir)
mkdir $(distdir)
-chmod 777 $(distdir)
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am:
check: check-am
installcheck-am:
installcheck: installcheck-am
install-info-am:
install-info: install-info-am
install-exec-am:
install-exec: install-exec-am
install-data-am:
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am:
uninstall: uninstall-am
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
mostlyclean-am
clean: clean-am
distclean-am: distclean-noinstLIBRARIES distclean-compile \
distclean-tags distclean-generic clean-am
distclean: distclean-am
-rm -f config.status
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
maintainer-clean-compile maintainer-clean-tags \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
-rm -f config.status
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-info-am install-info \
install-exec-am install-exec install-data-am install-data install-am \
install uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# 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:

282
newlib/libc/machine/xscale/aclocal.m4 vendored Normal file
View File

@ -0,0 +1,282 @@
dnl aclocal.m4 generated automatically by aclocal 1.4
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
dnl This provides configure definitions used by all the newlib
dnl configure.in files.
dnl Basic newlib configury. This calls basic introductory stuff,
dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
dnl configure.host. The only argument is the relative path to the top
dnl newlib directory.
AC_DEFUN(NEWLIB_CONFIGURE,
[
dnl Default to --enable-multilib
AC_ARG_ENABLE(multilib,
[ --enable-multilib build many library versions (default)],
[case "${enableval}" in
yes) multilib=yes ;;
no) multilib=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
esac], [multilib=yes])dnl
dnl Support --enable-target-optspace
AC_ARG_ENABLE(target-optspace,
[ --enable-target-optspace optimize for space],
[case "${enableval}" in
yes) target_optspace=yes ;;
no) target_optspace=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
esac], [target_optspace=])dnl
dnl Support --enable-newlib-mb
AC_ARG_ENABLE(newlib-mb,
[ --enable-newlib-mb enable multibyte support],
[case "${enableval}" in
yes) newlib_mb=yes ;;
no) newlib_mb=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for newlib-mb option) ;;
esac], [newlib_mb=no])dnl
dnl We may get other options which we don't document:
dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
test -z "[$]{with_target_subdir}" && with_target_subdir=.
if test "[$]{srcdir}" = "."; then
if test "[$]{with_target_subdir}" != "."; then
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
else
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
fi
else
newlib_basedir="[$]{srcdir}/$1"
fi
AC_SUBST(newlib_basedir)
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE(newlib, 1.8.2)
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
# are probably using a cross compiler, which will not be able to fully
# link an executable. This should really be fixed in autoconf
# itself.
AC_DEFUN(LIB_AC_PROG_CC,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_CHECK_PROG(CC, gcc, gcc)
if test -z "$CC"; then
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
AC_PROG_CC_G
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
LIB_AC_PROG_CC
# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
# run it explicitly here, it will be run implicitly before
# NEWLIB_CONFIGURE, which doesn't work because that means that it will
# be run before AC_CANONICAL_HOST.
AC_CANONICAL_BUILD
AC_CHECK_TOOL(AS, as)
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_PROG_INSTALL
AM_MAINTAINER_MODE
# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
# at least currently, we never actually build a program, so we never
# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
# fails, because we are probably configuring with a cross compiler
# which can't create executables. So we include AC_EXEEXT to keep
# automake happy, but we don't execute it, since we don't care about
# the result.
if false; then
AC_EXEEXT
fi
. [$]{newlib_basedir}/configure.host
case [$]{newlib_basedir} in
/* | [A-Za-z]:[/\\]*) newlib_flagbasedir=[$]{newlib_basedir} ;;
*) newlib_flagbasedir='[$](top_builddir)/'[$]{newlib_basedir} ;;
esac
newlib_cflags="[$]{newlib_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{newlib_flagbasedir}/libc/include"
case "${host}" in
*-*-cygwin*)
newlib_cflags="[$]{newlib_cflags} -I[$]{newlib_flagbasedir}/../winsup/cygwin/include -I[$]{newlib_flagbasedir}/../winsup/w32api/include"
;;
esac
newlib_cflags="[$]{newlib_cflags} -fno-builtin"
NEWLIB_CFLAGS=${newlib_cflags}
AC_SUBST(NEWLIB_CFLAGS)
AC_SUBST(machine_dir)
AC_SUBST(sys_dir)
])
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.
# serial 1
dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
AC_DEFUN(AM_INIT_AUTOMAKE,
[AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
AC_SUBST(VERSION)
dnl test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
ifelse([$3],,
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
AC_REQUIRE([AM_SANITY_CHECK])
AC_REQUIRE([AC_ARG_PROGRAM])
dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
AC_REQUIRE([AC_PROG_MAKE_SET])])
#
# Check to make sure that the build environment is sane.
#
AC_DEFUN(AM_SANITY_CHECK,
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftestfile
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
if test "[$]*" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftestfile`
fi
if test "[$]*" != "X $srcdir/configure conftestfile" \
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "[$]2" = conftestfile
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
rm -f conftest*
AC_MSG_RESULT(yes)])
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
dnl The program must properly implement --version.
AC_DEFUN(AM_MISSING_PROG,
[AC_MSG_CHECKING(for working $2)
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if ($2 --version) < /dev/null > /dev/null 2>&1; then
$1=$2
AC_MSG_RESULT(found)
else
$1="$3/missing $2"
AC_MSG_RESULT(missing)
fi
AC_SUBST($1)])
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
# serial 1
AC_DEFUN(AM_MAINTAINER_MODE,
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode is disabled by default
AC_ARG_ENABLE(maintainer-mode,
[ --enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer],
USE_MAINTAINER_MODE=$enableval,
USE_MAINTAINER_MODE=no)
AC_MSG_RESULT($USE_MAINTAINER_MODE)
AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl
]
)
# Define a conditional.
AC_DEFUN(AM_CONDITIONAL,
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi])

1687
newlib/libc/machine/xscale/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
dnl This is the newlib/libc/machine/strongarm2 configure.in file.
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.5)
AC_INIT(Makefile.am)
dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
AC_CONFIG_AUX_DIR(../../../..)
NEWLIB_CONFIGURE(../../..)
AC_OUTPUT(Makefile)

View File

@ -0,0 +1,102 @@
#if defined __thumb__
#include "../../string/memchr.c"
#else
#include <string.h>
#include "xscale.h"
void *
memchr (const void *start, int c, size_t len)
{
const char *str = start;
if (len == 0)
return 0;
asm (PRELOADSTR ("%0") : : "r" (start));
c &= 0xff;
#ifndef __OPTIMIZE_SIZE__
/* Skip unaligned part. */
if ((long)str & 3)
{
str--;
do
{
if (*++str == c)
return (void *)str;
}
while (((long)str & 3) != 0 && --len > 0);
}
if (len > 3)
{
unsigned int c2 = c + (c << 8);
c2 += c2 << 16;
/* Load two constants:
R7 = 0xfefefeff [ == ~(0x80808080 << 1) ]
R6 = 0x80808080 */
asm (
"mov r6, #0x80
add r6, r6, #0x8000
add r6, r6, r6, lsl #16
mvn r7, r6, lsl #1
0:
cmp %1, #0x7
bls 1f
ldmia %0!, { r3, r9 }
" PRELOADSTR ("%0") "
sub %1, %1, #8
eor r3, r3, %2
eor r9, r9, %2
add r2, r3, r7
add r8, r9, r7
bic r2, r2, r3
bic r8, r8, r9
and r1, r2, r6
and r9, r8, r6
orrs r1, r1, r9
beq 0b
add %1, %1, #8
sub %0, %0, #8
1:
cmp %1, #0x3
bls 2f
ldr r3, [%0], #4
" PRELOADSTR ("%0") "
sub %1, %1, #4
eor r3, r3, %2
add r2, r3, r7
bic r2, r2, r3
ands r1, r2, r6
beq 1b
sub %0, %0, #4
add %1, %1, #4
2:
"
: "=&r" (str), "=&r" (len)
: "r" (c2), "0" (str), "1" (len)
: "r1", "r2", "r3", "r6", "r7", "r8", "r9", "cc");
}
#endif
while (len-- > 0)
{
if (*str == c)
return (void *)str;
str++;
}
return 0;
}
#endif

View File

@ -0,0 +1,109 @@
#if defined __thumb__
#include "../../string/memcmp.c"
#else
#include <string.h>
#include "xscale.h"
int
memcmp (const void *s1, const void *s2, size_t len)
{
int result;
asm (
#ifndef __OPTIMIZE_SIZE__
"
cmp %2, #0x3
bls 6f
and r2, %0, #0x3
and r3, %1, #0x3
cmp r2, r3
bne 6f
mov lr, %0
mov r4, %1
cmp r2, #0x0
beq 3f
b 1f
0:
ldrb r2, [lr], #1 @ zero_extendqisi2
" PRELOADSTR("lr") "
ldrb r3, [r4], #1 @ zero_extendqisi2
" PRELOADSTR("r4") "
cmp r2, r3
bne 5f
tst lr, #0x3
beq 3f
1:
sub %2, %2, #1
cmn %2, #0x1
bne 0b
b 4f
0:
cmp %2, #0x7
bls 3f
ldmia lr,{r2, r3}
ldmia r4,{r5, r6}
sub %2, %2, #0x4
cmp r2, r5
bne 1f
sub %2, %2, #0x4
add lr, lr, #0x4
add r4, r4, #0x4
cmp r3, r6
beq 0b
1:
add %2, %2, #0x4
sub %0, lr, #0x4
sub %1, r4, #0x4
b 6f
3:
cmp %2, #0x3
bls 1f
ldr r2, [lr], #4
ldr r3, [r4], #4
sub %2, %2, #4
cmp r2, r3
bne 1f
0:
cmp %2, #0x3
bls 1f
ldr r2, [lr], #4
" PRELOADSTR("lr") "
ldr r3, [r4], #4
" PRELOADSTR("r4") "
sub %2, %2, #4
cmp r2, r3
beq 0b
1:
sub %0, lr, #0x4
sub %1, r4, #0x4
add %2, %2, #4
"
#endif /* !__OPTIMIZE_SIZE__ */
"
6:
sub %2, %2, #1
cmn %2, #0x1
beq 4f
0:
ldrb r2, [%0], #1 @ zero_extendqisi2
" PRELOADSTR("%0") "
ldrb r3, [%1], #1 @ zero_extendqisi2
" PRELOADSTR("%1") "
cmp r2, r3
bne 5f
sub %2, %2, #1
cmn %2, #0x1
bne 0b
4:
mov r3, r2
5:
rsb %0, r3, r2"
: "=r" (result), "=&r" (s2), "=&r" (len)
: "0" (s1), "1" (s2), "2" (len)
: "r2", "r3", "r4", "r5", "r6", "cc");
return result;
}
#endif

View File

@ -0,0 +1,101 @@
#if defined __thumb__
#include "../../string/memcpy.c"
#else
#include <string.h>
#include "xscale.h"
void *
memcpy (void *dst0, const void *src0, size_t len)
{
int dummy;
asm volatile (
#ifndef __OPTIMIZE_SIZE__
"cmp %2, #0x3
bls 3f
and lr, %1, #0x3
and r3, %0, #0x3
cmp lr, r3
bne 3f
cmp lr, #0x0
beq 2f
b 1f
0:
ldrb r3, [%1], #1
"
PRELOADSTR ("%1")
"
tst %1, #0x3
strb r3, [%0], #1
beq 3f
1:
sub %2, %2, #1
cmn %2, #1
bne 0b
2:
cmp %2, #0xf
bls 1f
0:
ldmia %1!, { r3, r4, r5, lr }
"
PRELOADSTR ("%1")
"
sub %2, %2, #16
cmp %2, #0xf
stmia %0!, { r3, r4, r5, lr }
bhi 0b
1:
cmp %2, #0x7
bls 1f
0:
ldmia %1!, { r3, r4 }
"
PRELOADSTR ("%1")
"
sub %2, %2, #8
cmp %2, #0x7
stmia %0!, { r3, r4 }
bhi 0b
1:
cmp %2, #0x3
bls 3f
0:
sub %2, %2, #4
ldr r3, [%1], #4
"
PRELOADSTR ("%1")
"
cmp %2, #0x3
str r3, [%0], #4
bhi 0b
"
#endif /* !__OPTIMIZE_SIZE__ */
"
3:
"
PRELOADSTR ("%1")
"
sub %2, %2, #1
cmn %2, #1
beq 1f
0:
sub %2, %2, #1
ldrb r3, [%1], #1
"
PRELOADSTR ("%1")
"
cmn %2, #1
strb r3, [%0], #1
bne 0b
1:"
: "=&r" (dummy), "=&r" (src0), "=&r" (len)
: "0" (dst0), "1" (src0), "2" (len)
: "memory", "lr", "r3", "r4", "r5", "cc");
return dst0;
}
#endif

View File

@ -0,0 +1,122 @@
#if defined __thumb__
#include "../../string/memmove.c"
#else
#include <string.h>
#include "xscale.h"
static inline void *
do_memcpy (void *dst0, const void *src0, size_t len)
{
int dummy;
asm volatile (
#ifndef __OPTIMIZE_SIZE__
"cmp %2, #0x3
bls 3f
and lr, %1, #0x3
and r3, %0, #0x3
cmp lr, r3
bne 3f
cmp lr, #0x0
beq 2f
b 1f
0:
ldrb r3, [%1], #1
"
PRELOADSTR ("%1")
"
tst %1, #0x3
strb r3, [%0], #1
beq 3f
1:
sub %2, %2, #1
cmn %2, #1
bne 0b
2:
cmp %2, #0xf
bls 1f
0:
ldmia %1!, { r3, r4, r5, lr }
"
PRELOADSTR ("%1")
"
sub %2, %2, #16
cmp %2, #0xf
stmia %0!, { r3, r4, r5, lr }
bhi 0b
1:
cmp %2, #0x7
bls 1f
0:
ldmia %1!, { r3, r4 }
"
PRELOADSTR ("%1")
"
sub %2, %2, #8
cmp %2, #0x7
stmia %0!, { r3, r4 }
bhi 0b
1:
cmp %2, #0x3
bls 3f
0:
sub %2, %2, #4
ldr r3, [%1], #4
"
PRELOADSTR ("%1")
"
cmp %2, #0x3
str r3, [%0], #4
bhi 0b
"
#endif /* !__OPTIMIZE_SIZE__ */
"
3:
"
PRELOADSTR ("%1")
"
sub %2, %2, #1
cmn %2, #1
beq 1f
0:
sub %2, %2, #1
ldrb r3, [%1], #1
"
PRELOADSTR ("%1")
"
cmn %2, #1
strb r3, [%0], #1
bne 0b
1:"
: "=&r" (dummy), "=&r" (src0), "=&r" (len)
: "0" (dst0), "1" (src0), "2" (len)
: "memory", "lr", "r3", "r4", "r5", "cc");
return dst0;
}
void *
memmove (void *dst, const void *src, size_t len)
{
char *d = dst;
const char *s = src;
if (s < d && d < s + len)
{
/* Destructive overlap...have to copy backwards. */
s += len;
d += len;
while (len--)
*--d = *--s;
return dst;
}
else
return do_memcpy (dst, src, len);
}
#endif

View File

@ -0,0 +1,80 @@
#if defined __thumb__
#include "../../string/memset.c"
#else
#include <string.h>
#include "xscale.h"
void *
memset (void *dst, int c, size_t len)
{
int dummy;
asm volatile ("tst %0, #0x3"
#ifndef __OPTIMIZE_SIZE__
"
beq 1f
b 2f
0:
strb %1, [%0], #1
tst %0, #0x3
beq 1f
2:
movs r3, %2
sub %2, %2, #1
bne 0b
1:
cmp %2, #0x3
bls 2f
and %1, %1, #0xff
orr lr, %1, %1, asl #8
cmp %2, #0xf
orr lr, lr, lr, asl #16
bls 1f
mov r3, lr
mov r4, lr
mov r5, lr
0:
sub %2, %2, #16
stmia %0!, { r3, r4, r5, lr }
cmp %2, #0xf
bhi 0b
1:
cmp %2, #0x7
bls 1f
mov r3, lr
0:
sub %2, %2, #8
stmia %0!, { r3, lr }
cmp %2, #0x7
bhi 0b
1:
cmp %2, #0x3
bls 2f
0:
sub %2, %2, #4
str lr, [%0], #4
cmp %2, #0x3
bhi 0b
"
#endif /* !__OPTIMIZE_SIZE__ */
"
2:
movs r3, %2
sub %2, %2, #1
beq 1f
0:
movs r3, %2
sub %2, %2, #1
strb %1, [%0], #1
bne 0b
1:"
: "=&r" (dummy), "=&r" (c), "=&r" (len)
: "0" (dst), "1" (c), "2" (len)
: "memory", "r3", "r4", "r5", "lr");
return dst;
}
#endif

View File

@ -0,0 +1,73 @@
#if defined __thumb__
#include "../../string/strchr.c"
#else
#include <string.h>
#include "xscale.h"
char *
strchr (const char *s, int c)
{
unsigned int c2;
asm (PRELOADSTR ("%0") : : "r" (s));
c &= 0xff;
#ifndef __OPTIMIZE_SIZE__
/* Skip unaligned part. */
if ((long)s & 3)
{
s--;
do
{
int c2 = *++s;
if (c2 == c)
return (char *)s;
if (c2 == '\0')
return 0;
}
while (((long)s & 3) != 0);
}
c2 = c + (c << 8);
c2 += c2 << 16;
/* Load two constants:
R6 = 0xfefefeff [ == ~(0x80808080 << 1) ]
R5 = 0x80808080 */
asm (PRELOADSTR ("%0") "
mov r5, #0x80
add r5, r5, #0x8000
add r5, r5, r5, lsl #16
mvn r6, r5, lsl #1
sub %0, %0, #4
0:
ldr r1, [%0, #4]!
" PRELOADSTR ("%0") "
add r3, r1, r6
bic r3, r3, r1
ands r2, r3, r5
bne 1f
eor r2, r1, %1
add r3, r2, r6
bic r3, r3, r2
ands r1, r3, r5
beq 0b
1:"
: "=&r" (s)
: "r" (c2), "0" (s)
: "r2", "r3", "r5", "r6", "cc");
#endif
while (*s && *s != c)
s++;
if (*s == c)
return (char *)s;
return NULL;
}
#endif

View File

@ -0,0 +1,107 @@
#if defined __thumb__
#include "../../string/strcmp.c"
#else
#include <string.h>
#include "xscale.h"
int
strcmp (const char *s1, const char *s2)
{
asm (PRELOADSTR ("%0") : : "r" (s1));
asm (PRELOADSTR ("%0") : : "r" (s2));
#ifndef __OPTIMIZE_SIZE__
if (((long)s1 & 3) == ((long)s2 & 3))
{
int result;
/* Skip unaligned part. */
while ((long)s1 & 3)
{
if (*s1 == '\0' || *s1 != *s2)
goto out;
s1++;
s2++;
}
/* Load two constants:
lr = 0xfefefeff [ == ~(0x80808080 << 1) ]
ip = 0x80808080 */
asm (
"ldr r2, [%1, #0]
ldr r3, [%2, #0]
cmp r2, r3
bne 2f
mov ip, #0x80
add ip, ip, #0x8000
add ip, ip, ip, lsl #16
mvn lr, ip, lsl #1
0:
ldr r2, [%1, #0]
add r3, r2, lr
bic r3, r3, r2
tst r3, ip
beq 1f
mov %0, #0x0
b 3f
1:
ldr r2, [%1, #4]!
ldr r3, [%2, #4]!
" PRELOADSTR("%1") "
" PRELOADSTR("%2") "
cmp r2, r3
beq 0b"
/* The following part could be done in a C loop as well, but it needs
to be assembler to save some cycles in the case where the optimized
loop above finds the strings to be equal. */
"
2:
ldrb r2, [%1, #0]
" PRELOADSTR("%1") "
" PRELOADSTR("%2") "
cmp r2, #0x0
beq 1f
ldrb r3, [%2, #0]
cmp r2, r3
bne 1f
0:
ldrb r3, [%1, #1]!
add %2, %2, #1
ands ip, r3, #0xff
beq 1f
ldrb r3, [%2]
cmp ip, r3
beq 0b
1:
ldrb lr, [%1, #0]
ldrb ip, [%2, #0]
rsb %0, ip, lr
3:
"
: "=r" (result), "=&r" (s1), "=&r" (s2)
: "1" (s1), "2" (s2)
: "lr", "ip", "r2", "r3", "cc");
return result;
}
#endif
while (*s1 != '\0' && *s1 == *s2)
{
asm (PRELOADSTR("%0") : : "r" (s1));
asm (PRELOADSTR("%0") : : "r" (s2));
s1++;
s2++;
}
out:
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
}
#endif

View File

@ -0,0 +1,62 @@
#if defined __thumb__
#include "../../string/strcpy.c"
#else
#include <string.h>
#include "xscale.h"
char *
strcpy (char *dest, const char *src)
{
char *dest0 = dest;
asm (PRELOADSTR ("%0") : : "r" (src));
#ifndef __OPTIMIZE_SIZE__
if (((long)src & 3) == ((long)dest & 3))
{
/* Skip unaligned part. */
while ((long)src & 3)
{
if (! (*dest++ = *src++))
return dest0;
}
/* Load two constants:
R4 = 0xfefefeff [ == ~(0x80808080 << 1) ]
R5 = 0x80808080 */
asm ("mov r5, #0x80
ldr r1, [%1, #0]
add r5, r5, #0x8000
add r5, r5, r5, lsl #16
mvn r4, r5, lsl #1
add r3, r1, r5
bic r3, r3, r1
ands r2, r3, r4
bne 1f
0:
ldr r3, [%1, #0]
ldr r1, [%1, #4]!
" PRELOADSTR("%1") "
str r3, [%0], #4
add r2, r1, r4
bic r2, r2, r1
ands r3, r2, r5
beq 0b
1:"
: "=&r" (dest), "=&r" (src)
: "0" (dest), "1" (src)
: "r1", "r2", "r3", "r4", "r5", "memory", "cc");
}
#endif
while (*dest++ = *src++)
asm (PRELOADSTR ("%0") : : "r" (src));
return dest0;
}
#endif

View File

@ -0,0 +1,100 @@
#if defined __thumb__ || defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
#include "../../string/strlen.c"
#else
#include <string.h>
#include "xscale.h"
size_t
strlen (const char *str)
{
_CONST char *start = str;
/* Skip unaligned part. */
if ((long)str & 3)
{
str--;
do
{
if (*++str == '\0')
goto out;
}
while ((long)str & 3);
}
/* Load two constants:
R4 = 0xfefefeff [ == ~(0x80808080 << 1) ]
R5 = 0x80808080 */
asm ("mov r5, #0x80
add r5, r5, #0x8000
add r5, r5, r5, lsl #16
mvn r4, r5, lsl #1
"
#if defined __ARM_ARCH_5__ || defined __ARM_ARCH_5T__ || defined __ARM_ARCH_5E__ || defined __ARM_ARCH_5TE__
" tst %0, #0x7
ldreqd r6, [%0]
beq 1f
ldr r2, [%0]
add r3, r2, r4
bic r3, r3, r2
ands r2, r3, r5
bne 2f
sub %0, %0, #4
0:
ldrd r6, [%0, #8]!
"
PRELOADSTR ("%0")
"
1:
add r3, r6, r4
add r2, r7, r4
bic r3, r3, r6
bic r2, r2, r7
and r3, r3, r5
and r2, r2, r5
orrs r3, r2, r3
beq 0b
"
#else
" sub %0, %0, #4
0:
ldr r6, [%0, #4]!
"
PRELOADSTR ("%0")
"
add r3, r6, r4
bic r3, r3, r6
ands r3, r3, r5
beq 0b
"
#endif /* __ARM_ARCH_5[T][E]__ */
"
2:
ldrb r3, [%0]
cmp r3, #0x0
beq 1f
0:
ldrb r3, [%0, #1]!
"
PRELOADSTR ("%0")
"
cmp r3, #0x0
bne 0b
1:
"
: "=r" (str) : "0" (str) : "r2", "r3", "r4", "r5", "r6", "r7");
out:
return str - start;
}
#endif

View File

@ -0,0 +1,31 @@
#ifndef __XSCALE_MACH_H__
#define __XSCALE_MACH_H__
/* These are predefined by new versions of GNU cpp. */
#ifndef __USER_LABEL_PREFIX__
#define __USER_LABEL_PREFIX__ _
#endif
#ifndef __REGISTER_PREFIX__
#define __REGISTER_PREFIX__
#endif
/* ANSI concatenation macros. */
#define CONCAT1(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a##b
/* Use the right prefix for global labels. */
#define SYM(x) CONCAT1(__USER_LABEL_PREFIX__, x)
#ifdef __XSCALE__
#define PRELOAD(X) pld [X]
#define PRELOADSTR(X) " pld [" X "]"
#else
#define PRELOAD(X)
#define PRELOADSTR(X) ""
#endif /* __XSCALE__ */
#endif /* !__XSCALE_MACH_H__ */