Blame view
arch/m68k/lib/memset.c
1.29 KB
d10ed2f53 m68k: remove dupl... |
1 2 3 4 5 |
/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. */ |
1da177e4c Linux-2.6.12-rc2 |
6 |
|
d10ed2f53 m68k: remove dupl... |
7 8 9 10 |
#include <linux/module.h> #include <linux/string.h> void *memset(void *s, int c, size_t count) |
1da177e4c Linux-2.6.12-rc2 |
11 |
{ |
d10ed2f53 m68k: remove dupl... |
12 13 |
void *xs = s; size_t temp; |
1da177e4c Linux-2.6.12-rc2 |
14 |
|
d10ed2f53 m68k: remove dupl... |
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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; |
734c3ce3b m68k: use kernel ... |
35 36 37 38 |
#if defined(CONFIG_M68000) || defined(CONFIG_COLDFIRE) for (; temp; temp--) *ls++ = c; #else |
d10ed2f53 m68k: remove dupl... |
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
size_t temp1; asm volatile ( " movel %1,%2 " " andw #7,%2 " " lsrl #3,%1 " " negw %2 " " jmp %%pc@(2f,%2:w:2) " "1: movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " " movel %3,%0@+ " "2: dbra %1,1b " " clrw %1 " " subql #1,%1 " " jpl 1b" : "=a" (ls), "=d" (temp), "=&d" (temp1) : "d" (c), "0" (ls), "1" (temp)); |
d10ed2f53 m68k: remove dupl... |
76 77 78 79 80 81 82 83 84 85 86 87 88 |
#endif s = ls; } if (count & 2) { short *ss = s; *ss++ = c; s = ss; } if (count & 1) { char *cs = s; *cs = c; } return xs; |
1da177e4c Linux-2.6.12-rc2 |
89 |
} |
d10ed2f53 m68k: remove dupl... |
90 |
EXPORT_SYMBOL(memset); |