xref: /linux/arch/riscv/lib/strchr.S (revision feff82eb5f4075d541990d0ba60dad14ea83ea9b)
1*adf54213SFeng Jiang/* SPDX-License-Identifier: GPL-2.0-only */
2*adf54213SFeng Jiang
3*adf54213SFeng Jiang/*
4*adf54213SFeng Jiang * Copyright (C) 2025 Feng Jiang <jiangfeng@kylinos.cn>
5*adf54213SFeng Jiang */
6*adf54213SFeng Jiang
7*adf54213SFeng Jiang#include <linux/linkage.h>
8*adf54213SFeng Jiang#include <asm/asm.h>
9*adf54213SFeng Jiang
10*adf54213SFeng Jiang/* char *strchr(const char *s, int c) */
11*adf54213SFeng JiangSYM_FUNC_START(strchr)
12*adf54213SFeng Jiang	/*
13*adf54213SFeng Jiang	 * Parameters
14*adf54213SFeng Jiang	 *   a0 - The string to be searched
15*adf54213SFeng Jiang	 *   a1 - The character to search for
16*adf54213SFeng Jiang	 *
17*adf54213SFeng Jiang	 * Returns
18*adf54213SFeng Jiang	 *   a0 - Address of first occurrence of 'c' or 0
19*adf54213SFeng Jiang	 *
20*adf54213SFeng Jiang	 * Clobbers
21*adf54213SFeng Jiang	 *   t0
22*adf54213SFeng Jiang	 */
23*adf54213SFeng Jiang	andi	a1, a1, 0xff
24*adf54213SFeng Jiang1:
25*adf54213SFeng Jiang	lbu	t0, 0(a0)
26*adf54213SFeng Jiang	beq	t0, a1, 2f
27*adf54213SFeng Jiang	addi	a0, a0, 1
28*adf54213SFeng Jiang	bnez	t0, 1b
29*adf54213SFeng Jiang	li	a0, 0
30*adf54213SFeng Jiang2:
31*adf54213SFeng Jiang	ret
32*adf54213SFeng JiangSYM_FUNC_END(strchr)
33*adf54213SFeng Jiang
34*adf54213SFeng JiangSYM_FUNC_ALIAS_WEAK(__pi_strchr, strchr)
35*adf54213SFeng JiangEXPORT_SYMBOL(strchr)
36