strncmp.S revision 1.5
11.5Smatt/* $NetBSD: strncmp.S,v 1.5 2013/07/18 22:42:50 matt 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.5Smatt RCSID("$NetBSD: strncmp.S,v 1.5 2013/07/18 22:42:50 matt 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.1Schristos jeq L4 511.3Smatt movl 4(%sp),%a0 521.3Smatt movl 8(%sp),%a1 531.5Smatt movl %d2,-(%sp) | save temp 541.1SchristosL1: /* unroll by 4 for m680[23]0's */ 551.5Smatt GETC((%a0)+,%d1) 561.1Schristos jeq L2 571.5Smatt SUBC((%a1)+,%d1) 581.1Schristos jne L3 591.1Schristos subql #1,%d0 601.1Schristos jeq L4 611.1Schristos 621.5Smatt GETC((%a0)+,%d1) 631.1Schristos jeq L2 641.5Smatt SUBC((%a1)+,%d1) 651.1Schristos jne L3 661.1Schristos subql #1,%d0 671.1Schristos jeq L4 681.1Schristos 691.5Smatt GETC((%a0)+,%d1) 701.1Schristos jeq L2 711.5Smatt SUBC((%a1)+,%d1) 721.1Schristos jne L3 731.1Schristos subql #1,%d0 741.1Schristos jeq L4 751.1Schristos 761.5Smatt GETC((%a0)+,%d1) 771.1Schristos jeq L2 781.5Smatt SUBC((%a1)+,%d1) 791.1Schristos jne L3 801.1Schristos subql #1,%d0 811.1Schristos jne L1 821.5Smatt#ifdef __mcoldfire__ 831.5Smatt movl (%sp)+,%d2 | restore temp 841.5Smatt#endif 851.1SchristosL4: rts 861.1Schristos 871.5SmattL2: SUBC((%a1),%d1) 881.5SmattL3: 891.5Smatt#ifdef __mcoldfire__ 901.5Smatt movl (%sp)+,%d2 | restore temp 911.5Smatt#else 921.5Smatt EXTBL(%d1) 931.5Smatt#endif 941.5Smatt movl %d1,%d0 951.1Schristos rts 961.4SmattEND(strncmp) 97