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