12ceb2ce9SGarrett Wollman/* 22ceb2ce9SGarrett Wollman * Copyright (c) 1993 Winning Strategies, Inc. 32ceb2ce9SGarrett Wollman * All rights reserved. 42ceb2ce9SGarrett Wollman * 52ceb2ce9SGarrett Wollman * Redistribution and use in source and binary forms, with or without 62ceb2ce9SGarrett Wollman * modification, are permitted provided that the following conditions 72ceb2ce9SGarrett Wollman * are met: 82ceb2ce9SGarrett Wollman * 1. Redistributions of source code must retain the above copyright 92ceb2ce9SGarrett Wollman * notice, this list of conditions and the following disclaimer. 102ceb2ce9SGarrett Wollman * 2. Redistributions in binary form must reproduce the above copyright 112ceb2ce9SGarrett Wollman * notice, this list of conditions and the following disclaimer in the 122ceb2ce9SGarrett Wollman * documentation and/or other materials provided with the distribution. 132ceb2ce9SGarrett Wollman * 3. All advertising materials mentioning features or use of this software 142ceb2ce9SGarrett Wollman * must display the following acknowledgement: 152ceb2ce9SGarrett Wollman * This product includes software developed by Winning Strategies, Inc. 162ceb2ce9SGarrett Wollman * 4. The name of the author may not be used to endorse or promote products 172ceb2ce9SGarrett Wollman * derived from this software withough specific prior written permission 182ceb2ce9SGarrett Wollman * 192ceb2ce9SGarrett Wollman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 202ceb2ce9SGarrett Wollman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 212ceb2ce9SGarrett Wollman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 222ceb2ce9SGarrett Wollman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 232ceb2ce9SGarrett Wollman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 242ceb2ce9SGarrett Wollman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252ceb2ce9SGarrett Wollman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262ceb2ce9SGarrett Wollman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272ceb2ce9SGarrett Wollman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 282ceb2ce9SGarrett Wollman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292ceb2ce9SGarrett Wollman */ 302ceb2ce9SGarrett Wollman 312ceb2ce9SGarrett Wollman#if defined(LIBC_RCS) && !defined(lint) 32717d9cddSDavid Greenman .text 337f3dea24SPeter Wemm .asciz "$FreeBSD$" 342ceb2ce9SGarrett Wollman#endif /* LIBC_RCS and not lint */ 352ceb2ce9SGarrett Wollman 36e6d808aeSPeter Wemm#include <machine/asm.h> 372ceb2ce9SGarrett Wollman 382ceb2ce9SGarrett Wollman/* 392ceb2ce9SGarrett Wollman * strcmp(s1, s2) 402ceb2ce9SGarrett Wollman * return an integer greater than, equal to, or less than 0, 412ceb2ce9SGarrett Wollman * according as string s1 is greater than, equal to, or less 422ceb2ce9SGarrett Wollman * than the string s2. 432ceb2ce9SGarrett Wollman * 442ceb2ce9SGarrett Wollman * %eax - pointer to s1 452ceb2ce9SGarrett Wollman * %edx - pointer to s2 462ceb2ce9SGarrett Wollman * 472ceb2ce9SGarrett Wollman * Written by: 482ceb2ce9SGarrett Wollman * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc. 492ceb2ce9SGarrett Wollman */ 502ceb2ce9SGarrett Wollman 512ceb2ce9SGarrett Wollman/* 522ceb2ce9SGarrett Wollman * I've unrolled the loop eight times: large enough to make a 532ceb2ce9SGarrett Wollman * significant difference, and small enough not to totally trash the 5429ec6237SBill Fumerola * cache. 552ceb2ce9SGarrett Wollman */ 562ceb2ce9SGarrett Wollman 572ceb2ce9SGarrett WollmanENTRY(strcmp) 582ceb2ce9SGarrett Wollman movl 0x04(%esp),%eax 592ceb2ce9SGarrett Wollman movl 0x08(%esp),%edx 602ceb2ce9SGarrett Wollman jmp L2 /* Jump into the loop! */ 612ceb2ce9SGarrett Wollman 622ceb2ce9SGarrett Wollman .align 2,0x90 632ceb2ce9SGarrett WollmanL1: incl %eax 642ceb2ce9SGarrett Wollman incl %edx 652ceb2ce9SGarrett WollmanL2: movb (%eax),%cl 662ceb2ce9SGarrett Wollman testb %cl,%cl 672ceb2ce9SGarrett Wollman je L3 682ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 692ceb2ce9SGarrett Wollman jne L3 702ceb2ce9SGarrett Wollman incl %eax 712ceb2ce9SGarrett Wollman incl %edx 722ceb2ce9SGarrett Wollman movb (%eax),%cl 732ceb2ce9SGarrett Wollman testb %cl,%cl 742ceb2ce9SGarrett Wollman je L3 752ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 762ceb2ce9SGarrett Wollman jne L3 772ceb2ce9SGarrett Wollman incl %eax 782ceb2ce9SGarrett Wollman incl %edx 792ceb2ce9SGarrett Wollman movb (%eax),%cl 802ceb2ce9SGarrett Wollman testb %cl,%cl 812ceb2ce9SGarrett Wollman je L3 822ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 832ceb2ce9SGarrett Wollman jne L3 842ceb2ce9SGarrett Wollman incl %eax 852ceb2ce9SGarrett Wollman incl %edx 862ceb2ce9SGarrett Wollman movb (%eax),%cl 872ceb2ce9SGarrett Wollman testb %cl,%cl 882ceb2ce9SGarrett Wollman je L3 892ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 902ceb2ce9SGarrett Wollman jne L3 912ceb2ce9SGarrett Wollman incl %eax 922ceb2ce9SGarrett Wollman incl %edx 932ceb2ce9SGarrett Wollman movb (%eax),%cl 942ceb2ce9SGarrett Wollman testb %cl,%cl 952ceb2ce9SGarrett Wollman je L3 962ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 972ceb2ce9SGarrett Wollman jne L3 982ceb2ce9SGarrett Wollman incl %eax 992ceb2ce9SGarrett Wollman incl %edx 1002ceb2ce9SGarrett Wollman movb (%eax),%cl 1012ceb2ce9SGarrett Wollman testb %cl,%cl 1022ceb2ce9SGarrett Wollman je L3 1032ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 1042ceb2ce9SGarrett Wollman jne L3 1052ceb2ce9SGarrett Wollman incl %eax 1062ceb2ce9SGarrett Wollman incl %edx 1072ceb2ce9SGarrett Wollman movb (%eax),%cl 1082ceb2ce9SGarrett Wollman testb %cl,%cl 1092ceb2ce9SGarrett Wollman je L3 1102ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 1112ceb2ce9SGarrett Wollman jne L3 1122ceb2ce9SGarrett Wollman incl %eax 1132ceb2ce9SGarrett Wollman incl %edx 1142ceb2ce9SGarrett Wollman movb (%eax),%cl 1152ceb2ce9SGarrett Wollman testb %cl,%cl 1162ceb2ce9SGarrett Wollman je L3 1172ceb2ce9SGarrett Wollman cmpb %cl,(%edx) 1182ceb2ce9SGarrett Wollman je L1 1192ceb2ce9SGarrett Wollman .align 2, 0x90 1202ceb2ce9SGarrett WollmanL3: movzbl (%eax),%eax /* unsigned comparison */ 1212ceb2ce9SGarrett Wollman movzbl (%edx),%edx 1222ceb2ce9SGarrett Wollman subl %edx,%eax 1232ceb2ce9SGarrett Wollman ret 124