1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 2ae984d72SDavid S. Miller/* strlen.S: Sparc optimized strlen code 3ae984d72SDavid S. Miller * Hand optimized from GNU libc's strlen 4ae984d72SDavid S. Miller * Copyright (C) 1991,1996 Free Software Foundation 5ae984d72SDavid S. Miller * Copyright (C) 1996,2008 David S. Miller (davem@davemloft.net) 6ae984d72SDavid S. Miller * Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 7ae984d72SDavid S. Miller */ 8ae984d72SDavid S. Miller 9*4cdb71b6SMasahiro Yamada#include <linux/export.h> 10ae984d72SDavid S. Miller#include <linux/linkage.h> 11ae984d72SDavid S. Miller#include <asm/asm.h> 12ae984d72SDavid S. Miller 13ae984d72SDavid S. Miller#define LO_MAGIC 0x01010101 14ae984d72SDavid S. Miller#define HI_MAGIC 0x80808080 15ae984d72SDavid S. Miller 16ae984d72SDavid S. Miller .text 17ae984d72SDavid S. MillerENTRY(strlen) 18ae984d72SDavid S. Miller mov %o0, %o1 19ae984d72SDavid S. Miller andcc %o0, 3, %g0 20ae984d72SDavid S. Miller BRANCH32(be, pt, 9f) 21ae984d72SDavid S. Miller sethi %hi(HI_MAGIC), %o4 22ae984d72SDavid S. Miller ldub [%o0], %o5 23ae984d72SDavid S. Miller BRANCH_REG_ZERO(pn, %o5, 11f) 24ae984d72SDavid S. Miller add %o0, 1, %o0 25ae984d72SDavid S. Miller andcc %o0, 3, %g0 26ae984d72SDavid S. Miller BRANCH32(be, pn, 4f) 27ae984d72SDavid S. Miller or %o4, %lo(HI_MAGIC), %o3 28ae984d72SDavid S. Miller ldub [%o0], %o5 29ae984d72SDavid S. Miller BRANCH_REG_ZERO(pn, %o5, 12f) 30ae984d72SDavid S. Miller add %o0, 1, %o0 31ae984d72SDavid S. Miller andcc %o0, 3, %g0 32ae984d72SDavid S. Miller BRANCH32(be, pt, 5f) 33ae984d72SDavid S. Miller sethi %hi(LO_MAGIC), %o4 34ae984d72SDavid S. Miller ldub [%o0], %o5 35ae984d72SDavid S. Miller BRANCH_REG_ZERO(pn, %o5, 13f) 36ae984d72SDavid S. Miller add %o0, 1, %o0 37ae984d72SDavid S. Miller BRANCH32(ba, pt, 8f) 38ae984d72SDavid S. Miller or %o4, %lo(LO_MAGIC), %o2 39ae984d72SDavid S. Miller9: 40ae984d72SDavid S. Miller or %o4, %lo(HI_MAGIC), %o3 41ae984d72SDavid S. Miller4: 42ae984d72SDavid S. Miller sethi %hi(LO_MAGIC), %o4 43ae984d72SDavid S. Miller5: 44ae984d72SDavid S. Miller or %o4, %lo(LO_MAGIC), %o2 45ae984d72SDavid S. Miller8: 46ae984d72SDavid S. Miller ld [%o0], %o5 47ae984d72SDavid S. Miller2: 48ae984d72SDavid S. Miller sub %o5, %o2, %o4 49ae984d72SDavid S. Miller andcc %o4, %o3, %g0 50ae984d72SDavid S. Miller BRANCH32(be, pt, 8b) 51ae984d72SDavid S. Miller add %o0, 4, %o0 52ae984d72SDavid S. Miller 53ae984d72SDavid S. Miller /* Check every byte. */ 54ae984d72SDavid S. Miller srl %o5, 24, %g7 55ae984d72SDavid S. Miller andcc %g7, 0xff, %g0 56ae984d72SDavid S. Miller BRANCH32(be, pn, 1f) 57ae984d72SDavid S. Miller add %o0, -4, %o4 58ae984d72SDavid S. Miller srl %o5, 16, %g7 59ae984d72SDavid S. Miller andcc %g7, 0xff, %g0 60ae984d72SDavid S. Miller BRANCH32(be, pn, 1f) 61ae984d72SDavid S. Miller add %o4, 1, %o4 62ae984d72SDavid S. Miller srl %o5, 8, %g7 63ae984d72SDavid S. Miller andcc %g7, 0xff, %g0 64ae984d72SDavid S. Miller BRANCH32(be, pn, 1f) 65ae984d72SDavid S. Miller add %o4, 1, %o4 66ae984d72SDavid S. Miller andcc %o5, 0xff, %g0 67ae984d72SDavid S. Miller BRANCH32_ANNUL(bne, pt, 2b) 68ae984d72SDavid S. Miller ld [%o0], %o5 69ae984d72SDavid S. Miller add %o4, 1, %o4 70ae984d72SDavid S. Miller1: 71ae984d72SDavid S. Miller retl 72ae984d72SDavid S. Miller sub %o4, %o1, %o0 73ae984d72SDavid S. Miller11: 74ae984d72SDavid S. Miller retl 75ae984d72SDavid S. Miller mov 0, %o0 76ae984d72SDavid S. Miller12: 77ae984d72SDavid S. Miller retl 78ae984d72SDavid S. Miller mov 1, %o0 79ae984d72SDavid S. Miller13: 80ae984d72SDavid S. Miller retl 81ae984d72SDavid S. Miller mov 2, %o0 82ae984d72SDavid S. MillerENDPROC(strlen) 83d3867f04SAl ViroEXPORT_SYMBOL(strlen) 84