Commit Graph

33 Commits

Author SHA1 Message Date
Wilco Dijkstra e7b1ee2ea6 Add rawmemchr
Marcus Shawcroft wrote:
> This patch appears to have been munged by the mail system, can you
> repost as an attachment please.

Sure, I've attached the patch.

Wilco

Add a simple rawmemchr implementation. Use strlen for rawmemchr(s, '\0') as it is the
fastest way to search for '\0', and use memchr with an infinite size for other cases.
This is 3x faster for large sizes.

ChangeLog:
2016-04-22  Wilco Dijkstra  <wdijkstr@arm.com>

        * newlib/libc/machine/aarch64/Makefile.in: Add rawmemchr.S and
        rawmemchr-stub.c.
        * newlib/libc/machine/aarch64/Makefile.am: Likewise.
        * newlib/libc/machine/aarch64/rawmemchr.S (rawmemchr): Add rawmemchr.
        * newlib/libc/machine/aarch64/rawmemchr-stub.c (rawmemchr): Likewise.
2016-05-20 10:47:02 +02:00
Sebastian Huber 8a5af1a184 Use __machine_*_t_defined for internal types
Newlib defines defaults for internal types via <sys/_types.h> and uses
<machine/_types.h> to let targets define their own type if necessary.

Previously for example

	#ifndef __dev_t_defined
	typedef short __dev_t;
	#endif

However, the __*_t_defined pattern conflicts with the glibc type guard
pattern for user types, e.g. dev_t in this example.  Introduce a
__machine_*_t_defined pattern for internal types (defined by
<machine/_types.h>, used by <sys/_types.h>).  For example

	#ifndef __machine_dev_t_defined
	typedef short __dev_t;
	#endif

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
2016-04-15 14:51:39 +02:00
Jeff Johnston fbc4a0827b Bump up newlib version to 2.4.0 due to feature test refactoring 2016-03-29 17:33:42 -04:00
Jeff Johnston ad7b3cde9c Regenerate files for newlib 2.3.0. 2015-12-21 21:32:11 -05:00
Wilco Dijkstra 3c8636acf6 AArch64: Tune memcpy
* newlib/libc/machine/aarch64/memcpy.S (memcpy):
 	Further tuning for performance.
2015-11-12 13:38:39 +01:00
Wilco Dijkstra 127c38bd44 [AArch64] Rewrite optimized memset.
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.
2015-07-30 12:51:34 +01:00
Marcus Shawcroft c7806ef76a [AArch64] Reverting recent optimized memset(). 2015-07-15 13:34:58 +01:00
Wilco Dijkstra 3263f90ef7 [AArch64] Optimized memset.
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.
2015-07-13 13:17:16 +01:00
Wilco Dijkstra b295f6ba44 [AArch64] Optimized memcpy.
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.
2015-07-13 13:09:02 +01:00
Wilco Dijkstra 9503c7f275 [AArch64] Optimized memmove.
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.
2015-07-13 13:03:02 +01:00
Corinna Vinschen 086cd00d24 * libc/machine/aarch64/strlen.S (strlen): Improve performance. 2015-01-20 10:11:56 +00:00
Richard Earnshaw 6a35dbf342 * libc/machine/aarch64/strcpy.S (strcpy): Further performance
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.
2015-01-06 09:57:55 +00:00
Jeff Johnston 0615b4bb5f 2014-12-18 Jeff Johnston <jjohnstn@redhat.com>
* 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
2014-12-18 20:30:11 +00:00
Richard Earnshaw 52edca9f86 * libc/machine/aarch64/strcpy.S: Improve handling of short strings. 2014-12-16 15:48:58 +00:00
Richard Earnshaw 8608e14a3b * libc/machine/aarch64/strchrnul.S (vrepmask): Use a call-clobbered
register.
2014-12-10 09:35:10 +00:00
Richard Earnshaw c53c2915a7 * libc/machine/aarch64/strrchr.S: New file.
* libc/machine/aarch64/strrchr-stub.c: New file.
	* libc/machine/aarch64/Makefile.am: Add them to build list.
	* libc/machine/aarch64/Makefile.in: Regenerated.
