29 lines
		
	
	
		
			770 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			770 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*	bcmp()						Author: Kees J. Bot */
 | 
						|
/*								2 Jan 1994 */
 | 
						|
 | 
						|
/* int bcmp(const void *s1, const void *s2, size_t n) */
 | 
						|
/*	Compare two chunks of memory. */
 | 
						|
/*	This is a BSD routine that escaped from the kernel.  Don't use. */
 | 
						|
/*	(Alas it is not without some use, it reports the number of bytes */
 | 
						|
/*	after the bytes that are equal.  So it can't be simply replaced.) */
 | 
						|
/* */
 | 
						|
.text
 | 
						|
.globl	_bcmp
 | 
						|
.balign	16
 | 
						|
_bcmp:
 | 
						|
	push	%ebp
 | 
						|
	movl	%esp, %ebp
 | 
						|
	push	16(%ebp)
 | 
						|
	push	12(%ebp)
 | 
						|
	push	8(%ebp)
 | 
						|
	call	_memcmp	/* Let memcmp do the work */
 | 
						|
	testl	%eax, %eax
 | 
						|
	je	equal
 | 
						|
	subl	8(%ebp), %edx	/* Memcmp was nice enough to leave "esi" in edx */
 | 
						|
	decl	%edx	/* Number of bytes that are equal */
 | 
						|
	movl	16(%ebp), %eax
 | 
						|
	subl	%edx, %eax	/* Number of bytes that are unequal */
 | 
						|
equal:
 | 
						|
	leave
 | 
						|
	ret
 |