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