Blame view

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