This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[patch] Fix and reenable memcpy/memset for m68k
- From: Kazu Hirata <kazu at codesourcery dot com>
- To: newlib at sources dot redhat dot com
- Cc: norume at aps dot anl dot gov
- Date: Mon, 30 Apr 2007 13:15:15 -0700
- Subject: [patch] Fix and reenable memcpy/memset for m68k
Hi,
Attached is a patch to fix and reenable memcpy/memset as suggested by
Eric. (Thanks Eric for pointing our the bug!)
Tested on fido-elf. OK to apply?
Kazu Hirata
2007-04-30 Kazu Hirata <kazu@codesourcery.com>
* libc/machine/m68k/Makefile.am (lib_a_SOURCES): Add memcpy.S
and memset.S.
* libc/machine/m68k/Makefile.in: Regenerate.
* libc/machine/m68k/memcpy.S: Use sub.l followed by dbra.
* libc/machine/m68k/memset.S: Likewise.
Index: newlib/libc/machine/m68k/Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/m68k/Makefile.am,v
retrieving revision 1.5
diff -u -d -p -r1.5 Makefile.am
--- newlib/libc/machine/m68k/Makefile.am 27 Apr 2007 22:10:47 -0000 1.5
+++ newlib/libc/machine/m68k/Makefile.am 30 Apr 2007 19:59:36 -0000
@@ -8,7 +8,7 @@ AM_CCASFLAGS = $(INCLUDES)
noinst_LIBRARIES = lib.a
-lib_a_SOURCES = setjmp.S strcpy.c strlen.c
+lib_a_SOURCES = setjmp.S strcpy.c strlen.c memcpy.S memset.S
lib_a_CCASFLAGS=$(AM_CCASFLAGS)
lib_a_CFLAGS=$(AM_CFLAGS)
Index: newlib/libc/machine/m68k/Makefile.in
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/m68k/Makefile.in,v
retrieving revision 1.13
diff -u -d -p -r1.13 Makefile.in
--- newlib/libc/machine/m68k/Makefile.in 27 Apr 2007 22:10:47 -0000 1.13
+++ newlib/libc/machine/m68k/Makefile.in 30 Apr 2007 19:59:36 -0000
@@ -56,7 +56,8 @@ ARFLAGS = cru
lib_a_AR = $(AR) $(ARFLAGS)
lib_a_LIBADD =
am_lib_a_OBJECTS = lib_a-setjmp.$(OBJEXT) lib_a-strcpy.$(OBJEXT) \
- lib_a-strlen.$(OBJEXT)
+ lib_a-strlen.$(OBJEXT) lib_a-memcpy.$(OBJEXT) \
+ lib_a-memset.$(OBJEXT)
lib_a_OBJECTS = $(am_lib_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir)
depcomp =
@@ -181,7 +182,7 @@ AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
AM_CCASFLAGS = $(INCLUDES)
noinst_LIBRARIES = lib.a
-lib_a_SOURCES = setjmp.S strcpy.c strlen.c
+lib_a_SOURCES = setjmp.S strcpy.c strlen.c memcpy.S memset.S
lib_a_CCASFLAGS = $(AM_CCASFLAGS)
lib_a_CFLAGS = $(AM_CFLAGS)
ACLOCAL_AMFLAGS = -I ../../..
@@ -249,6 +250,18 @@ lib_a-setjmp.o: setjmp.S
lib_a-setjmp.obj: setjmp.S
$(CCAS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-setjmp.obj `if test -f 'setjmp.S'; then $(CYGPATH_W) 'setjmp.S'; else $(CYGPATH_W) '$(srcdir)/setjmp.S'; fi`
+lib_a-memcpy.o: memcpy.S
+ $(CCAS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy.o `test -f 'memcpy.S' || echo '$(srcdir)/'`memcpy.S
+
+lib_a-memcpy.obj: memcpy.S
+ $(CCAS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy.obj `if test -f 'memcpy.S'; then $(CYGPATH_W) 'memcpy.S'; else $(CYGPATH_W) '$(srcdir)/memcpy.S'; fi`
+
+lib_a-memset.o: memset.S
+ $(CCAS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memset.o `test -f 'memset.S' || echo '$(srcdir)/'`memset.S
+
+lib_a-memset.obj: memset.S
+ $(CCAS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memset.obj `if test -f 'memset.S'; then $(CYGPATH_W) 'memset.S'; else $(CYGPATH_W) '$(srcdir)/memset.S'; fi`
+
.c.o:
$(COMPILE) -c $<
Index: newlib/libc/machine/m68k/memcpy.S
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/m68k/memcpy.S,v
retrieving revision 1.1
diff -u -d -p -r1.1 memcpy.S
--- newlib/libc/machine/m68k/memcpy.S 27 Apr 2007 16:05:35 -0000 1.1
+++ newlib/libc/machine/m68k/memcpy.S 30 Apr 2007 19:59:36 -0000
@@ -73,10 +73,11 @@ memcpy:
.Lcopy:
#if !defined (__mcoldfire__)
dbra %d0,1b
+ sub.l #0x10000,%d0
#else
subq.l #1,%d0
- bpl 1b
#endif
+ bpl 1b
bra .Lresidue
1:
Index: newlib/libc/machine/m68k/memset.S
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/m68k/memset.S,v
retrieving revision 1.1
diff -u -d -p -r1.1 memset.S
--- newlib/libc/machine/m68k/memset.S 27 Apr 2007 16:05:35 -0000 1.1
+++ newlib/libc/machine/m68k/memset.S 30 Apr 2007 19:59:36 -0000
@@ -76,10 +76,11 @@ memset:
.Llset:
#if !defined (__mcoldfire__)
dbra %d2,1b | loop until done
+ sub.l #0x10000,%d2
#else
subq.l #1,%d2
- bpl 1b
#endif
+ bpl 1b
and.l #3,%d1 | residue byte transfers, fixed
move.l (%sp)+,%d2 | restore d2
bra .Lbset