1*e415d488SLionel Sambuc/* $NetBSD: memcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ 22fe8fb19SBen Gras/*- 32fe8fb19SBen Gras * Copyright (c) 1990, 1993 42fe8fb19SBen Gras * The Regents of the University of California. All rights reserved. 52fe8fb19SBen Gras * 62fe8fb19SBen Gras * Redistribution and use in source and binary forms, with or without 72fe8fb19SBen Gras * modification, are permitted provided that the following conditions 82fe8fb19SBen Gras * are met: 92fe8fb19SBen Gras * 1. Redistributions of source code must retain the above copyright 102fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer. 112fe8fb19SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 122fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer in the 132fe8fb19SBen Gras * documentation and/or other materials provided with the distribution. 142fe8fb19SBen Gras * 3. Neither the name of the University nor the names of its contributors 152fe8fb19SBen Gras * may be used to endorse or promote products derived from this software 162fe8fb19SBen Gras * without specific prior written permission. 172fe8fb19SBen Gras * 182fe8fb19SBen Gras * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 192fe8fb19SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 202fe8fb19SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 212fe8fb19SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 222fe8fb19SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 232fe8fb19SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 242fe8fb19SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 252fe8fb19SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 262fe8fb19SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 272fe8fb19SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 282fe8fb19SBen Gras * SUCH DAMAGE. 292fe8fb19SBen Gras */ 302fe8fb19SBen Gras 312fe8fb19SBen Gras/* int memcmp(s1, s2, n) */ 322fe8fb19SBen Gras 332fe8fb19SBen Gras#include "DEFS.h" 342fe8fb19SBen Gras 35*e415d488SLionel Sambuc#ifdef LIBC_SCCS 36*e415d488SLionel SambucRCSID("$NetBSD: memcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $") 37*e415d488SLionel Sambuc#endif 38*e415d488SLionel Sambuc 392fe8fb19SBen GrasENTRY(memcmp, 0) 402fe8fb19SBen Gras movl 12(%ap),%r0 412fe8fb19SBen Gras jeql 9f 422fe8fb19SBen Gras movq 4(%ap),%r1 432fe8fb19SBen Gras ashl $-2,%r0,%r3 # convert len to long words 442fe8fb19SBen Gras jeql 2f 452fe8fb19SBen Gras1: 462fe8fb19SBen Gras cmpl (%r1)+,(%r2)+ # no "cmpq" alas 472fe8fb19SBen Gras jneq 7f 482fe8fb19SBen Gras sobgtr %r3,1b 492fe8fb19SBen Gras2: 502fe8fb19SBen Gras bicl3 $-4,%r0,%r3 # handle at most 3 extra bytes 512fe8fb19SBen Gras jeql 4f 522fe8fb19SBen Gras3: 532fe8fb19SBen Gras cmpb (%r1)+,(%r2)+ 542fe8fb19SBen Gras jneq 8f 552fe8fb19SBen Gras sobgtr %r3,3b 562fe8fb19SBen Gras4: 572fe8fb19SBen Gras clrl %r0 # we had a match 582fe8fb19SBen Gras ret 592fe8fb19SBen Gras7: # backup, and do a byte compare 602fe8fb19SBen Gras tstl -(%r1) 612fe8fb19SBen Gras tstl -(%r2) 622fe8fb19SBen Gras movl $4,%r3 632fe8fb19SBen Gras jbr 3b 642fe8fb19SBen Gras8: 652fe8fb19SBen Gras movzbl -(%r1),%r3 662fe8fb19SBen Gras movzbl -(%r2),%r4 672fe8fb19SBen Gras subl3 %r4,%r3,%r0 682fe8fb19SBen Gras9: 692fe8fb19SBen Gras ret 70*e415d488SLionel SambucEND(memcmp) 71