h8300: library functions
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
This commit is contained in:
69
arch/h8300/lib/memset.S
Normal file
69
arch/h8300/lib/memset.S
Normal file
@@ -0,0 +1,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
|
Reference in New Issue
Block a user