newlib/libc/machine/m68k/memcpy.S broken for cpu32

Josef Wolf jw@raven.inka.de
Mon Feb 8 15:50:00 GMT 2010


Hello,

In newlib/libc/machine/m68k/memcpy.S, MISALIGNED_OK is set to 1 for
cpu32. This is wrong: cpu32 requires alignment to even addresses. Please
find patch attached.

While at it: Currently, memcpy() is only optimized for CPUs with 4-byte
alignment, even if the CPU could work well with 2-byte alignment. I think
such an optimization would give a great performance improvement on such
CPUs, since the probability to use the optimized code would rise from 1/16
to 1/2.

Opinions?

Here's the patch:

diff -ruw newlib-1.18.0.orig/newlib/libc/machine/m68k/memcpy.S newlib-1.18.0/newlib/libc/machine/m68k/memcpy.S
--- newlib-1.18.0.orig/newlib/libc/machine/m68k/memcpy.S        2010-02-08 15:23:22.719360886 +0100
+++ newlib-1.18.0/newlib/libc/machine/m68k/memcpy.S     2009-12-14 21:50:53.000000000 +0100
@@ -15,7 +15,7 @@

 #include "m68kasm.h"

-#if defined (__mcoldfire__) || defined (__mc68010__) || defined (__mc68020__) || defined (__mc68030__) || defined (__mc68040__) || defined (__mc68060__)
+#if defined (__mcoldfire__) || defined (__mcpu32__) || defined (__mc68010__) || defined (__mc68020__) || defined (__mc68030__) || defined (__mc68040__) || defined (__mc68060__)
 # define MISALIGNED_OK 1
 #else
 # define MISALIGNED_OK 0



More information about the Newlib mailing list