diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2004-06-22 21:54:52 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2004-06-22 21:54:52 +0000 |
commit | 9a6831be867ffae990ecd111abafbffae6ff135c (patch) | |
tree | 53b3bc29a8cb9ab426762e50298c4386703e558e /newlib/libc/machine/h8300/memset.S | |
parent | c0508da25acd6cdfb19e25eead5906d37743a925 (diff) | |
download | cygnal-9a6831be867ffae990ecd111abafbffae6ff135c.tar.gz cygnal-9a6831be867ffae990ecd111abafbffae6ff135c.tar.bz2 cygnal-9a6831be867ffae990ecd111abafbffae6ff135c.zip |
2003-07-02 Richard Sandiford <rsandifo@redhat.com>
* libc/machine/h8300/Makefile.am (lib_a_SOURCES): Add h8sx_strcpy.S.
* libc/machine/h8300/defines.h (LEN): New macro.
* libc/machine/h8300/memcpy.S: Add h8sx version.
* libc/machine/h8300/memset.S: Likewise.
* libc/machine/h8300/strcmp.S: Likewise.
* libc/machine/h8300/setjmp.S: Use h8sx move instructions.
* libc/machine/h8300/h8sx_strcpy.S: New file.
2003-06-30 Richard Sandiford <rsandifo@redhat.com>
* libc/include/machine/ieeefp.h: Extend __H8300S__ handling to
__H8300SX__.
* libc/include/machine/setjmp.h: Likewise.
* libc/include/sys/config.h: Likewise.
* libc/machine/h8300/defines.h: Likewise.
* libc/machine/h8300/setjmp.S: Likewise.
* libc/machine/h8300/strcmp.S: Likewise.
* libc/sys/h8300hms/close.S: Likewise.
* libc/sys/h8300hms/fstat.S: Likewise.
* libc/sys/h8300hms/lseek.S: Likewise.
* libc/sys/h8300hms/read.S: Likewise.
* libc/sys/h8300hms/write.S: Likewise.
* libc/sys/h8300hms/crt0.S: Likewise.
* libc/machine/h8300/setarch.h: Use .h8300sx or .h8300sxn if
__H8300SX__ is defined.
* libc/sys/h8300hms/setarch.h: Likewise.
Diffstat (limited to 'newlib/libc/machine/h8300/memset.S')
-rw-r--r-- | newlib/libc/machine/h8300/memset.S | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8300/memset.S b/newlib/libc/machine/h8300/memset.S index ccd3fb766..c92169c69 100644 --- a/newlib/libc/machine/h8300/memset.S +++ b/newlib/libc/machine/h8300/memset.S @@ -2,6 +2,63 @@ #include "defines.h" +#if defined (__H8300SX__) + + .global _memset +_memset: + ; Use er3 is a temporary since er0 must remain unchanged on exit. + mov.l er0,er3 + + ; Fill er1 with the byte to copy. + mov.b r1l,r1h + mov.w r1,e1 + + ; Account for any excess bytes and words that will be copied after + ; the main loop. r2 >= 0 if there is a longword to copy. + sub #4,LEN(r2) + blo longs_done + + ; Copy one byte if doing so will make er3 word-aligned. + ; This isn't needed for correctness but it makes the main loop + ; slightly faster. + bld #0,r3l + bcc word_aligned + mov.b r1l,@er3+ + sub #1,LEN(r2) + blo longs_done + +word_aligned: + ; Likewise one word for longword alignment. + bld #1,r3l + bcc long_copy + mov.w r1,@er3+ + sub #2,LEN(r2) + blo longs_done + +long_copy: + ; Copy longwords. + mov.l er1,@er3+ + sub #4,LEN(r2) + bhs long_copy + +longs_done: + ; At this point, we need to copy r2 & 3 bytes. Copy a word + ; if necessary. + bld #1,r2l + bcc words_done + mov.w r1,@er3+ + +words_done: + ; Copy a byte. + bld #0,r2l + bcc bytes_done + mov.b r1l,@er3+ + +bytes_done: + rts + +#else + ; A0P pointer to cursor ; A1P thing to copy .global _memset @@ -42,3 +99,4 @@ byteloop: bne byteloop rts +#endif |