root/arch/arc/lib/memset.S

/* [<][>][^][v][top][bottom][index][help] */
   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 
  10 ENTRY_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]
  46 END_CFI(memset)
  47 
  48 ; memzero: @r0 = mem, @r1 = size_t
  49 ; memset:  @r0 = mem, @r1 = char, @r2 = size_t
  50 
  51 ENTRY_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
  56 END_CFI(memzero)

/* [<][>][^][v][top][bottom][index][help] */