82 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*	$OpenBSD: strcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
 | 
						|
/*
 | 
						|
 * Written by J.T. Conklin <jtc@netbsd.org>.
 | 
						|
 * Public domain.
 | 
						|
 */
 | 
						|
 | 
						|
#include <machine/asm.h>
 | 
						|
 | 
						|
/*
 | 
						|
 * NOTE: I've unrolled the loop eight times: large enough to make a
 | 
						|
 * significant difference, and small enough not to totally trash the
 | 
						|
 * cache.
 | 
						|
 */
 | 
						|
 | 
						|
ENTRY(strcmp)
 | 
						|
	movl	0x04(%esp),%eax
 | 
						|
	movl	0x08(%esp),%edx
 | 
						|
	jmp	L2			/* Jump into the loop! */
 | 
						|
 | 
						|
	.align	2,0x90
 | 
						|
L1:	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
L2:	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl			/* null terminator??? */
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)		/* chars match??? */
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	jne	L3
 | 
						|
	incl	%eax
 | 
						|
	incl	%edx
 | 
						|
	movb	(%eax),%cl
 | 
						|
	testb	%cl,%cl
 | 
						|
	jz	L3
 | 
						|
	cmpb	%cl,(%edx)
 | 
						|
	je	L1
 | 
						|
	.align 2, 0x90
 | 
						|
L3:	movzbl	(%eax),%eax		/* unsigned comparison */
 | 
						|
	movzbl	(%edx),%edx
 | 
						|
	subl	%edx,%eax
 | 
						|
	ret
 |