xref: /openbmc/linux/arch/arm64/lib/strrchr.S (revision 0f61f6be)
1caab277bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
22b8cac81SCatalin Marinas/*
32b8cac81SCatalin Marinas * Based on arch/arm/lib/strrchr.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 last 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 last occurrence of 'c' or 0
202b8cac81SCatalin Marinas */
21*0f61f6beSMark RutlandSYM_FUNC_START(__pi_strrchr)
222b8cac81SCatalin Marinas	mov	x3, #0
232b8cac81SCatalin Marinas	and	w1, w1, #0xff
242b8cac81SCatalin Marinas1:	ldrb	w2, [x0], #1
252b8cac81SCatalin Marinas	cbz	w2, 2f
262b8cac81SCatalin Marinas	cmp	w2, w1
272b8cac81SCatalin Marinas	b.ne	1b
282b8cac81SCatalin Marinas	sub	x3, x0, #1
292b8cac81SCatalin Marinas	b	1b
302b8cac81SCatalin Marinas2:	mov	x0, x3
312b8cac81SCatalin Marinas	ret
32*0f61f6beSMark RutlandSYM_FUNC_END(__pi_strrchr)
33*0f61f6beSMark RutlandSYM_FUNC_ALIAS_WEAK(strrchr, __pi_strrchr)
34ac0e8c72SMark RutlandEXPORT_SYMBOL_NOKASAN(strrchr)
35