1250003Sadrian/*	$NetBSD: strcmp.S,v 1.6 2013/07/19 16:42:12 matt Exp $	*/
2250003Sadrian
3250003Sadrian/*-
4250003Sadrian * Copyright (c) 1997 The NetBSD Foundation, Inc.
5250003Sadrian * All rights reserved.
6250003Sadrian *
7250003Sadrian * This code is derived from software contributed to The NetBSD Foundation
8250003Sadrian * by Hiroshi Horimoto <horimoto@cs-aoi.cs.sist.ac.jp> and
9250003Sadrian * by J.T. Conklin <jtc@NetBSD.org>.
10250003Sadrian *
11250003Sadrian * Redistribution and use in source and binary forms, with or without
12250003Sadrian * modification, are permitted provided that the following conditions
13250003Sadrian * are met:
14250003Sadrian * 1. Redistributions of source code must retain the above copyright
15250003Sadrian *    notice, this list of conditions and the following disclaimer.
16250003Sadrian * 2. Redistributions in binary form must reproduce the above copyright
17250003Sadrian *    notice, this list of conditions and the following disclaimer in the
18250003Sadrian *    documentation and/or other materials provided with the distribution.
19250003Sadrian *
20250003Sadrian * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21250003Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22250003Sadrian * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23250003Sadrian * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24250003Sadrian * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25250003Sadrian * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26250003Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27250003Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28250003Sadrian * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29250003Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30250003Sadrian * POSSIBILITY OF SUCH DAMAGE.
31250003Sadrian */
32250003Sadrian
33250003Sadrian#include <machine/asm.h>
34250003Sadrian
35250003Sadrian#if defined(LIBC_SCCS) && !defined(lint)
36250003Sadrian	RCSID("$NetBSD: strcmp.S,v 1.6 2013/07/19 16:42:12 matt Exp $")
37250003Sadrian#endif /* LIBC_SCCS and not lint */
38250003Sadrian
39250003Sadrian#ifdef __mcoldfire__
40250003Sadrian#define GETC(a,b)	mvsb	a,b
41250003Sadrian#define	SUBC(a,b)	mvsb	a,%d0; subl %d0,b
42250003Sadrian#else
43250003Sadrian#define GETC(a,b)	movb	a,b
44250003Sadrian#define	SUBC(a,b)	subb	a,b
45250003Sadrian#endif
46250003Sadrian
47250003SadrianENTRY(strcmp)
48250003Sadrian	movl	4(%sp),%a0
49250003Sadrian	movl	8(%sp),%a1
50250003Sadrian.L1:				/* unrolled by 4 for 680[23]0's */
51250003Sadrian	GETC((%a0)+,%d1)
52250003Sadrian	jeq	.L2
53250003Sadrian	SUBC((%a1)+,%d1)
54250003Sadrian	jne	.L3
55250003Sadrian
56250003Sadrian	GETC((%a0)+,%d1)
57250003Sadrian	jeq	.L2
58250003Sadrian	SUBC((%a1)+,%d1)
59250003Sadrian	jne	.L3
60250003Sadrian
61250003Sadrian	GETC((%a0)+,%d1)
62250003Sadrian	jeq	.L2
63250003Sadrian	SUBC((%a1)+,%d1)
64250003Sadrian	jne	.L3
65250003Sadrian
66250003Sadrian	GETC((%a0)+,%d1)
67250003Sadrian	jeq	.L2
68250003Sadrian	SUBC((%a1)+,%d1)
69250003Sadrian	jeq	.L1
70250003Sadrian
71250003Sadrian.L3:
72250003Sadrian#ifdef __mcoldfire__
73250003Sadrian	movl	%d1,%d0
74250003Sadrian#else
75250003Sadrian	scs	%d0
76250003Sadrian	EXTBL(%d0)
77250003Sadrian	movb	%d1,%d0
78250003Sadrian#endif
79250003Sadrian	rts
80250003Sadrian
81250003Sadrian.L2:	movq	#0,%d0
82250003Sadrian	movb	(%a1),%d0
83250003Sadrian	negl	%d0
84250003Sadrian	rts
85250003SadrianEND(strcmp)
86250003Sadrian