* libc/machine/arm/aeabi_memmove.c: New file to support
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.
This commit is contained in:
		| @@ -1,3 +1,14 @@ | |||||||
|  | 2015-02-17  Hale Wang  <hale.wang@arm.com> | ||||||
|  |  | ||||||
|  | 	* libc/machine/arm/aeabi_memmove.c: New file to support | ||||||
|  | 	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. | ||||||
|  |  | ||||||
| 2015-02-06  Nick Clifton  <nickc@redhat.com> | 2015-02-06  Nick Clifton  <nickc@redhat.com> | ||||||
|  |  | ||||||
| 	* libc/include/complex.h (cabsl): Add prototype. | 	* libc/include/complex.h (cabsl): Add prototype. | ||||||
|   | |||||||
| @@ -49,7 +49,8 @@ endif !OPT_SIZE | |||||||
|  |  | ||||||
| lib_a_SOURCES = setjmp.S access.c strcmp.S strcpy.c \ | lib_a_SOURCES = setjmp.S access.c strcmp.S strcpy.c \ | ||||||
| 	        $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ | 	        $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ | ||||||
| 		strlen-armv7.S aeabi_memcpy.c aeabi_memcpy-armv7a.S | 		strlen-armv7.S aeabi_memcpy.c aeabi_memcpy-armv7a.S \ | ||||||
|  | 		aeabi_memmove.c aeabi_memmove-soft.S | ||||||
|  |  | ||||||
| lib_a_CCASFLAGS=$(AM_CCASFLAGS) | lib_a_CCASFLAGS=$(AM_CCASFLAGS) | ||||||
| lib_a_CFLAGS = $(AM_CFLAGS) | lib_a_CFLAGS = $(AM_CFLAGS) | ||||||
| @@ -62,6 +63,8 @@ CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host | |||||||
| MEMCPY_DEP=memcpy-armv7a.S memcpy-armv7m.S | MEMCPY_DEP=memcpy-armv7a.S memcpy-armv7m.S | ||||||
| STRCMP_DEP=strcmp-arm-tiny.S strcmp-armv4.S strcmp-armv4t.S strcmp-armv6.S \ | STRCMP_DEP=strcmp-arm-tiny.S strcmp-armv4.S strcmp-armv4t.S strcmp-armv6.S \ | ||||||
| 	strcmp-armv6m.S strcmp-armv7.S strcmp-armv7m.S | 	strcmp-armv6m.S strcmp-armv7.S strcmp-armv7m.S | ||||||
|  | AEABI_MEMMOVE_DEP=aeabi_memmove-thumb.S aeabi_memmove-thumb2.S \ | ||||||
|  | 		aeabi_memmove-arm.S | ||||||
|  |  | ||||||
| $(lpfx)memcpy.o: $(MEMCPY_DEP) | $(lpfx)memcpy.o: $(MEMCPY_DEP) | ||||||
|  |  | ||||||
| @@ -70,3 +73,7 @@ $(lpfx)memcpy.obj: $(MEMCPY_DEP) | |||||||
| $(lpfx)strcmp.o: $(STRCMP_DEP) | $(lpfx)strcmp.o: $(STRCMP_DEP) | ||||||
|  |  | ||||||
| $(lpfx)strcmp.obj: $(STRCMP_DEP) | $(lpfx)strcmp.obj: $(STRCMP_DEP) | ||||||
|  |  | ||||||
|  | $(lpfx)aeabi_memmove.o: $(AEABI_MEMMOVE_DEP) | ||||||
|  |  | ||||||
|  | $(lpfx)aeabi_memmove.obj: $(AEABI_MEMMOVE_DEP) | ||||||
|   | |||||||
| @@ -85,7 +85,9 @@ am_lib_a_OBJECTS = lib_a-setjmp.$(OBJEXT) lib_a-access.$(OBJEXT) \ | |||||||
| 	lib_a-strcmp.$(OBJEXT) lib_a-strcpy.$(OBJEXT) $(am__objects_1) \ | 	lib_a-strcmp.$(OBJEXT) lib_a-strcpy.$(OBJEXT) $(am__objects_1) \ | ||||||
| 	$(am__objects_2) $(am__objects_3) lib_a-strlen-armv7.$(OBJEXT) \ | 	$(am__objects_2) $(am__objects_3) lib_a-strlen-armv7.$(OBJEXT) \ | ||||||
| 	lib_a-aeabi_memcpy.$(OBJEXT) \ | 	lib_a-aeabi_memcpy.$(OBJEXT) \ | ||||||
| 	lib_a-aeabi_memcpy-armv7a.$(OBJEXT) | 	lib_a-aeabi_memcpy-armv7a.$(OBJEXT) \ | ||||||
|  | 	lib_a-aeabi_memmove.$(OBJEXT) \ | ||||||
|  | 	lib_a-aeabi_memmove-soft.$(OBJEXT) | ||||||
| lib_a_OBJECTS = $(am_lib_a_OBJECTS) | lib_a_OBJECTS = $(am_lib_a_OBJECTS) | ||||||
| DEFAULT_INCLUDES = -I.@am__isrc@ | DEFAULT_INCLUDES = -I.@am__isrc@ | ||||||
| depcomp = | depcomp = | ||||||
| @@ -232,7 +234,8 @@ noinst_LIBRARIES = lib.a | |||||||
| @OPT_SIZE_TRUE@MEMCPY_OBJ =  | @OPT_SIZE_TRUE@MEMCPY_OBJ =  | ||||||
| lib_a_SOURCES = setjmp.S access.c strcmp.S strcpy.c \ | lib_a_SOURCES = setjmp.S access.c strcmp.S strcpy.c \ | ||||||
| 	        $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ | 	        $(MEMCPY_SRC) $(MEMCHR_SRC) $(STRLEN_SRC) \ | ||||||
| 		strlen-armv7.S aeabi_memcpy.c aeabi_memcpy-armv7a.S | 		strlen-armv7.S aeabi_memcpy.c aeabi_memcpy-armv7a.S \ | ||||||
|  | 		aeabi_memmove.c aeabi_memmove-soft.S | ||||||
|  |  | ||||||
| lib_a_CCASFLAGS = $(AM_CCASFLAGS) | lib_a_CCASFLAGS = $(AM_CCASFLAGS) | ||||||
| lib_a_CFLAGS = $(AM_CFLAGS) | lib_a_CFLAGS = $(AM_CFLAGS) | ||||||
| @@ -244,6 +247,9 @@ MEMCPY_DEP = memcpy-armv7a.S memcpy-armv7m.S | |||||||
| STRCMP_DEP = strcmp-arm-tiny.S strcmp-armv4.S strcmp-armv4t.S strcmp-armv6.S \ | STRCMP_DEP = strcmp-arm-tiny.S strcmp-armv4.S strcmp-armv4t.S strcmp-armv6.S \ | ||||||
| 	strcmp-armv6m.S strcmp-armv7.S strcmp-armv7m.S | 	strcmp-armv6m.S strcmp-armv7.S strcmp-armv7m.S | ||||||
|  |  | ||||||
|  | AEABI_MEMMOVE_DEP = aeabi_memmove-thumb.S aeabi_memmove-thumb2.S \ | ||||||
|  | 		aeabi_memmove-arm.S | ||||||
|  |  | ||||||
| all: all-am | all: all-am | ||||||
|  |  | ||||||
| .SUFFIXES: | .SUFFIXES: | ||||||
| @@ -338,6 +344,12 @@ lib_a-aeabi_memcpy-armv7a.o: aeabi_memcpy-armv7a.S | |||||||
| lib_a-aeabi_memcpy-armv7a.obj: aeabi_memcpy-armv7a.S | lib_a-aeabi_memcpy-armv7a.obj: aeabi_memcpy-armv7a.S | ||||||
| 	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-aeabi_memcpy-armv7a.obj `if test -f 'aeabi_memcpy-armv7a.S'; then $(CYGPATH_W) 'aeabi_memcpy-armv7a.S'; else $(CYGPATH_W) '$(srcdir)/aeabi_memcpy-armv7a.S'; fi` | 	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-aeabi_memcpy-armv7a.obj `if test -f 'aeabi_memcpy-armv7a.S'; then $(CYGPATH_W) 'aeabi_memcpy-armv7a.S'; else $(CYGPATH_W) '$(srcdir)/aeabi_memcpy-armv7a.S'; fi` | ||||||
|  |  | ||||||
|  | lib_a-aeabi_memmove-soft.o: aeabi_memmove-soft.S | ||||||
|  | 	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-aeabi_memmove-soft.o `test -f 'aeabi_memmove-soft.S' || echo '$(srcdir)/'`aeabi_memmove-soft.S | ||||||
|  |  | ||||||
|  | lib_a-aeabi_memmove-soft.obj: aeabi_memmove-soft.S | ||||||
|  | 	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-aeabi_memmove-soft.obj `if test -f 'aeabi_memmove-soft.S'; then $(CYGPATH_W) 'aeabi_memmove-soft.S'; else $(CYGPATH_W) '$(srcdir)/aeabi_memmove-soft.S'; fi` | ||||||
|  |  | ||||||
| .c.o: | .c.o: | ||||||
| 	$(COMPILE) -c $< | 	$(COMPILE) -c $< | ||||||
|  |  | ||||||
| @@ -368,6 +380,12 @@ lib_a-aeabi_memcpy.o: aeabi_memcpy.c | |||||||
| lib_a-aeabi_memcpy.obj: aeabi_memcpy.c | lib_a-aeabi_memcpy.obj: aeabi_memcpy.c | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-aeabi_memcpy.obj `if test -f 'aeabi_memcpy.c'; then $(CYGPATH_W) 'aeabi_memcpy.c'; else $(CYGPATH_W) '$(srcdir)/aeabi_memcpy.c'; fi` | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-aeabi_memcpy.obj `if test -f 'aeabi_memcpy.c'; then $(CYGPATH_W) 'aeabi_memcpy.c'; else $(CYGPATH_W) '$(srcdir)/aeabi_memcpy.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-aeabi_memmove.o: aeabi_memmove.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-aeabi_memmove.o `test -f 'aeabi_memmove.c' || echo '$(srcdir)/'`aeabi_memmove.c | ||||||
|  |  | ||||||
|  | lib_a-aeabi_memmove.obj: aeabi_memmove.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-aeabi_memmove.obj `if test -f 'aeabi_memmove.c'; then $(CYGPATH_W) 'aeabi_memmove.c'; else $(CYGPATH_W) '$(srcdir)/aeabi_memmove.c'; fi` | ||||||
|  |  | ||||||
| ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||||||
| 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||||||
| 	unique=`for i in $$list; do \ | 	unique=`for i in $$list; do \ | ||||||
| @@ -547,6 +565,10 @@ $(lpfx)strcmp.o: $(STRCMP_DEP) | |||||||
|  |  | ||||||
| $(lpfx)strcmp.obj: $(STRCMP_DEP) | $(lpfx)strcmp.obj: $(STRCMP_DEP) | ||||||
|  |  | ||||||
|  | $(lpfx)aeabi_memmove.o: $(AEABI_MEMMOVE_DEP) | ||||||
|  |  | ||||||
|  | $(lpfx)aeabi_memmove.obj: $(AEABI_MEMMOVE_DEP) | ||||||
|  |  | ||||||
| # Tell versions [3.59,3.63) of GNU make to not export all variables. | # 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. | # Otherwise a system limit (for SysV at least) may be exceeded. | ||||||
| .NOEXPORT: | .NOEXPORT: | ||||||
|   | |||||||
							
								
								
									
										63
									
								
								newlib/libc/machine/arm/aeabi_memmove-arm.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								newlib/libc/machine/arm/aeabi_memmove-arm.S
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | 	.arm | ||||||
|  | 	.syntax divided | ||||||
|  | 	.global __aeabi_memmove | ||||||
|  | 	.type	__aeabi_memmove, %function | ||||||
|  | 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove | ||||||
|  | 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove | ||||||
|  | __aeabi_memmove: | ||||||
|  | 	.cfi_startproc | ||||||
|  | 	cmp	r0, r1 | ||||||
|  | 	add	r3, r1, r2 | ||||||
|  | 	bhi	.L2 | ||||||
|  | .L4: | ||||||
|  | 	sub	r2, r0, #1 | ||||||
|  | 	b	.L3 | ||||||
|  | .L2: | ||||||
|  | 	cmp	r0, r3 | ||||||
|  | 	addcc	r1, r0, r2 | ||||||
|  | 	rsbcc	r2, r3, r2 | ||||||
|  | 	bcs	.L4 | ||||||
|  | .L5: | ||||||
|  | 	cmn	r3, r2 | ||||||
|  | 	ldrneb	ip, [r3, #-1]! | ||||||
|  | 	strneb	ip, [r1, #-1]! | ||||||
|  | 	bne	.L5 | ||||||
|  | .L11: | ||||||
|  | 	bx	lr | ||||||
|  | .L3: | ||||||
|  | 	cmp	r1, r3 | ||||||
|  | 	ldrneb	ip, [r1], #1 | ||||||
|  | 	strneb	ip, [r2, #1]! | ||||||
|  | 	bne	.L3 | ||||||
|  | .L12: | ||||||
|  | 	bx	lr | ||||||
|  | 	.cfi_endproc | ||||||
|  | 	.size __aeabi_memmove, . - __aeabi_memmove | ||||||
							
								
								
									
										52
									
								
								newlib/libc/machine/arm/aeabi_memmove-soft.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								newlib/libc/machine/arm/aeabi_memmove-soft.S
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 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" | ||||||
|  |  | ||||||
|  | .macro	ASM_ALIAS new old | ||||||
|  | 	.global	\new | ||||||
|  | 	.type	\new, %function | ||||||
|  | #if defined (__thumb__) | ||||||
|  | 	.thumb_set	\new, \old | ||||||
|  | #else | ||||||
|  | 	.set	\new, \old | ||||||
|  | #endif | ||||||
|  | .endm | ||||||
|  |  | ||||||
|  | /* NOTE: This ifdef MUST match the one in aeabi_memmove.c.  */ | ||||||
|  | #if !defined (__SOFTFP__) | ||||||
|  |  | ||||||
|  | # if defined (__thumb2__) | ||||||
|  | #  include "aeabi_memmove-thumb2.S" | ||||||
|  | # elif defined (__thumb__) | ||||||
|  | #  include "aeabi_memmove-thumb.S" | ||||||
|  | # else | ||||||
|  | #  include "aeabi_memmove-arm.S" | ||||||
|  | # endif | ||||||
|  |  | ||||||
|  | #endif | ||||||
							
								
								
									
										64
									
								
								newlib/libc/machine/arm/aeabi_memmove-thumb.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								newlib/libc/machine/arm/aeabi_memmove-thumb.S
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | 	.thumb | ||||||
|  | 	.syntax unified | ||||||
|  | 	.global __aeabi_memmove | ||||||
|  | 	.type	__aeabi_memmove, %function | ||||||
|  | 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove | ||||||
|  | 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove | ||||||
|  | __aeabi_memmove: | ||||||
|  | 	.cfi_startproc | ||||||
|  | 	push	{r4, lr} | ||||||
|  | 	cmp	r0, r1 | ||||||
|  | 	bls	.L9 | ||||||
|  | 	adds	r3, r1, r2 | ||||||
|  | 	cmp	r0, r3 | ||||||
|  | 	bcc	.L3 | ||||||
|  | .L9: | ||||||
|  | 	movs	r3, #0 | ||||||
|  | 	b	.L4 | ||||||
|  | .L3: | ||||||
|  | 	subs	r3, r3, r2 | ||||||
|  | .L5: | ||||||
|  | 	subs	r2, r2, #1 | ||||||
|  | 	bcc	.L10 | ||||||
|  | 	ldrb	r1, [r3, r2] | ||||||
|  | 	strb	r1, [r0, r2] | ||||||
|  | 	b	.L5 | ||||||
|  | .L4: | ||||||
|  | 	cmp	r3, r2 | ||||||
|  | 	beq	.L10 | ||||||
|  | 	ldrb	r4, [r1, r3] | ||||||
|  | 	strb	r4, [r0, r3] | ||||||
|  | 	adds	r3, r3, #1 | ||||||
|  | 	b	.L4 | ||||||
|  | .L10: | ||||||
|  | 	pop	{r4, pc} | ||||||
|  | 	.cfi_endproc | ||||||
|  | 	.size __aeabi_memmove, . - __aeabi_memmove | ||||||
							
								
								
									
										66
									
								
								newlib/libc/machine/arm/aeabi_memmove-thumb2.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								newlib/libc/machine/arm/aeabi_memmove-thumb2.S
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | 	.thumb | ||||||
|  | 	.syntax unified | ||||||
|  | 	.global __aeabi_memmove | ||||||
|  | 	.type	__aeabi_memmove, %function | ||||||
|  | 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove | ||||||
|  | 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove | ||||||
|  | __aeabi_memmove: | ||||||
|  | 	.cfi_startproc | ||||||
|  | 	cmp	r0, r1 | ||||||
|  | 	add	r3, r1, r2 | ||||||
|  | 	push	{r4, lr} | ||||||
|  | 	bhi	.L2 | ||||||
|  | .L4: | ||||||
|  | 	subs	r2, r0, #1 | ||||||
|  | 	b	.L3 | ||||||
|  | .L2: | ||||||
|  | 	cmp	r0, r3 | ||||||
|  | 	bcs	.L4 | ||||||
|  | 	adds	r1, r0, r2 | ||||||
|  | 	subs	r2, r2, r3 | ||||||
|  | .L5: | ||||||
|  | 	cmn	r3, r2 | ||||||
|  | 	beq	.L12 | ||||||
|  | 	ldrb	r4, [r3, #-1]! | ||||||
|  | 	strb	r4, [r1, #-1]! | ||||||
|  | 	b	.L5 | ||||||
|  | .L12: | ||||||
|  | 	pop	{r4, pc} | ||||||
|  | .L3: | ||||||
|  | 	cmp	r1, r3 | ||||||
|  | 	beq	.L13 | ||||||
|  | 	ldrb	r4, [r1], #1 | ||||||
|  | 	strb	r4, [r2, #1]! | ||||||
|  | 	b	.L3 | ||||||
|  | .L13: | ||||||
|  | 	pop	{r4, pc} | ||||||
|  | 	.cfi_endproc | ||||||
|  | 	.size __aeabi_memmove, . - __aeabi_memmove | ||||||
							
								
								
									
										63
									
								
								newlib/libc/machine/arm/aeabi_memmove.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								newlib/libc/machine/arm/aeabi_memmove.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 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 <stddef.h> | ||||||
|  | #include <_ansi.h> | ||||||
|  |  | ||||||
|  | /* According to the run-time ABI for the ARM Architecture, this | ||||||
|  |    function is allowed to corrupt only the integer core register | ||||||
|  |    permitted to be corrupted by the [AAPCS] (r0-r3, ip, lr, and | ||||||
|  |    CPSR). | ||||||
|  |  | ||||||
|  |    Therefore, we can't just simply use alias to support the function | ||||||
|  |    aeabi_memmove for the targets with FP register.  Instead, versions | ||||||
|  |    for these specific targets are written in assembler (in | ||||||
|  |    aeabi_memmove-soft.S).  */ | ||||||
|  |  | ||||||
|  | /* NOTE: This ifdef MUST match the one in aeabi_memmove-soft.S.  */ | ||||||
|  | #if !defined (__SOFTFP__) | ||||||
|  |  | ||||||
|  | /* Defined in aeabi_memmove-soft.S.  */ | ||||||
|  |  | ||||||
|  | #else | ||||||
|  | /* Support the alias for the __aeabi_memmove which may | ||||||
|  |    assume memory alignment.  */ | ||||||
|  | void __aeabi_memmove4 (void *dest, const void *source, size_t n) | ||||||
|  | 	_ATTRIBUTE ((alias ("__aeabi_memmove"))); | ||||||
|  |  | ||||||
|  | void __aeabi_memmove8 (void *dest, const void *source, size_t n) | ||||||
|  | 	_ATTRIBUTE ((alias ("__aeabi_memmove"))); | ||||||
|  |  | ||||||
|  | /* Support the routine __aeabi_memmove.  Can't alias to memmove | ||||||
|  |    because it's not defined in the same translation unit.  */ | ||||||
|  | void __aeabi_memmove (void *dest, const void *source, size_t n) | ||||||
|  | { | ||||||
|  |   extern void memmove (void *dest, const void *source, size_t n); | ||||||
|  |   memmove (dest, source, n); | ||||||
|  | } | ||||||
|  | #endif | ||||||
		Reference in New Issue
	
	Block a user