1 1.2 matt /* $NetBSD: strcmp.S,v 1.2 2013/08/19 00:56:12 matt Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.1 christos * Copyright (c) 2002 ARM Ltd 5 1.1 christos * All rights reserved. 6 1.1 christos * 7 1.1 christos * Redistribution and use in source and binary forms, with or without 8 1.1 christos * modification, are permitted provided that the following conditions 9 1.1 christos * are met: 10 1.1 christos * 1. Redistributions of source code must retain the above copyright 11 1.1 christos * notice, this list of conditions and the following disclaimer. 12 1.1 christos * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 christos * notice, this list of conditions and the following disclaimer in the 14 1.1 christos * documentation and/or other materials provided with the distribution. 15 1.1 christos * 3. The name of the company may not be used to endorse or promote 16 1.1 christos * products derived from this software without specific prior written 17 1.1 christos * permission. 18 1.1 christos * 19 1.1 christos * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED 20 1.1 christos * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 21 1.1 christos * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 1.1 christos * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 1.1 christos * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 24 1.1 christos * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 25 1.1 christos * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 26 1.1 christos * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 27 1.1 christos * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 1.1 christos * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 1.1 christos */ 30 1.1 christos 31 1.1 christos #include <machine/asm.h> 32 1.1 christos 33 1.2 matt RCSID("$NetBSD: strcmp.S,v 1.2 2013/08/19 00:56:12 matt Exp $") 34 1.1 christos 35 1.1 christos ENTRY(strcmp) 36 1.2 matt #if !defined(__thumb__) 37 1.2 matt 1: ldrb r2, [r0], #1 38 1.1 christos ldrb r3, [r1], #1 39 1.1 christos cmp r2, #1 40 1.1 christos cmpcs r2, r3 41 1.2 matt #else 42 1.2 matt subs r1, r1, r0 /* this allows us to only one increment */ 43 1.2 matt 1: ldrb r2, [r0] 44 1.2 matt ldrb r3, [r1, r0] 45 1.2 matt adds r0, r0, #1 /* increment */ 46 1.2 matt cmp r2, #1 47 1.2 matt bcc 2f 48 1.2 matt cmp r2, r3 49 1.2 matt #endif 50 1.1 christos beq 1b 51 1.2 matt 2: subs r0, r2, r3 52 1.1 christos RET 53 1.2 matt END(strcmp) 54