1/* memset.S */ 2 3#include <asm/linkage.h> 4 5#if defined(__H8300H__) 6 .h8300h 7#endif 8#if defined(__H8300S__) 9 .h8300s 10#endif 11 .text 12 13.global SYMBOL_NAME(memset) 14 15;;void *memset(*ptr, int c, size_t count) 16;; ptr = er0 17;; c = er1(r1l) 18;; count = er2 19SYMBOL_NAME_LABEL(memset) 20 btst #0,r0l 21 beq 2f 22 23 ;; odd address 241: 25 mov.b r1l,@er0 26 adds #1,er0 27 dec.l #1,er2 28 beq 6f 29 30 ;; even address 312: 32 mov.l er2,er3 33 cmp.l #4,er2 34 blo 4f 35 ;; count>=4 -> count/4 36#if defined(__H8300H__) 37 shlr.l er2 38 shlr.l er2 39#endif 40#if defined(__H8300S__) 41 shlr.l #2,er2 42#endif 43 ;; byte -> long 44 mov.b r1l,r1h 45 mov.w r1,e1 463: 47 mov.l er1,@er0 48 adds #4,er0 49 dec.l #1,er2 50 bne 3b 514: 52 ;; count % 4 53 and.b #3,r3l 54 beq 6f 555: 56 mov.b r1l,@er0 57 adds #1,er0 58 dec.b r3l 59 bne 5b 606: 61 rts 62