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