|  | /* | 
|  | * 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) |