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