blob: 65409f43a25f6de5c2a75ff094de1fd01026e293 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
2 * Copyright (c) 2002 ARM Ltd
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. The name of the company may not be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
22 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Adapted for uClibc from NetBSD memcmp.S, version 1.2 2003/04/05
29 * by Erik Andersen <andersen@codepoet.org>
30 */
31
32#include <features.h>
33#include <bits/arm_asm.h>
34
35.text
36.global memcmp
37.type memcmp,%function
38.align 4
39
40#if defined(THUMB1_ONLY)
41.thumb_func
42memcmp:
43 cmp r2, #0
44 bne 1f
45 mov r0, #0
46 bx lr
471:
48 push {r4}
49 add r4, r0, r2
502:
51 ldrb r2, [r0]
52 add r0, r0, #1
53 ldrb r3, [r1]
54 add r1, r1, #1
55 cmp r4, r0
56 beq 3f
57 cmp r2, r3
58 beq 2b
593:
60 sub r0, r2, r3
61 pop {r4}
62 bx lr
63#else
64memcmp:
65 /* if ((len - 1) < 0) return 0 */
66 subs r2, r2, #1
67 IT(tt, mi)
68 movmi r0, #0
69#if defined(__USE_BX__)
70 bxmi lr
71#else
72 movmi pc, lr
73#endif
74 /* ip == last src address to compare */
75 add ip, r0, r2
761:
77 ldrb r2, [r0], #1
78 ldrb r3, [r1], #1
79 cmp ip, r0
80 IT(t, cs)
81 cmpcs r2, r3
82 beq 1b
83 sub r0, r2, r3
84#if defined(__USE_BX__)
85 bx lr
86#else
87 mov pc, lr
88#endif
89#endif
90
91.size memcmp,.-memcmp
92
93libc_hidden_def(memcmp)
94#ifdef __UCLIBC_SUSV3_LEGACY__
95strong_alias(memcmp,bcmp)
96#endif