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