cc68a136 |
1 | /* Copyright (C) 1998 Free Software Foundation, Inc.\r |
2 | This file is part of the GNU C Library.\r |
3 | Contributed by Philip Blundell <philb@gnu.org>\r |
4 | \r |
5 | The GNU C Library is free software; you can redistribute it and/or\r |
6 | modify it under the terms of the GNU Lesser General Public\r |
7 | License as published by the Free Software Foundation; either\r |
8 | version 2.1 of the License, or (at your option) any later version.\r |
9 | \r |
10 | The GNU C Library is distributed in the hope that it will be useful,\r |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of\r |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r |
13 | Lesser General Public License for more details.\r |
14 | \r |
15 | You should have received a copy of the GNU Lesser General Public\r |
16 | License along with the GNU C Library; if not, write to the Free\r |
17 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA\r |
18 | 02111-1307 USA. */\r |
19 | \r |
20 | @ #include <sys/syscall.h>\r |
21 | \r |
22 | .text\r |
23 | .global memset\r |
24 | .type memset,%function\r |
25 | .align 4\r |
26 | \r |
27 | memset:\r |
28 | mov a4, a1\r |
29 | cmp a3, $8 @ at least 8 bytes to do?\r |
30 | blt 2f\r |
31 | orr a2, a2, a2, lsl $8\r |
32 | orr a2, a2, a2, lsl $16\r |
33 | 1:\r |
34 | tst a4, $3 @ aligned yet?\r |
35 | strneb a2, [a4], $1\r |
36 | subne a3, a3, $1\r |
37 | bne 1b\r |
38 | mov ip, a2\r |
39 | 1:\r |
40 | cmp a3, $8 @ 8 bytes still to do?\r |
41 | blt 2f\r |
42 | stmia a4!, {a2, ip}\r |
43 | sub a3, a3, $8\r |
44 | cmp a3, $8 @ 8 bytes still to do?\r |
45 | blt 2f\r |
46 | stmia a4!, {a2, ip}\r |
47 | sub a3, a3, $8\r |
48 | cmp a3, $8 @ 8 bytes still to do?\r |
49 | blt 2f\r |
50 | stmia a4!, {a2, ip}\r |
51 | sub a3, a3, $8\r |
52 | cmp a3, $8 @ 8 bytes still to do?\r |
53 | stmgeia a4!, {a2, ip}\r |
54 | subge a3, a3, $8\r |
55 | bge 1b\r |
56 | 2:\r |
57 | movs a3, a3 @ anything left?\r |
58 | moveq pc, lr @ nope\r |
59 | rsb a3, a3, $7\r |
60 | add pc, pc, a3, lsl $2\r |
61 | mov r0, r0\r |
62 | strb a2, [a4], $1\r |
63 | strb a2, [a4], $1\r |
64 | strb a2, [a4], $1\r |
65 | strb a2, [a4], $1\r |
66 | strb a2, [a4], $1\r |
67 | strb a2, [a4], $1\r |
68 | strb a2, [a4], $1\r |
69 | mov pc, lr\r |
70 | \r |
71 | .size memset,.-memset;\r |
72 | \r |