root/arch/h8300/lib/memset.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /* memset.S */
   3 
   4 #include <asm/linkage.h>
   5 
   6 #if defined(CONFIG_CPU_H8300H)
   7         .h8300h
   8 #endif
   9 #if defined(CONFIG_CPU_H8S)
  10         .h8300s
  11 #endif
  12         .text
  13 
  14 .global memset
  15 .global clear_user
  16 
  17 ;;void *memset(*ptr, int c, size_t count)
  18 ;; ptr = er0
  19 ;; c   = er1(r1l)
  20 ;; count = er2
  21 memset:
  22         btst    #0,r0l
  23         beq     2f
  24 
  25         ;; odd address
  26 1:
  27         mov.b   r1l,@er0
  28         adds    #1,er0
  29         dec.l   #1,er2
  30         beq     6f
  31 
  32         ;; even address
  33 2:
  34         mov.l   er2,er3
  35         cmp.l   #4,er2
  36         blo     4f
  37         ;; count>=4 -> count/4
  38 #if defined(CONFIG_CPU_H8300H)
  39         shlr.l  er2
  40         shlr.l  er2
  41 #endif
  42 #if defined(CONFIG_CPU_H8S)
  43         shlr.l  #2,er2
  44 #endif
  45         ;; byte -> long
  46         mov.b   r1l,r1h
  47         mov.w   r1,e1
  48 3:
  49         mov.l   er1,@er0
  50         adds    #4,er0
  51         dec.l   #1,er2
  52         bne     3b
  53 4:
  54         ;; count % 4
  55         and.b   #3,r3l
  56         beq     6f
  57 5:
  58         mov.b   r1l,@er0
  59         adds    #1,er0
  60         dec.b   r3l
  61         bne     5b
  62 6:
  63         rts
  64 
  65 clear_user:
  66         mov.l   er1, er2
  67         sub.l   er1, er1
  68         bra     memset
  69 
  70         .end

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