xref: /original-bsd/lib/libc/vax/string/memcmp.s (revision c3e32dec)
1/*-
2 * Copyright (c) 1990, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8#if defined(LIBC_SCCS) && !defined(lint)
9	.asciz "@(#)memcmp.s	8.1 (Berkeley) 06/04/93"
10#endif /* LIBC_SCCS and not lint */
11
12/* int memcmp(s1, s2, n) */
13
14#include "DEFS.h"
15
16ENTRY(memcmp, 0)
17	movl	4(ap),r1	/* r1 = s1 */
18	movq	8(ap),r3	/* r3 = s2; r4 = n */
19	movzwl	$65535,r5
200:
21	cmpl	r4,r5
22	jgtru	3f		/* handle stupid cmpc3 limitation */
23	cmpc3	r4,(r1),(r3)	/* compare */
24	beql	2f		/* done if same (r0 = 0) */
251:
26	movzbl	(r1),r0
27	movzbl	(r3),r2
28	subl2	r2,r0		/* return *s1 - *s2; s1,s2 unsigned chars */
292:
30	ret
313:
32	subl2	r5,r4		/* do 64K; adjust count */
33	cmpc3	r5,(r1),(r3)
34	jeql	0b		/* loop if same */
35	jbr	1b
36