162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/linkage.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciENTRY_CFI(memset) 1162306a36Sopenharmony_ci mov_s r4,r0 1262306a36Sopenharmony_ci or r12,r0,r2 1362306a36Sopenharmony_ci bmsk.f r12,r12,1 1462306a36Sopenharmony_ci extb_s r1,r1 1562306a36Sopenharmony_ci asl r3,r1,8 1662306a36Sopenharmony_ci beq.d .Laligned 1762306a36Sopenharmony_ci or_s r1,r1,r3 1862306a36Sopenharmony_ci brls r2,SMALL,.Ltiny 1962306a36Sopenharmony_ci add r3,r2,r0 2062306a36Sopenharmony_ci stb r1,[r3,-1] 2162306a36Sopenharmony_ci bclr_s r3,r3,0 2262306a36Sopenharmony_ci stw r1,[r3,-2] 2362306a36Sopenharmony_ci bmsk.f r12,r0,1 2462306a36Sopenharmony_ci add_s r2,r2,r12 2562306a36Sopenharmony_ci sub.ne r2,r2,4 2662306a36Sopenharmony_ci stb.ab r1,[r4,1] 2762306a36Sopenharmony_ci and r4,r4,-2 2862306a36Sopenharmony_ci stw.ab r1,[r4,2] 2962306a36Sopenharmony_ci and r4,r4,-4 3062306a36Sopenharmony_ci.Laligned: ; This code address should be aligned for speed. 3162306a36Sopenharmony_ci asl r3,r1,16 3262306a36Sopenharmony_ci lsr.f lp_count,r2,2 3362306a36Sopenharmony_ci or_s r1,r1,r3 3462306a36Sopenharmony_ci lpne .Loop_end 3562306a36Sopenharmony_ci st.ab r1,[r4,4] 3662306a36Sopenharmony_ci.Loop_end: 3762306a36Sopenharmony_ci j_s [blink] 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci .balign 4 4062306a36Sopenharmony_ci.Ltiny: 4162306a36Sopenharmony_ci mov.f lp_count,r2 4262306a36Sopenharmony_ci lpne .Ltiny_end 4362306a36Sopenharmony_ci stb.ab r1,[r4,1] 4462306a36Sopenharmony_ci.Ltiny_end: 4562306a36Sopenharmony_ci j_s [blink] 4662306a36Sopenharmony_ciEND_CFI(memset) 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci; memzero: @r0 = mem, @r1 = size_t 4962306a36Sopenharmony_ci; memset: @r0 = mem, @r1 = char, @r2 = size_t 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciENTRY_CFI(memzero) 5262306a36Sopenharmony_ci ; adjust bzero args to memset args 5362306a36Sopenharmony_ci mov r2, r1 5462306a36Sopenharmony_ci mov r1, 0 5562306a36Sopenharmony_ci b memset ;tail call so need to tinker with blink 5662306a36Sopenharmony_ciEND_CFI(memzero) 57