162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Based on arch/arm/lib/strchr.S 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1995-2000 Russell King 662306a36Sopenharmony_ci * Copyright (C) 2013 ARM Ltd. 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/linkage.h> 1062306a36Sopenharmony_ci#include <asm/assembler.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Find the first occurrence of a character in a string. 1462306a36Sopenharmony_ci * 1562306a36Sopenharmony_ci * Parameters: 1662306a36Sopenharmony_ci * x0 - str 1762306a36Sopenharmony_ci * x1 - c 1862306a36Sopenharmony_ci * Returns: 1962306a36Sopenharmony_ci * x0 - address of first occurrence of 'c' or 0 2062306a36Sopenharmony_ci */ 2162306a36Sopenharmony_ciSYM_FUNC_START(__pi_strchr) 2262306a36Sopenharmony_ci and w1, w1, #0xff 2362306a36Sopenharmony_ci1: ldrb w2, [x0], #1 2462306a36Sopenharmony_ci cmp w2, w1 2562306a36Sopenharmony_ci ccmp w2, wzr, #4, ne 2662306a36Sopenharmony_ci b.ne 1b 2762306a36Sopenharmony_ci sub x0, x0, #1 2862306a36Sopenharmony_ci cmp w2, w1 2962306a36Sopenharmony_ci csel x0, x0, xzr, eq 3062306a36Sopenharmony_ci ret 3162306a36Sopenharmony_ciSYM_FUNC_END(__pi_strchr) 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciSYM_FUNC_ALIAS_WEAK(strchr, __pi_strchr) 3462306a36Sopenharmony_ciEXPORT_SYMBOL_NOKASAN(strchr) 35