| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
* newlib/libc/machine/aarch64/memcpy.S (memcpy):
Further tuning for performance.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ARM newlib has various strcmp implementations that use .cfi_*
directives to generate unwind information.
The effect of this is that the generated objects contain .eh_frame
sections. However, ARM uses its own unwind info format, not
.eh_frame, which is generated by ARM-specific directives, not .cfi_*.
The .eh_frame sections are useless, but also not removed by strip and
may be loaded into memory at runtime.
This patch fixes this by using .cfi_sections .debug_frame (as in
glibc) so that the directives generate .debug_frame instead.
.debug_frame is useful for the debugger, can be removed by strip, and
is not loaded into memory at runtime.
* libc/machine/arm/strcmp-arm-tiny.S: Use .cfi_sections
.debug_frame.
* libc/machine/arm/strcmp-armv4.S: Likewise.
* libc/machine/arm/strcmp-armv4t.S: Likewise.
* libc/machine/arm/strcmp-armv6.S: Likewise.
* libc/machine/arm/strcmp-armv6m.S: Likewise.
* libc/machine/arm/strcmp-armv7.S: Likewise.
* libc/machine/arm/strcmp-armv7m.S: Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The patch cleans up the auto configury mechanism used to select
different implementations of memchr for various architecture versions.
The approach here is to remove the selection of memchr within automake
and instead use complimentary logic in memchr-stub.c and memchr.S to
choose between the gerneric memchr.c implementation or one of the
architecture specific implementations.
This patch also changes the selection criteria inline with the
previous proposal here:
https://sourceware.org/ml/newlib/2015/msg00752.html
but using the ACLE predefines.
Regressed for armv7-a armv5 armv8-a, correct selection of memcpy
implementation by manual inspection of a test program built for these
three architectures.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch cleans up the auto configury mechanism used to select
different implementations of memcpy for various architecture versions.
The approach here is to remove the selection of memcpy within automake
and instead use complimentary logic in memcpy-stub.c and memcpy.S to
choose between the generic memcpy.c implemenation or one of the
architecture specific memcpy*.S implemenations.
Regressed for armv7-a armv5 armv8-a, correct selection of memcpy
implementation by manual inspection of a test program built for these
three architectures.
This revised patch flips the remaining preprocessor logic in
memcpy-stub.c to use ACLE defines as requested in the previous review
and removes the now disused HAVE_ARMV7A and HAVE_ARMV8A configure.in
support.
|
|
|
|
|
|
|
|
|
| |
The newlib configury logic that detects architecture version and
chooses an appropriate memcpy implementation does not consider
ARMv8-a.
This patch adds configury logic to detect ARMv8-a along with the
associated changes in Makefile.am and memcpy.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Also, harmonize libm to use CHEWOUT_FILES like libc, rather than chobj.
Update documentation appropriately.
* HOWTO: Update.
* Makefile.shared: Move documentation rules to here...
* libc/argz/Makefile.am: ... from here ...
* libc/ctype/Makefile.am: ... and here.
* libc/errno/Makefile.am: Ditto.
* libc/iconv/Makefile.am: Ditto.
* libc/iconv/ccs/Makefile.am : Ditto.
* libc/iconv/ces/Makefile.am: Ditto.
* libc/iconv/lib/Makefile.am: Ditto.
* libc/locale/Makefile.am: Ditto.
* libc/misc/Makefile.am: Ditto.
* libc/posix/Makefile.am: Ditto.
* libc/reent/Makefile.am: Ditto.
* libc/search/Makefile.am: Ditto.
* libc/stdio/Makefile.am: Ditto.
* libc/stdio64/Makefile.am: Ditto.
* libc/stdlib/Makefile.am : Ditto.
* libc/string/Makefile.am: Ditto.
* libc/syscalls/Makefile.am: Ditto.
* libc/time/Makefile.am : Ditto.
* libc/unix/Makefile.am: Ditto.
* libc/xdr/Makefile.am: Ditto.
* libm/common/Makefile.am: Ditto.
* libm/complex/Makefile.am: Ditto.
* libm/math/Makefile.am: Ditto.
* libm/mathfp/Makefile.am: Ditto.
|
|
|
|
|
| |
* libc/machine/mips/memcpy.S (memcpy): Add word copies for small
aligned data.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Hi!
I've got the situation, that the function strlen() occurs twice in libc.a
(building newlib for ARM-V7a and Size-Optimized).
In newlib/libc/machine/arm/strlen.c there are the pre-processor stetements ...
#if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) || \
(defined (__thumb__) && !defined (__thumb2__))
/*...*/
#else
#if !(defined(_ISA_ARM_7) || defined(__ARM_ARCH_6T2__))
/*...*/
#endif
and in newlib/libc/machine/arm/strlen-armv7.S the "exclude" begins with
/* NOTE: This ifdef MUST match the ones in arm/strlen.c
We fallback to the one in arm/strlen.c for size optimised or
for older architectures. */
#if defined(_ISA_ARM_7) || defined(__ARM_ARCH_6T2__) && \
!(defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) || \
(defined (__thumb__) && !defined (__thumb2__)))
But this is not completely contrary to arm/strlen.c (see above)!
To fix the logical statement in arm/strlen-armv7.S there are parentheses needed
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
newlib/ChangeLog:
2015-07-28 Andre Vieira <andre.simoesdiasvieira@arm.com>
* libc/sys/arm/sys/param.h (BIG_ENDIAN, LITTLE_ENDIAN): Moved
to machine/endian.h.
* libc/machine/arm/machine/param.h (BYTE_ORDER): Idem.
* libc/machine/arm/machine/endian.h: New.
From ca6efccda91bc6b620b7d96a466b0f1e2f02cfeb Mon Sep 17 00:00:00 2001
From: Andre Simoes Dias Vieira <andsim01@arm.com>
Date: Tue, 28 Jul 2015 12:16:20 +0100
Subject: [PATCH 2/2] Move endianness configuration to machine/endian.h
|
|
|
|
|
|
|
|
|
|
|
| |
This is an optimized memset for AArch64. Memset is split into 4 main
cases: small sets of up to 16 bytes, medium of 16..96 bytes which are
fully unrolled. Large memsets of more than 96 bytes align the
destination and use an unrolled loop processing 64 bytes per
iteration. Memsets of zero of more than 256 use the dc zva
instruction, and there are faster versions for the common ZVA sizes 64
or 128. STP of Q registers is used to reduce codesize without loss of
performance.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This is an optimized memset for AArch64. Memset is split into 4 main
cases: small sets of up to 16 bytes, medium of 16..96 bytes which are
fully unrolled. Large memsets of more than 96 bytes align the
destination and use an unrolled loop processing 64 bytes per
iteration. Memsets of zero of more than 256 use the dc zva
instruction, and there are faster versions for the common ZVA sizes 64
or 128. STP of Q registers is used to reduce codesize without loss of
performance.
|
|
|
|
|
|
|
|
|
|
| |
This is an optimized memcpy for AArch64. Copies are split into 3 main
cases: small copies of up to 16 bytes, medium copies of 17..96 bytes
which are fully unrolled. Large copies of more than 96 bytes align
the destination and use an unrolled loop processing 64 bytes per
iteration. In order to share code with memmove, small and medium
copies read all data before writing, allowing any kind of overlap. On
a random copy test memcpy is 40.8% faster on A57 and 28.4% on A53.
|
|
|
|
|
|
|
| |
This is an optimized memmove for AArch64. All copies of up to 96
bytes and all backward copies are done by the new memcpy. The only
remaining case is large forward copies which are done in the same way
as the memcpy loop, but copying from the end rather than the start.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* libc/machine/arm/aeabi_memmove-arm.S (__aeabi_memmove): Update the
assembler implementation.
* libc/machine/arm/aeabi_memmove-thumb.S (__aeabi_memmove): Ditto.
* libc/machine/arm/aeabi_memmove-thumb2.S (__aeabi_memmove): Ditto.
* libc/machine/arm/aeabi_memset-arm.S (__aeabi_memset): Ditto.
* libc/machine/arm/aeabi_memset-thumb.S (__aeabi_memset): Ditto.
* libc/machine/arm/aeabi_memset-thumb2.S (__aeabi_memset): Ditto.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
__RX_DISALLOW_STRING_INSNS__ is defined.
* rx/crt0.S (_start): If string instructions are not allowed,
avoid using SMOVF.
* libc/machine/rx/memchr.S: Add non-string insn using version.
* libc/machine/rx/memcpy.S: Likewise.
* libc/machine/rx/memmove.S: Likewise.
* libc/machine/rx/mempcpy.S: Likewise.
* libc/machine/rx/strcat.S: Likewise.
* libc/machine/rx/strcmp.S: Likewise.
* libc/machine/rx/strcpy.S: Likewise.
* libc/machine/rx/strlen.S: Likewise.
* libc/machine/rx/strncat.S: Likewise.
* libc/machine/rx/strncmp.S: Likewise.
* libc/machine/rx/strncpy.S: Likewise.
|
| |
|
| |
|
|
|
|
|
| |
* libc/machine/mips/memcpy.S: Fix macro indentation and typos in
comments.
|
|
|
|
|
|
|
|
|
|
|
|
| |
aeabi_memclr.
* libc/machine/arm/aeabi_memset.c: New file to support
aeabi_memset.
* libc/machine/arm/aeabi_memset-soft.S: Ditto.
* libc/machine/arm/aeabi_memset-arm.S: Ditto.
* libc/machine/arm/aeabi_memset-thumb.S: Ditto.
* libc/machine/arm/aeabi_memset-thumb2.S: Ditto.
* libc/machine/arm/Makefile.am: Add dependencies.
* libc/machine/arm/Makefile.in: Regenerated.
|
|
|
|
|
|
|
|
|
|
| |
aeabi_memmove.
* libc/machine/arm/aeabi_memmove-soft.S: Ditto.
* libc/machine/arm/aeabi_memmove-arm.S: Ditto.
* libc/machine/arm/aeabi_memmove-thumb.S: Ditto.
* libc/machine/arm/aeabi_memmove-thumb2.S: Ditto.
* libc/machine/arm/Makefile.am: Add dependencies.
* libc/machine/arm/Makefile.in: Regenerated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(cimagl): Add prototype.
(creall): Add prototype.
* libc/include/ieeefp.h: Include float.h.
(EXT_EXPBITS, EXT_FRACHBITS, EXT_FRACLBITS)
(EXT_EXP_INFNAN. EXT_EXP_BIAS, EXT_FRACBITS): Define.
(struct ieee_ext, union ieee_ext_u): New types for long double
support.
* libc/include/math.h (finitel): Add prototype.
(hypotl): Add prototype.
(sqrtl): Add prototype.
* libm/common/Makefile.am (lsrc): Add sl_finite.c.
* libm/common/Makefile.in: Regenerate.
* libm/common/fdlibm.h (__ieee754_hypotl): Add prototype.
* libm/common/hypotl.c (hypotl): Add implementation for when long
double is larger than double.
* libm/common/sqrtl.c (sqrtl): Likewise.
* libm/common/sl_finite.c: New file. Adds implementation of the
finitel function.
* libm/complex/Makefile.am (lsrc): Define.
(libcomplex_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/complex/Makefile.in: Regenerate.
* libm/complex/cabs.c: Add documentation of cabsl function.
* libm/complex/cimag.c: Add documentation of cimagl function.
* libm/complex/creall.c: Add documentation of creall function.
* libm/complex/cabsl.c: New file. Adds implementation of the
cabsl function.
* libm/complex/cimagl.c: New file. Adds implementation of the
cimagl function.
* libm/complex/creall.c: New file. Adds implementation of the
creall function.
* libm/math/Makefile.am (lsrc): Define.
(libmath_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/math/Makefile.in: Regenerate.
* libm/math/el_hypot.c: New file. Adds implementation of the
__ieee754_hypotl function.
|
|
|
|
| |
* libc/machine/i386/f_*: Remove duplicate files.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* COPYING.NEWLIB: Likewise.
libgloss/
* configure.in: Add Visium support.
* configure: Regenerate.
* visium/: New directory.
newlib/
* configure.host: Add Visium support.
* libc/machine/configure.in: Likewise.
* libc/machine/configure: Regenerate.
* libc/machine/visium/: New directory.
* libc/include/machine/setjmp.h (_JBLEN): Define for Visium.
* libc/include/machine/ieeefp.h (__IEEE_BIG_ENDIAN): Likewise.
* libc/include/machine/time.h (_CLOCKS_PER_SEC_): Likewise.
|
| |
|
|
|
|
|
|
|
|
| |
improvements. Adjust to allow building as stpcpy.
* libc/machine/aarch64/stpcpy.S: New file.
* libc/machine/aarch64/stpcpy-stub.c: New file.
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Build stpcpy.
* libc/machine/aarch64/Makefile.in: Regenerated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* NEWS: Update with 2.2.0 info.
* README: Ditto.
* acinclude.m4: Change version number to 2.2.0.
* libc/libc.texinfo: Ditto.
* libm/libm.texinfo: Ditto.
* configure: Regenerated.
* Makefile.in: Regenerated.
* doc/configure: Ditto.
* libc/*/configure: Ditto.
* libm/*/configure: Ditto.
* libc/sys/linux/shared.ld: Add VERS_2.2
|
| |
|
|
|
|
| |
* newlib/libc/machine/nds32/setjmp.S: Add FPU support.
|
|
|
|
|
|
| |
* configure.host: or1knd support, OpenRISC without delay slot
* libc/include/machine/setjmp.h: Add or1knd
* libc/machine/or1k/setjmp.S: Optional delay slot
|
|
|
|
| |
* libc/machine/or1k/setjmp.S: Remove save/restore of r3-r8
|
|
|
|
| |
register.
|
|
|
|
|
|
| |
* libc/machine/aarch64/strrchr-stub.c: New file.
* libc/machine/aarch64/Makefile.am: Add them to build list.
* libc/machine/aarch64/Makefile.in: Regenerated.
|
|
|
|
|
|
|
| |
from the 64-bit _JBTYPE definition.
* libc/machine/mips/setjmp.S: Re-work the o32 FP64 support to match
the now one-and-only supported o32 FP64 ABI extension. Also
support o32 FPXX.
|
|
|
|
|
|
| |
* libc/machine/arm/strcmp.S: Add new wrapper.
* libc/machine/arm/Makefile.am: Add dependencies.
* libc/machine/arm/Makefile.in: Regenerated.
|
|
|
|
|
|
| |
* libc/machine/aarch64/strcpy-stub.S: New file.
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Add new files.
* libc/machine/aarch64/Makefile.in: Regenerate.
|
|
|
|
|
|
|
|
| |
* newlib/libc/machine/mips/strcmp.c: Remove.
* newlib/libc/machine/mips/strcmp.S: New.
* newlib/libc/machine/mips/Makefile.am (lib_a_SOURCES):
Replace strcmp.c with strcmp.S
* newlib/libc/machine/mips/Makefile.in: Regenerate.
|
|
|
|
|
| |
* libc/machine/arm/Makefile.am: Fix typo.
* libc/machine/arm/Makefile.in: Regenerated.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* libc/machine/arm/memchr.S: Clean up the wrapper.
* libc/machine/arm/memcpy.S: Likewise.
* libc/machine/arm/memchr-stub.c: Delete this redundant file.
* libc/machine/arm/memcpy-stub.c: Likewise.
* libc/machine/arm/strcmp.S: Add speed-preferred wrapper.
* libc/machine/arm/strlen.S: Likewise.
* libc/machine/arm/Makefile.am: Add dependencies.
* libc/machine/arm/Makefile.in: Regenerated.
* libc/machine/arm/configure.in: Add dependencies.
* libc/machine/arm/configure: Regenerated.
|
| |
|
| |
|
|
|
|
|
|
| |
* libc/machine/arm/aeabi_memcpy-armv7a.S: New file.
* libc/machine/arm/Makefile.am: Add dependencies.
* libc/machine/arm/Makefile.in: Regenerated.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Found by:
find -name '*.h' |xargs grep -i 'attribute.*(([a-z]'
For an example of the type of bugs this causes, try compiling this valid
C11 program (it's valid because 'noreturn' is reserved for use in the
user namespace unless you include <stdnoreturn.h>):
$ cat foo.c
#define noreturn __attribute__((noreturn))
#include <stdlib.h>
$ gcc -c -o foo.o -Wall foo.c
In file included from /usr/include/stdlib.h:11:0,
from foo.c:2:
foo.c:1:18: error: expected ')' before '__attribute__'
#define noreturn __attribute__((noreturn))
^
/usr/include/stdlib.h:66:28: error: expected ',' or ';' before ')' token
_VOID _EXFUN(abort,(_VOID) _ATTRIBUTE ((noreturn)));
^
* libc/machine/spu/spu_timer_internal.h: Decorate attribute names
with __, for namespace safety.
* libc/machine/xscale/machine/profile.h: Likewise.
* libc/include/stdlib.h: Likewise.
* libc/include/_ansi.h: Likewise.
* libc/include/sys/unistd.h: Likewise.
* libc/sys/linux/linuxthreads/libc-symbols.h: Likewise.
* libc/sys/linux/linuxthreads/internals.h: Likewise.
* libc/sys/linux/machine/i386/weakalias.h: Likewise.
* libc/sys/linux/machine/i386/dl-procinfo.h: Likewise.
* libc/sys/linux/machine/i386/dl-machine.h: Likewise.
* libc/sys/linux/libc-symbols.h: Likewise.
* libc/sys/linux/iconv/gconv_charset.h: Likewise.
* libc/sys/linux/include/resolv.h: Likewise.
* libc/sys/linux/sys/unistd.h: Likewise.
* libc/sys/linux/dl/atomicity.h: Likewise.
* libc/sys/linux/dl/dynamic-link.h: Likewise.
* libc/sys/linux/dl/ldsodefs.h: Likewise.
|
|
|
|
|
|
|
|
| |
* libc/include/machine/ieeefp.h: Replace or32 with or1k.
* libc/machine/configure.in: Add or1k subdirectory.
* libc/machine/or1k/configure.in: New file.
* libc/machine/or1k/Makefile.am: New file.
* libc/machine/or1k/setjmp.S: New file.
|
|
|
|
|
|
|
|
|
| |
2014-07-11 K�vin Petit <kevin.petit@arm.com>
* libc/machine/aarch64/memchr.S: New file.
* libc/machine/aarch64/memchr-stub.c: New file.
* libc/machine/aarch64/Makefile.am: Add the new files.
* libc/machine/aarch64/Makefile.in: Regenerated.
|
|
|
|
|
|
| |
Richard Earnshaw <rearnsha@arm.com>
* libc/machine/arm/memchr.S (.arch): Require revision ARMv6t2.
|
|
|
|
|
|
| |
* libc/machine/aarch64/strchrnul-stub.c: New file.
* libc/machine/aarch64/Makefile.am: Add them to build list.
* libc/machine/aarch64/Makefile.in: Regenerated.
|