diff options
author | cvs2svn <> | 2014-12-18 23:30:28 +0300 |
---|---|---|
committer | cvs2svn <> | 2014-12-18 23:30:28 +0300 |
commit | 38b85aed54f123088f578c98ead9474c3237b913 (patch) | |
tree | e8fa66238e5382a18584e7637fb65278c99a565a /newlib/libc/machine/arm/aeabi_memcpy-armv7a.S | |
parent | 7e72fffc61b29325ac5a875c5318cdf2f294ae28 (diff) |
This commit was manufactured by cvs2svn to create tag 'newlib-2_1_0'.newlib-2_1_0
Sprout from newlib-2_2_0 2014-12-18 20:30:12 UTC cvs2svn 'This commit was manufactured by cvs2svn to create branch 'newlib-2_2_0'.'
Cherrypick from master 2013-12-23 20:45:10 UTC Jeff Johnston <jjohnstn@redhat.com> '2013-12-23 Jeff Johnston <jjohnstn@redhat.com>':
COPYING.NEWLIB
ChangeLog
config.guess
config.sub
config/ChangeLog
configure
configure.ac
libgloss/ChangeLog
libgloss/README
libgloss/aarch64/Makefile.in
libgloss/aarch64/cpu-init/rdimon-aem-el3.S
libgloss/arm/Makefile.in
libgloss/arm/configure
libgloss/arm/configure.in
libgloss/arm/elf-aprofile-validation.specs
libgloss/arm/elf-aprofile-ve.specs
libgloss/arm/elf-rdimon.specs
libgloss/arm/syscalls.c
libgloss/bfin/Makefile.in
libgloss/configure
libgloss/configure.in
libgloss/libnosys/nosys.specs
libgloss/libnosys/sbrk.c
libgloss/mips/crt0.S
libgloss/mips/mti32.ld
libgloss/mips/mti64.ld
libgloss/mips/mti64_64.ld
libgloss/mips/mti64_n32.ld
libgloss/mips/regs.S
libgloss/moxie/Makefile.in
libgloss/moxie/configure
libgloss/moxie/configure.in
libgloss/msp430/Makefile.in
libgloss/msp430/crt0.S
libgloss/msp430/crtn.S
libgloss/msp430/msp430-sim.ld
libgloss/msp430/msp430.ld
libgloss/msp430/msp430xl-sim.ld
libgloss/msp430/nosyscalls.S
libgloss/nds32/Makefile.in
libgloss/nds32/crt0.S
libgloss/nds32/crt1.S
libgloss/nds32/syscall_argv.S
libgloss/nds32/syscall_argvlen.S
libgloss/nds32/syscall_chdir.S
libgloss/nds32/syscall_chmod.S
libgloss/nds32/syscall_close.S
libgloss/nds32/syscall_exit.S
libgloss/nds32/syscall_extra.h
libgloss/nds32/syscall_fstat.S
libgloss/nds32/syscall_getpid.S
libgloss/nds32/syscall_gettimeofday.S
libgloss/nds32/syscall_isatty.S
libgloss/nds32/syscall_kill.S
libgloss/nds32/syscall_link.S
libgloss/nds32/syscall_lseek.S
libgloss/nds32/syscall_open.S
libgloss/nds32/syscall_read.S
libgloss/nds32/syscall_rename.S
libgloss/nds32/syscall_sbrk.S
libgloss/nds32/syscall_stat.S
libgloss/nds32/syscall_system.S
libgloss/nds32/syscall_time.S
libgloss/nds32/syscall_times.S
libgloss/nds32/syscall_unlink.S
libgloss/nds32/syscall_utime.S
libgloss/nds32/syscall_write.S
ltmain.sh
newlib/ChangeLog
newlib/NEWS
newlib/README
newlib/acconfig.h
newlib/acinclude.m4
newlib/configure
newlib/configure.host
newlib/configure.in
newlib/doc/configure
newlib/iconvdata/configure
newlib/libc/argz/envz_merge.c
newlib/libc/configure
newlib/libc/configure.in
newlib/libc/ctype/iswalpha.c
newlib/libc/ctype/jp2uc.c
newlib/libc/include/_ansi.h
newlib/libc/include/grp.h
newlib/libc/include/inttypes.h
newlib/libc/include/machine/_default_types.h
newlib/libc/include/machine/ieeefp.h
newlib/libc/include/machine/setjmp.h
newlib/libc/include/math.h
newlib/libc/include/pwd.h
newlib/libc/include/setjmp.h
newlib/libc/include/stdint.h
newlib/libc/include/stdio.h
newlib/libc/include/stdio_ext.h
newlib/libc/include/stdlib.h
newlib/libc/include/string.h
newlib/libc/include/sys/_default_fcntl.h
newlib/libc/include/sys/config.h
newlib/libc/include/sys/errno.h
newlib/libc/include/sys/features.h
newlib/libc/include/sys/resource.h
newlib/libc/include/sys/signal.h
newlib/libc/include/sys/stat.h
newlib/libc/include/sys/time.h
newlib/libc/include/sys/unistd.h
newlib/libc/include/time.h
newlib/libc/include/wchar.h
newlib/libc/libc.texinfo
newlib/libc/locale/ldpart.c
newlib/libc/machine/a29k/configure
newlib/libc/machine/aarch64/Makefile.am
newlib/libc/machine/aarch64/Makefile.in
newlib/libc/machine/aarch64/configure
newlib/libc/machine/arm/Makefile.am
newlib/libc/machine/arm/Makefile.in
newlib/libc/machine/arm/arm_asm.h
newlib/libc/machine/arm/configure
newlib/libc/machine/arm/configure.in
newlib/libc/machine/arm/memchr-stub.c
newlib/libc/machine/arm/memchr.S
newlib/libc/machine/arm/memcpy-stub.c
newlib/libc/machine/arm/memcpy.S
newlib/libc/machine/arm/strcmp.S
newlib/libc/machine/arm/strlen.c
newlib/libc/machine/bfin/configure
newlib/libc/machine/configure
newlib/libc/machine/configure.in
newlib/libc/machine/cr16/configure
newlib/libc/machine/cris/configure
newlib/libc/machine/crx/configure
newlib/libc/machine/d10v/configure
newlib/libc/machine/d30v/configure
newlib/libc/machine/epiphany/configure
newlib/libc/machine/fr30/configure
newlib/libc/machine/frv/configure
newlib/libc/machine/h8300/configure
newlib/libc/machine/h8500/configure
newlib/libc/machine/hppa/configure
newlib/libc/machine/i386/configure
newlib/libc/machine/i960/configure
newlib/libc/machine/iq2000/configure
newlib/libc/machine/lm32/configure
newlib/libc/machine/m32c/configure
newlib/libc/machine/m32r/configure
newlib/libc/machine/m68hc11/configure
newlib/libc/machine/m68k/configure
newlib/libc/machine/m88k/configure
newlib/libc/machine/mep/configure
newlib/libc/machine/microblaze/configure
newlib/libc/machine/mips/Makefile.am
newlib/libc/machine/mips/Makefile.in
newlib/libc/machine/mips/configure
newlib/libc/machine/mips/setjmp.S
newlib/libc/machine/mips/strcmp.c
newlib/libc/machine/mn10200/configure
newlib/libc/machine/mn10300/configure
newlib/libc/machine/moxie/configure
newlib/libc/machine/msp430/configure
newlib/libc/machine/mt/configure
newlib/libc/machine/nds32/Makefile.am
newlib/libc/machine/nds32/Makefile.in
newlib/libc/machine/nds32/configure
newlib/libc/machine/nds32/configure.in
newlib/libc/machine/nds32/setjmp.S
newlib/libc/machine/necv70/configure
newlib/libc/machine/nios2/configure
newlib/libc/machine/powerpc/configure
newlib/libc/machine/rl78/configure
newlib/libc/machine/rl78/setjmp.S
newlib/libc/machine/rx/configure
newlib/libc/machine/sh/configure
newlib/libc/machine/sparc/configure
newlib/libc/machine/sparc/setjmp.S
newlib/libc/machine/spu/configure
newlib/libc/machine/spu/spu_timer_internal.h
newlib/libc/machine/tic4x/configure
newlib/libc/machine/tic6x/configure
newlib/libc/machine/tic80/configure
newlib/libc/machine/v850/configure
newlib/libc/machine/w65/configure
newlib/libc/machine/x86_64/configure
newlib/libc/machine/xc16x/configure
newlib/libc/machine/xscale/configure
newlib/libc/machine/xscale/machine/profile.h
newlib/libc/machine/xstormy16/configure
newlib/libc/machine/z8k/configure
newlib/libc/search/Makefile.am
newlib/libc/search/Makefile.in
newlib/libc/search/hash.c
newlib/libc/search/qsort.c
newlib/libc/stdio/Makefile.am
newlib/libc/stdio/Makefile.in
newlib/libc/stdio/asnprintf.c
newlib/libc/stdio/asprintf.c
newlib/libc/stdio/clearerr.c
newlib/libc/stdio/dprintf.c
newlib/libc/stdio/fclose.c
newlib/libc/stdio/feof.c
newlib/libc/stdio/ferror.c
newlib/libc/stdio/fflush.c
newlib/libc/stdio/fgetc.c
newlib/libc/stdio/fgets.c
newlib/libc/stdio/fgetwc.c
newlib/libc/stdio/fgetws.c
newlib/libc/stdio/fileno.c
newlib/libc/stdio/findfp.c
newlib/libc/stdio/fprintf.c
newlib/libc/stdio/fputc.c
newlib/libc/stdio/fputs.c
newlib/libc/stdio/fputwc.c
newlib/libc/stdio/fputws.c
newlib/libc/stdio/fread.c
newlib/libc/stdio/fscanf.c
newlib/libc/stdio/fwalk.c
newlib/libc/stdio/fwrite.c
newlib/libc/stdio/getwchar.c
newlib/libc/stdio/local.h
newlib/libc/stdio/open_memstream.c
newlib/libc/stdio/printf.c
newlib/libc/stdio/putwchar.c
newlib/libc/stdio/scanf.c
newlib/libc/stdio/snprintf.c
newlib/libc/stdio/sprintf.c
newlib/libc/stdio/sscanf.c
newlib/libc/stdio/stdio.tex
newlib/libc/stdio/vasnprintf.c
newlib/libc/stdio/vasprintf.c
newlib/libc/stdio/vdprintf.c
newlib/libc/stdio/vfprintf.c
newlib/libc/stdio/vprintf.c
newlib/libc/stdio/vscanf.c
newlib/libc/stdio/vsnprintf.c
newlib/libc/stdio/vsprintf.c
newlib/libc/stdio/vsscanf.c
newlib/libc/stdlib/Makefile.am
newlib/libc/stdlib/Makefile.in
newlib/libc/stdlib/gd_qnan.h
newlib/libc/stdlib/ldtoa.c
newlib/libc/stdlib/nano-mallocr.c
newlib/libc/stdlib/strtod.c
newlib/libc/stdlib/strtold.c
newlib/libc/string/local.h
newlib/libc/string/memccpy.c
newlib/libc/string/memchr.c
newlib/libc/string/memrchr.c
newlib/libc/string/memset.c
newlib/libc/string/rawmemchr.c
newlib/libc/string/strcasestr.c
newlib/libc/string/strerror.c
newlib/libc/string/u_strerr.c
newlib/libc/sys/a29khif/configure
newlib/libc/sys/arc/configure
newlib/libc/sys/arm/configure
newlib/libc/sys/arm/syscalls.c
newlib/libc/sys/configure
newlib/libc/sys/configure.in
newlib/libc/sys/d10v/configure
newlib/libc/sys/decstation/configure
newlib/libc/sys/epiphany/configure
newlib/libc/sys/h8300hms/configure
newlib/libc/sys/h8500hms/configure
newlib/libc/sys/linux/configure
newlib/libc/sys/linux/dl/atomicity.h
newlib/libc/sys/linux/dl/dynamic-link.h
newlib/libc/sys/linux/dl/ldsodefs.h
newlib/libc/sys/linux/iconv/gconv_charset.h
newlib/libc/sys/linux/include/resolv.h
newlib/libc/sys/linux/libc-symbols.h
newlib/libc/sys/linux/linuxthreads/configure
newlib/libc/sys/linux/linuxthreads/internals.h
newlib/libc/sys/linux/linuxthreads/libc-symbols.h
newlib/libc/sys/linux/linuxthreads/machine/configure
newlib/libc/sys/linux/linuxthreads/machine/i386/configure
newlib/libc/sys/linux/machine/configure
newlib/libc/sys/linux/machine/i386/configure
newlib/libc/sys/linux/machine/i386/dl-machine.h
newlib/libc/sys/linux/machine/i386/dl-procinfo.h
newlib/libc/sys/linux/machine/i386/weakalias.h
newlib/libc/sys/linux/shared.ld
newlib/libc/sys/linux/sys/unistd.h
newlib/libc/sys/m88kbug/configure
newlib/libc/sys/mmixware/configure
newlib/libc/sys/netware/configure
newlib/libc/sys/rdos/configure
newlib/libc/sys/rtems/configure
newlib/libc/sys/rtems/sys/cpuset.h
newlib/libc/sys/rtems/sys/syslimits.h
newlib/libc/sys/sh/configure
newlib/libc/sys/sparc64/configure
newlib/libc/sys/sun4/configure
newlib/libc/sys/sysmec/configure
newlib/libc/sys/sysnec810/configure
newlib/libc/sys/sysnecv850/configure
newlib/libc/sys/sysvi386/configure
newlib/libc/sys/sysvnecv70/configure
newlib/libc/sys/tic80/configure
newlib/libc/sys/w65/configure
newlib/libc/sys/z8ksim/configure
newlib/libc/time/Makefile.am
newlib/libc/time/Makefile.in
newlib/libc/time/clock.c
newlib/libc/time/gmtime_r.c
newlib/libc/time/lcltime_r.c
newlib/libc/time/local.h
newlib/libc/time/mktm_r.c
newlib/libc/time/strftime.c
newlib/libc/time/strptime.c
newlib/libc/unix/getcwd.c
newlib/libm/common/Makefile.am
newlib/libm/common/Makefile.in
newlib/libm/common/s_nan.c
newlib/libm/common/sf_nan.c
newlib/libm/complex/complex.tex
newlib/libm/configure
newlib/libm/libm.texinfo
newlib/libm/machine/aarch64/configure
newlib/libm/machine/arm/configure
newlib/libm/machine/configure
newlib/libm/machine/configure.in
newlib/libm/machine/i386/configure
newlib/libm/machine/spu/configure
newlib/libm/math/math.tex
newlib/libm/mathfp/sf_numtest.c
newlib/newlib.hin
Delete:
config/mt-nios2-elf
libgloss/arm/elf-nano.specs
libgloss/mips/abiflags.S
libgloss/moxie/moxiebox.ld
libgloss/msp430/ciosyscalls.S
libgloss/msp430/unlink.c
libgloss/nds32/_argv.S
libgloss/nds32/_argvlen.S
libgloss/nds32/_chdir.S
libgloss/nds32/_chmod.S
libgloss/nds32/_close.S
libgloss/nds32/_exit.S
libgloss/nds32/_fstat.S
libgloss/nds32/_getpid.S
libgloss/nds32/_gettimeofday.S
libgloss/nds32/_isatty.S
libgloss/nds32/_kill.S
libgloss/nds32/_link.S
libgloss/nds32/_lseek.S
libgloss/nds32/_open.S
libgloss/nds32/_read.S
libgloss/nds32/_rename.S
libgloss/nds32/_sbrk.S
libgloss/nds32/_stat.S
libgloss/nds32/_system.S
libgloss/nds32/_time.S
libgloss/nds32/_times.S
libgloss/nds32/_unlink.S
libgloss/nds32/_utime.S
libgloss/nds32/_write.S
libgloss/nds32/syscall_error_handler.S
libgloss/nds32/vh.h
libgloss/or1k/Makefile.in
libgloss/or1k/README
libgloss/or1k/aclocal.m4
libgloss/or1k/board.h
libgloss/or1k/boards/README
libgloss/or1k/boards/atlys.S
libgloss/or1k/boards/de0_nano.S
libgloss/or1k/boards/ml501.S
libgloss/or1k/boards/ml509.S
libgloss/or1k/boards/optimsoc.S
libgloss/or1k/boards/or1ksim-uart.S
libgloss/or1k/boards/or1ksim.S
libgloss/or1k/boards/ordb1a3pe1500.S
libgloss/or1k/boards/ordb2a.S
libgloss/or1k/boards/orpsocrefdesign.S
libgloss/or1k/boards/tmpl.S
libgloss/or1k/boards/tmpl.c
libgloss/or1k/caches-asm.S
libgloss/or1k/configure
libgloss/or1k/configure.in
libgloss/or1k/crt0.S
libgloss/or1k/exceptions-asm.S
libgloss/or1k/exceptions.c
libgloss/or1k/impure.c
libgloss/or1k/include/or1k-asm.h
libgloss/or1k/include/or1k-nop.h
libgloss/or1k/include/or1k-support.h
libgloss/or1k/interrupts-asm.S
libgloss/or1k/interrupts.c
libgloss/or1k/mmu-asm.S
libgloss/or1k/or1k-internals.h
libgloss/or1k/or1k_uart.c
libgloss/or1k/or1k_uart.h
libgloss/or1k/outbyte.S
libgloss/or1k/sbrk.c
libgloss/or1k/sync-asm.S
libgloss/or1k/syscalls.c
libgloss/or1k/timer.c
libgloss/or1k/util.c
newlib/libc/include/sys/_intsup.h
newlib/libc/machine/aarch64/memchr-stub.c
newlib/libc/machine/aarch64/memchr.S
newlib/libc/machine/aarch64/strchr-stub.c
newlib/libc/machine/aarch64/strchr.S
newlib/libc/machine/aarch64/strchrnul-stub.c
newlib/libc/machine/aarch64/strchrnul.S
newlib/libc/machine/aarch64/strcpy-stub.c
newlib/libc/machine/aarch64/strcpy.S
newlib/libc/machine/aarch64/strrchr-stub.c
newlib/libc/machine/aarch64/strrchr.S
newlib/libc/machine/arm/acle-compat.h
newlib/libc/machine/arm/aeabi_memcpy-armv7a.S
newlib/libc/machine/arm/aeabi_memcpy.c
newlib/libc/machine/arm/strcmp-arm-tiny.S
newlib/libc/machine/arm/strcmp-armv4.S
newlib/libc/machine/arm/strcmp-armv4t.S
newlib/libc/machine/arm/strcmp-armv6.S
newlib/libc/machine/arm/strcmp-armv6m.S
newlib/libc/machine/arm/strcmp-armv7.S
newlib/libc/machine/arm/strcmp-armv7m.S
newlib/libc/machine/mips/strcmp.S
newlib/libc/machine/or1k/Makefile.am
newlib/libc/machine/or1k/Makefile.in
newlib/libc/machine/or1k/aclocal.m4
newlib/libc/machine/or1k/configure
newlib/libc/machine/or1k/configure.in
newlib/libc/machine/or1k/setjmp.S
newlib/libc/search/bsd_qsort_r.c
newlib/libc/search/qsort_r.c
newlib/libc/stdio/clearerr_u.c
newlib/libc/stdio/feof_u.c
newlib/libc/stdio/ferror_u.c
newlib/libc/stdio/fflush_u.c
newlib/libc/stdio/fgetc_u.c
newlib/libc/stdio/fgets_u.c
newlib/libc/stdio/fgetwc_u.c
newlib/libc/stdio/fgetws_u.c
newlib/libc/stdio/fileno_u.c
newlib/libc/stdio/fputc_u.c
newlib/libc/stdio/fputs_u.c
newlib/libc/stdio/fputwc_u.c
newlib/libc/stdio/fputws_u.c
newlib/libc/stdio/fread_u.c
newlib/libc/stdio/fsetlocking.c
newlib/libc/stdio/fwrite_u.c
newlib/libc/stdio/getwc_u.c
newlib/libc/stdio/getwchar_u.c
newlib/libc/stdio/nano-vfprintf.c
newlib/libc/stdio/nano-vfprintf_float.c
newlib/libc/stdio/nano-vfprintf_i.c
newlib/libc/stdio/nano-vfprintf_local.h
newlib/libc/stdio/nano-vfscanf.c
newlib/libc/stdio/nano-vfscanf_float.c
newlib/libc/stdio/nano-vfscanf_i.c
newlib/libc/stdio/nano-vfscanf_local.h
newlib/libc/stdio/putwc_u.c
newlib/libc/stdio/putwchar_u.c
newlib/libc/stdio/stdio_ext.c
newlib/libc/stdlib/itoa.c
newlib/libc/stdlib/utoa.c
newlib/libc/sys/tirtos/Makefile.am
newlib/libc/sys/tirtos/Makefile.in
newlib/libc/sys/tirtos/aclocal.m4
newlib/libc/sys/tirtos/configure
newlib/libc/sys/tirtos/configure.in
newlib/libc/sys/tirtos/include/sys/lock.h
newlib/libc/sys/tirtos/lock.c
newlib/libc/time/month_lengths.c
newlib/libc/time/tzcalc_limits.c
newlib/libm/common/log2l.c
newlib/libm/common/logbl.c
newlib/libm/common/nexttoward.c
newlib/libm/common/nexttowardf.c
newlib/libm/common/nexttowardl.c
newlib/libm/machine/nds32/Makefile.am
newlib/libm/machine/nds32/Makefile.in
newlib/libm/machine/nds32/aclocal.m4
newlib/libm/machine/nds32/configure
newlib/libm/machine/nds32/configure.in
newlib/libm/machine/nds32/w_sqrt.S
newlib/libm/machine/nds32/wf_sqrt.S
newlib/testsuite/newlib.stdio/nulprintf.c
Diffstat (limited to 'newlib/libc/machine/arm/aeabi_memcpy-armv7a.S')
-rw-r--r-- | newlib/libc/machine/arm/aeabi_memcpy-armv7a.S | 286 |
1 files changed, 0 insertions, 286 deletions
diff --git a/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S b/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S deleted file mode 100644 index 53e3330ff..000000000 --- a/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#include "arm_asm.h" - -/* NOTE: This ifdef MUST match the one in aeabi_memcpy.c. */ -#if defined (__ARM_ARCH_7A__) && defined (__ARM_FEATURE_UNALIGNED) && \ - (defined (__ARM_NEON__) || !defined (__SOFTFP__)) - - .syntax unified - .global __aeabi_memcpy - .type __aeabi_memcpy, %function -__aeabi_memcpy: - /* Assumes that n >= 0, and dst, src are valid pointers. - If there is at least 8 bytes to copy, use LDRD/STRD. - If src and dst are misaligned with different offsets, - first copy byte by byte until dst is aligned, - and then copy using LDRD/STRD and shift if needed. - When less than 8 left, copy a word and then byte by byte. */ - - /* Save registers (r0 holds the return value): - optimized push {r0, r4, r5, lr}. - To try and improve performance, stack layout changed, - i.e., not keeping the stack looking like users expect - (highest numbered register at highest address). */ - push {r0, lr} - strd r4, r5, [sp, #-8]! - - /* Get copying of tiny blocks out of the way first. */ - /* Is there at least 4 bytes to copy? */ - subs r2, r2, #4 - blt copy_less_than_4 /* If n < 4. */ - - /* Check word alignment. */ - ands ip, r0, #3 /* ip = last 2 bits of dst. */ - bne dst_not_word_aligned /* If dst is not word-aligned. */ - - /* Get here if dst is word-aligned. */ - ands ip, r1, #3 /* ip = last 2 bits of src. */ - bne src_not_word_aligned /* If src is not word-aligned. */ -word_aligned: - /* Get here if source and dst both are word-aligned. - The number of bytes remaining to copy is r2+4. */ - - /* Is there is at least 64 bytes to copy? */ - subs r2, r2, #60 - blt copy_less_than_64 /* If r2 + 4 < 64. */ - - /* First, align the destination buffer to 8-bytes, - to make sure double loads and stores don't cross cache line boundary, - as they are then more expensive even if the data is in the cache - (require two load/store issue cycles instead of one). - If only one of the buffers is not 8-bytes aligned, - then it's more important to align dst than src, - because there is more penalty for stores - than loads that cross cacheline boundary. - This check and realignment are only worth doing - if there is a lot to copy. */ - - /* Get here if dst is word aligned, - i.e., the 2 least significant bits are 0. - If dst is not 2w aligned (i.e., the 3rd bit is not set in dst), - then copy 1 word (4 bytes). */ - ands r3, r0, #4 - beq two_word_aligned /* If dst already two-word aligned. */ - ldr r3, [r1], #4 - str r3, [r0], #4 - subs r2, r2, #4 - blt copy_less_than_64 - -two_word_aligned: - /* TODO: Align to cacheline (useful for PLD optimization). */ - - /* Every loop iteration copies 64 bytes. */ -1: - .irp offset, #0, #8, #16, #24, #32, #40, #48, #56 - ldrd r4, r5, [r1, \offset] - strd r4, r5, [r0, \offset] - .endr - - add r0, r0, #64 - add r1, r1, #64 - subs r2, r2, #64 - bge 1b /* If there is more to copy. */ - -copy_less_than_64: - - /* Get here if less than 64 bytes to copy, -64 <= r2 < 0. - Restore the count if there is more than 7 bytes to copy. */ - adds r2, r2, #56 - blt copy_less_than_8 - - /* Copy 8 bytes at a time. */ -2: - ldrd r4, r5, [r1], #8 - strd r4, r5, [r0], #8 - subs r2, r2, #8 - bge 2b /* If there is more to copy. */ - -copy_less_than_8: - - /* Get here if less than 8 bytes to copy, -8 <= r2 < 0. - Check if there is more to copy. */ - cmn r2, #8 - beq return /* If r2 + 8 == 0. */ - - /* Restore the count if there is more than 3 bytes to copy. */ - adds r2, r2, #4 - blt copy_less_than_4 - - /* Copy 4 bytes. */ - ldr r3, [r1], #4 - str r3, [r0], #4 - -copy_less_than_4: - /* Get here if less than 4 bytes to copy, -4 <= r2 < 0. */ - - /* Restore the count, check if there is more to copy. */ - adds r2, r2, #4 - beq return /* If r2 == 0. */ - - /* Get here with r2 is in {1,2,3}={01,10,11}. */ - /* Logical shift left r2, insert 0s, update flags. */ - lsls r2, r2, #31 - - /* Copy byte by byte. - Condition ne means the last bit of r2 is 0. - Condition cs means the second to last bit of r2 is set, - i.e., r2 is 1 or 3. */ - itt ne - ldrbne r3, [r1], #1 - strbne r3, [r0], #1 - - itttt cs - ldrbcs r4, [r1], #1 - ldrbcs r5, [r1] - strbcs r4, [r0], #1 - strbcs r5, [r0] - -return: - /* Restore registers: optimized pop {r0, r4, r5, pc} */ - ldrd r4, r5, [sp], #8 - pop {r0, pc} /* This is the only return point of memcpy. */ - -dst_not_word_aligned: - - /* Get here when dst is not aligned and ip has the last 2 bits of dst, - i.e., ip is the offset of dst from word. - The number of bytes that remains to copy is r2 + 4, - i.e., there are at least 4 bytes to copy. - Write a partial word (0 to 3 bytes), such that dst becomes - word-aligned. */ - - /* If dst is at ip bytes offset from a word (with 0 < ip < 4), - then there are (4 - ip) bytes to fill up to align dst to the next - word. */ - rsb ip, ip, #4 /* ip = #4 - ip. */ - cmp ip, #2 - - /* Copy byte by byte with conditionals. */ - itt gt - ldrbgt r3, [r1], #1 - strbgt r3, [r0], #1 - - itt ge - ldrbge r4, [r1], #1 - strbge r4, [r0], #1 - - ldrb lr, [r1], #1 - strb lr, [r0], #1 - - /* Update the count. - ip holds the number of bytes we have just copied. */ - subs r2, r2, ip /* r2 = r2 - ip. */ - blt copy_less_than_4 /* If r2 < ip. */ - - /* Get here if there are more than 4 bytes to copy. - Check if src is aligned. If beforehand src and dst were not word - aligned but congruent (same offset), then now they are both - word-aligned, and we can copy the rest efficiently (without - shifting). */ - ands ip, r1, #3 /* ip = last 2 bits of src. */ - beq word_aligned /* If r1 is word-aligned. */ - -src_not_word_aligned: - /* Get here when src is not word-aligned, but dst is word-aligned. - The number of bytes that remains to copy is r2+4. */ - - /* Copy word by word using LDR when alignment can be done in hardware, - i.e., SCTLR.A is set, supporting unaligned access in LDR and STR. */ - subs r2, r2, #60 - blt 8f - -7: - /* Copy 64 bytes in every loop iteration. */ - .irp offset, #0, #4, #8, #12, #16, #20, #24, #28, #32, #36, #40, #44, #48, #52, #56, #60 - ldr r3, [r1, \offset] - str r3, [r0, \offset] - .endr - - add r0, r0, #64 - add r1, r1, #64 - subs r2, r2, #64 - bge 7b - -8: - /* Get here if less than 64 bytes to copy, -64 <= r2 < 0. - Check if there is more than 3 bytes to copy. */ - adds r2, r2, #60 - blt copy_less_than_4 - -9: - /* Get here if there is less than 64 but at least 4 bytes to copy, - where the number of bytes to copy is r2+4. */ - ldr r3, [r1], #4 - str r3, [r0], #4 - subs r2, r2, #4 - bge 9b - - b copy_less_than_4 - - - .syntax unified - .global __aeabi_memcpy4 - .type __aeabi_memcpy4, %function -__aeabi_memcpy4: - /* Assumes that both of its arguments are 4-byte aligned. */ - - push {r0, lr} - strd r4, r5, [sp, #-8]! - - /* Is there at least 4 bytes to copy? */ - subs r2, r2, #4 - blt copy_less_than_4 /* If n < 4. */ - - bl word_aligned - - .syntax unified - .global __aeabi_memcpy8 - .type __aeabi_memcpy8, %function -__aeabi_memcpy8: - /* Assumes that both of its arguments are 8-byte aligned. */ - - push {r0, lr} - strd r4, r5, [sp, #-8]! - - /* Is there at least 4 bytes to copy? */ - subs r2, r2, #4 - blt copy_less_than_4 /* If n < 4. */ - - /* Is there at least 8 bytes to copy? */ - subs r2, r2, #4 - blt copy_less_than_8 /* If n < 8. */ - - /* Is there at least 64 bytes to copy? */ - subs r2, r2, #56 - blt copy_less_than_64 /* if n + 8 < 64. */ - - bl two_word_aligned - -#endif |