Merge pull request #3 from heuripedes/master
[picodrive.git] / platform / gp2x / code940 / uClibc / memset.s
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