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