Home | History | Annotate | Download | only in lib
      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 <asm/linkage.h>
     10 
     11 #define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */
     12 
     13 ARC_ENTRY 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]
     49 ARC_EXIT memset
     50 
     51 ; memzero: @r0 = mem, @r1 = size_t
     52 ; memset:  @r0 = mem, @r1 = char, @r2 = size_t
     53 
     54 ARC_ENTRY 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
     59 ARC_EXIT memzero
     60