OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [libc/] [src/] [memset.S.ARM] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * Copyright 2010 (C) B Labs.
3
 * Author: Prem Mallappa 
4
 * Description: Optimized memset for ARM
5
 */
6
 
7
#include INC_ARCH(asm.h)
8
 
9
/*
10
void *
11
memset(void *dst, int c, int len)
12
*/
13
BEGIN_PROC(memset)
14
        stmfd   sp!, {r4 - r11, lr}
15
 
16
        and     r1, r1, #255            /* c &= 0xff */
17
        orr     r1, r1, lsl #8          /* c |= c<<8 */
18
        orr     r1, r1, lsl #16         /* c |= c<<16 */
19
        mov     r4, r1
20
        cmp     r2, #8
21
        blt     4f
22
        movge   r5, r4
23
        cmpge   r2, #16
24
        blt     8f
25
        movge   r6, r4
26
        movge   r7, r4
27
        cmpge   r2, #32
28
        blt     16f
29
        movge   r8, r4
30
        movge   r9, r4
31
        movge   r10, r4
32
        movge   r11, r4
33
        32:
34
                cmp     r2, #32
35
                blt     16f
36
                stmia   r0!, {r4 - r11}
37
                sub     r2, r2, #32
38
                b       32b
39
 
40
        16:
41
                cmp     r2, #16
42
                blt     8f
43
                stmia   r0!, {r4 - r7}
44
                sub     r2, r2, #16
45
                b       16b
46
 
47
        8:
48
                cmp     r2, #8
49
                blt     4f
50
                stmia   r0!, {r4, r5}
51
                sub     r2, r2, #8
52
                b       8b
53
 
54
        4:
55
                cmp     r2, #4
56
                blt     end
57
                stmia   r0!, {r4}
58
                sub     r2, r2, #4
59
                b       4b
60
        end:
61
                teq     r2, #0
62
                strneb  r4, [r0, #0]
63
                subne   r2, r2, #1
64
                addne   r0, r0, #1
65
                bne     end
66
 
67
        ldmfd   sp!, {r4 - r11, pc}
68
END_PROC(_memset)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.