11.7Schs/* $NetBSD: strncmp.S,v 1.7 2013/09/07 19:06:29 chs Exp $ */ 21.1Schristos 31.1Schristos/*- 41.1Schristos * Copyright (c) 1997 The NetBSD Foundation, Inc. 51.1Schristos * All rights reserved. 61.1Schristos * 71.1Schristos * This code is derived from software contributed to The NetBSD Foundation 81.1Schristos * by Hiroshi Horimoto <horimoto@cs-aoi.cs.sist.ac.jp> and 91.1Schristos * by J.T. Conklin <jtc@NetBSD.org>. 101.1Schristos * 111.1Schristos * Redistribution and use in source and binary forms, with or without 121.1Schristos * modification, are permitted provided that the following conditions 131.1Schristos * are met: 141.1Schristos * 1. Redistributions of source code must retain the above copyright 151.1Schristos * notice, this list of conditions and the following disclaimer. 161.1Schristos * 2. Redistributions in binary form must reproduce the above copyright 171.1Schristos * notice, this list of conditions and the following disclaimer in the 181.1Schristos * documentation and/or other materials provided with the distribution. 191.1Schristos * 201.1Schristos * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 211.1Schristos * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 221.1Schristos * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 231.1Schristos * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 241.1Schristos * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 251.1Schristos * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 261.1Schristos * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 271.1Schristos * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 281.1Schristos * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 291.1Schristos * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 301.1Schristos * POSSIBILITY OF SUCH DAMAGE. 311.1Schristos */ 321.1Schristos 331.1Schristos#include <machine/asm.h> 341.1Schristos 351.1Schristos#if defined(LIBC_SCCS) && !defined(lint) 361.7Schs RCSID("$NetBSD: strncmp.S,v 1.7 2013/09/07 19:06:29 chs Exp $") 371.1Schristos#endif /* LIBC_SCCS and not lint */ 381.1Schristos 391.5Smatt 401.5Smatt#ifdef __mcoldfire__ 411.5Smatt#define GETC(a,b) mvsb a,b 421.5Smatt#define SUBC(a,b) mvsb a,%d2; subl %d2,b 431.5Smatt#else 441.5Smatt#define GETC(a,b) movb a,b 451.5Smatt#define SUBC(a,b) subb a,b 461.5Smatt#endif 471.5Smatt 481.1SchristosENTRY(strncmp) 491.3Smatt movl 12(%sp),%d0 501.7Schs jeq .L4 511.3Smatt movl 4(%sp),%a0 521.3Smatt movl 8(%sp),%a1 531.6Smatt#ifdef __coldfire__ 541.5Smatt movl %d2,-(%sp) | save temp 551.6Smatt#endif 561.7Schs.L1: /* unroll by 4 for m680[23]0's */ 571.5Smatt GETC((%a0)+,%d1) 581.7Schs jeq .L2 591.5Smatt SUBC((%a1)+,%d1) 601.7Schs jne .L3 611.1Schristos subql #1,%d0 621.7Schs jeq .L4 631.1Schristos 641.5Smatt GETC((%a0)+,%d1) 651.7Schs jeq .L2 661.5Smatt SUBC((%a1)+,%d1) 671.7Schs jne .L3 681.1Schristos subql #1,%d0 691.7Schs jeq .L4 701.1Schristos 711.5Smatt GETC((%a0)+,%d1) 721.7Schs jeq .L2 731.5Smatt SUBC((%a1)+,%d1) 741.7Schs jne .L3 751.1Schristos subql #1,%d0 761.7Schs jeq .L4 771.1Schristos 781.5Smatt GETC((%a0)+,%d1) 791.7Schs jeq .L2 801.5Smatt SUBC((%a1)+,%d1) 811.7Schs jne .L3 821.1Schristos subql #1,%d0 831.7Schs jne .L1 841.5Smatt#ifdef __mcoldfire__ 851.5Smatt movl (%sp)+,%d2 | restore temp 861.5Smatt#endif 871.7Schs.L4: rts 881.1Schristos 891.7Schs.L2: SUBC((%a1),%d1) 901.7Schs.L3: 911.5Smatt#ifdef __mcoldfire__ 921.5Smatt movl (%sp)+,%d2 | restore temp 931.6Smatt movl %d1,%d0 941.5Smatt#else 951.6Smatt scs %d0 961.6Smatt EXTBL(%d0) 971.6Smatt moveb %d1,%d0 981.5Smatt#endif 991.1Schristos rts 1001.4SmattEND(strncmp) 101