diff --git a/newlib/libc/machine/arm/Makefile.am b/newlib/libc/machine/arm/Makefile.am index fb33926..ad14ae2 100644 --- a/newlib/libc/machine/arm/Makefile.am +++ b/newlib/libc/machine/arm/Makefile.am @@ -6,13 +6,60 @@ INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) +if HAVE_THUMB1 +if OPT_SIZE +STRCMP_SRC=strcmp.S +STRCMP_OBJ=$(lpfx)strcmp.o +STRLEN_SRC=strlen.c +STRLEN_OBJ=$(lpfx)strlen.o +else +STRCMP_SRC= +STRCMP_OBJ= +STRLEN_SRC= +STRLEN_OBJ= +endif +else +STRCMP_SRC=strcmp.S +STRCMP_OBJ=$(lpfx)strcmp.o +STRLEN_SRC=strlen.c +STRLEN_OBJ=$(lpfx)strlen.o +endif + +if HAVE_ARMV7 +MEMCHR_SRC=memchr.S +MEMCHR_OBJ=$(lpfx)memchr.o +else +MEMCHR_SRC= +MEMCHR_OBJ= +endif + +if OPT_SIZE +MEMCPY_SRC= +MEMCPY_OBJ= +else +if HAVE_ARMV7A +MEMCPY_SRC=memcpy.S +MEMCPY_OBJ=$(lpfx)memcpy.o +else +if HAVE_ARMV7M +MEMCPY_SRC=memcpy.S +MEMCPY_OBJ=$(lpfx)memcpy.o +else +MEMCPY_SRC= +MEMCPY_OBJ= +endif !HAVE_ARMV7M +endif !HAVE_ARMV7A +endif !OPT_SIZE + noinst_LIBRARIES = lib.a -lib_a_SOURCES = setjmp.S access.c strlen.c strcmp.S strcpy.c \ - memcpy.S memcpy-stub.c memchr-stub.c memchr.S \ - strlen.c strlen-armv7.S +lib_a_SOURCES = setjmp.S access.c $(STRCMP_SRC) strcpy.c \ + $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ + strlen-armv7.S lib_a_CCASFLAGS=$(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) +lib_a_LIBADD = $(STRCMP_OBJ) $(STRLEN_OBJ) $(MEMCHR_OBJ) $(MEMCPY_OBJ) +lib_a_DEPENDENCIES = $(STRCMP_OBJ) $(STRLEN_OBJ) $(MEMCHR_OBJ) $(MEMCPY_OBJ) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host diff --git a/newlib/libc/machine/arm/Makefile.in b/newlib/libc/machine/arm/Makefile.in index 1ccfac5..ac39f7f 100644 --- a/newlib/libc/machine/arm/Makefile.in +++ b/newlib/libc/machine/arm/Makefile.in @@ -68,13 +68,27 @@ CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) -lib_a_LIBADD = +@HAVE_THUMB1_FALSE@am__DEPENDENCIES_1 = $(lpfx)strcmp.o +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@am__DEPENDENCIES_1 = $(lpfx)strcmp.o +@HAVE_THUMB1_FALSE@am__DEPENDENCIES_2 = $(lpfx)strlen.o +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@am__DEPENDENCIES_2 = $(lpfx)strlen.o +@HAVE_ARMV7_TRUE@am__DEPENDENCIES_3 = $(lpfx)memchr.o +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_TRUE@@OPT_SIZE_FALSE@am__DEPENDENCIES_4 = $(lpfx)memcpy.o +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@am__DEPENDENCIES_4 = \ +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@ $(lpfx)memcpy.o +@HAVE_THUMB1_FALSE@am__objects_1 = lib_a-strcmp.$(OBJEXT) +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@am__objects_1 = \ +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@ lib_a-strcmp.$(OBJEXT) +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_TRUE@@OPT_SIZE_FALSE@am__objects_2 = lib_a-memcpy.$(OBJEXT) +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@am__objects_2 = \ +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@ lib_a-memcpy.$(OBJEXT) +@HAVE_ARMV7_TRUE@am__objects_3 = lib_a-memchr.$(OBJEXT) +@HAVE_THUMB1_FALSE@am__objects_4 = lib_a-strlen.$(OBJEXT) +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@am__objects_4 = \ +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@ lib_a-strlen.$(OBJEXT) am_lib_a_OBJECTS = lib_a-setjmp.$(OBJEXT) lib_a-access.$(OBJEXT) \ - lib_a-strlen.$(OBJEXT) lib_a-strcmp.$(OBJEXT) \ - lib_a-strcpy.$(OBJEXT) lib_a-memcpy.$(OBJEXT) \ - lib_a-memcpy-stub.$(OBJEXT) lib_a-memchr-stub.$(OBJEXT) \ - lib_a-memchr.$(OBJEXT) lib_a-strlen.$(OBJEXT) \ - lib_a-strlen-armv7.$(OBJEXT) + $(am__objects_1) lib_a-strcpy.$(OBJEXT) $(am__objects_2) \ + $(am__objects_3) $(am__objects_4) lib_a-strlen-armv7.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -105,6 +119,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -199,13 +214,39 @@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) +@HAVE_THUMB1_FALSE@STRCMP_SRC = strcmp.S +@HAVE_THUMB1_TRUE@@OPT_SIZE_FALSE@STRCMP_SRC = +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@STRCMP_SRC = strcmp.S +@HAVE_THUMB1_FALSE@STRCMP_OBJ = $(lpfx)strcmp.o +@HAVE_THUMB1_TRUE@@OPT_SIZE_FALSE@STRCMP_OBJ = +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@STRCMP_OBJ = $(lpfx)strcmp.o +@HAVE_THUMB1_FALSE@STRLEN_SRC = strlen.c +@HAVE_THUMB1_TRUE@@OPT_SIZE_FALSE@STRLEN_SRC = +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@STRLEN_SRC = strlen.c +@HAVE_THUMB1_FALSE@STRLEN_OBJ = $(lpfx)strlen.o +@HAVE_THUMB1_TRUE@@OPT_SIZE_FALSE@STRLEN_OBJ = +@HAVE_THUMB1_TRUE@@OPT_SIZE_TRUE@STRLEN_OBJ = $(lpfx)strlen.o +@HAVE_ARMV7_FALSE@MEMCHR_SRC = +@HAVE_ARMV7_TRUE@MEMCHR_SRC = memchr.S +@HAVE_ARMV7_FALSE@MEMCHR_OBJ = +@HAVE_ARMV7_TRUE@MEMCHR_OBJ = $(lpfx)memchr.o +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_FALSE@@OPT_SIZE_FALSE@MEMCPY_SRC = +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_TRUE@@OPT_SIZE_FALSE@MEMCPY_SRC = memcpy.S +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@MEMCPY_SRC = memcpy.S +@OPT_SIZE_TRUE@MEMCPY_SRC = +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_FALSE@@OPT_SIZE_FALSE@MEMCPY_OBJ = +@HAVE_ARMV7A_FALSE@@HAVE_ARMV7M_TRUE@@OPT_SIZE_FALSE@MEMCPY_OBJ = $(lpfx)memcpy.o +@HAVE_ARMV7A_TRUE@@OPT_SIZE_FALSE@MEMCPY_OBJ = $(lpfx)memcpy.o +@OPT_SIZE_TRUE@MEMCPY_OBJ = noinst_LIBRARIES = lib.a -lib_a_SOURCES = setjmp.S access.c strlen.c strcmp.S strcpy.c \ - memcpy.S memcpy-stub.c memchr-stub.c memchr.S \ - strlen.c strlen-armv7.S +lib_a_SOURCES = setjmp.S access.c $(STRCMP_SRC) strcpy.c \ + $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ + strlen-armv7.S lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) +lib_a_LIBADD = $(STRCMP_OBJ) $(STRLEN_OBJ) $(MEMCHR_OBJ) $(MEMCPY_OBJ) +lib_a_DEPENDENCIES = $(STRCMP_OBJ) $(STRLEN_OBJ) $(MEMCHR_OBJ) $(MEMCPY_OBJ) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host MEMCPY_DEP = memcpy-armv7a.S memcpy-armv7m.S @@ -312,29 +353,17 @@ lib_a-access.o: access.c lib_a-access.obj: access.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-access.obj `if test -f 'access.c'; then $(CYGPATH_W) 'access.c'; else $(CYGPATH_W) '$(srcdir)/access.c'; fi` -lib_a-strlen.o: strlen.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strlen.o `test -f 'strlen.c' || echo '$(srcdir)/'`strlen.c - -lib_a-strlen.obj: strlen.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strlen.obj `if test -f 'strlen.c'; then $(CYGPATH_W) 'strlen.c'; else $(CYGPATH_W) '$(srcdir)/strlen.c'; fi` - lib_a-strcpy.o: strcpy.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strcpy.o `test -f 'strcpy.c' || echo '$(srcdir)/'`strcpy.c lib_a-strcpy.obj: strcpy.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strcpy.obj `if test -f 'strcpy.c'; then $(CYGPATH_W) 'strcpy.c'; else $(CYGPATH_W) '$(srcdir)/strcpy.c'; fi` -lib_a-memcpy-stub.o: memcpy-stub.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-memcpy-stub.o `test -f 'memcpy-stub.c' || echo '$(srcdir)/'`memcpy-stub.c - -lib_a-memcpy-stub.obj: memcpy-stub.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-memcpy-stub.obj `if test -f 'memcpy-stub.c'; then $(CYGPATH_W) 'memcpy-stub.c'; else $(CYGPATH_W) '$(srcdir)/memcpy-stub.c'; fi` - -lib_a-memchr-stub.o: memchr-stub.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-memchr-stub.o `test -f 'memchr-stub.c' || echo '$(srcdir)/'`memchr-stub.c +lib_a-strlen.o: strlen.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strlen.o `test -f 'strlen.c' || echo '$(srcdir)/'`strlen.c -lib_a-memchr-stub.obj: memchr-stub.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-memchr-stub.obj `if test -f 'memchr-stub.c'; then $(CYGPATH_W) 'memchr-stub.c'; else $(CYGPATH_W) '$(srcdir)/memchr-stub.c'; fi` +lib_a-strlen.obj: strlen.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strlen.obj `if test -f 'strlen.c'; then $(CYGPATH_W) 'strlen.c'; else $(CYGPATH_W) '$(srcdir)/strlen.c'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ diff --git a/newlib/libc/machine/arm/configure b/newlib/libc/machine/arm/configure index bf0c669..4cecba4 100755 --- a/newlib/libc/machine/arm/configure +++ b/newlib/libc/machine/arm/configure @@ -564,6 +564,17 @@ PACKAGE_URL='' ac_unique_file="Makefile.am" ac_subst_vars='LTLIBOBJS LIBOBJS +CFLAGS +HAVE_ARMV7M_FALSE +HAVE_ARMV7M_TRUE +HAVE_ARMV7A_FALSE +HAVE_ARMV7A_TRUE +HAVE_ARMV7_FALSE +HAVE_ARMV7_TRUE +OPT_SIZE_FALSE +OPT_SIZE_TRUE +HAVE_THUMB1_FALSE +HAVE_THUMB1_TRUE sys_dir machine_dir libm_machine_dir @@ -3410,6 +3421,218 @@ OBJEXT=${oext} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using thumb1" >&5 +$as_echo_n "checking whether we are using thumb1... " >&6; } +if ${acnewlib_cv_thumb1_processor+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + acnewlib_cv_thumb1_processor=yes; +else + acnewlib_cv_thumb1_processor=no; +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acnewlib_cv_thumb1_processor" >&5 +$as_echo "$acnewlib_cv_thumb1_processor" >&6; } + + if test x"$acnewlib_cv_thumb1_processor" = x"yes"; then + HAVE_THUMB1_TRUE= + HAVE_THUMB1_FALSE='#' +else + HAVE_THUMB1_TRUE='#' + HAVE_THUMB1_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the size is preferred" >&5 +$as_echo_n "checking whether the size is preferred... " >&6; } +if ${acnewlib_cv_opt_size+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + acnewlib_cv_opt_size=yes; +else + acnewlib_cv_opt_size=no; +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acnewlib_cv_opt_size" >&5 +$as_echo "$acnewlib_cv_opt_size" >&6; } + + if test x"$acnewlib_cv_opt_size" = x"yes"; then + OPT_SIZE_TRUE= + OPT_SIZE_FALSE='#' +else + OPT_SIZE_TRUE='#' + OPT_SIZE_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether armv7 processor is supported" >&5 +$as_echo_n "checking whether armv7 processor is supported... " >&6; } +if ${acnewlib_cv_armv7_processor+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + acnewlib_cv_armv7_processor=yes; +else + acnewlib_cv_armv7_processor=no; +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acnewlib_cv_armv7_processor" >&5 +$as_echo "$acnewlib_cv_armv7_processor" >&6; } + + if test x"$acnewlib_cv_armv7_processor" = x"yes"; then + HAVE_ARMV7_TRUE= + HAVE_ARMV7_FALSE='#' +else + HAVE_ARMV7_TRUE='#' + HAVE_ARMV7_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether armv7a processor is supported" >&5 +$as_echo_n "checking whether armv7a processor is supported... " >&6; } +if ${acnewlib_cv_armv7a_processor+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + acnewlib_cv_armv7a_processor=yes; +else + acnewlib_cv_armv7a_processor=no; +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acnewlib_cv_armv7a_processor" >&5 +$as_echo "$acnewlib_cv_armv7a_processor" >&6; } + + if test x"$acnewlib_cv_armv7a_processor" = x"yes"; then + HAVE_ARMV7A_TRUE= + HAVE_ARMV7A_FALSE='#' +else + HAVE_ARMV7A_TRUE='#' + HAVE_ARMV7A_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether armv7m processor is supported" >&5 +$as_echo_n "checking whether armv7m processor is supported... " >&6; } +if ${acnewlib_cv_armv7m_processor+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + acnewlib_cv_armv7m_processor=yes; +else + acnewlib_cv_armv7m_processor=no; +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acnewlib_cv_armv7m_processor" >&5 +$as_echo "$acnewlib_cv_armv7m_processor" >&6; } + + if test x"$acnewlib_cv_armv7m_processor" = x"yes"; then + HAVE_ARMV7M_TRUE= + HAVE_ARMV7M_FALSE='#' +else + HAVE_ARMV7M_TRUE='#' + HAVE_ARMV7M_FALSE= +fi + + + + ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF @@ -3598,6 +3821,26 @@ if test -z "${USE_LIBTOOL_TRUE}" && test -z "${USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_THUMB1_TRUE}" && test -z "${HAVE_THUMB1_FALSE}"; then + as_fn_error $? "conditional \"HAVE_THUMB1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OPT_SIZE_TRUE}" && test -z "${OPT_SIZE_FALSE}"; then + as_fn_error $? "conditional \"OPT_SIZE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_ARMV7_TRUE}" && test -z "${HAVE_ARMV7_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ARMV7\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_ARMV7A_TRUE}" && test -z "${HAVE_ARMV7A_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ARMV7A\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_ARMV7M_TRUE}" && test -z "${HAVE_ARMV7M_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ARMV7M\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 diff --git a/newlib/libc/machine/arm/configure.in b/newlib/libc/machine/arm/configure.in index 6236338..edf9222 100644 --- a/newlib/libc/machine/arm/configure.in +++ b/newlib/libc/machine/arm/configure.in @@ -10,5 +10,133 @@ AC_CONFIG_AUX_DIR(../../../..) NEWLIB_CONFIGURE(../../..) +dnl Check for Thumb1 supported. +AC_CACHE_CHECK(whether we are using thumb1, + acnewlib_cv_thumb1_processor, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + acnewlib_cv_thumb1_processor=yes; +else + acnewlib_cv_thumb1_processor=no; +fi +rm -f conftest*]) + +AM_CONDITIONAL(HAVE_THUMB1, test x"$acnewlib_cv_thumb1_processor" = x"yes") + +dnl Check for whether the size is preferred. +AC_CACHE_CHECK(whether the size is preferred, + acnewlib_cv_opt_size, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + acnewlib_cv_opt_size=yes; +else + acnewlib_cv_opt_size=no; +fi +rm -f conftest*]) + +AM_CONDITIONAL(OPT_SIZE, test x"$acnewlib_cv_opt_size" = x"yes") + +dnl Check for whether ARM_7 or ARM_ARCH_6T2 is defined. +dnl This macro is used to support memchr() for old CPU. +AC_CACHE_CHECK(whether armv7 processor is supported, + acnewlib_cv_armv7_processor, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + acnewlib_cv_armv7_processor=yes; +else + acnewlib_cv_armv7_processor=no; +fi +rm -f conftest*]) + +AM_CONDITIONAL(HAVE_ARMV7, test x"$acnewlib_cv_armv7_processor" = x"yes") + +dnl Check for whether ARM_ARCH_7A is defined. +AC_CACHE_CHECK(whether armv7a processor is supported, + acnewlib_cv_armv7a_processor, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + acnewlib_cv_armv7a_processor=yes; +else + acnewlib_cv_armv7a_processor=no; +fi +rm -f conftest*]) + +AM_CONDITIONAL(HAVE_ARMV7A, test x"$acnewlib_cv_armv7a_processor" = x"yes") + +dnl Check for whether ARM_ARCH_7M is defined. +AC_CACHE_CHECK(whether armv7m processor is supported, + acnewlib_cv_armv7m_processor, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + acnewlib_cv_armv7m_processor=yes; +else + acnewlib_cv_armv7m_processor=no; +fi +rm -f conftest*]) + +AM_CONDITIONAL(HAVE_ARMV7M, test x"$acnewlib_cv_armv7m_processor" = x"yes") + +AC_SUBST(CFLAGS) + AC_CONFIG_FILES([Makefile]) AC_OUTPUT diff --git a/newlib/libc/machine/arm/memchr-stub.c b/newlib/libc/machine/arm/memchr-stub.c deleted file mode 100644 index 04d9d5f..0000000 --- a/newlib/libc/machine/arm/memchr-stub.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (c) 2010-2011, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Linaro Limited nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "arm_asm.h" - - -/* Note: This ifdef MUST match the one in memchr.S */ -#if defined(_ISA_ARM_7) || defined(__ARM_ARCH_6T2__) - /* Do nothing - the memchr.S will get used */ -#else - /* For an older CPU we just fall back to the .c code */ -#include "../../string/memchr.c" -#endif - diff --git a/newlib/libc/machine/arm/memchr.S b/newlib/libc/machine/arm/memchr.S index 1ba8268..a17dfa3 100644 --- a/newlib/libc/machine/arm/memchr.S +++ b/newlib/libc/machine/arm/memchr.S @@ -164,5 +164,19 @@ memchr: pop {r4,r5,r6,r7} subs r0,r0,#1 bx lr - +#else + /* For an older CPU we just fall back to the .c code. */ + + /* Leave this field blank. So the memchr() is not defined, and this will + automatically pull in the default C definition of memchr() from + ../../string/memchr.c. No need to include this file explicitely. + The lib_a-memchr.o will not be generated, so it won't replace the + default lib_a-memchr.o which is generated by ../../string/memchr.c. + See the commands in configure.in and Makefile.am for more details. + + However, if we need to rewrite this function to be more efficient, we + can add the corresponding assembly code into this field and change the + commands in configure.in and Makefile.am to allow the corresponding + lib_a-memchr.o to be generated. + */ #endif diff --git a/newlib/libc/machine/arm/memcpy-stub.c b/newlib/libc/machine/arm/memcpy-stub.c deleted file mode 100644 index 449d31a..0000000 --- a/newlib/libc/machine/arm/memcpy-stub.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2013 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* The sole purpose of this file is to include the plain memcpy provided - in newlib. An optimized version of memcpy is provided in the assembly - file memcpy.S in this directory. */ -#if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) || \ - (!((defined (__ARM_ARCH_7A__) && defined (__ARM_FEATURE_UNALIGNED)) \ - || defined (__ARM_ARCH_7EM__) || defined (__ARM_ARCH_7M__)))) - -#include "../../string/memcpy.c" - -#else - /* Do nothing. See memcpy.S in this directory. */ -#endif diff --git a/newlib/libc/machine/arm/memcpy.S b/newlib/libc/machine/arm/memcpy.S index 734a197..3997524 100644 --- a/newlib/libc/machine/arm/memcpy.S +++ b/newlib/libc/machine/arm/memcpy.S @@ -27,7 +27,19 @@ */ #if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) - /* Do nothing here. See memcpy-stub.c in the same directory. */ + /* Leave this field blank. So the memcpy() is not defined, and this will + automatically pull in the default C definition of memcpy() from + ../../string/memcpy.c. No need to include this file explicitely. + The lib_a-memcpy.o will not be generated, so it won't replace the default + lib_a-memcpy.o which is generated by ../../string/memcpy.c. + See the commands in configure.in and Makefile.am for more details. + + However, if we need to rewrite this function to be more efficient, we + can add the corresponding assembly code into this field and change the + commands in configure.in and Makefile.am to allow the corresponding + lib_a-memcpy.o to be generated. + */ + #elif defined (__ARM_ARCH_7A__) && defined (__ARM_FEATURE_UNALIGNED) #include "memcpy-armv7a.S" @@ -35,5 +47,5 @@ #include "memcpy-armv7m.S" #else - /* Do nothing here. See memcpy-stub.c in the same directory. */ + /* Leave this filed blank. See the commands above. */ #endif diff --git a/newlib/libc/machine/arm/strcmp.S b/newlib/libc/machine/arm/strcmp.S index 1742322..fecfdfd 100644 --- a/newlib/libc/machine/arm/strcmp.S +++ b/newlib/libc/machine/arm/strcmp.S @@ -64,8 +64,27 @@ || (__ARM_ARCH == 6 && __ARM_ARCH_PROFILE == 'M') # if defined (__thumb__) && !defined (__thumb2__) -/* Thumb1 only variant. */ -# include "strcmp-armv4t.S" +/* Thumb1 only variant. If size is preferred, use strcmp-armv4t.S. + If speed is preferred, the strcmp function in ../../string/strcmp.c + will be used. */ + +# if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) +# include "strcmp-armv4t.S" +# else + /* Leave this field blank. So the strcmp() is not defined, and this will + automatically pull in the default C definition of strcmp() from + ../../string/strcmp.c. No need to include this file explicitely. + The lib_a-strcmp.o will not be generated, so it won't replace the + default lib_a-strcmp.o which is generated by ../../string/strcmp.c. + See the commands in configure.in and Makefile.am for more details. + + However, if we need to rewrite this function to be more efficient, + we can add the corresponding assembly code into this field and + change the commands in configure.in and Makefile.am to allow the + corresponding lib_a-strcmp.o to be generated. + */ +# endif + # else # include "strcmp-arm-tiny.S" # endif diff --git a/newlib/libc/machine/arm/strlen.c b/newlib/libc/machine/arm/strlen.c index b8de229..7e59e75 100644 --- a/newlib/libc/machine/arm/strlen.c +++ b/newlib/libc/machine/arm/strlen.c @@ -34,6 +34,24 @@ #if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) || \ (defined (__thumb__) && !defined (__thumb2__)) +# if !defined (PREFER_SIZE_OVER_SPEED) && !defined (__OPTIMIZE_SIZE__) +/* Thumb1 only variant. + If speed is preferred, the strlen() function in ../../string/strlen.c + will be used. + + Leave this field blank. So the strlen() is not defined, and this will + automatically pull in the default C definition of strlen() from + ../../string/strlen.c. No need to include this file explicitely. + The lib_a-strlen.o will not be generated, so it won't replace the default + lib_a-strlen.o which is generated by ../../string/strlen.c. See the + commands in configure.in and Makefile.am for more details. + + However, if we need to rewrite this function to be more efficient, + we can add the corresponding assembly code into this field and change + the commands in configure.in and Makefile.am to allow the corresponding + lib_a-strlen.o to be generated. +*/ +# else size_t strlen (const char* str) { @@ -43,7 +61,7 @@ strlen (const char* str) asm ("mov %0, #0\n" "1:\n\t" "ldrb %1, [%2, %0]\n\t" - "add %0, %0, #1\n\t" + "add %0, %0, #1\n\t" "cmp %1, #0\n\t" "bne 1b" : "=&r" (len), "=&r" (scratch) : "r" (str) : "memory", "cc"); @@ -58,6 +76,7 @@ strlen (const char* str) return end - str - 1; #endif } +#endif #else #if !(defined(_ISA_ARM_7) || defined(__ARM_ARCH_6T2__))