1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun#include <linux/linkage.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */ 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunENTRY_CFI(memset) 11*4882a593Smuzhiyun mov_s r4,r0 12*4882a593Smuzhiyun or r12,r0,r2 13*4882a593Smuzhiyun bmsk.f r12,r12,1 14*4882a593Smuzhiyun extb_s r1,r1 15*4882a593Smuzhiyun asl r3,r1,8 16*4882a593Smuzhiyun beq.d .Laligned 17*4882a593Smuzhiyun or_s r1,r1,r3 18*4882a593Smuzhiyun brls r2,SMALL,.Ltiny 19*4882a593Smuzhiyun add r3,r2,r0 20*4882a593Smuzhiyun stb r1,[r3,-1] 21*4882a593Smuzhiyun bclr_s r3,r3,0 22*4882a593Smuzhiyun stw r1,[r3,-2] 23*4882a593Smuzhiyun bmsk.f r12,r0,1 24*4882a593Smuzhiyun add_s r2,r2,r12 25*4882a593Smuzhiyun sub.ne r2,r2,4 26*4882a593Smuzhiyun stb.ab r1,[r4,1] 27*4882a593Smuzhiyun and r4,r4,-2 28*4882a593Smuzhiyun stw.ab r1,[r4,2] 29*4882a593Smuzhiyun and r4,r4,-4 30*4882a593Smuzhiyun.Laligned: ; This code address should be aligned for speed. 31*4882a593Smuzhiyun asl r3,r1,16 32*4882a593Smuzhiyun lsr.f lp_count,r2,2 33*4882a593Smuzhiyun or_s r1,r1,r3 34*4882a593Smuzhiyun lpne .Loop_end 35*4882a593Smuzhiyun st.ab r1,[r4,4] 36*4882a593Smuzhiyun.Loop_end: 37*4882a593Smuzhiyun j_s [blink] 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun .balign 4 40*4882a593Smuzhiyun.Ltiny: 41*4882a593Smuzhiyun mov.f lp_count,r2 42*4882a593Smuzhiyun lpne .Ltiny_end 43*4882a593Smuzhiyun stb.ab r1,[r4,1] 44*4882a593Smuzhiyun.Ltiny_end: 45*4882a593Smuzhiyun j_s [blink] 46*4882a593SmuzhiyunEND_CFI(memset) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun; memzero: @r0 = mem, @r1 = size_t 49*4882a593Smuzhiyun; memset: @r0 = mem, @r1 = char, @r2 = size_t 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunENTRY_CFI(memzero) 52*4882a593Smuzhiyun ; adjust bzero args to memset args 53*4882a593Smuzhiyun mov r2, r1 54*4882a593Smuzhiyun mov r1, 0 55*4882a593Smuzhiyun b memset ;tail call so need to tinker with blink 56*4882a593SmuzhiyunEND_CFI(memzero) 57