xref: /linux/arch/arm64/lib/memchr.S (revision b77e0ce62d63a761ffb7f7245a215a49f5921c2f)
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Based on arch/arm/lib/memchr.S
4 *
5 * Copyright (C) 1995-2000 Russell King
6 * Copyright (C) 2013 ARM Ltd.
7 */
8
9#include <linux/linkage.h>
10#include <asm/assembler.h>
11
12/*
13 * Find a character in an area of memory.
14 *
15 * Parameters:
16 *	x0 - buf
17 *	x1 - c
18 *	x2 - n
19 * Returns:
20 *	x0 - address of first occurrence of 'c' or 0
21 */
22SYM_FUNC_START_WEAK_PI(memchr)
23	and	w1, w1, #0xff
241:	subs	x2, x2, #1
25	b.mi	2f
26	ldrb	w3, [x0], #1
27	cmp	w3, w1
28	b.ne	1b
29	sub	x0, x0, #1
30	ret
312:	mov	x0, #0
32	ret
33SYM_FUNC_END_PI(memchr)
34EXPORT_SYMBOL_NOKASAN(memchr)
35