| 
									
										
										
										
											2008-05-19 16:53:02 -07:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc | 
					
						
							|  |  |  |  *            generic strncmp routine. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.text | 
					
						
							|  |  |  | 	.align 4
 | 
					
						
							|  |  |  | 	.global __strncmp, strncmp | 
					
						
							|  |  |  | __strncmp: | 
					
						
							|  |  |  | strncmp: | 
					
						
							|  |  |  | 	mov	%o0, %g3 | 
					
						
							|  |  |  | 	mov	0, %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o2, 3 | 
					
						
							|  |  |  | 	ble	7f | 
					
						
							|  |  |  | 	 mov	0, %g2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	sra	%o2, 2, %o4 | 
					
						
							|  |  |  | 	ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0: | 
					
						
							|  |  |  | 	ldub	[%o1], %g2 | 
					
						
							|  |  |  | 	add	%g3, 1, %g3 | 
					
						
							|  |  |  | 	and	%o3, 0xff, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, 0 | 
					
						
							|  |  |  | 	be	8f | 
					
						
							|  |  |  | 	 add	%o1, 1, %o1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, %g2 | 
					
						
							|  |  |  | 	be,a	1f | 
					
						
							|  |  |  | 	 ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o0, %g2, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1: | 
					
						
							|  |  |  | 	ldub	[%o1], %g2 | 
					
						
							|  |  |  | 	add	%g3,1, %g3 | 
					
						
							|  |  |  | 	and	%o3, 0xff, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, 0 | 
					
						
							|  |  |  | 	be	8f | 
					
						
							|  |  |  | 	 add	%o1, 1, %o1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, %g2 | 
					
						
							|  |  |  | 	be,a	1f | 
					
						
							|  |  |  | 	 ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o0, %g2, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1: | 
					
						
							|  |  |  | 	ldub	[%o1], %g2 | 
					
						
							|  |  |  | 	add	%g3, 1, %g3 | 
					
						
							|  |  |  | 	and	%o3, 0xff, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, 0 | 
					
						
							|  |  |  | 	be	8f | 
					
						
							|  |  |  | 	 add	%o1, 1, %o1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, %g2 | 
					
						
							|  |  |  | 	be,a	1f | 
					
						
							|  |  |  | 	 ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o0, %g2, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1: | 
					
						
							|  |  |  | 	ldub	[%o1], %g2 | 
					
						
							|  |  |  | 	add	%g3, 1, %g3 | 
					
						
							|  |  |  | 	and	%o3, 0xff, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, 0 | 
					
						
							|  |  |  | 	be	8f | 
					
						
							|  |  |  | 	 add	%o1, 1, %o1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, %g2 | 
					
						
							|  |  |  | 	be	1f | 
					
						
							|  |  |  | 	 add	%o4, -1, %o4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o0, %g2, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o4, 0 | 
					
						
							|  |  |  | 	bg,a	0b | 
					
						
							|  |  |  | 	 ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	b	7f | 
					
						
							|  |  |  | 	 and	%o2, 3, %o2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 9: | 
					
						
							|  |  |  | 	ldub	[%o1], %g2 | 
					
						
							|  |  |  | 	add	%g3, 1, %g3 | 
					
						
							|  |  |  | 	and	%o3, 0xff, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, 0 | 
					
						
							|  |  |  | 	be	8f | 
					
						
							|  |  |  | 	 add	%o1, 1, %o1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmp	%o0, %g2 | 
					
						
							|  |  |  | 	be	7f | 
					
						
							|  |  |  | 	 add	%o2, -1, %o2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 8: | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o0, %g2, %o0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 7: | 
					
						
							|  |  |  | 	cmp	%o2, 0 | 
					
						
							|  |  |  | 	bg,a	9b | 
					
						
							|  |  |  | 	 ldub	[%g3], %o3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	and	%g2, 0xff, %o0 | 
					
						
							|  |  |  | 	retl | 
					
						
							|  |  |  | 	 sub	%o3, %o0, %o0 |