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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [machine/] [hppa/] [memset.S] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
/*
2
 *  (c) Copyright 1986 HEWLETT-PACKARD COMPANY
3
 *
4
 *  To anyone who acknowledges that this file is provided "AS IS"
5
 *  without any express or implied warranty:
6
 *      permission to use, copy, modify, and distribute this file
7
 *  for any purpose is hereby granted without fee, provided that
8
 *  the above copyright notice and this notice appears in all
9
 *  copies, and that the name of Hewlett-Packard Company not be
10
 *  used in advertising or publicity pertaining to distribution
11
 *  of the software without specific, written prior permission.
12
 *  Hewlett-Packard Company makes no representations about the
13
 *  suitability of this software for any purpose.
14
 */
15
 
16
/* SPECTRUM_ID: @(#)memset.s    37.4     86/08/25 */
17
/*
18
 * memset(s, c, n)
19
 *
20
 * Sets first n chars in memory area s to value of character c.
21
 * Returns s.
22
 */
23
#ifndef _NAMESPACE_CLEAN
24
#define NOSECDEF   /* prevent _memset from being defined as entry */
25
#endif
26
 
27
#include "DEFS.h"
28
 
29
#define TO      arg0
30
#define FILLCHAR arg1
31
#define COUNT   arg2
32
#define TMP     r31
33
 
34
ENTRY(memset)
35
        comb,<= COUNT,r0,msexit /* return if count not positive */
36
        copy    TO,ret0         /* return value is start of copy */
37
        comibf,<,n      5,COUNT,msbyteloop /* be straightforward */
38
 
39
        dep     FILLCHAR,23,8,FILLCHAR  /* dup low byte  */
40
        dep     FILLCHAR,15,16,FILLCHAR /* into high bytes */
41
 
42
        add             TO,COUNT,TMP    /* TMP points just past fill area */
43
        stbys,m         FILLCHAR,0(TO)  /* fill out first word */
44
        /*
45
         * If we're pointing to high-order byte, no fill will happen,
46
         * but permissions will be checked.  We don't want this (we
47
         * might be pointing at the beginning of a protected region),
48
         * so we branch around stbys if neither low bits are set.
49
         */
50
        bb,<,n          TMP,31,filend   /* if low bit is set, stbys */
51
        bb,>=,n         TMP,30,endfil   /* if next lowest bit isn't set */
52
                                        /*  (and lowest isn't, either) */
53
                                        /*  do not stbys */
54
filend:
55
        stbys,m,e       FILLCHAR,0(TMP) /* fill out the last */
56
endfil:
57
        addi            4, TO, TO
58
        sub             TMP,TO,COUNT    /* will now divide by 4 */
59
        comb,=,n        COUNT,r0,msexit /* If count is zero ret. */
60
 
61
        extru,<>        COUNT,31,4,r1
62
        b               msquadloop
63
        depi            0,31,4,COUNT    /* will now divide by 16 */
64
 
65
 
66
mswordloop:
67
        addib,<>        -4,r1,mswordloop
68
        stws,ma         FILLCHAR,4(TO)
69
 
70
        comb,=,n        COUNT,r0,msexit /* If count is zero ret. */
71
 
72
msquadloop:
73
        stws,ma         FILLCHAR,4(TO)
74
        stws,ma         FILLCHAR,4(TO)
75
        stws,ma         FILLCHAR,4(TO)
76
        addib,<>        -16,COUNT,msquadloop
77
        stws,ma         FILLCHAR,4(TO)
78
        b,n             msexit
79
 
80
msbyteloop:
81
        addib,<>        -1,COUNT,msbyteloop
82
        stbs,ma         FILLCHAR,1(TO)
83
 
84
msexit:
85
EXIT(memset)

powered by: WebSVN 2.1.0

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