Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 072dffda authored by Roman Zippel's avatar Roman Zippel Committed by Linus Torvalds
Browse files

[PATCH] m68k: cleanup inline mem functions



Use the builtin functions for memset/memclr/memcpy, special optimizations for
page operations have dedicated functions now.  Uninline memmove/memchr and
move all functions into a single file and clean it up a little.

Signed-off-by: default avatarRoman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2855b970
Loading
Loading
Loading
Loading
+0 −4
Original line number Original line Diff line number Diff line
@@ -74,10 +74,6 @@ EXPORT_SYMBOL(vme_brdtype);
EXPORT_SYMBOL(__ashldi3);
EXPORT_SYMBOL(__ashldi3);
EXPORT_SYMBOL(__ashrdi3);
EXPORT_SYMBOL(__ashrdi3);
EXPORT_SYMBOL(__lshrdi3);
EXPORT_SYMBOL(__lshrdi3);
EXPORT_SYMBOL(memcpy);
EXPORT_SYMBOL(memset);
EXPORT_SYMBOL(memcmp);
EXPORT_SYMBOL(memscan);
EXPORT_SYMBOL(__muldi3);
EXPORT_SYMBOL(__muldi3);


EXPORT_SYMBOL(__down_failed);
EXPORT_SYMBOL(__down_failed);
+1 −1
Original line number Original line Diff line number Diff line
@@ -5,4 +5,4 @@
EXTRA_AFLAGS := -traditional
EXTRA_AFLAGS := -traditional


lib-y		:= ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
lib-y		:= ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
			checksum.o memcmp.o memcpy.o memset.o semaphore.o
			checksum.o string.o semaphore.o

arch/m68k/lib/memcmp.c

deleted100644 → 0
+0 −11
Original line number Original line Diff line number Diff line
#include <linux/types.h>

int memcmp(const void * cs,const void * ct,size_t count)
{
  const unsigned char *su1, *su2;

  for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
    if (*su1 != *su2)
      return((*su1 < *su2) ? -1 : +1);
  return(0);
}

arch/m68k/lib/memcpy.c

deleted100644 → 0
+0 −75
Original line number Original line Diff line number Diff line
#include <linux/types.h>

void * memcpy(void * to, const void * from, size_t n)
{
  void *xto = to;
  size_t temp, temp1;

  if (!n)
    return xto;
  if ((long) to & 1)
    {
      char *cto = to;
      const char *cfrom = from;
      *cto++ = *cfrom++;
      to = cto;
      from = cfrom;
      n--;
    }
  if (n > 2 && (long) to & 2)
    {
      short *sto = to;
      const short *sfrom = from;
      *sto++ = *sfrom++;
      to = sto;
      from = sfrom;
      n -= 2;
    }
  temp = n >> 2;
  if (temp)
    {
      long *lto = to;
      const long *lfrom = from;

      __asm__ __volatile__("movel %2,%3\n\t"
			   "andw  #7,%3\n\t"
			   "lsrl  #3,%2\n\t"
			   "negw  %3\n\t"
			   "jmp   %%pc@(1f,%3:w:2)\n\t"
			   "4:\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "movel %0@+,%1@+\n\t"
			   "1:\t"
			   "dbra  %2,4b\n\t"
			   "clrw  %2\n\t"
			   "subql #1,%2\n\t"
			   "jpl   4b\n\t"
			   : "=a" (lfrom), "=a" (lto), "=d" (temp),
			   "=&d" (temp1)
			   : "0" (lfrom), "1" (lto), "2" (temp)
			   );
      to = lto;
      from = lfrom;
    }
  if (n & 2)
    {
      short *sto = to;
      const short *sfrom = from;
      *sto++ = *sfrom++;
      to = sto;
      from = sfrom;
    }
  if (n & 1)
    {
      char *cto = to;
      const char *cfrom = from;
      *cto = *cfrom;
    }
  return xto;
}

arch/m68k/lib/memset.c

deleted100644 → 0
+0 −68
Original line number Original line Diff line number Diff line
#include <linux/types.h>

void * memset(void * s, int c, size_t count)
{
  void *xs = s;
  size_t temp, temp1;

  if (!count)
    return xs;
  c &= 0xff;
  c |= c << 8;
  c |= c << 16;
  if ((long) s & 1)
    {
      char *cs = s;
      *cs++ = c;
      s = cs;
      count--;
    }
  if (count > 2 && (long) s & 2)
    {
      short *ss = s;
      *ss++ = c;
      s = ss;
      count -= 2;
    }
  temp = count >> 2;
  if (temp)
    {
      long *ls = s;

      __asm__ __volatile__("movel %1,%2\n\t"
			   "andw  #7,%2\n\t"
			   "lsrl  #3,%1\n\t"
			   "negw  %2\n\t"
			   "jmp   %%pc@(2f,%2:w:2)\n\t"
			   "1:\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "movel %3,%0@+\n\t"
			   "2:\t"
			   "dbra  %1,1b\n\t"
			   "clrw  %1\n\t"
			   "subql #1,%1\n\t"
			   "jpl   1b\n\t"
			   : "=a" (ls), "=d" (temp), "=&d" (temp1)
			   : "d" (c), "0" (ls), "1" (temp)
			   );
      s = ls;
    }
  if (count & 2)
    {
      short *ss = s;
      *ss++ = c;
      s = ss;
    }
  if (count & 1)
    {
      char *cs = s;
      *cs = c;
    }
  return xs;
}
Loading