2014-12-08 15:21:42 +00:00
Richard Earnshaw fbb8f1a2c7 * libc/machine/aarch64/strcpy.S: New file.
* 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.
2014-11-10 14:57:37 +00:00
Richard Earnshaw 59c3d5a1a4 * libc/machine/aarch64/memchr.S: Add check for zero-sized buffer. 2014-08-19 10:44:44 +00:00
Richard Earnshaw 87375c75b3 [aarch64] Add memchr.
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.
2014-07-11 09:10:50 +00:00
Richard Earnshaw deda48a9fb * libc/machine/aarch64/strchrnul.S: New file.
* libc/machine/aarch64/strchrnul-stub.c: New file.
	* libc/machine/aarch64/Makefile.am: Add them to build list.
	* libc/machine/aarch64/Makefile.in: Regenerated.
2014-06-11 10:42:54 +00:00
Richard Earnshaw 5efd066df2 * libc/machine/aarch64/strchr.S: New file
* libc/machine/aarch64/strchr-stub.c: New file
	* libc/machine/aarch64/Makefile.am: Add them to build list.
	* libc/machine/aarch64/Makefile.in: Regenerated.
2014-06-10 14:04:31 +00:00
Jeff Johnston 5ac847c629 2013-12-23 Jeff Johnston <jjohnstn@redhat.com>
* NEWS: Update with 2.1.0 info.
        * README: Ditto.
        * acinclude.m4: Change version number to 2.1.0.
        * aclocal.m4: Regenerated.
        * configure: Ditto.
        * Makefile.in: Regenerated.
        * doc/aclocal.m4: Ditto.
        * doc/configure: Ditto.
        * libc/*/aclocal.m4: Ditto.
        * libc/*/configure: Ditto.
        * libc/libc.texinfo: Ditto.
        * libm/*/aclocal.m4: Ditto.
        * libm/*/configure: Ditto.
        * libm/libm.texinfo: Ditto.
        * libc/sys/linux/shared.ld: Add VERS_2.1
2013-12-23 20:45:10 +00:00
Marcus Shawcroft 450fe1bfa3 2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/strncmp.S: Correct arithmetic for
	    argument N values close to the maximum representable
	    value in an unsigned 64 bit value.
2013-01-17 14:53:32 +00:00
Marcus Shawcroft 78f66de6ce 2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/strnlen.S: Correct arithmetic for
	argument N values close to the maximum representable
	value in an unsigned 64 bit value.
2013-01-17 14:52:37 +00:00
Marcus Shawcroft 211f1ec717 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Add
        memcmp-stub.c and memcmp.S
        * libc/machine/aarch64/Makefile.in: Regenerated.
        * libc/machine/aarch64/memcmp-stub.c: New file.
        * libc/machine/aarch64/memcmp.S: New file.
2013-01-10 13:02:19 +00:00
Marcus Shawcroft ba8f05bcf5 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Add
        strnlen-stub.c and strnlen.S
        * libc/machine/aarch64/Makefile.in: Regenerated.
        * libc/machine/aarch64/strnlen-stub.c: New file.
        * libc/machine/aarch64/strnlen.S: New file.
2013-01-10 13:00:40 +00:00
Marcus Shawcroft 82c3d37d07 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES):
        Add strlen.S and strlen-stub.c.
        * libc/machine/aarch64/Makefile.in: Regenerated.
        * libc/machine/aarch64/strlen-stub.c: New file.
        * libc/machine/aarch64/strlen.S: New file.
2013-01-10 12:57:11 +00:00
Marcus Shawcroft a8907bda23 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES):
	Add memmove.S and memmove-stub.c.
	* libc/machine/aarch64/Makefile.in: Regenerated.
	* libc/machine/aarch64/memmove-stub.c: New file.
	* libc/machine/aarch64/memmove.S: New file.
2013-01-10 12:54:39 +00:00
Marcus Shawcroft 2edd103558 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Re-ordered.
	Add strncmp.S and strncmp-stub.c.
	* libc/machine/aarch64/Makefile.in: Regenerated.
	* libc/machine/aarch64/strncmp-stub.c: New file.
	* libc/machine/aarch64/strncmp.S: New file.
2013-01-10 12:51:13 +00:00
Marcus Shawcroft 080e96f57c 2013-01-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* libc/machine/aarch64/Makefile.am (lib_a_SOURCES): Add
	    memcpy.c memcpy-stub.c memset.S memset-stub.c strcmp.S
	    strcmp-stub.c.
	    * libc/machine/aarch64/Makefile.in: Regenerated.
	    * libc/machine/aarch64/memcpy-stub.c: New file.
	    * libc/machine/aarch64/memcpy.S: New file.
	    * libc/machine/aarch64/memset-stub.c: New file.
	    * libc/machine/aarch64/memset.S: New file.
	    * libc/machine/aarch64/strcmp.S: New file.
	    * libc/machine/aarch64/strcmp-stub.c: New file.
