| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | /* | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | #include <linux/linkage.h> | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | #define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | ENTRY(memset) | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | 	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] | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | END(memset) | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | ; memzero: @r0 = mem, @r1 = size_t
 | 
					
						
							|  |  |  | ; memset:  @r0 = mem, @r1 = char, @r2 = size_t
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | ENTRY(memzero) | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  |     ; adjust bzero args to memset args
 | 
					
						
							|  |  |  |     mov r2, r1 | 
					
						
							|  |  |  |     mov r1, 0 | 
					
						
							|  |  |  |     b  memset    ;tail call so need to tinker with blink
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | END(memzero) |