123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
- #include <linux/linkage.h>
- #define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
- ENTRY_CFI(memset)
- mov_s r4,r0
- or r12,r0,r2
- bmsk.f r12,r12,1
- extb_s r1,r1
- asl r3,r1,8
- beq.d .Laligned
- or_s r1,r1,r3
- brls r2,SMALL,.Ltiny
- add r3,r2,r0
- stb r1,[r3,-1]
- bclr_s r3,r3,0
- stw r1,[r3,-2]
- bmsk.f r12,r0,1
- add_s r2,r2,r12
- sub.ne r2,r2,4
- stb.ab r1,[r4,1]
- and r4,r4,-2
- stw.ab r1,[r4,2]
- and r4,r4,-4
- .Laligned: ; This code address should be aligned for speed.
- asl r3,r1,16
- lsr.f lp_count,r2,2
- or_s r1,r1,r3
- lpne .Loop_end
- st.ab r1,[r4,4]
- .Loop_end:
- j_s [blink]
- .balign 4
- .Ltiny:
- mov.f lp_count,r2
- lpne .Ltiny_end
- stb.ab r1,[r4,1]
- .Ltiny_end:
- j_s [blink]
- END_CFI(memset)
- ; memzero: @r0 = mem, @r1 = size_t
- ; memset: @r0 = mem, @r1 = char, @r2 = size_t
- ENTRY_CFI(memzero)
- ; adjust bzero args to memset args
- mov r2, r1
- mov r1, 0
- b memset ;tail call so need to tinker with blink
- END_CFI(memzero)
|