2013-01-10 12:44:50 +00:00
Jeff Johnston f2d223bd0f 2012-12-20 Jeff Johnston <jjohnstn@redhat.com>
* NEWS: Update with 2.0.0 info.
        * README: Ditto.
        * acinclude.m4: Change version number to 2.0.0.
        * aclocal.m4: Regenerated.
        * configure: Ditto.
        * Makefile.in: Regenerated.
        * doc/aclocal.m4: Ditto.
        * doc/configure: Ditto.
        * libc/*/aclocal.m4: Ditto.
        * libc/*/configure: Ditto.
        * libc/libc.texinfo: Ditto.
        * libm/*/aclocal.m4: Ditto.
        * libm/*/configure: Ditto.
        * libm/libm.texinfo: Ditto.
        * libc/sys/linux/shared.ld: Add VERS_2.0
2012-12-20 21:10:27 +00:00
Jeff Johnston d7281d547f 2012-12-14 Yufeng Zhang <yufeng.zhang@arm.com>
* libc/machine/aarch64/machine/_types.h: New file; define _ssize_t
        as long.
2012-12-14 20:45:51 +00:00
Jeff Johnston c3fe5bf771 2012-09-26 Ian Bolton <ian.bolton@arm.com>
Jim MacArthur  <jim.macarthur@arm.com>
        Marcus Shawcroft  <marcus.shawcroft@arm.com>
        Nigel Stephens  <nigel.stephens@arm.com>
        Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
        Richard Earnshaw  <rearnsha@arm.com>
        Sofiane Naci  <sofiane.naci@arm.com>
        Tejas Belagod  <tejas.belagod@arm.com>
        Yufeng Zhang  <yufeng.zhang@arm.com>

        * configure.host: Add AArch64.
        * libc/include/machine/ieeefp.h: Add AArch64.
        * libc/include/machine/setjmp.h: Add AArch64.
        * libc/include/machine/time.h: Add AArch64.
        * libc/include/sys/config.h: Add AArch64.
        * libc/machine/aarch64/Makefile.am: New file.
        * libc/machine/aarch64/Makefile.in: Generated.
        * libc/machine/aarch64/aclocal.m4: Generated.
        * libc/machine/aarch64/configure: Generated.
        * libc/machine/aarch64/configure.in: New file.
        * libc/machine/aarch64/setjmp.S: New file.
        * libc/machine/configure.in: Add AArch64.
        * libc/machine/configure: Re-generated.
        * libm/machine/aarch64/Makefile.am: New file.
        * libm/machine/aarch64/Makefile.in: Generated.
        * libm/machine/aarch64/aclocal.m4: Generated.
        * libm/machine/aarch64/configure: Generated.
        * libm/machine/aarch64/configure.in: New file.
        * libm/machine/aarch64/s_ceil.c: New file.
        * libm/machine/aarch64/s_floor.c: New file.
        * libm/machine/aarch64/s_fma.c: New file.
        * libm/machine/aarch64/s_fmax.c: New file.
        * libm/machine/aarch64/s_fmin.c: New file.
        * libm/machine/aarch64/s_llrint.c: New file.
        * libm/machine/aarch64/s_llround.c: New file.
        * libm/machine/aarch64/s_lrint.c: New file.
        * libm/machine/aarch64/s_lround.c: New file.
        * libm/machine/aarch64/s_nearbyint.c: New file.
        * libm/machine/aarch64/s_rint.c: New file.
        * libm/machine/aarch64/s_round.c: New file.
        * libm/machine/aarch64/s_trunc.c: New file.
        * libm/machine/aarch64/sf_ceil.c: New file.
        * libm/machine/aarch64/sf_floor.c: New file.
        * libm/machine/aarch64/sf_fma.c: New file.
        * libm/machine/aarch64/sf_fmax.c: New file.
        * libm/machine/aarch64/sf_fmin.c: New file.
        * libm/machine/aarch64/sf_llrint.c: New file.
        * libm/machine/aarch64/sf_llround.c: New file.
        * libm/machine/aarch64/sf_lrint.c: New file.
        * libm/machine/aarch64/sf_lround.c: New file.
        * libm/machine/aarch64/sf_nearbyint.c: New file.
        * libm/machine/aarch64/sf_rint.c: New file.
        * libm/machine/aarch64/sf_round.c: New file.
        * libm/machine/aarch64/sf_trunc.c: New file.
        * libm/machine/configure.in: Add AArch64.
        * libm/machine/configure: Re-generated.
2012-09-26 20:06:50 +00:00