1/* 2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 */ 8 9#include <linux/linkage.h> 10 11#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */ 12 13ENTRY(memset) 14 mov_s r4,r0 15 or r12,r0,r2 16 bmsk.f r12,r12,1 17 extb_s r1,r1 18 asl r3,r1,8 19 beq.d .Laligned 20 or_s r1,r1,r3 21 brls r2,SMALL,.Ltiny 22 add r3,r2,r0 23 stb r1,[r3,-1] 24 bclr_s r3,r3,0 25 stw r1,[r3,-2] 26 bmsk.f r12,r0,1 27 add_s r2,r2,r12 28 sub.ne r2,r2,4 29 stb.ab r1,[r4,1] 30 and r4,r4,-2 31 stw.ab r1,[r4,2] 32 and r4,r4,-4 33.Laligned: ; This code address should be aligned for speed. 34 asl r3,r1,16 35 lsr.f lp_count,r2,2 36 or_s r1,r1,r3 37 lpne .Loop_end 38 st.ab r1,[r4,4] 39.Loop_end: 40 j_s [blink] 41 42 .balign 4 43.Ltiny: 44 mov.f lp_count,r2 45 lpne .Ltiny_end 46 stb.ab r1,[r4,1] 47.Ltiny_end: 48 j_s [blink] 49END(memset) 50 51; memzero: @r0 = mem, @r1 = size_t 52; memset: @r0 = mem, @r1 = char, @r2 = size_t 53 54ENTRY(memzero) 55 ; adjust bzero args to memset args 56 mov r2, r1 57 mov r1, 0 58 b memset ;tail call so need to tinker with blink 59END(memzero) 60