xref: /openbmc/linux/arch/arm64/lib/strchr.S (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1caab277bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
22b8cac81SCatalin Marinas/*
32b8cac81SCatalin Marinas * Based on arch/arm/lib/strchr.S
42b8cac81SCatalin Marinas *
52b8cac81SCatalin Marinas * Copyright (C) 1995-2000 Russell King
62b8cac81SCatalin Marinas * Copyright (C) 2013 ARM Ltd.
72b8cac81SCatalin Marinas */
82b8cac81SCatalin Marinas
92b8cac81SCatalin Marinas#include <linux/linkage.h>
102b8cac81SCatalin Marinas#include <asm/assembler.h>
112b8cac81SCatalin Marinas
122b8cac81SCatalin Marinas/*
132b8cac81SCatalin Marinas * Find the first occurrence of a character in a string.
142b8cac81SCatalin Marinas *
152b8cac81SCatalin Marinas * Parameters:
162b8cac81SCatalin Marinas *	x0 - str
172b8cac81SCatalin Marinas *	x1 - c
182b8cac81SCatalin Marinas * Returns:
192b8cac81SCatalin Marinas *	x0 - address of first occurrence of 'c' or 0
202b8cac81SCatalin Marinas */
21*0f61f6beSMark RutlandSYM_FUNC_START(__pi_strchr)
222b8cac81SCatalin Marinas	and	w1, w1, #0xff
232b8cac81SCatalin Marinas1:	ldrb	w2, [x0], #1
242b8cac81SCatalin Marinas	cmp	w2, w1
252b8cac81SCatalin Marinas	ccmp	w2, wzr, #4, ne
262b8cac81SCatalin Marinas	b.ne	1b
272b8cac81SCatalin Marinas	sub	x0, x0, #1
282b8cac81SCatalin Marinas	cmp	w2, w1
292b8cac81SCatalin Marinas	csel	x0, x0, xzr, eq
302b8cac81SCatalin Marinas	ret
31*0f61f6beSMark RutlandSYM_FUNC_END(__pi_strchr)
32*0f61f6beSMark Rutland
33*0f61f6beSMark RutlandSYM_FUNC_ALIAS_WEAK(strchr, __pi_strchr)
34ac0e8c72SMark RutlandEXPORT_SYMBOL_NOKASAN(strchr)
35