mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 04:49:25 +08:00
Add support for Intel's XScale processor
This commit is contained in:
parent
09872ef885
commit
0ffc3b94a0
@ -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
|
||||
|
@ -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"
|
||||
|
14
newlib/libc/machine/xscale/Makefile.am
Normal file
14
newlib/libc/machine/xscale/Makefile.am
Normal 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
|
322
newlib/libc/machine/xscale/Makefile.in
Normal file
322
newlib/libc/machine/xscale/Makefile.in
Normal 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
282
newlib/libc/machine/xscale/aclocal.m4
vendored
Normal 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
1687
newlib/libc/machine/xscale/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
12
newlib/libc/machine/xscale/configure.in
Normal file
12
newlib/libc/machine/xscale/configure.in
Normal 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)
|
102
newlib/libc/machine/xscale/memchr.c
Normal file
102
newlib/libc/machine/xscale/memchr.c
Normal 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
|
109
newlib/libc/machine/xscale/memcmp.c
Normal file
109
newlib/libc/machine/xscale/memcmp.c
Normal 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
|
101
newlib/libc/machine/xscale/memcpy.c
Normal file
101
newlib/libc/machine/xscale/memcpy.c
Normal 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
|
122
newlib/libc/machine/xscale/memmove.c
Normal file
122
newlib/libc/machine/xscale/memmove.c
Normal 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
|
80
newlib/libc/machine/xscale/memset.c
Normal file
80
newlib/libc/machine/xscale/memset.c
Normal 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
|
73
newlib/libc/machine/xscale/strchr.c
Normal file
73
newlib/libc/machine/xscale/strchr.c
Normal 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
|
107
newlib/libc/machine/xscale/strcmp.c
Normal file
107
newlib/libc/machine/xscale/strcmp.c
Normal 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
|
62
newlib/libc/machine/xscale/strcpy.c
Normal file
62
newlib/libc/machine/xscale/strcpy.c
Normal 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
|
100
newlib/libc/machine/xscale/strlen.c
Normal file
100
newlib/libc/machine/xscale/strlen.c
Normal 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
|
31
newlib/libc/machine/xscale/xscale.h
Normal file
31
newlib/libc/machine/xscale/xscale.h
Normal 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__ */
|
Loading…
x
Reference in New Issue
Block a user