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