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